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 ;数据发送完成,程序返回!!!