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