單片機(jī)系統(tǒng)應(yīng)用設(shè)計(jì)_第1頁
單片機(jī)系統(tǒng)應(yīng)用設(shè)計(jì)_第2頁
單片機(jī)系統(tǒng)應(yīng)用設(shè)計(jì)_第3頁
單片機(jī)系統(tǒng)應(yīng)用設(shè)計(jì)_第4頁
單片機(jī)系統(tǒng)應(yīng)用設(shè)計(jì)_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、一、鍵盤控制 如圖所示,AT89S51 單片機(jī)的 P1.0P1.3 接四個(gè)發(fā)光二極管 L1L4,P1.4P1.7 接了四個(gè)開關(guān) K1K4,編程將開關(guān)的狀態(tài)反映到發(fā)光二極管上。(開關(guān)閉合,對(duì)應(yīng)的燈亮,開關(guān)斷開,對(duì)應(yīng)的燈滅)。不考慮按鍵消抖 ORG 0000H START:MOV A,#0FFH MOV P1,A SK1:MOV A,P1 RR A RR A RR A RR A ORL A,#0F0H MOV P1,A SJMP SK1 END考慮按鍵消抖 一個(gè)按鍵從按下到釋放是一個(gè)完整的過程,因此在按鍵按下的時(shí)候,要把干擾信號(hào)以及按鍵的機(jī)械接觸等干擾信號(hào)給濾除掉,除采用電容濾波外,還需要采用軟件

2、濾波的方法去除這些干擾。 程序設(shè)計(jì)時(shí),從按鍵被識(shí)別按下之后,延時(shí)5ms以上,可避開了干擾信號(hào)區(qū)域,我們?cè)賮頇z測(cè)一次,看按鍵是否真得已經(jīng)按下,若真得已經(jīng)按下,這時(shí)肯定輸出為低電平,若這時(shí)檢測(cè)到的是高電平,證明剛才是由于干擾信號(hào)引起的誤觸發(fā),CPU 就認(rèn)為是誤觸發(fā)信號(hào)而舍棄這次的按鍵識(shí)別過程。 ORG 0000HSTART: MOV A,#0FFH MOV P1,A SK1:MOV A,P1 ORL A,#0FH CJNE A,#0FFH,SK2 SJMP SK1 SK2:LCALL DELAY10MS ;延時(shí)10ms MOV A,P1 ORL A,#0FH CJNE A,#0FFH,SK3 SJ

3、MP SK1 SK3:RR A RR A RR A RR A ORL A,#0F0H MOV P1,A SJMP SK1D10MS: MOV R6,#20 MOV R7,#248 D1: DJNZ R7,$ DJNZ R6,D1 RET END矩陣鍵盤 KEYBUF EQU 30H ORG 0000HSTART: MOV KEYBUF,#00H MOV R3,00H ;行號(hào)初值送R3 WAIT: MOV P3,#0FFH CLR P3.0 MOV A,P3 ANL A,#0F0H XRL A,#0F0H JZ NOKEY1 LCALL DELY10MS MOV A,P3 MOV R2,A AN

4、L A,#0F0H XRL A,#0F0H JZ NOKEY1 LCALL GETKEY ;判斷鍵值,入口R2、R3NOKEY1: - ;R2存P3值,R3存行號(hào)NOKEY2: INC R3 MOV P3,#0FFH CLR P3.2 MOV A,P3 ANL A,#0F0H XRL A,#0F0H JZ NOKEY3 LCALL DELY10MS MOV A,P3 ANL A,#0F0H XRL A,#0F0H JZ NOKEY3 LCALL GETKEYNOKEY3: INC R3 MOV P3,#0FFH CLR P3.3 MOV A,P3 ANL A,#0F0H XRL A,#0F0H

