单片机的控制系统课程设计
4.2.4 中断服务程序
关T1中断 指向0809地址 启动下一通道 转换结束 Y N 数据存放 通道号加1 数据指针加1 N
Y 采样结束 中断 开T1 中断返回 图4-4 T1中断服务程序流程图
T1中断服务程序:
ORG 000H AJMP MAIN ORG 0003H AJMP SERVE MAIN: ORL P1,#0FFH
22
单片机的控制系统课程设计
SETB 1T0 ; 选择边沿触发方式 SETB EX0 ; 允许INTO中断 SETB A ; CPU开中断 AJMP $ ; 等待中断
T1: CLR ET1 MOV R1,#03H MOV RO,#20H
MOV DPTR,#ADDR0809 ; 0809地址 MOV R2,#00H
LOOP5: MOV A,R2 ; 通道号 MOVX @DPTR,A ; 启动A/D转换 JB A0809EOC,$ ; 转换是否结束 MOVX A,@DPTR ; 读转换结果 MOV @R0,A ; 数据保存 INC R0
INC R2 ; 下一通道 DJNZ R1,LOOP5 ; 三个通道是否完成
MOV TL1,#0E0H ; 重装定时常数 MOV TH1,#0B1H SETB ET1 RETI
在开门过程中首先进行门状态检测,根据所检测到的信号判断自动门上停机所处位置。根据检测结果确定门此刻应运行方式,如检测出门是半开状态,门直接转入加速开门的过程。如检测出门是全开状态,门转入延时开门过程。如检测出门是全关状态,那么在检测到有人出人时,门会缓慢打开,之后加速运行,接着减速运行,最后电机停止运转,门由于惯性缓慢关闭。自动门开门后暂停一段时间,然后关门。关门是开门的一个反过程,它经过慢速运行、加速运行、减速运行、惯性运动直至停止这几个过程。在自动门关闭过程中当系统接收到由红外线传感器电路发出的有人出入的信号时,门会重新打开。与开门情况不同的是当在关门过程中检测到故障信号时门会朝反方向运动,将门打开,这样可以排除因自动门遇到障碍物或人身体而产生故障信号使整个系统停止工作的可能。
为了运行过程可靠,在以不同速度运行过程中,对运行时间做了安全设置,当在开门状态下检测到运行时间超过安全时问或系统出现故障时,程序转人故
23
单片机的控制系统课程设计
障处理程序。
4.3 门行程检测及故障检测
门行程检测电路通过检测门行程开关的闭合情况来发送不同的信号,使电机改变转速,进而控制门运行的速度以提高运作效率,为了保护门不受到损害和保证门运行效率,在门行程检测电路中设置了四个行程开关。它们分别代表开门极限、行程极限1、行程极限2、关门极限。门在开启过程中,分别经过慢速、加速、减速和停止四个过程,门的关闭过程则与上述过程相反。门运行到极限位置时,限位开关动作,单片机根据接收到响应的信号,改变电机运行速度。 在故障检测电路中,配置了温度和速度传感器,用来监测电机的工作情况,从而实现电机过热保护和门运行障碍保护,同时还设置了电压监控电路,用于检测系统异常情况。
检测电路首先将检测到的信号转换成电压,然后经单片机内部的户以转换器变成数字信号,单片机定期读取数据,一旦发现数据异常,即马上采取相应的紧急措施,向系统发出故障信号,系统停止工作,向故障显示电路发出指令,发出报警信号并显示故障类型。
24
单片机的控制系统课程设计
第5章 系统仿真及调试
5.1 系统仿真调试
第一步调试是软件对所编程序的调试,看是否存在语法错误。一般来说这一步很容易实现。但是刚开始进行调试时一下子出来了89处错误。后来发现我将微机原理中的指令和单片机的指令搞混了。虽然有好多指令是通用的,但并不完全一致。如微机中的CMP比较指令在单片机中不可用。还有点格式上的错误就是在十六进制立即数的A、B、C、D、E、F前必须加上0,不然系统不认识。改过来之后顺利完成了这一步的调试。有些错误是因为敲程序时太快了,记忆符都写错,一改正错误提示减少了很多。下图5-1是调试前的截图,图5-2是调试后的截图。
第二步是将程序利用汇编软件Keil 对已经调试好的程序进行汇编在线调试,变成可执行的目标代码装入。Keil 中可以进行模拟仿真,对软件进行单步调试。这可以让用户清晰的看到程序执行到何处,哪里出现错误。这一步主要看程序是否有逻辑上的错误,语法没错远远不代表着软件调试成功。在必要的时候可以设置端口状态和断点,并查看标志位和各寄存器的状态。如有逻辑错误,改正之后,再重新回到开始调试,直至逻辑错误消除为止。硬件调试与软件调试是不能完全分开的,许多硬件的错误是通过对软件的调试而发现和纠正的。
在进行单步执行时,定时程序在计数器溢出后就自动跳出,但在实际调试过程中,它却一直在循环程序中,不往下执行。后来经过程序的改进,解决了此困难。我在软件调试的过程中发现我的程序比较复杂且逻辑不清晰,主要是由于采用了中断的方法,在中断服务程序中每个程序都需要考虑很多情况,处于半处限位开关的左侧怎么办,另一侧又应如何等。导致程序很长且逻辑混乱。后来我重新编写了一个程序并换了一种思路,跟踪门的来回这一动作路线来编程。这样可以清晰的知道门处于何位置,应调用何种速度。程序采用查询的方法来实现有无人的检测和到没到限位开关的判断。这样,不但思路清晰了许多,而且变短了不少。
25
单片机的控制系统课程设计
5.2 调试结果
图5-1 调试前
图5-2 调试后
26