欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2629|回復: 0
打印 上一主題 下一主題
收起左側

基于單片機I2C總線數字存儲IC卡設計資料

[復制鏈接]
跳轉到指定樓層
樓主
隨著單片機擴展越來越多,單片機的存儲單元和數據總線傳輸端口并不足夠支持外部設備的擴展和數據的傳輸。如何解決單片機外部總線和存儲器的擴展成為一個必須解決的問題之一。
本文基于I2C總線數字存儲IC卡設計,以AT89S52單片機為核心,以匯編語言作為軟件設計程序的外部存儲IC卡設計。I2C總線是一種簡單、雙向二線制同步串行總線,它只需要兩條線(串行時鐘線和串行數據線)即可在連接于總線上的器件之間的傳送信息。主器件用于啟動總線傳送數據,并產生時鐘以開放傳送的器件,此時任何被尋址的器件均被認為是從器件.在總線上主和從、發和收的關系不是恒定的,而取決于此時數據傳送方向。本設計并輔以鍵盤進行數據的寫入和地址的選擇,由LCD進行寫入數據的選擇和顯示。在單片機端加入讀寫提示指示燈使用戶能夠更好的知道單片機的工作狀況。LCD、鍵盤、指示燈更大程度的提高了I2C總線數字存儲IC卡使用時的人機交互。使本裝置更加偏向實用。
本設計以Keil軟件進行程序的編寫,再聯調Proteus軟件進行物理仿真,深化和擴充了在單片機原理及相關方面的基本知識、基本理論和基本技能熟悉設計過程,了解設計步驟,掌握設計內容,培養設計電路、實現軟件編程和編寫設計說明書能力的目的,為今后從事相關方面的實際工作打下良好基礎。

1.2 I2C總線的主要特性
1.總線只有兩條線,串行時鐘線和串行數據線;
2.每個連到總線上的器件都可由軟件以唯一的地址尋址,并建立簡單的主-從關系,主器件既可作為發送器,也可作為接收器;
3.它是一個真正的多主總線,帶有競爭檢測和仲裁電路,可使多主機任意同時發送而不破壞總線上的數據;
4.同步時鐘允許器件通過總線以不同的波特率進行通信;
5.同步時鐘可以作為停止和重新啟動串行口發送的握手方式;
6.連接到同一總線的集成電路數只受400 pF的最大總線電容的限制;
I2C總線極大地方便了系統設計者,無須設計總線接口,因為總線接口已經集成在片內了,而使設計時間大為縮短,并且從系統中移去或增加集成電路芯片對總線上的其他集成電路片沒有影響。I2C總線的簡單結構便于產品改型或升級,改型或升級時只需從總線上取消或加相應的集成電路芯片即可。

1.使用AT89C52單片機、I2C串行AT24C02存儲器、4×4鍵盤、6位LED顯示器和2個發光二極管(D1和D2)設計一個基于I2C總線數字存儲IC卡。
2.通過鍵盤向IC卡寫入256個任意數據,并在6位LED顯示器上顯示存儲單元和寫入的相應數據,例如:10H:66,寫入一個數據點亮一次發光二極管D1。
3.通過鍵盤輸入存儲單元地址,將已寫入IC卡該單元的數據讀出,并在6位LED顯示器上顯示存儲單元和讀出的相應數據,例如:30H:88,讀出一個數據點亮一次發光二極管D2。
4.鼓勵新創意,增加新功能。

設計內容和設計要求
1.采用AT89C52單片機作為主控芯片,設計硬件電路。
2.采用AT89C52單片機匯編語言,完成軟件編程。
3.采用Keil和Proteus軟件完成系統的硬件設計、軟件編程及系統調試。
2.3 功能說明
利用AT89C52單片機作為核心部件,對AT24C02存儲卡進行指定地址的內容寫入。數據的讀取和寫入通過鍵盤來進行控制。寫入數據時,由鍵盤給出要寫入的數據,單片機進行地址的給定,寫入數據指示燈亮,LCD第一行顯示寫入的數據,第二行顯示該數據所存儲的地址。讀取數據時,由鍵盤給出要讀取數據的地址,單片機通過I2C進行數據的讀取,讀取數據指示燈亮,LCD第一行顯示你所輸入的數據的地址,第二行顯示該地址所存儲的數據。按鍵的輸入采用矩陣式查詢方法進行按鍵的輸入,LCD通過對位的控制進行分別顯示。24C02C存儲卡進行數據的存儲,通過過SCK和SDA來控制。

3.1 利用I2C總線進行系統擴展

I2C總線接口的電氣結構如圖3.1所示,組成I2C總線的串行數據線SDA和串行時鐘線SCL必須經過上拉電阻Rp接到正電源上,連接到總線上的器件的輸出級必須為“開漏”或“開集”的形式,以便完成“線與”功能。SDA和SCL都為雙向I/O口線,總線空閑時皆為高電平。總線上數據傳送最高速率可達100KB/s。


圖3.1 I2C總線接口電氣結構

I2C總線上可以實現多主雙向同步數據傳送,所有主器件都可發出同步時鐘,但由于SCL接口的“線與”結構,一旦一個主器件時鐘跳變為低電平,將使SCL線保持為低電平直至時鐘達到高電平,因此SCL線上時鐘低電平期間由各器件中時鐘最長的低電平時間決定,而時鐘高電平時間則由高電平時間最短的器件決定。

為了使多個主機數據能夠正確傳送,I2C總線中帶有競爭檢測和仲裁電路。總線競爭的仲裁及處理由內部硬件電路來完成。當兩個主器件發送相同數據時,不會出現總線競爭。當兩個主器件發送不同數據時,才出現總線競爭。其競爭過程如圖3.2所示。當某一時刻主器件1發送高電平,而主器件2發送低電平, 此時由于SDA的“線與”作用,主器件1發送的高電平在SDA線上反映的是主器件2的低電平狀態,這個低電平狀態通過硬件系統反饋到數據寄存器中,與原有狀態比較,因不同而退出競爭。

圖3.2 總線競爭過程

I2C總線可以構成多主數據傳送系統,但只有帶CPU的器件可以成為主器件。主器件發送時鐘、啟動位、數據工作方式,從器件則接收時鐘及數據工作方式。接收或發送由數據的傳送方向決定。I2C總線上數據傳送時的啟動、結束和有效狀態都由SDA、SCL的電平狀態決定,在I2C總線規程中啟動和停止條件規定如下。

①啟動條件:在SCL為高電平時,SDA出現一個下降沿,則啟動I2C總線。

②停止條件:在SCL為高電平時,SDA 出現-一個上升沿,則停止使用I2C總線。

除了啟動和停止狀態,在其余狀態下,SCL 的高電平都對應于SDA的穩定數據狀態。每一個被傳送的數據位由SDA線上的高、低電平表示,對于每一個被傳送的數據位都在SCL線上產生一個時鐘脈沖。時鐘脈沖在高電平期間時,SDA線上的數據必須穩定,否則將被認為是控制信號。SDA只能在時鐘脈沖SCL為低電平期間時改變。

啟動條件執行后總線為“忙”,在結束信號過后的一定時間內總線被認為是“空閑”的。在啟動和停止條件之間可傳送的數據不受限制,但每個字節必須為8位。首先傳送最高位,采用串行傳送方式,但在每個字節之后必須跟一個響應位。主器件收/發每個字節后產生一個時鐘應答脈沖,在這期間,發送器必須保證SDA為高,由接收器將SDA拉低,稱為應答信號(ACK)。主器件為接收器時,在接收了最后一個字節之后不發應答信號,也稱為非應答信號(NOT ACK)。當從器件不能再接收另外的字節時,也會出現這種情況。I2C總線的數據傳送如圖3.3所示。

圖3.3 I2C總線的數據傳送

3.2 24C02與AT89C52單片機接口的Proteus仿真電路3.2.1仿真電路

如圖3.4所示為24C02與AT89C52單片機接口的Proteus仿真電路,給出一個采用普通AT89C52單片機模擬IC總線時序來擴展串行外部EEPROM存儲器24C02。24C02 是一種I2C接口EEPROM器件,它具有256x8位的存儲容量,工作于從器件方式,每個字節可擦/寫100萬次,數據保存時間大于40年。寫入時具有自動擦除功能,還有頁寫入功能,可一次寫入16字節。24C02 芯片采用8腳DIP封裝,有Vcc、Vss 電源引腳,SCL、SDA通信引腳,A0、A1、A2地址引腳和WP寫保護引腳。WP腳接Vcc時,禁止寫入高位地址(100H~1FFH), WP腳接Vss時,允許寫入任何地址。A1和A2決定芯片的從機地址,可接Vcc或Vss, A0不用,應接Vcc或Vss。

圖3.4 24C02C與AT89C52單片機接口電路的仿真電路圖


  1. ACK     BIT   10H        ;應答標志位
  2. SLA     EQU  50H        ;器件地址字
  3. SUBA    EQU  51H        ;器件子地址
  4. NUMBYTE EQU  52H        ;讀/寫字節數
  5. SDA     BIT   P1.7
  6. SCL     BIT   P1.6       ;單片機i/o口線定義
  7. MTD     EQU   30H        ;發送數據緩存區首地址(30H~3FH)
  8. MRD     EQU   40H        ;接收數據緩存區首地址(40H~4FH)
  9.         ORG   0000H
  10.                   LJMP  MAIN        ;跳轉到主程序
  11.                   ORG   0030H
  12. ;***********************************************************
  13. ; IWRNBYTE子程序
  14. ; 功能:向器件指定子地址寫n個數據
  15. ; 相關入口參數:器件地址字SLA(代表哪個器件),子地址SUBA(代表數據要往哪放),發送區首地址 MTD,發送的字節數NUMBYTE
  16. ;***********************************************************
  17. IWRNBYTE: MOV    R3,#NUMBYTE
  18.           LCALL  START       ;啟動總線
  19.           MOV    A ,#SLA
  20.                               LCALL  WRBYTE      ;發送器件地址(這一步是為了找到是哪個拓展)
  21.                               LCALL  CACK        ;當ACK=1時說明有應答
  22.                               JNB    ACK,RETWRN   ;如果沒有應答的話,直接退出
  23.                               MOV    A, #SUBA       ;把數據要放到哪給了寄存器A
  24.                               LCALL  WRBYTE       ;這一步是為了找到要放的地方(寄存器)
  25.                               LCALL  CACK        
  26.                               MOV    R1,#MTD      ;這一步事單片機要從哪個地方取數據
  27. WRDA:                MOV    A,@R1
  28.           LCALL  WRBYTE        ;要把A里面的數據發送出去,就發送到剛剛找到的單元
  29.           LCALL  CACK                             
  30.                               JNB    ACK,IWRNBYTE   ;如果沒有應答則需要重新來過
  31.                               INC    R1             ;有應答的話,則次數加1
  32.                               DJNZ   R3,WRDA
  33. RETWRN:   LCALL STOP
  34.           RET

  35. ;****************************************************************
  36. ; IRDNBYTE子程序
  37. ; 功能:從器件指定子地址讀n個數據
  38. ; 相關入口參數:器件地址字SLA(代表哪個器件),子地址SUBA(代表數據要往哪放),接收區首地址 MTD,接收的字節數NUMBYTE
  39. ;***************************************************************
  40. IRDNBYTE: MOV    R3,#NUMBYTE
  41.           LCALL  START       ;啟動總線
  42.           MOV    A,#SLA
  43.                               LCALL  WRBYTE      ;發送器件地址(這一步是為了找到是哪個拓展)
  44.                               LCALL  CACK        ;當ACK=1時說明有應答
  45.                               JNB    ACK,RETRDN   ;如果沒有應答的話,直接退出
  46.                               MOV    A,#SUBA       ;把數據要放到哪給了寄存器A
  47.                               LCALL  WRBYTE       ;這一步是為了找到要放的地方(寄存器)
  48.                               LCALL  CACK
  49.           LCALL  START       ;重新啟動總線                           
  50.           MOV    A,#SLA            
  51.           INC    A
  52.                               LCALL  WRBYTE
  53.                               LCALL  CACK
  54.                               JNB    ACK,IRDNBYTE
  55.                               MOV    R0,#MRD      ;這一步是單片機要從哪個地方取數據
  56. RON1:                LCALL  RDBYTE
  57.           MOV    @R0,A
  58.                               DJNZ   R3,SACK
  59.                               LCALL  MNACK        ; 功能:發送非應答信號子程序
  60. RETRDN:   LCALL STOP
  61.           RET
  62. SACK:                LCALL  MACK                    ; 功能:發送應答信號子程序
  63.           INC R1
  64.                               SJMP RON1
  65.                              
  66. ;***************************************************************
  67. ; 名稱:START子程序
  68. ; 功能:啟動iic總線子程序,發送iic起始條件
  69. ;***************************************************************
  70. START:  SETB  SDA          ;發送起始條件數據信號
  71.         NOP                ;起始條件建立時間大于4.7us
  72.                             SETB  SCL           ;發送起始條件的時鐘信號
  73.                             NOP
  74.         NOP
  75.                             NOP
  76.                             NOP
  77.                             NOP                  ;起始條件鎖定時間大于4.7us
  78.                             CLR   SDA            ;發送起始信號
  79.                             NOP
  80.         NOP
  81.                             NOP
  82.                             NOP
  83.                             NOP                  ;起始條件鎖定時間大于4.7us
  84.                             CLR   SCL            ;鉗住iic總線,準備發送或者接收數據
  85.                             NOP
  86.                             RET

  87. ;****************************************************************
  88. ; 名稱:STOP子程序
  89. ; 功能:停止iic總線子程序,發送iic停止條件
  90. ;*****************************************************************
  91. STOP:   CLR  SDA           ;發送停止條件的數據信號
  92.         NOP                ;起始條件建立時間大于4.7us
  93.                             SETB  SCL           ;發送停止條件的時鐘信號
  94.                             NOP
  95.         NOP
  96.                             NOP
  97.                             NOP
  98.                             NOP                  ;時間大于4.7us
  99.                             SETB   SDA            ;發送停止信號
  100.                             NOP
  101.         NOP
  102.                             NOP
  103.                             NOP
  104.                             NOP                  ;延遲時間大于4.7us
  105.                             NOP
  106.                             RET

  107. ;**************************************************************
  108. ; 名稱:WRBYTE子程序
  109. ; 功能:發送字節子程序,發送的前面必須是字節數據放入acc
  110. ; ★必須牢牢把握住,我們SDA不管是傳送高電平還是低電平,都必須是它先有了值,然后把時鐘線置位高電平,就開始傳送
  111. ;**************************************************************
  112. WRBYTE:MOV R0,#08H
  113. WLP:    RLC A                 ;取數據位
  114.         JC  WRI
  115.                             SJMP WRO               ;判斷數據位
  116. WLP1:   DJNZ R0,WLP
  117.         NOP
  118.                             RET
  119. WRI:    SETB SDA                ;發送1  
  120.         NOP
  121.         SETB SCL
  122.         NOP
  123.         NOP
  124.                             NOP
  125.                             NOP
  126.                             NOP                  ;延遲時間大于4.7us
  127.                             NOP
  128.                             CLR SCL
  129.                             SJMP WLP1
  130. WRO:    CLR SDA                ;發送0
  131.         NOP
  132.         SETB SCL
  133.         NOP
  134.         NOP
  135.                             NOP
  136.                             NOP
  137.                             NOP                  ;延遲時間大于4.7us
  138.                             NOP
  139.                             CLR SCL
  140.                             SJMP WLP1
  141. ;******************************************************************
  142. ; 名稱:RDBYTE子程序
  143. ; 功能:讀取字節子程序,讀出的字節數據放入acc
  144. ; ★這里需要記住的就是,SDA的高低電平就是咱要讀取的數據
  145. ;******************************************************************
  146. RDBYTE: MOV R0,#08H
  147. RLP:    SETB SDA
  148.         NOP
  149.                             SETB SCL ;時鐘線為高,接收數據位
  150.                             NOP
  151.                             NOP
  152.                             MOV C,SDA
  153.                             MOV A,R2
  154.                             CLR SCL   ;將SCL拉低,時間大于4.7us
  155.                             RLC A
  156.                             MOV R2,A
  157.                             NOP
  158.                             NOP
  159.                             NOP
  160.                             DJNZ R0,RLP
  161.                             RET

  162. ;*****************************************************************
  163. ; 名稱:CACK子程序
  164. ; 功能:檢查應答位子程序,返回值 ACK=1時表示有應答
  165. ;★這里要注意的是,我們SCL上的時鐘信號是按照系統的自己的頻率有一個脈沖
  166. ;******************************************************************
  167. CACK: SETB SDA
  168.       NOP
  169.                 NOP
  170.                 SETB SCL
  171.                 CLR ACK
  172.                 NOP
  173.                 NOP
  174.                 MOV C,SDA
  175.                 JC CEND
  176.                 SETB ACK               ;判斷應答位
  177. CEND: NOP               
  178.       CLR SCL
  179.                 NOP
  180.                 RET
  181. ;******************************************************************
  182. ; 名稱:MACK子程序
  183. ; 功能:發送應答信號子程序
  184. ;******************************************************************
  185. MACK: CLR SDA         ;將SDA置0
  186.       NOP
  187.                 NOP
  188.                 SETB SCL
  189.                 NOP
  190.                 NOP
  191.                 NOP
  192.                 NOP
  193.                 NOP
  194.       CLR SCL
  195.                 NOP
  196.                 NOP
  197.                 RET

  198. ;***************************************************************
  199. ; 名稱:MNACK子程序
  200. ; 功能:發送非應答信號子程序
  201. ;***************************************************************
  202. MNACK: SETB SDA         ;將SDA置1
  203.        NOP
  204.                  NOP
  205.                  SETB SCL
  206.                  NOP
  207.                  NOP
  208.                  NOP
  209.                  NOP
  210.                  NOP
  211.        CLR  SCL
  212.                  NOP
  213.                  NOP
  214.                  RET
  215. ;************************************************************
  216. ; 名稱:主程序
  217. ;************************************************************
  218. MAIN:  MOV R4,#0F0H       ;延時等待其它芯片復位完成
  219.        DJNZ R4,$
  220. ;發送數據緩存區初始化,將16個連續字節賦值為00H-0FH
  221.        MOV A,#34H
  222.                  MOV R0,#30H
  223. S1:    MOV @R0,A
  224.        INC R0
  225.                  ;INC A
  226.                  CJNE R0,#40H,S1
  227.                  ;
  228.                  ;MOV R0,#32H
  229.                  ;MOV A,@R0
  230.                  ;MOV P3,A
  231.                  ;SJMP $
  232.                
  233. ;向24C02C中寫數據,數據存放在24C02C中50H開始的16個字節中
  234.        MOV SLA,0A0H     ;24C02C芯片地址
  235.                  MOV SUBA, 50H    ;片內地址
  236.                  MOV NUMBYTE ,16   ;傳送數據字節數
  237.                  LCALL IWRNBYTE      ;寫數據
  238.                
  239. DELAY: MOV R5,#20
  240. D1:    MOV R6,#248
  241. D2:    MOV R7,#248
  242.        DJNZ R7,$
  243.                  DJNZ R6,D2  
  244.                  DJNZ R5,D1
  245. ;從24C02C中讀數據,數據存放在單片機中50H開始的16個字節中
  246.        MOV SLA,0A0H     ;24C02C芯片地址
  247.                  MOV SUBA, 50H    ;片內地址
  248.        MOV NUMBYTE ,16   ;傳送數據字節數
  249.                  LCALL  IRDNBYTE
  250.                  ;SJMP [        DISCUZ_CODE_9        ]nbsp;                             
  251.                  MOV R0,#50H
  252.                  MOV A,@R0
  253.                  MOV P2,A
  254.                  SJMP $
  255.                  END
復制代碼

仿真圖丟失了,大家自己畫一下吧.
Word格式文檔51黑附件下載:
單片機51hei設計 1.0版.docx (1.05 MB, 下載次數: 9)


評分

參與人數 1黑幣 +40 收起 理由
admin + 40 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表