- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
??程序10-4:温控系统模型控制程序(对应图10-30)???
TEMP EQU 30H ; 变量TEMP指向地址30H,用于保存温度值
SW BIT P3.2 ; SW为按钮开关标志位
DRIVE BIT P3.5 ; DRIVE为控制位,控制外设(压缩机)
ORG 00H ; 起始地址00H
JMP START ; 跳到START
ORG 0BH ; Timer?0中断向量地址
JMP TIM0 ; 跳到TIM0
START:
MOV TMOD, #01H ; Timer 0工作在模式1下
MOV IE, #82H ; Timer 0中断使能
MOV TH0, #3CH ; 计数初始值载入,Timer 0每50ms中断一次
MOV TL0, #0B0H
SETB TR0 ; 启动Timer 0
MOV TEMP, #0FFH ; 设定温度的初始值
ANL P1, #00H ; 七段数码管的显示”00”
MOV R0, #10 ; 显示数据计数器R0=10
AD_CONVERT:
MOVX @R0, A ;使P0高阻,ADC0804开始模数转换
CHECK_CON:
JNB SW, SET_TEMP ; 判断按钮开关有没有按下
JB P2.0, CHECK_CON ; 检查ADC的位,出现低电平表明转换完成
MOVX A, @R0 ; 将转换好的数据载入累加器A
MOV A, P1 ; 转换完成的数据载入累加器A中
CALL HEX_TO_DEC ; 调用十六进制向十进制转换子程序
MOV P1, A ; 输出至P0显示
JMP AD_CONVERT ; 循环
HEX_TO_DEC:
MOV R3, A ; 累加器A的值载入计数器R3中
CLR A ; 累加器A清0
COUNTUP:
ADD A, #1 ; 累加器A增加1
DA A ; 十进制调整
DJNZ R3, COUNTUP ; 如果R3≠0,则累加器A继续增加
; 直到R3=0,累加器A中的数值已成为十进制形式
RET
SET_TEMP:
CALL DELAY ; 消除抖动
JNB SW, $ ; 判断按钮开关有没有释放
CALL DELAY ; 消除抖动
CHECK_SET:
CJNE R0, #0FFH, LOAD ; 是否取完数据表中的显示数据?取完时R0=0FFH
MOV R0, #10 ; 重新装载R0=10
LOAD:
MOV A, R0 ; 累加器A=R0
MOV DPTR, #TABLE ; DPTR指向数据表TABLE
MOVC A, @A+DPTR ; 显示数据载入累加器A中
MOV P1, A ; 从P1输出显示
MOV TEMP, A ; 将数据保存在TEMP中
CALL DELAY_D ; 调用延时子程序(带按钮判断功能)
JMP AD_CONVERT ; 循环
SET_DIS:
CALL DELAY ; 消除抖动
JNB SW, $ ; 判断按钮开关有没有释放
CALL DELAY ; 消除抖动
DEC R0 ; R0减1
JMP CHECK_SET ; 跳到CHECK_SET继续
TIM0: ; Timer 0中断服务子程序
PUSH ACC ; 累加器A压栈
PUSH PSW ; PSW压栈
MOV TMOD, #01H ; Timer 0计数初始值重新装载
MOV TH0, #3CH
CLR C ; 清进位C
MOV A, TEMP ; 将TEMP中保存的数据载入累加器A
SUBB A, #29 ; 累加器A–29
JNC SHUT ; 如果借位C=0,表示TEMP大,即门限温度较大
SETB DRIVE ; 否则说明实测温度高于设定温度,启动压缩机制冷
BACK:
POP PSW ; PSW弹栈
POP ACC ; 累加器A弹栈
RETI ; 中断服务子程序结束
SHUT:
CLR DRIVE ; 门限温度比较大,停止外设(压缩机)工作
JMP BACK ; 跳回BACK
DELAY_D
原创力文档


文档评论(0)