全球旧事资料 分类
以每1s中断一次利用TIME对不同的状态时间计数用来实现计数器0对20秒钟5秒钟的定时中断子程序分为数码显示刷新部分和红绿黄灯各种状态切换部分每进入中断即刷新LED显示交通灯按正常状态切换工作8253开始计数后每1s发出一个中断申请信号在中断子程序中先刷新数码管然后判断当前状态进入相应的处理程序进行处理主程序的流程图如图所示
f3主程序流程图
图4定时中断服务子程序定时中断子程序是本设计的重点负责完成数码管输出数据刷新和各个状态的处理切换中断子程序包括数码管输出数据刷新程序和各状态处理程序数码管输出数据刷新子程序是实现倒计时20s用LEDOUT表示输出的数据TIME用来软件计时1s就是计数10个100msLED输出是要将输出的数据转化为段选码根据当前的状态跳转到相应的处理程序在处理程序中完成定时和状态的切换状态012345的流程是一样的先点亮对应的交通灯再判断定时到了就可以切换了状态0用于实现东西红南北绿状态1用来实现东西黄南北绿状态2用于实现东西绿南北黄状态3用于实现东西绿南北红状态4用于实现东西黄南北红状态5用于实现东西红南北黄间隔点亮和熄灭就可以了状态0处理程序的流程图如图所示
f图5状态0处理程序6源程序清单⒈本次设计中选用8235的计数器0定时向实验系统主片8259A的IRQ7请求中断设置8253的计数器0每1s请求一次中断工作于模式38255的A端口控制交通灯数码管驱动程序采用指导老师提供的程序ADDAX2000H初始化程序DATASEGMENTMOVSI0FH4MOVSIAXLEDDB3FH06H5BH4FH66H6DH7DH07H存MOVAX0放七段代码表DB7FH6FHMOVSI2AXTIMEDB19CLID2EQU200H8255A端口AMOVBX0109HBH表示要显示数的十位BLEAEQU200H8255端口地址表示要显示数的个位EEEQU203HMOVCX0CONTROLEQU20BH8253端口地址MOVDX0000HCOUNT0EQU208HMOVAL80H初始化8255COUNT1EQU209HOUTEEALCOUNT2EQU20AHMOVAL00对PC0口置0DATAENDSOUTEEALCODESEGMENTMOVAL02对PC1口置0ASSUMECSCODEDSDATAOUTEEALCODESEGMENTMOVDX218H8259初始化ASSUMECSCODEMOVAL00010010bSTARTOUTDXALMOVAX0MOVAL0FHMOVDSAXMOVDX219HOUTDXALMOVAXOFFSETIRQ7填中断矢量表
fMOVDX200H交通灯初始状态为全黄MOVAL0BBHOUTDXALMOVAL00110110b初始化8253OUTCONTROLALNEXTMOVAX3000定时1秒MOVDXCOUNT0OUTDXALMOVALAHOUTCOUNT0ALJMPNEXTMOVAXDATA置DS用数据段首址MOVDSAX中断服务程序A1STIHLTJMPA1IRQ7数码管显示程序CMPCX99JZDISPINCCXIRETDISPMOVCX0PUSHAXPUSHBXPUSHSIMOVDXBXMOVBXOFFSETLEDADDBX2000HMOVAH0r
好听全球资料 返回顶部