單片機源程序如下:
- RG 0000H ;目標程序存放地址從0000H開始
- DQ EQU P0.0 ;賦值DQ為P0.0
- MOV DPTR,#TAB ;數(shù)據(jù)指針地址
- ACALL CHU ;初始化序列
- MOV A,#0CCH ;發(fā)送忽略ROM指令
- ACALL XUS ;調(diào)用數(shù)據(jù)發(fā)送子程序
- MOV A,#4EH ;發(fā)送寫暫存器指令
- ACALL XUS ;調(diào)用數(shù)據(jù)發(fā)送子程序
- MOV A,#7DH ;設(shè)定TH上限報警值125℃
- ACALL XUS ;調(diào)用數(shù)據(jù)發(fā)送子程序
- MOV A,#0B7H ;設(shè)定TL下限報警值零下55℃
- ACALL XUS ;調(diào)用數(shù)據(jù)發(fā)送子程序
- MOV A,#03H ;設(shè)定默認精度12位
- ACALL XUS ;調(diào)用數(shù)據(jù)發(fā)送子程序
- MOV A,#0CCH ;發(fā)送忽略ROM指令
- ACALL XUS ;調(diào)用數(shù)據(jù)發(fā)送子程序
- MOV A,#48H ;發(fā)送拷貝暫存器指令,將暫存器的數(shù)據(jù)保存至EEPROM
- ACALL XUS ;調(diào)用數(shù)據(jù)發(fā)送子程序
- ACALL SI ;調(diào)用延時子程序大于10us即可
- LSP:ACALL CHU ;初始化序列
- MOV A,#0CCH ;發(fā)送忽略ROM指令
- ACALL XUS ;調(diào)用數(shù)據(jù)發(fā)送子程序
- MOV A,#44H ;發(fā)送溫度轉(zhuǎn)換指令
- ACALL XUS ;調(diào)用數(shù)據(jù)發(fā)送子程序
- ACALL YUA ;調(diào)用延時子程序
- ACALL YUA ;調(diào)用延時子程序
- VPA:ACALL SXI ;調(diào)用溫度處理模塊程序
- MOV B,A ;第一次溫度值放于寄存器B
- ACALL SXI ;調(diào)用溫度處理模塊子程序
- CJNE A,B,VPA ;比較兩次溫度是否相等
- ACALL ACS ;調(diào)用溫度數(shù)據(jù)裁分程序
- MOV A,15H ;拷貝數(shù)據(jù)位數(shù)標志
- CJNE A,#0FFH,LSL ;判斷數(shù)據(jù)位數(shù)
- MOV A,R4 ;獲取百位數(shù)據(jù)
- ACALL ZXM ;調(diào)用字形碼查詢子程序
- MOV P3,#01H ;百位數(shù)碼管開啟
- MOV P2,A ;加載百位數(shù)碼管字形碼
- ACALL YUA ;調(diào)用延時子程序
- SJMP LSC ;轉(zhuǎn)移至十位數(shù)碼管顯示程序段
- LSL:MOV A,13H ;拷貝溫度數(shù)據(jù)符號標志
- CJNE A,#0F0H,LSC ;判斷溫度正負值
- MOV A,14H ;拷貝十位標志位
- CJNE A,#0FFH,IEC ;判斷數(shù)據(jù)是否是2位數(shù)據(jù)
- MOV P3,#01H ;開啟百位數(shù)碼管
- MOV P2,#0BFH ;顯示負號字形碼
- ACALL YUA ;調(diào)用延時子程序
- SJMP YYV ;轉(zhuǎn)移至個位數(shù)據(jù)程序段
- IEC:MOV P3,#02H ;單獨開啟十位數(shù)碼管
- MOV P2,#0BFH ;顯示負號字形碼
- ACALL YUA ;調(diào)用延時子程序
- SJMP POB ;轉(zhuǎn)移至個位數(shù)碼管
- LSC:MOV A,14H ;拷貝十位數(shù)據(jù)標志
- CJNE A,#0FFH,POB ;判斷數(shù)據(jù)是否是十位數(shù)據(jù)
- YYV:MOV A,R3 ;拷貝十位溫度值
- ACALL ZXM ;調(diào)用字形碼查詢子程序
- MOV P3,#02H ;單獨開啟十位數(shù)碼管
- MOV P2,A ;加載溫度值數(shù)據(jù)
- ACALL YUA ;調(diào)用延時子程序
- POB:MOV A,R2 ;拷貝個位溫度值數(shù)據(jù)
- ACALL ZXM ;調(diào)用字形碼查詢子程序
- MOV P3,#04H ;單獨開啟個位數(shù)碼管
- MOV P2,A ;加載個位數(shù)據(jù)值
- ACALL YUA ;調(diào)用延時子程序
- MOV A,R5 ;拷貝錯誤標志寄存器數(shù)據(jù)
- CJNE A,#0CCH,LSP ;判斷數(shù)據(jù)是否正常接收,由從機產(chǎn)生的未知錯誤
- SJMP $ ;數(shù)據(jù)接收嚴重錯誤,或設(shè)置錯誤,等待用戶修改
- CHU:CLR DQ ;初始化開始 //初始化序列//
- MOV 10H,#240 ;設(shè)定復位脈沖480us
- DJNZ 10H,$ ;復位脈沖需要 X>480us
- SETB DQ ;復位脈沖發(fā)送結(jié)束
- MOV 10H,#30 ;設(shè)定存在脈沖等待時間
- DJNZ 10H,$ ;等待時間需要15us-60us
- MOV 10H,#60 ;設(shè)定存在脈沖存在時間(小于等于)≤180us
- EPC:JB DQ,CPE ;檢測是否有存在脈沖 k=30us
- SJMP SPC ;檢測到存在脈沖
- CPE:DJNZ 10H,EPC ;判斷存在脈沖存在時間是否超出? k=120us
- SJMP CHU ;未檢測到存在脈沖,重新初始化序列
- SPC:JNB DQ,SPC ;等待存在脈沖結(jié)束
- RET ;初始化序列完成,程序返回!!!
- XUS:MOV 11H,#8 ;定義數(shù)據(jù)字節(jié)字數(shù)8bit //數(shù)據(jù)發(fā)送程序//
- RKP:CLR DQ ;寫時序開始
- RRC A ;加載發(fā)送數(shù)據(jù)
- MOV 10H,#28 ;設(shè)定數(shù)據(jù)保持時間
- JNC EBP ;判斷數(shù)據(jù)寫時序段
- SETB DQ ;數(shù)據(jù)寫1時序
- EBP:DJNZ 10H,$ ;寫時序保持56us
- SETB DQ ;據(jù)寫時序結(jié)束數(shù)
- DJNZ 11H,RKP ;數(shù)據(jù)字節(jié)數(shù)
- RET ;數(shù)據(jù)發(fā)送完成,程序返回!!!
復制代碼
|