5、 JZ WAIT LCALL DELY10MS MOV A,P3 ANL A,#0F0H XRL A,#0F0H JZ WAIT GETKEY: -NOKEY1: INC R3 MOV P3,#0FFH CLR P3.1 MOV A,P3 ANL A,#0F0H XRL A,#0F0H JZ NOKEY2 LCALL DELY10MS MOV A,P3 ANL A,#0F0H XRL A,#0F0H JZ NOKEY2 LCALL GETKEY ;GETKEY 判斷鍵值,入口 R2存P3值,R3存行號(hào) GETKEY: MOV A, R3 ; 行號(hào)送入A RL A ; 行號(hào)2 RL A ; 行號(hào)

6、4 MOV R5,A ; 存入R5中 MOV A,R2 ; P3值送A SWAP A ; 取列值 LK1:RRC A JNC LK2 ; 該位為 0 則轉(zhuǎn) INC R5 ; 列號(hào)加 1 SJMP LK1 ; 列號(hào)未判完則繼續(xù) LK2: INC R5 MOV KEYBUF,R5 ; 存鍵值 RET DELY10MS: MOV R6,#10 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RET END二、LED數(shù)碼管顯示控制 51單片機(jī)的P0口通過74HC245接數(shù)碼管的ah端,8位數(shù)碼管的S1-S8通過74LS138譯碼器的Y0-Y7來控制選通每個(gè)數(shù)碼管的位選端。要求

7、在8位數(shù)碼管上從右向左循環(huán)顯示“12345678”。動(dòng)態(tài)數(shù)碼顯示:進(jìn)行動(dòng)態(tài)掃描,一次只能讓一個(gè)數(shù)碼管顯示,因此,要顯示8位的數(shù)據(jù),必須讓數(shù)碼管一個(gè)一個(gè)輪流顯示才可以,每隔1ms,刷新一個(gè)數(shù)碼管。 刷新時(shí)間采用單片機(jī)的定時(shí)/計(jì)數(shù)器T0來控制,T0采用方式1。在進(jìn)行數(shù)碼顯示的時(shí)候,要對(duì)顯示單元開辟8個(gè)顯示緩沖區(qū),每個(gè)顯示緩沖區(qū)裝有顯示的不同數(shù)據(jù)即可。DISPBUF EQU 30H ;顯示緩沖區(qū)指針DISPCNT EQU 38H ;DISPBIT EQU 39H ;位選指針 T1CNTA EQU 3AH ;50ms定時(shí)計(jì)數(shù) T1CNTB EQU 3BH ;50ms*8計(jì)數(shù) CNT EQU 3CH ;

8、 ORG 0000H LJMP START ORG 000BH LJMP INT_T0START: MOV DISPCNT,#8 MOV A,#10 MOV R1,#DISPBUF LP: MOV R1,A INC R1 DJNZ DISPCNT,LP MOV DISPBIT,#00H MOV T1CNTA,#00H MOV T1CNTB,#00H MOV CNT,#00H MOV TMOD,#01H MOV TH0,#0FCH ;65536-1000=64536 MOV TL0,#18H ; 64536(FC18H) SETB TR0 SETB ET0 SETB EA SJMP $INT_T

9、0: MOV TH0,#0FCH MOV TL0,#18H MOV A,DISPBIT ADD A,#DISPBUF MOV R0,A MOV A,R0 MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,A MOV A,P1 ANL A,#0F8H ADD A,DISPBIT MOV P1,A INC DISPBIT MOV A,DISPBIT CJNE A,#08H,NEXT MOV DISPBIT,#00H NEXT: - - TABLE: DB 3FH,06H,5BH,4FH,66H,- NEXT: INC T1CNTA MOV A,T1CNTA CJNE A,#

10、50,DONE ;50ms定時(shí) MOV T1CNTA,#00H INC T1CNTB MOV A,T1CNTB CJNE A,#8, DONE ;50*8=400ms定時(shí) MOV T1CNTB,#00H INC CNT MOV A,CNT CJNE A,#9,LLX MOV CNT,#00H MOV A,CNT LLX: MOV R1,#DISPBUF MOV R2,#8 ADD A,#0DH LP: MOVC A,A+PC MOV R1,A ;1B INC R1 ;1B DEC A ;1B DJNZ R2,LP ;2B DONE: RETI ;1B DB 10,10,10,10,10,10,

11、10,10,1,2,3,4,5,6,7,8TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H END三、點(diǎn)陣顯示控制用定時(shí)器0實(shí)現(xiàn)27H行掃描地址指針,值20H-26H20H-26H顯示緩沖區(qū)28H行掃描值,初值FEH定時(shí)初值 65536-1000=64536(FC18H)T0INT:MOV TH0,#0FCH MOV TL0,#18H MOV P0,#FFH MOV R0,27H MOV A,R0 MOV P1,A MOV A,28H MOV P0,A RL A MOV 28H,A INC 27H MOV A,27H CJNE A,#2

12、7H,LP1 MOV 28H,#0FEH MOV 27H,#20H LP1:RETI實(shí)現(xiàn)箭頭滾動(dòng) TAB:DB 00H,04H,0EH,15H,04H,04H,00H,00H,04H,0EH,15H,04H,04H 每間隔1秒鐘更新一次顯示緩沖區(qū)內(nèi)容即可實(shí)現(xiàn)滾動(dòng)顯示 1616LED點(diǎn)陣顯示DW 0640H,0F884H,11FEH,1124H,0FF24H,-T0INT:MOV TH0,#0FCH MOV TL0,#18H MOV P2,#FFH MOV A,#20H ADD A,R3 ADD A,R3 MOV R0,A MOV A,R0 MOV P0,A SETB P1.0 NOP NOP

13、CLR P1.0用定時(shí)器0實(shí)現(xiàn)20H-3FH顯示緩沖區(qū)R3行掃描指針,值0-7定時(shí)初值 65536-1000=64536(FC18H) INC R0 MOV A,R0 MOV P0,A SETB P1.1 NOP NOP CLR P1.1 MOV A,15 ADD A,R0 MOV R0,A MOV A,R0 MOV P0,A SETB P1.2 NOP NOP CLR P1.2 INC R0 MOV A,R0 MOV P0,A SETB P1.3 NOP NOP CLR P1.3 MOV DPTR,#TAB1 MOV A,R3 MOVC A,A+DPTR MOV P2,A RETITAB1:

14、 DB 0FEH,0FDH,0FBH,0F7H DB 0EFH,0DFH,0BFH,7FH 要求每間隔1秒鐘循環(huán)顯示0-1-2-3-4-5-6-7-8-9 20H-3FH顯示緩沖區(qū),用定時(shí)器0實(shí)現(xiàn)1ms定時(shí),定時(shí)初值 65536-1000=64536(FC18H) R3行掃描指針,值0-7 定時(shí)器1 1秒定時(shí) 50ms*20,定時(shí)初值 65536-50000=15536(3CB0H) 1秒鐘更新一次顯示緩沖區(qū)內(nèi)容,40H做0-9顯示指針,41H做20次計(jì)數(shù)器 ORG 0000H AJMP START ;復(fù)位入口 ORG 000BH AJMP T0INT ;T0中斷入口 ORG 001BH AJ

15、MP T1INT ;T1中斷入口 ORG 0100H TAB1:DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH;點(diǎn)陣行掃描值 TAB2:DW XXXX,XXXX,- ;0字形表 32個(gè)字節(jié) DW XXXX,XXXX,- ;1字形表 32個(gè)字節(jié) DW XXXX,XXXX,- ;2字形表 32個(gè)字節(jié) DW XXXX,XXXX,- ;3字形表 32個(gè)字節(jié) DW XXXX,XXXX,- ;4字形表 32個(gè)字節(jié) DW XXXX,XXXX,- ;5字形表 32個(gè)字節(jié) DW XXXX,XXXX,- ;6字形表 32個(gè)字節(jié) DW XXXX,XXXX,- ;7字形表 32個(gè)字

16、節(jié) DW XXXX,XXXX,- ;8字形表 32個(gè)字節(jié) DW XXXX,XXXX,- ;9字形表 32個(gè)字節(jié)START:MOV SP,#60H ;初始化程序 MOV TMOD,#11H MOV TH0,#0FCH MOV TL0,#18H MOV TH1,#3CH MOV TL1,#0B0H MOV R3,#00H ;行掃描指針 MOV 40H,#00H ;顯示指針 MOV 41H,#00H ; 20次計(jì)數(shù)器 MOV P2,#FFH ;不顯示 MOV R1,#32 ;顯示0 MOV R0,#20H ;緩沖區(qū)初值 MOV DPTR,#TAB2LP0: CLR A MOVC A,A+DPTR M

17、OV R0,A INC R0 INC DPTR DJNZ R1,LP0 SETB EA ;CPU開中斷 SETB ET0 ;定時(shí)器0開中斷 SETB ET1 ;定時(shí)器1開中斷 SETB TR0 ;啟動(dòng)定時(shí) SETB TR1 ;啟動(dòng)定時(shí) SJMP $ ;等待中斷T1INT: MOV TH1,#3CH MOV TL1,#0B0H INC 41H MOV A,41H CJNE A,#14H,LP3 ;1秒鐘到? MOV R0,#20H ;更新顯示緩沖區(qū) MOV R1,#32 MOV DPTR,#TAB2 ; DPTR+(40H)*32 MOV A,40H MOV B,32 MUL AB CLR C

18、ADD A,DPL MOV DPL,A MOV A,B ADDC A,DPH MOV DPH,A LP2: CLR A ;更新顯示緩沖區(qū) MOVC A,A+DPTR MOV R0,A INC R0 INC DPTR DJNZ R1,LP2 INC 40H MOV A,40H CJNE A,#0AH,LP3 MOV 40H,#00H LP3: RETIT0INT:PUSH PSW PUSH ACC PUSH R0 PUSH DPH PUSH DPL MOV TH0,#0FCH MOV TL0,#18H MOV P2,#FFH MOV A,#20H ADD A,R3 ADD A,R3 MOV R0

19、,A MOV A,R0 MOV P0,A SETB P1.0 NOP NOP INC R0MOV A,R0MOV P0,ASETB P1.3NOPNOPCLR P1.3MOV DPTR,#TAB1MOV A,R3MOVC A,A+DPTRMOV P2,APOP DPLPOP DPHPOP R0POP ACCPOP PSWRETICLR P1.0INC R0MOV A,R0MOV P0,ASETB P1.1NOPNOPCLR P1.1MOV A,15ADD A,R0 MOV R0,AMOV A,R0MOV P0,ASETB P1.2NOPNOPCLR P1.2 四、時(shí)鐘控制 DS1302時(shí)鐘芯片

20、 實(shí)時(shí)時(shí)鐘計(jì)算年、月、日、時(shí)、分、秒、星期 31x8位 通用暫存RAM 串行輸入輸出使管腳數(shù)最少 2.0V 至 5.5V 寬電壓范圍操作 在 2.0V 時(shí)工作電流小于 300nA 讀寫時(shí)鐘或RAM數(shù)據(jù)時(shí)有單字節(jié)或 多字節(jié)(脈沖串模式)數(shù)據(jù)傳送方式 簡單的 3 線接口管腳名稱功能1 VCC2雙供電配置中的主電源供應(yīng)管腳,VCC1 連接到備用電源,在主電源DS1302工作于VCC1和VCC2中較大者。2X1與標(biāo)準(zhǔn)的32.768kHz石英晶體相連3X24GND 電源地5CE CE 信號(hào),在讀寫時(shí)必須保持高電平6I/OI/O 管腳,三線接口的雙向數(shù)據(jù)管腳7SCLK時(shí)鐘輸入端8VCC1后備電源典型工作電

21、路命令字 命令字啟動(dòng)每一次數(shù)據(jù)傳輸。 MSB(位7):必須是邏輯1,如果是0,則禁止對(duì)DS1302寫入; 位6:在邏輯0時(shí)規(guī)定為時(shí)鐘/日歷數(shù)據(jù),邏輯1時(shí)為RAM數(shù)據(jù); 位1至位5:輸入輸出指定寄存器 LSB(位0):在邏輯0時(shí)為寫操作(輸出),邏輯1時(shí)為讀操作(輸入) 命令字以 LSB (位 0)開始總是輸入。 CE與時(shí)鐘控制 所有數(shù)據(jù)傳輸從CE輸入高開始,CE輸入實(shí)現(xiàn)兩個(gè)功能,允許對(duì)地址/命令序列的移位寄存器進(jìn)行讀寫的控制邏輯. CE信號(hào)為單字節(jié)和多字節(jié) CE數(shù)據(jù)傳輸提供了終止的方法。 數(shù)據(jù)輸入/數(shù)據(jù)輸出 輸入寫命令字的8個(gè)SCLK周期后,接下來的8個(gè)SCLK 周期的上升沿?cái)?shù)據(jù)字節(jié)被輸入。

