新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 2051單片機(jī)仿PT2272軟件解碼程序

2051單片機(jī)仿PT2272軟件解碼程序

作者: 時(shí)間:2012-09-14 來(lái)源:網(wǎng)絡(luò) 收藏

本程序是用51單片機(jī)來(lái)pt2262編碼,是一個(gè)無(wú)線服務(wù)呼叫器的代碼已經(jīng)成功的在產(chǎn)品的應(yīng)用,有LED顯示.
并有原理圖與pcb文件以及完整的代碼提供下載:
http://www.51hei.com/ziliao/file/37724122.rar

; =========================================================; ================================================================;    模擬解碼器(接收來(lái)自射頻解碼模塊的2262格式串行數(shù)據(jù)流);   管理三位數(shù)碼管顯示器;   利用AT24C32實(shí)現(xiàn)堆棧式掉電緩存保護(hù),通過(guò)特殊的清除發(fā)射器清除堆棧;   顯示器具有兩級(jí)亮度變化;   具有蜂鳴器,新的編碼收到后,蜂鳴器鳴響2/3次,顯示器高亮,三秒后正常;;   CPU: AT89C@12MHz;;				COPYRIGHT yanggt@163.net SEP 9, 2004; ===============================================================; ===================================================================EESIZE	EQU	32768			;EEPROM容量(32768/16384/8192/4096/2048/1024/512)PWDF	EQU	50H			;EEPROM中用于標(biāo)識(shí)歷史記錄有效MYA0_3	EQU	00010101B		;有效識(shí)別碼,不匹配則不響應(yīng)MYCLRL	EQU	00H			;主控手機(jī)編碼值(目前為 0000H)MYCLRH	EQU	00H			;根據(jù)A4-A11計(jì)算得到(00 D7 D6 D5 D4 D3 D2 D1)(D0)BELONT	EQU	40			;聲音鳴響時(shí)間BELOFT	EQU	20			;靜音時(shí)間SCL	BIT	P3.0			;AT24C32(4K字節(jié))SDA	BIT	P3.1SIGPIN	BIT	P3.2			;接收信號(hào)入口BELL	BIT	P3.3			;蜂鳴器控制VSEL	BIT	P1.0			;LED亮度選擇,H=高亮度U0E	BIT	P3.5			;個(gè)位LED位選U1E	BIT	P3.4			;十位LED位選U2E	BIT	P3.7			;百位LED位選BELLSW  BIT     78H                     ;蜂鳴器運(yùn)行期間=1EEEMPTY BIT     79H                     ;EEPROM空標(biāo)志BELLON	BIT	7AH			;通知蜂鳴器鳴響CODEOK	BIT	7BH			;收到的編碼正確TMK250	BIT	7CH			;250us標(biāo)志,每250us置位一次SIGING	BIT	7DH			;手機(jī)發(fā)射信號(hào)正在持續(xù)=1,無(wú)信號(hào)=0LEDHIGH BIT	7EH			;顯示器亮度標(biāo)志=0:正常;=1:高亮TOUTMK	BIT	7FH			;顯示器降低亮度時(shí)間已到=1RBUF81	DATA	20H			;后8位第一次采樣結(jié)果A4-A11RBUF82	DATA	21H			;后8位第二次采樣結(jié)果A4-A11RBUF44	DATA	22H			;前4位第12次采樣結(jié)果A0-A3SIGPOT	DATA	23H			;接收引腳上次電平,直接保存P3口全部?jī)?nèi)容SIGMSK	EQU	04H			;SIG----P3.2TCNTL	DATA	24H			;定時(shí)計(jì)數(shù)器(4ms時(shí)基)TCNTH	DATA	25HTMX16	DATA	26H			;16*250=4000us=4msBELLTM	DATA	27H			;鳴響時(shí)間DBUF0	DATA	28H			;個(gè)位顯示緩沖區(qū)DBUF1	DATA	29H			;十位DBUF2	DATA	2AH			;百位EEPTRL	DATA	2BH			;EEPROM當(dāng)前位置指針EEPTRH	DATA	2CHEEPOL	DATA	2DH			;保存清除指針EEPOH	DATA	2EH			;RES2F	DATA	2FH			;使用其中的標(biāo)志位EEBUF	DATA	30H			;30-37H, I2C緩沖區(qū)BELLCNT	DATA	38H			;鳴響次數(shù)計(jì)數(shù)器(3/2/1)BELLTMK	DATA	39HCODEL	DATA	40H			;接收到編碼低位CODEH	DATA	41H			;	   高位CODELK  DATA    42H                     ;保存上一個(gè)編碼CODEHK  DATA    43H                     ;CODE1L	DATA	44HCODE1H	DATA	45H; =======================================================; =============================================================ORG	0000HLJMP	START; ===================================================================;   250us進(jìn)入一次,每16次(4ms)切換一次顯示位; ==================================================================ORG	000BH			;定時(shí)器0中斷入口,獨(dú)占 R7TM0SUB: SETB	TMK250TM0_4MS:DJNZ	TMX16, TM0_EMOV	TMX16, #10HJNB	BELLSW, TM0_CLYDJNZ	BELLTM, TM0_CLYSETB	BELLONTM0_CLY:JB	TOUTMK, TM0_0		;每4ms執(zhí)行一次DJNZ	TCNTL, TM0_0DJNZ	TCNTH, TM0_0SETB	TOUTMKTM0_0:	CJNE	R7, #0, TM0_1		;當(dāng)前顯示位CLR	U2EMOV	P1, DBUF0INC	R7SETB	U0ERETITM0_1:	CJNE	R7, #1, TM0_2CLR	U0EMOV	P1, DBUF1INC	R7SETB	U1ERETITM0_2:	CLR	U1EMOV	P1, DBUF2MOV	R7, #0SETB	U2ERETITM0_E:	RETI; ===============================================================; =======================================================START:	MOV	P1, #00H		;關(guān)閉顯示器,正常亮度CLR	BELLONCLR     BELLACALL	EECHK			;檢查EEPROM,確定指針,提取其中最后一個(gè)歷史記錄號(hào)碼ACALL	TOBUFMOV	TMX16, #10H		;中斷計(jì)數(shù)寄存器置初始值16SETB	TOUTMK			;延遲定時(shí)器處于停止?fàn)顟B(tài)CLR	U0ECLR	U1ECLR	U2EMOV	R7, #00H		;從第一位開(kāi)始顯示MOV	TMOD, #12H		;TIMER0, MODE 2, TIMER1, MODE 1MOV	TL0, #06HMOV	TH0, #06H		;時(shí)間=250usSETB	TR0SETB	ET0SETB	EAMOV	A, #6-1 		;開(kāi)機(jī)時(shí)蜂鳴器自動(dòng)鳴響ACALL	BELL_SMOV	BELLTM, #BELONT-20ACALL	LEDOFFCLR	LEDHIGH 		;關(guān)閉高亮度MOV	SIGPOT, #00H		;假設(shè)開(kāi)始時(shí)接收引腳=0CLR	SIGINGSETB	F0;=--=--=--=--=--=--=--=--=--=--==--=--=--=--=--=--MAIN:   JNB     BELLSW, MAIN_S0ACALL	BELL_MMAIN_S0:JNB	LEDHIGH, MAIN_00 	;顯示器普通亮度,不檢查標(biāo)志JNB	TOUTMK, MAIN_0ACALL	LEDOFF			;顯示器回到正常亮度CLR	LEDHIGHJB	EEEMPTY, MAIN_0		;沒(méi)有尚未確認(rèn)的編碼AJMP	MAIN_01MAIN_00:JB	EEEMPTY, MAIN_0		;沒(méi)有尚未確認(rèn)的編碼JNB	TOUTMK, MAIN_0MOV     A, #2-1ACALL	BELL_S			;鳴響MAIN_01:MOV	TCNTL, #LOW(5000/4)	;高亮度持續(xù)3000ms=3s后恢復(fù)MOV	TCNTH, #HIGH(5000/4)CLR	TOUTMKMOV	BELLTM, #30MAIN_0: MOV	A, P3			;監(jiān)視SIG引腳電平變化XCH	A, SIGPOTXRL	A, SIGPOTANL	A, #SIGMSKJZ	MAIN			;A=0表示引腳電平無(wú)變化SETB	F0ACALL	GETCOD			;開(kāi)始接收,出錯(cuò)后直接返回JC	MAIN			;接收代碼無(wú)效,舍棄。ACALL	FINDJC	MAIN			;C=1,表示代碼無(wú)效,什么也不發(fā)生MOV	CODE1L, CODELMOV	CODE1H, CODEHCLR	F0ACALL	GETCOD			;開(kāi)始接收,出錯(cuò)后直接返回SETB	F0JC	MAIN			;接收代碼無(wú)效,舍棄。ACALL	FINDJC	MAIN			;C=1,表示代碼無(wú)效,什么也不發(fā)生MOV	B, AMOV	A, CODE1LXRL	A, CODELJNZ	MAIN_0DMOV	A, CODE1HXRL	A, CODEHJZ	MAIN_0CMAIN_0D:MOV	CODE1L, CODELMOV	CODE1H, CODEHCLR	F0ACALL	GETCOD			;開(kāi)始接收,出錯(cuò)后直接返回SETB	F0JC	MAIN			;接收代碼無(wú)效,舍棄。ACALL	FINDJC	MAIN			;C=1,表示代碼無(wú)效,什么也不發(fā)生MOV	B, AMOV	A, CODE1LXRL	A, CODELJNZ	MAIN_EMOV	A, CODE1HXRL	A, CODEHJNZ	MAIN_EMAIN_0C:MOV	A, BJNZ	MAIN_1			;A=1:主控手機(jī),轉(zhuǎn)去退棧MOV	BELLCNT, #4-1MOV     A, CODELXRL     A, CODELKJNZ     MAIN_0AMOV     A, CODEHXRL     A, CODEHKJZ      MAIN_0B;這里可以進(jìn)行編碼過(guò)濾=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-MAIN_0A:MOV	BELLCNT, #6-1ACALL	EEPUSH			;其他手機(jī),轉(zhuǎn)去保存、顯示ACALL	TOBUFMAIN_0B:SETB	TOUTMKMOV	TCNTL, #LOW(3000/4)	;高亮度持續(xù)3000ms=3s后恢復(fù)MOV	TCNTH, #HIGH(3000/4)CLR	TOUTMKSETB	LEDHIGH 		;顯示器進(jìn)入高亮狀態(tài)MOV     A, BELLCNTACALL	BELL_S			;鳴響MOV	BELLTM, #BELONTAJMP	MAINMAIN_1: MOV	A, CODEL		;核對(duì)手機(jī)號(hào)碼XRL	A, #MYCLRLJNZ	MAIN_EMOV	A, CODEHXRL	A, #MYCLRHJNZ	MAIN_EACALL	EEPOP			;執(zhí)行退棧操作MAIN_E:	AJMP	MAIN; =============================================================;	主程序結(jié)束; ============================================================BELL_S: MOV     BELLCNT, ASETB	BELLSWSETB	BELLRET; ===============================================================BELL_M: JBC	BELLON, BELLMRETBELLM:	MOV	A, BELLCNTBELLM0:	JNB	ACC.0, BELLM1MOV	BELLTM, #BELOFT		;A.0=1,正在鳴響,應(yīng)該關(guān)閉CLR	BELLAJMP	BELLM9BELLM1:	MOV	BELLTM, #BELONT		;靜音狀態(tài),應(yīng)該打開(kāi)SETB	BELLBELLM9:	DJNZ	BELLCNT, BELLMECLR	BELLSWCLR	BELLBELLME:	RET; ===================================================================LEDOFF: ANL	DBUF0, #0FEHANL	DBUF1, #0FEHANL	DBUF2, #0FEHRET; ================================================================; ============================================================TM1SET: CLR	TR1			;1,ACALL=2CLR	TF1			;1MOV	TL1, DPL		;2MOV	TH1, DPH		;2SETB	TR1			;1RET				;2, TOTAL=2+1+1+2+2+1+2=11us; =====================================================================;  接收代碼,收到兩個(gè)相同的編碼即認(rèn)可。;  發(fā)射結(jié)束后接收下一個(gè)。; =============================================================GETCOD: NOPGETC_S: MOV	DPTR, #65535-50000	;在50ms內(nèi)搜索至少持續(xù)4ms的低電平	[***]ACALL	TM1SETGETC_S0:MOV	R6, #16 		;16*250us=4000us=4msGETC_S1:CLR	TMK250GETC_S2:JB	TF1, GETC_E		;這里超時(shí)認(rèn)為目前無(wú)發(fā)射器工作,或上次發(fā)射已結(jié)束。JB	SIGPIN, GETC_S0JNB	TMK250, GETC_S2DJNZ	R6, GETC_S1MOV	R5, #4*2		;首先接收A0-A3,共4位,8個(gè)采樣點(diǎn)MOV	DPTR, #65535-8000	;在接下來(lái)的8ms內(nèi)必須出現(xiàn)上升沿		[***]ACALL	TM1SETGETC_0: JB	TF1, GETC_E		;這里超時(shí)認(rèn)為目前無(wú)發(fā)射器工作,或上次發(fā)射已結(jié)束。JNB	SIGPIN, GETC_0;	JB	SIGING, GETC_F		;上次發(fā)射尚未結(jié)束,直接返回,不接收編碼。;	AJMP	GETC_20JNB	SIGING, GETC_20		;上次發(fā)射尚未結(jié)束,直接返回,不接收編碼。JNB	F0, GETC_20AJMP	GETC_FGETC_1P:MOV	DPTR, #65535-1250+11+2	;在接下來(lái)的1250us內(nèi)必須出現(xiàn)低電平	[***]ACALL	TM1SETGETC_1: JB	TF1, GETC_F		;超時(shí)JB	SIGPIN, GETC_1MOV	DPTR, #65535-1250+11+2	;在接下來(lái)的1250us內(nèi)必須出現(xiàn)上升沿	[***]ACALL	TM1SETGETC_2: JB	TF1, GETC_F		;超時(shí)JNB	SIGPIN, GETC_2GETC_20:MOV	DPTR, #65535-500+11+2	;固定延遲500us后采樣ACALL	TM1SETJNB	TF1, $MOV	C, SIGPIN		;采樣接收信號(hào)MOV	A, RBUF44RLC	AMOV	RBUF44, ADJNZ	R5, GETC_1P		;循環(huán)接收4個(gè)數(shù)據(jù)位,進(jìn)行8次采樣MOV	R5, #8*2		;接收A4-A11,共8個(gè)數(shù)據(jù)位,16個(gè)采樣點(diǎn)MOV	R0, #RBUF81		;RBUF81存放第一次采樣值GETC_3P:MOV	DPTR, #65535-1250+11+2	;在接下來(lái)的1250us內(nèi)必須出現(xiàn)低電平	[***]ACALL	TM1SETGETC_3: JB	TF1, GETC_F		;超時(shí)JB	SIGPIN, GETC_3MOV	DPTR, #65535-1250+11+2	;在接下來(lái)的1250us內(nèi)必須出現(xiàn)上升沿	[***]ACALL	TM1SETGETC_4: JB	TF1, GETC_F		;超時(shí)JNB	SIGPIN, GETC_4GETC_40:MOV	DPTR, #65535-500+11+2	;固定延遲500us后采樣ACALL	TM1SETJNB	TF1, $MOV	C, SIGPIN		;采樣接收信號(hào)MOV	A, @R0RLC	AMOV	@R0, AXRL	00H, #RBUF81		;在RBUF81和RBUF82之間切換XRL	00H, #RBUF82DJNZ	R5, GETC_3P		;循環(huán)接收8個(gè)數(shù)據(jù)位,進(jìn)行16次采樣SETB	SIGINGCLR	CRETGETC_E: CLR	SIGINGGETC_F: SETB	CRET; ===========================================================; ===============================================================FIND:	MOV	A, RBUF44		;分析代碼CJNE	A, #MYA0_3, FIND_EMOV	R4, RBUF81MOV	R5, RBUF82MOV	R6, #7MOV	R0, #00HMOV	R1, #00HFIND_L: MOV	A, R0			;結(jié)果乘以 3CLR	CRLC	AMOV	B, AMOV	A, R1RLC	AXCH	A, BADD	A, R0MOV	R0, AMOV	A, BADDC	A, R1MOV	R1, A			;結(jié)果乘以 3 結(jié)束MOV	A, R4RLC	AMOV	R4, A			;D7-->CMOV	A, R5RL	AMOV	R5, AANL	A, #01H 		;D7-->A.0ADDC	A, R0			;A.0+C+R0MOV	R0, AMOV	A, R1ADDC	A, #00HMOV	R1, ADJNZ	R6, FIND_L		;確定A4-A10的編碼結(jié)果CLR	AMOV	C, RBUF81.0		;分析代碼,確定是否主控手機(jī)MOV	ACC.0, CMOV	C, RBUF82.0ADDC	A, #00H 		;A=(0,1,2)。A=0:非主控手機(jī);A=1:主控手機(jī);A=2:無(wú)效手機(jī)JB	ACC.1, FIND_E		;A=2!MOV	CODEL, R0MOV	CODEH, R1CLR	CRET				;A=0/1FIND_E: SETB	CRET; ===============================================================; ======================================================================EECHK:	MOV	EEPTRL, #00H		;0000H記錄不用,因?yàn)?000H用于判斷EEPROM是否空MOV	EEPTRH, #00HMOV	EEBUF, #00HMOV	EEBUF+1, #00HEECHK0:	MOV	CODEL, EEBUF		;放到編碼緩沖區(qū)MOV	CODEH, EEBUF+1ANL	CODEH, #0FHMOV	DPL, EEPTRL		;讀取棧底的兩個(gè)字節(jié)MOV	DPH, EEPTRHINC	DPTRINC	DPTR			;指向下一個(gè)記錄,但是暫時(shí)不修改指針MOV	A, DPHADD	A, #HIGH(65536-EESIZE)	;???JC	EECHK9			;已經(jīng)檢查完所有記錄空間。MOV	EEPOL, DPLMOV	EEPOH, DPH		;暫時(shí)保存在這里MOV	R0, #EEBUFMOV	B, #02HACALL	I2CD_RMOV	A, EEBUF+1ANL	A, #0F0HXRL	A, #PWDFJNZ	EECHK9MOV	EEPTRL, EEPOLMOV	EEPTRH, EEPOHAJMP	EECHK0EECHK9:	CLR	EEEMPTY			;假設(shè)非空MOV	A, EEPTRLORL	A, EEPTRHJNZ	EECHKESETB	EEEMPTY			;聲明EEPROM空EECHKE:	RET; =======================================================================; =============================================================EEPUSH: MOV	EEBUF, CODEL		;寫入EEPROM棧,采用實(shí)棧頂MOV	EEBUF+1, CODEHORL	EEBUF+1, #PWDF		;標(biāo)志,50HMOV	DPL, EEPTRLMOV	DPH, EEPTRHINC	DPTR			;每個(gè)記錄進(jìn)入,指針加 2INC	DPTRMOV	A, DPH			;進(jìn)行堆棧溢出檢查ADD	A, #HIGH(65536-EESIZE)JC	EEPUSHEANL	DPL, #0FEHMOV	EEPTRL, DPLMOV	EEPTRH, DPHMOV	R0, #EEBUFMOV	B, #02HACALL	I2CD_WCLR	EEEMPTY			;聲明EEPROM非空EEPUSHE:RET; ============================================================; ================================================================EEPOP:	MOV	A, EEPTRL		;EEPROM退出操作ORL	A, EEPTRHJZ	EEPOPBEEPOP0: MOV	EEPOL, EEPTRLMOV	EEPOH, EEPTRHCLR	C			;指針減 2,指向上一個(gè)數(shù)據(jù)MOV	A, EEPTRLSUBB	A, #02HMOV	EEPTRL, AMOV	A, EEPTRHSUBB	A, #00HMOV	EEPTRH, A		;指針已經(jīng)更新MOV	A, EEPTRL		;檢查退出一個(gè)記錄后,堆棧是否變空?ORL	A, EEPTRHJNZ	EEPOP1MOV	CODEL, AMOV	CODEH, ASETB	EEEMPTY			;聲明EEPROM空AJMP	EEPOP9EEPOP1: MOV	DPL, EEPTRL		;讀取棧頂記錄MOV	DPH, EEPTRHMOV	R0, #EEBUFMOV	B, #02HACALL	I2CD_RMOV	CODEL, EEBUF		;放到編碼緩沖區(qū)MOV	CODEH, EEBUF+1ANL	CODEH, #0FH		;屏蔽掉標(biāo)志EEPOP9: MOV	EEBUF, #00H		;清除剛才已經(jīng)退棧的記錄MOV	EEBUF+1, #00HMOV	DPL, EEPOLMOV	DPH, EEPOHMOV	R0, #EEBUFMOV	B, #02HACALL	I2CD_WACALL	TOBUF			;送到顯示緩沖區(qū)ACALL	LEDOFFEEPOPB: MOV     A, #2-1ACALL	BELL_S			;鳴響;	MOV	BELLTM, #30EEPOPE: RET; ======================================================; =====================================================================TOBUF:	MOV	A, CODEL		;填寫顯示緩沖區(qū)MOV	B, CODEH		;/100MOV	R2, #00HTOBUF_0:CLR	CSUBB	A, #100XCH	A, BSUBB	A, #00HXCH	A, BJC	TOBUF_8INC	R2AJMP	TOBUF_0TOBUF_8:ADD	A, #100MOV	B, #10DIV	ABMOV	DPTR, #FONTMOVC	A, @A+DPTRMOV	DBUF1, AMOV	A, BMOVC	A, @A+DPTRMOV	DBUF0, AMOV	A, R2MOVC	A, @A+DPTRMOV	DBUF2, AMOV     CODELK, CODELMOV     CODEHK, CODEHRET; =================================================================; ===========================================================DELAY:	PUSH	ACC			;延遲時(shí)間=A*10msMOV	A, #20DLY1:	PUSH	ACCMOV	A, #250DJNZ	ACC, $			;500usPOP	ACCDJNZ	ACC, DLY1POP	ACCDJNZ	ACC, DELAYRET;======= I2C 子程序	=========================================;	I2CD_W, I2CD_R		;LAYER 1;	I2C_O,	I2C_I		;LAYER 2;	I2C_BG, I2C_ED		;LAYER 3;==========================================================;	向存儲(chǔ)器寫入幾個(gè)字節(jié),最多8個(gè)字節(jié)。;	入口:DPTR 要寫的EEPROM存儲(chǔ)單元地址。;	      R0   指向要寫入字節(jié)在RAM的首地址。;	      B    寫入字節(jié)個(gè)數(shù)。;	出口:如果 C=1,說(shuō)明寫出錯(cuò)。I2CD_W: ACALL	I2C_BGMOV	A, #10100000B	;寫命令A(yù)CALL	I2C_OJC	I2CD_WE 	;C=1, 未收到 ACK 位,出錯(cuò),不再繼續(xù)處理,直接返回MOV	A, DPHACALL	I2C_OJC	I2CD_WEMOV	A, DPLACALL	I2C_OJC	I2CD_WEI2CD_WL:MOV	A, @R0ACALL	I2C_OJC	I2CD_WEINC	R0DJNZ	B, I2CD_WLACALL	I2C_EDCLR	CRETI2CD_WE:ACALL	I2C_EDSETB	CRET; ========================================================;	從 EEPROM 讀入幾個(gè)字節(jié);	入口:DPTR 要讀的存儲(chǔ)單元地址。;	      R0   指向要讀緩沖區(qū)在RAM的首地址。;	      B    讀入字節(jié)個(gè)數(shù)。;	出口:讀到的內(nèi)容在緩沖區(qū)中,如果 C=1,說(shuō)明讀出錯(cuò)。I2CD_R: ACALL	I2C_BGMOV	A, #10100000B	;先發(fā)送[寫]命令A(yù)CALL	I2C_OJC	I2CD_RE 	;C=1, 未收到 ACK 位,出錯(cuò),不再繼續(xù)處理,直接返回MOV	A, DPH		;發(fā)送地址低位ACALL	I2C_OJC	I2CD_REMOV	A, DPL		;發(fā)送地址低位ACALL	I2C_OJC	I2CD_REACALL	I2C_BGMOV	A, #10100001B	;發(fā)送讀命令A(yù)CALL	I2C_OJC	I2CD_REI2CD_IB:MOV	DPL, #08H	;取得一個(gè)字節(jié)SETB	SDAI2CD_IL:SETB	SCL		;SCL=1NOPMOV	C, SDA		;MCU 采樣 SDA,送到 C 中RLC	A		;C->ACC.0CLR	SCL		;SCL=0DJNZ	DPL, I2CD_IL	;得到的一個(gè)字節(jié)在 ACC 中MOV	@R0, AINC	R0MOV	A, BXRL	A, #01HJZ	I2CD_GOCLR	SDANOPI2CD_GO:SETB	SCLNOPCLR	SCLDJNZ	B, I2CD_IB	;取得不止一個(gè)字節(jié)ACALL	I2C_EDCLR	CRETI2CD_RE:ACALL	I2C_EDSETB	CRET; =================================================================;向 IIC 總線發(fā)送一個(gè)字節(jié)I2C_O:	PUSH	BMOV	B, #08HI2C_OLP:RLC	A		;ACC.7 -> CMOV	SDA, CSETB	SCL		;SCL=1NOPCLR	SCL		;SCL=0DJNZ	B, I2C_OLPSETB	SDA		;準(zhǔn)備接收 ACK 位SETB	SCL		;SCL=1, [SDA=1]NOPMOV	C, SDACLR	SCLPOP	BRET			;C=1, 未收到 ACK 位,出錯(cuò), C=0, 收到 ACK 位,正常; =====================================================I2C_BG: SETB	SCL		;確保SCL=HIGHCLR	SDA		;向 IIC 總線發(fā)送開(kāi)始位NOPCLR	SCLRET; =========================================================================================I2C_ED: CLR	SDASETB	SCLNOPSETB	SDA		;向 IIC 總線發(fā)送停止位RET; ================================================================;最好顯示000-999=1000個(gè),否則容易造成誤解,這里顯示全部2187個(gè),0-9,A-F,H,L,P,U,Y; ==============================================================FONT:	DB	0FDH			;"0"DB	061H			;"1"DB	0DBH			;"2"DB	0F3H			;"3"DB	067H			;"4"DB	0B7H			;"5"DB	0BFH			;"6"DB	0E1H			;"7"DB	0FFH			;"8"DB	0F7H			;"9"DB	0EFH			;"A"DB	03FH			;"B"DB	09DH			;"C"DB	07BH			;"D"DB	09FH			;"E"DB	08FH			;"F"DB	06FH			;"H"DB	071H			;"J"DB	01DH			;"L"DB	0CFH			;"P"DB	07DH			;"U"DB	077H			;"Y"; ==================================================END

led顯示器相關(guān)文章:led顯示器原理


蜂鳴器相關(guān)文章:蜂鳴器原理


關(guān)鍵詞: 2051 PT2272 軟件解碼

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