51單片機 | 並行I/O口擴展實例(74LS244/74LS373/4071)


並行I/O口擴展實例

//51單片機原理及應用(第二版)——基於Keil C與Proteus》第四章例4.4

I/O口不能完全用於輸入/輸出操作,當需要擴展外部存儲器時,P0、P2口用作地址總線和數據總線,此時能用的I/O口就只有P1和P3口,如果再使用串行通信,I/O口就不夠使用了,需要擴展I/O口

兩種方式:

① 采用普通鎖存器、三態門等芯片來進行簡單的擴展(如74LS373或74LS244等)

采用可編程的I/O芯片來擴展(如8255或8155等)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

要求:用4個開關控制4個LED的亮滅狀態,其中采用74LS244控制開關的輸入,采用74LS373控制LED輸出

代碼:

電路圖:

過程分析:

過程://右鍵點擊圖片"在新標簽頁中打開圖片"即可放大

  1. #18 P0=0xff; 通過拉高P0口置為1111 1111,即關閉LED燈;
  2. #19 com=0; CD4071 U2.A1CD4071 U2.B5輸入一個0
  3. #20 rd = 0; CD4071 U2.A2輸入一個0
  4. 由於CD4071的功能是執行邏輯或運算,12分別輸入0,則3輸出074LS244OE口;
  5. 74LS244緩沖驅動器的OE為使能端,低電平是有效的,高電平時輸出為三態,此時通過CD4071傳給OE低電平,使開關的電平可以通過74LS244傳入P0
  6. 開關狀態傳入P0
  7. #21 temp = P0; 通過定義的unsigned char temp來存放P0的狀態
  8. #22 rd = 1; CD4071 U2.A2輸入一個1
  9. 1=02=1;此時或門輸出為1
  10. 74LS244OE端高電平時輸出為三態,關閉74LS244
  11. #23 wr = 1;CD4071 U2.B6輸入一個1
  12. 此時5=06=1CD4071 U2.B7輸出一個1
  13. 74LS343OE為低電平時,用作地址鎖存器;LE為高電平時,輸出Q0-Q7狀態與D0-D7狀態相同;當LE發生負跳變(1->0)時,輸入端的D0-D7鎖入Q0-Q7
  14. #24 P0 = temp; temp中的數據存入P0,傳送到74LS343D端;
  15. #25 wr = 0; CD4071 U2.B6輸入一個0
  16. 此時5=06=0CD4071 U2.B7輸出一個0
  17. LE的狀態從1->0,發生負跳變,輸出Q0-Q7
  18. LED 等接受到開關的情況,發生亮滅。

       

實驗結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM