内容发布更新时间 : 2024/12/27 6:52:06星期一 下面是文章的全部内容请认真阅读。
4.2 详细流程图
4.2.1主程序
主程序
开CPU中断
SETB EA
等待中断 送IN0地址到08FH并启动A/D 送端口地址 F8H到R0 令中断1为边缘触发 允许中断SETB EX1 IN0地址送R2 输入数据首地址 30H送R2 SETB IT1 图4.2.1 主程序
如图4.2.1—程序所示:首先对单片机写入外围端口地址(INT0和F8H),并开中断1,且定义中断为边缘触发方式。再将INT0的端口地址写入F8H(ADC0832的端口地址),
即可启动ADC0832。随后,单片机进入等待中断状态。 4.2.2 中断子程序
中断子程序如图4.2.2—中断所示:在中断到来后,程序转到中断子程序。在中断子程序中,实现单片机对ADC0832转换所得的8路并行数据的接收。并通过高度子程序实现对接收所得的并行数据的量化,其量化数为100。通过量化,将输入数据变为0~99种状态,为下一步处理作好准备。
图4.2.2 中断子程序 转到电压与水位高度 转换子程序 将A数据存入输入数据区R1 输入数值送A 输入地址0F8H送R0 送IN0地址到08FH并启动A/D 中断程序
4.2.3 水位高度子程序
如图4.2.3—水位高度子程序所示。通过乘法指令实现数据的转换:将输入的0~10转换为0~99,为查表指令的实现作好准备工作。
4.2.4查表子程序
如图4.2.4—查表子程序所示,本设计通过查表指令对0~99种状态进行处理。
图4.2.3 水位高度子程序 RET 水位高度数A据送以00H为首地址的数据区 子程序 输入数据作第一乘数 MOV A ,@R1 倍率送B=10作第二乘数 A*B=BA 在处理过程中,关键是rel的初始值必须为0(因AJMP为双字节指令,当rel为0、2、…198时,可进行查询),以便能够顺利的对表中数据进行查询,并通过查询结果作出相应的处理。在高度子程序中,将输入数据处理为以0开始的100种状态,正是出于这一考虑。
利用PC←A+DPTR指令查表 A*B=BA A←2*A A← 水位高度 0200H
4.2.5状态子程序
根据查表所得的结果,可以转到不同的子程序中,如图4.2.5—表00~99所示。通过这些控制子程序(ROUT00~ROUT 99),可以对输入数据做出不同处理,
转到ROUT00 转到ROUT01 转到ROUT99 图4.2.4 查表子程序
ROUT00 ROUT10 LED显示00 MOV P1 ,#00H LED显示10 MOV P1 ,#10H 转到状态ZT1 转到状态ZT1 RET RET ROUT11 ROUT20 LED显示11 MOV P1 ,#11H LED显示20 MOV P1 ,#20H 转到ZT2 (水位大于1米小于2m) 转到ZT2 (水位大于1米小于2m) RET RET