22、輸入讀命令字的8個(gè)SCLK周期后, 隨后的8個(gè)SCLK 周期的下降沿,一個(gè)數(shù)據(jù)字節(jié)被輸出。寄存器地址/定義秒寄存器(81h、80h)的位7定義為時(shí)鐘暫停標(biāo)志位(CH)。當(dāng)該位置為“1”時(shí),時(shí)鐘振蕩器停止,DS1302處于低功耗狀態(tài);當(dāng)該位置為“0”時(shí),時(shí)鐘開始運(yùn)行。小時(shí)寄存器(85h、84h)的位7:用于定義芯片在12小時(shí)與24小時(shí)之間的切換,當(dāng)此位為“1”時(shí),選擇12小時(shí)模式,當(dāng)此位為“0”時(shí)選擇24小時(shí)。在12小時(shí)模式時(shí),位5為定義PM與AM的標(biāo)志位,當(dāng)此位為“1”時(shí),表示PM。當(dāng)此位為“0”時(shí)表示選擇AM。在24小時(shí)模式時(shí),位5是第二個(gè)10小時(shí)位??刂萍拇嫫鳎?Fh、8Eh)的位7是寫保

23、護(hù)標(biāo)志位(WP),其它位60均置為0。在任何情況下對(duì)時(shí)鐘和RAM的寫操作之前,WP位必須為“0”。當(dāng)WP位為“1”時(shí),寫保護(hù)位防止對(duì)任一寄存器的寫操作。突發(fā)工作模式寄存器 DS1302芯片有突發(fā)模式操作功能,所謂突發(fā)模式是指一次傳送多個(gè)字節(jié)的時(shí)鐘數(shù)據(jù)或RAM數(shù)據(jù)。T_CLK Bit Px.x;時(shí)鐘引腳T_IO Bit Px.x;I/O引腳T_CE Bit Px.x;CE引腳;-; 寫一個(gè)字節(jié)INBYTE; 入口:B;-; 讀一個(gè)字節(jié)OUTBYTE; 出口:A;-;-; 讀一個(gè)字節(jié) OUTBYTE;-OUTBYTE:MOV R4,#8 outS1:MOVC,T_IORRCASETB T_CLK

24、NOP NOPCLRT_CLK DJNZR4,outS1RET;-; 寫一個(gè)字節(jié) INBYTE;-INBYTE:MOV R4,#8 inS1:MOVA,B RRCA MOVB,A MOVT_IO,C SETBT_CLK NOP NOP CLRT_CLK DJNZ R4,inS1 RET;-; 讀時(shí)間 GET1302; Second,Minute,Hour,Day,Month,Week,Year; 連續(xù)單元存秒,分,時(shí),日,月,星期,年的值;-GET1302:MOV R0,#Second ;日期存儲(chǔ)單元首地址 MOVR7,#7 MOVR1,#81H ;讀日歷寄存器首地址 getS1:CLRT_C

25、E CLRT_CLK SETBT_CE MOVB,R1 LCALLINBYTE LCALLOUTBYTE MOVR0,A INCR0 INCR1 INCR1 CLRT_CE DJNZ R7,getS1 RET;-; 寫時(shí)間、啟動(dòng)計(jì)時(shí) SET1302; Second,Minute,Hour,Day,Month,Week,Year; 連續(xù)單元存秒,分,時(shí),日,月,星期,年的值;-SET1302:CLR T_CECLRT_CLKSETBT_CEMOVB,#8EH ;控制寄存器LCALLINBYTEMOVB,#00H ;寫操作前WP=0LCALLINBYTECLRT_CEMOVR0,#Second ;

