贵州大学单片机课程设计
17
AD_INTR BIT P3.5 AD_INTR=P3.5
SW BIT P2.0 SW=P2.0,SW指向按钮开关 DRIVE BIT P2.1 SW=P2.1,DRIVE指向压缩机控制线 ORG 0000H 原始地址0000H SJMP START 跳到START
ORG 0BH Timer 0中断向量地址 SJMP TIM0 跳到TIM0 START:
MOV TMOD,#01H Timer 0工作在模式1下 MOV IE ,#82H Timer0中断使能
MOV TH0,#3CH 计数初值载入,Timer每50ms中断一次 MOV TL0,#0B0H
SETB TR0 启动Timer0 MOV TEMP,#0FFH 设定温度的初始值 ANL P0,#00H 关闭七段数码管的显示 MOV R4,#10 取显示数据计数器R0=10 AD_CONVERT:
MOV P1,#0FFH P1作为输入口,需要将1写入每一位中
CLR AD_WR WR由低电平跳为高,启动A/D转换过程 SETB AD_WR CHECK_CON:
JNB SW,SET_TEMP 判断按钮开关有没有按下
JB AD_INTR,CHECK_CON 检查INTR位,出现低电平表明转换完成CLR AD_RD RD由高电平跳为低电平,使能DB0~DB7输出
贵州大学单片机课程设计
18
MOV A,P1 转换完成的数据载入ACC中
LCALL HEX_TO_DEC 调用十六进制向十进制转换子程序 MOV P0,A 输出至P0显示 SJMP AD_CONVERT 循环 SET_TEMP:
LCALL DELAY 消除抖动 JNB SW,$ 判断按钮是否释放 LCALL DELAY 消除抖动 CHECK_SET:
CJNE R4,#0FFH,LOAD 是否取完数据表中的数据?取完时R0=0FH CLR P2.2
MOV R4,#10 重新载入(R0)=10 LOAD:
MOV A,R4 (ACC)=(R0)
MOV DPTR,#TABLE DPTR指向数据表 MOVC A,@A+DPTR 显示数据载入ACC中 MOV P0,A 从P0输出显示
MOV TEMP,A 将数据保存在TEMP(30H)中
LCALL DELAY_D 调用延时子程序(带按钮判读功能) SJMP AD_CONVERT 循环 SET_DIS:
LCALL DELAY 消除抖动 JNB SW,$ 判断按钮是否释放
贵州大学单片机课程设计
19
LCALL DELAY 消除抖动 DEC R4 R0减1 SJMP CHECK_SET 跳到CHECK_SET继续 TIM0: Timer0中断服务子程序 PUSH ACC ACC压栈 PUSH PSW PSW压栈
MOV TMOD,#01H Timer0计数初始值重新载入 MOV TH0,#3CH CLR C 清进位CY
MOV A,TEMP 将TEMP中保存的数据载入ACC中 SUBB A,#29 (ACC)-29
JNC SHUT 如果借位(CY)=0,表示TEMP大,即设定温度较大 CLR DRIVE 否则说明室温高于设定温度,启动压缩机制冷 BACK:
POP PSW PSW弹栈
POP ACC ACC弹栈 RETI SHUT:
SETB DRIVE 设定温度比较大,停止压缩机工作 SJMP BACK 跳回BACK TABLE:
DB 20H,21H,22H,23H,24H 显示数据表 DB 25H,26H,27H,28H,29H,30H END
贵州大学单片机课程设计
20
4.2 A/D转换子程序
A/D转换流程图如图8所示。
A/D转换源程序如下: HEX_TO_DEC:
MOV R3,A ACC的值载入计数器R3中 CLR A ACC清0 COUNTUP: ADD A,#1 ACC加1
DA A 十进制调整
DJNZ R3,COUNTUP 如果R3不等于0,则ACC继续增加
相关推荐: