单片机源程序如下:
- 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 ;数据发送完成,程序返回!!!
复制代码
|