26、日期存儲(chǔ)單元首地址 MOVR7,#7 MOVR1,#80H;寫日歷寄存器首地址 setS:CLRT_CECLRT_CLKSETBT_CEMOVB,R1LCALLINBYTE MOV A,R0 ;寫秒數(shù)據(jù) MOVB,A LCALLINBYTE INC R0 INCR1 INCR1 CLRT_CE DJNZR7,setS1 CLRT_CE CLRT_CLK MOVB,#8EH;控制寄存器 LCALLINBYTE MOVB,#80H;寫保護(hù),WP=1, LCALLINBYTE CLRT_CE RET五、存儲(chǔ)控制 CAT24WC01/02/04/08/16是一個(gè)1K/2K/4K/8K/16K位串行E2

27、PROM內(nèi)部含有128/256/512/1024/2048個(gè)8位字節(jié)管腳名稱功能A0、A1、A2器件地址選擇SDA串行數(shù)據(jù)/地址SCL串行時(shí)鐘WP寫保護(hù)Vcc+1.8V-6.0V工作電壓Vss地管腳描述 SCL:串行時(shí)鐘 串行時(shí)鐘輸入管腳用于產(chǎn)生器所有數(shù)據(jù)發(fā)送或接收的時(shí)鐘 SDA:串行數(shù)據(jù)/地址 雙向串行數(shù)據(jù)/地址管腳,用于器件所有數(shù)據(jù)的發(fā)送或接收,SDA是一個(gè)開漏輸出管腳,可與其它開漏輸出或集電極開路輸出進(jìn)行線或。 A0、A1、A2:器件地址輸入端 多個(gè)器件級(jí)聯(lián)時(shí)設(shè)置器件地址,當(dāng)這些懸空時(shí)默認(rèn)值為0。 WP:寫保護(hù) 如果WP管腳連接到Vcc,所有的內(nèi)容都被寫保護(hù);當(dāng)WP管腳連接到Vss或懸空

28、,允許器件進(jìn)行常的讀/寫操作。I2C總線協(xié)議 1、只有在總線空閑時(shí)才允許啟動(dòng)數(shù)據(jù)傳送; 2、數(shù)據(jù)傳送過程中,當(dāng)時(shí)鐘線為高電平時(shí),數(shù)據(jù)線必須保持穩(wěn)狀態(tài),不允許有跳變。當(dāng)時(shí)鐘線為高電平時(shí)數(shù)據(jù)線的任何電平變化將被看作總線的起始或停信號(hào)。 起始信號(hào):時(shí)鐘線保持高電平期間,數(shù)據(jù)線電平從高到低的跳變作為I2C總線的起始信號(hào)。 停止信號(hào):時(shí)鐘線保持高電平期間數(shù)據(jù)線電平從低到高的跳變作為I2C總線的停止信號(hào)。 器件尋址 主器件通過發(fā)送一個(gè)起始信號(hào)啟動(dòng)發(fā)送過程,然后發(fā)送所要尋址的從器件地址。8位從器件地址的高4位固定為1010,接下來的3位(A2、A1、A0)為器件的地址位,用來定義哪個(gè)器件以及器件的哪個(gè)部分被

29、主器件訪問。 從器件8位地址的最低位作為讀寫控制位,1表示對(duì)從器件進(jìn)行讀操作,0表示對(duì)從器件進(jìn)行寫操作。 在主器件發(fā)送起始信號(hào)和從器件地址字節(jié)后,從器件監(jiān)視總線并當(dāng)其地址與發(fā)送的從地址相符時(shí),響應(yīng)一個(gè)應(yīng)答信號(hào)(通過SDA線),并根據(jù)讀寫控制位(R/W)的狀態(tài)進(jìn)行讀或?qū)懖僮鳌?應(yīng)答信號(hào) I2C總線數(shù)據(jù)傳送時(shí),每成功地傳送一個(gè)字節(jié)數(shù)據(jù)后,接收器都必須產(chǎn)生一個(gè)應(yīng)答信號(hào)。應(yīng)答的器件在第9個(gè)時(shí)鐘周期時(shí),將SDA線拉低,表示其已收到一個(gè)8位數(shù)據(jù)。以24C02為例寫操作-字節(jié)寫:在字節(jié)寫模式下,主器件發(fā)送起始命令和從器件地址信息給從器件,在從器件產(chǎn)生應(yīng)答信號(hào)后,主器件發(fā)送24C02的字節(jié)地址,主器件在收到從

30、器件的另一個(gè)應(yīng)答信號(hào)后,再發(fā)送數(shù)據(jù)到被尋址的存儲(chǔ)單元,24C02再次應(yīng)答,并在主器件產(chǎn)生停止信號(hào)后開始內(nèi)部數(shù)據(jù)的擦寫,在內(nèi)部擦寫過程中24C02不再應(yīng)答主器件的任何請(qǐng)求。寫操作-頁寫:用頁寫24C02可以一次寫入16個(gè)字節(jié)的數(shù)據(jù),接收到16個(gè)字節(jié)數(shù)據(jù)和主器件發(fā)送的停止信號(hào)后,24C02啟動(dòng)內(nèi)部寫周期將數(shù)據(jù)寫到數(shù)據(jù)區(qū),所有接收的數(shù)據(jù)在一個(gè)寫周期內(nèi)寫入24C02。讀操作:對(duì)24C02讀操作的初始化方式和寫操作時(shí)一樣,僅把R/W 位置為1,有三種不同的讀操作方式,立即地址讀、選 擇讀和連續(xù)讀。立即地址讀:24C02的地址計(jì)數(shù)器內(nèi)容為最后操作字節(jié)的地址加1,即如果上次讀/寫的操作地址為N,則立即讀的地

31、址從地址N+1開始,24C02接收到從器件地址信號(hào)后(R/W位置1),它首先發(fā)送一個(gè)應(yīng)答信號(hào),然后發(fā)送一個(gè)8位字節(jié)數(shù)據(jù),主器件不需發(fā)送一個(gè)應(yīng)答信號(hào),但要產(chǎn)生一個(gè)停止信號(hào)。選擇性讀:選擇性讀操作允許主器件對(duì)寄存器的任意字節(jié)進(jìn)行讀操作,主器件首先通過發(fā)送起始信號(hào)、從器件地址和它想讀取的字節(jié)數(shù)據(jù)的地址執(zhí)行一個(gè)偽寫操作。在24C02應(yīng)答之后,主器件重新發(fā)送起始信號(hào)和從器件地址,此時(shí)R/W位置1,24C02響應(yīng)并發(fā)送應(yīng)答信號(hào),然后輸出所要求的一個(gè)8位字節(jié)數(shù)據(jù),主器件不發(fā)送應(yīng)答信號(hào),但產(chǎn)生一個(gè)停止信號(hào)。連續(xù)讀:連續(xù)讀操作可通過立即讀或選擇性讀操作啟動(dòng),在24C02發(fā)送完一個(gè)8位字節(jié)數(shù)據(jù)后,主器件產(chǎn)生一個(gè)應(yīng)

32、答信號(hào)來響應(yīng),告知24C02主器件要求更多的數(shù)據(jù),對(duì)應(yīng)每個(gè)主機(jī)產(chǎn)生的應(yīng)答信號(hào)24C02將發(fā)送一個(gè)8位數(shù)據(jù)字節(jié)。當(dāng)主器件不發(fā)送應(yīng)答信號(hào)而發(fā)送停止位時(shí)結(jié)束此操作。SDA BIT PX.X;定義24C02數(shù)據(jù)線SCLBITPX.X;定義24C02時(shí)鐘線; -; 啟動(dòng)信號(hào) START; -START:SETBSDASETBSCL NOPNOP CLRSDA NOPNOP CLRSCL RET; -; 停止信號(hào) STOP; -STOP: CLRSDA SETBSCLNOPNOP SETBSDANOPNOPCLRSCLCLR SDA RET;- ; 向I2C總線發(fā)送一個(gè)字節(jié)數(shù)據(jù) SENDBYTE ; 入口

