4.4 交通灯控制线路如图 4-5示
5. 系统软件设计 5.1 控制器的软件设计 5.1.1 每秒钟的设定 延时方法可以有两种一中是利用MCS-51内部定时器产生溢出中断来确定1秒的时间,另一种是采用软件延时的方法。 计数器硬件延时 .a计数器初值计算 定时器工作时必须给计数器送计数器初值,这个值是送到TH和TL中的。他是以加法记数的,并能从全1到全0时自动产生溢出中断请求。因此,我们可以把计数器记满为零所需的计数值设定为C和计数初值设定为TC 可得到如下计算通式: TC=M-C 式中,M为计数器模值,该值和计数器工作方式有关。在方式0时M为213 ;在方式1时M的值为216;在方式2和3为28 .b 计算公式 T=(M-TC)T计数 或TC=M-C/T计数 T计数是单片机时钟周期TCLK的12倍;TC为定时初值 如单片机的主脉冲频率为TCLK12MHZ ,经过12分频 方式0 TMAX=213 *1微秒=8.912毫秒 方式1 TMAX=216 *1微秒=65.536毫秒 显然1秒钟已经超过了计数器的最大定时间,所以我们只有采用定时器和软件相结合的办法才能解决这个问题. 5.1.2 1秒的方法 我们采用在主程序中设定一个初值为20的软件计数器和使T0定时50毫秒.这样每当T0到50毫秒时CPU就响应它的溢出中断请求,进入他的中断服务子程序。在中断服务子程序中,CPU先使软件计数器减1,然后判断它是否为零。为零表示1秒已到可以返回到输出时间显示程序。 相应程序代码 (1)主程序 定时器需定时50毫秒,故T0工作于方式1。 初值: TC=M-T/ T计数 =216 -50ms/1us=15536=3CBOH ORG 1000H START: MOV TMOD, #01H ; 令T0为定时器方式1 MOV TH0, #3CH ;装入定时器初值 MOV TL0, #BOH ; MOV IE, #82H ;开T0中断 SEBT TRO ;启动T0计数器 MOV RO, #14H ;软件计数器赋初值 LOOP: SJMP $ ;等待中断 (2)中断服务子程序 ORG 00BH AJMP BRT0 ORG 00BH BRT0:DJNZ R0,NEXT AJMP TIME ; 跳转到时间及信号灯显示子程序 DJNZ:MOV R0,#14H ;恢复R0值 MOV TH0, #3CH ;重装入定时器初值 MOV TL0, #BOH ; MOV IE, #82H RET1 END 5.1.3 软件延时 MCS-51的工作频率为2-12MHZ,我们选用的8031单片机的工作频率为6MHZ。机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12*(1/6M)=2us。我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定1秒的时间。 具体的延时程序分析: DELAY:MOV R4,#08H 延时1秒子程序 DE2:LCALL DELAY1 DJNZ R4,DE2 RET DELAY1:MOV R6,#0 ;延时125ms 子程序 MOV R5,#0 DE1: DJNZ R5,$ DJNZ R6,DE1 RET MOV RN,#DATA ;字节数数为2 ,机器周期数为1 所以此指令的执行时间为2ms,而DELAY1 为一个双重循坏 循环次数为256*256=65536 所以延时时间=65536*2=131072us 约为125us 。DELAY R4设置的初值为8 主延时程序循环8次,所以125us*8= 1秒由于单片机的运行速度很快其他的指令执行时间可以忽略不计。 5.2 流程图如图5-1所示 图5-1 交通灯的软件设计流程图 5.3 程序源代码 ORG 0000H A_BIT EQU 20H ;用于存放南北十位数 B_BIT EQU 21H ;用于存放南北十位数 C_BIT EQU 22H ;用于存放东西十位数 D_BIT EQU 23H ;用于存放东西位数 TEMP1 EQU 24H ;用于存放第一二南北状态要显示的时间 TEMP2 EQU 25H ;用于存放第一二东西状态要显示的时间 TEMP3 EQU 26H ;用于存放第三第四南北状态要显示的时间 TEMP4 EQU 27H ;用于存放第三第四南北状态要显示的时间
LJMP MAIN ORG 0003H ;外部中断0入口 LJMP INT0 ;跳转到外部0中断 ORG 0013H ;外部中断1入口 LJMP INT1 ;跳转到外部1中断 INT0: MOV A,P1 ;外部0中断 PUSH ACC MOV A,P2 ;中断保护 PUSH ACC MOV P1,#0FFH ;清除先前状态 MOV P2,#0FFH CLR P1.0 CLR P1.4 ;南北通行,东西禁止通行 CLR P1.6 CLR P2.3 JNB P3.2 ,$ ;判断是否还在中断状态 POP ACC MOV P2,A ;返回中断前状态 POP ACC MOV P1,ACC RETI ;中断返回 INT1:MOV A,P1 ;外部1中断 PUSH ACC ;中断保护 MOV A,P2 PUSH ACC MOV P1,#0FFH ;清除先前状态 MOV P2,#0FFH CLR P1.2 CLR P2.1 CLR P1.3 ;东西通行,南北禁止通行 CLR P1.5 JNB P3.3 ,$ ;判断是否还在中断状态 POP ACC MOV P2,A ;返回中断前状态 POP ACC MOV P1,A RETI ;中断返回
首页 上一页 1 2 3 下一页 尾页 3/3/3