33、參數(shù):A 待發(fā)送數(shù)據(jù); - SENDBYTE: MOVR7,#08 S_BYTE:RLCA MOVSDA,C SETBSCL NOP NOP NOP NOP CLRSCL DJNZR7,S_BYTE SETBSDA ;釋放SDA信號(hào)線 NOP NOP SETBSCL NOP NOP NOPW1:MOVC,SDA JCW1 ;返回應(yīng)答信號(hào) CLRSDACLRSCLRET;-; 寫操作 W_BYTE; 輸入?yún)?shù):R0-要寫入的地址,B-要寫入的數(shù)據(jù); -W_BYTE:CALLSTART MOVA,#0A0H CALL SENDBYTE MOVA,R0 CALLSENDBYTE MOVA,B CAL

34、LSENDBYTE CALLSTOP RET;-; 讀操作 R_BYTE; 輸入?yún)?shù):R0-要讀的字節(jié)地址; 輸出參數(shù):A-結(jié)果;-R_BYTE:CALLSTARTMOVA,#0A0HCALLSENDBYTE MOVA,R0CALLSENDBYTECALLSTARTMOVA,#0A1HCALLSENDBYTE MOVR7,#08 ;接收數(shù)據(jù) CLRA SETBSDA ;釋放SDA數(shù)據(jù)線 R_1:CLRSCL NOPNOPNOP SETBSCLNOPNOPNOP MOVC,SDA ;將SDA狀態(tài)讀入C RLCA ;結(jié)果移入 SETBSDA ;釋放SDA數(shù)據(jù)線 DJNZR7,R_1RET六、溫度控

35、制DS18B20 DS18B20是DALLAS公司生產(chǎn)的1-Wire,即單總線器件,用它來組成測(cè)溫系統(tǒng),在一根通信線上可以掛多個(gè)測(cè)溫器件,具有線路簡單、方便和體積小等優(yōu)點(diǎn)。 DS18B20產(chǎn)品的特點(diǎn) (1)只要求一個(gè)端口即可實(shí)現(xiàn)通信。 (2)在DS18B20中的每個(gè)器件上都有獨(dú)一無二的序列號(hào)。 (3)實(shí)際應(yīng)用中不需要外部任何元器件即可實(shí)現(xiàn)測(cè)溫。 (4)測(cè)量溫度范圍在-55到125之間。 (5)數(shù)字溫度計(jì)的分辨率用戶可以從9位到12位選擇。 (6)內(nèi)部有溫度上、下限告警設(shè)置。 單個(gè)DS18B20控制 晶振頻率12MHZ R_T_B EQU XXH D_T_B EQU XXH DQ BIT PX.

36、X FLAG1 BITXX;DS18B20 ;存在標(biāo)志位; -; DS18B20初始化; -INIT_18B20:SETB DQ NOP CLR DQ MOV R0,#06BH TSR1:DJNZ R0,TSR1 ;延時(shí) SETB DQ MOV R0,#25H TSR2:JNB DQ,TSR3 DJNZ R0,TSR2 LJMP TSR4 TSR3:SETB FLAG1 ;置標(biāo)志位,表示 LJMP TSR5 ;DS1820存在 TSR4:CLR FLAG1 ;清標(biāo)志位,表示 LJMP TSR7 ;DS1820不存在 TSR5:MOV R0,#06BH ;延時(shí) TSR6:DJNZ R0,TSR6 TSR7:SETB DQ RET;-; 寫DS18B20暫存存儲(chǔ)器設(shè)定值 RE_CONFIG;-RE_CONFIG:JNB FLAG1,EXTR ;若DS18B20不存在退出 MOV A,#0CCH ;發(fā)SKIP ROM命令 LCALL W_18B20 MOV A,#4EH ;發(fā)寫暫存存儲(chǔ)器命令 LCALL W_18B20 MOV A,#32H ;TH 報(bào)警上限 +50 LCALL W_18B20 MOV A,#ECH ;TL 報(bào)警下限

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論