1、通过8254计数,每1ms刷新一次,CX计数不为零,计数值减1,刷新1000次,持续一秒钟(其中,输入始终脉冲为1KHZ)。使用8254实现了PA7PA0控制二极管的亮灭,PB7PA0控制数码管的显示。通过设置控制字,使8255的C口高四位输出,低四位输入,PC4和PC5对数码管进行位控,让两位十进制数同时显示。(2)红、黄、绿灯的表示由于仪器上面只有16个发光二级管,且从高到低依次为:D15D14D13D12D11D10D9D8 D7D6D5D4D3D2D1D0。在设计的过程中我们采用了六个灯,但是我们连接了8根线,所以我们做了如下的规定:R表示红灯,G表示绿灯,Y表示黄灯,E表示方向东,W
2、表示方向西,S表示方向南,N表示方向北。所以在设计中采用如下的规定:A7A5分别代表东西方向红黄绿灯,A4A2分别代表南北方向红黄绿灯,A1A0无意义。具体连线及表示如下图所示。(3)硬件设计框图及连线/接图:说明:8255 连接说明如下8255数据端口连接系统总线数据段D0D78255 RD 连接系统IOR8255 WD连接系统IOW8255 CS 连接IOY38255 寄存器地址输入信号A0A1连接系统总线A0A18255 PA端连接外设二极管(PA端A7A2对应二极管D7D2),作为输出A7A5分别代表东西方向;红黄绿灯,A4A2分别代表南北方向红黄绿灯,A1A0无意义。且全部为低有效)
3、8255 PB端连接外设LED(PB端B0B7对应LEDabcdefgh),作为输出8255 PC端,低位输入、高位输出C0连接8254OUT端作为输入;C4C5连接X1X2作为输出,控制LED显示十位个位8254 连接说明如下8254数据端口连接系统总线数据段D0D78254 RD 连接系统IOR8254 WD连接系统IOW8254 CS 连接IOY28254寄存器地址输入信号A0A1连接系统总线A0A18254 CLK0 连接1KHZ8254 GATE0 连接 +5V8254 OUT0 连接 8255C0端(4)流程图:三、实验日志:星期一:收集相关资料;熟悉8254、8255芯片的工作原
4、理;初步设计。星期二:初步设计;并绘图编程。星期三:设计并绘图编程;接线运行程序。星期四:修改程序,使其能正常运行。星期五:老师验收,并向老师解释程序。四、实验结果与分析在实验室的实验台上可以看到如下的结果:1、 即东西方向的绿灯和南北方向的红灯同时点亮20秒钟;2、 20秒钟后,东西方向的黄灯闪烁5秒钟,。此时南北方向仍维持 红灯点亮。3、 东西方向的黄灯闪烁5秒钟后,转为东西方向的红灯和南北方向的绿灯同时点亮20秒钟;4、 20秒钟后,转为南北方向的黄灯闪烁5秒钟,此时东西方向仍维持红灯点亮。5、 南北方向的黄灯闪烁5秒钟后,东西方向的绿灯和南北方向的红灯同时点亮20秒钟。如此循环重复。
5、在设计过程中,由于延时是通过编写程序实现的,而程序里面是通过执行指令的次数以达到延时,切执行一条指令的时间有很难计算,所以本次设计只是大概地估计了一下延时的时间,这是一点不足之处,若采用硬件延时(比如用8253定时器)的话,也许会使延时的时间相对的准确些。五、设计体会及收获: (1)的心得: 通过一星期微机接口的课程设计,我们对微机接口芯片有了更进一步的了解。这次实验通过使用了8254计数器、8255可编程并行接口实现了交通灯的控制。由于这学期微机接口这门课学的不是扎实,所以在调试程序中出现了很多问题。所以刚开始在做这个设计时,我们首先将以前做过的8254计数器、8255可编程的实验重新做了一
6、遍,对这些芯片有了更进一步的理解。然后通过网上查阅了很多资料和老师的指导,总算了解了8254计数器、8255可编程等芯片的操作方式,对整个课程设计也有了总体的轮廓,通过学过的知识以及做过的实验,最后有了圆满的结果。通过本次课程设计我们学到了很多新的东西,极大地拓宽了知识面,锻炼了能力,综合素质得到较大提高,感到收获不小。也发现了大量问题,有些在设计过程中已经解决,有些还要待今后慢慢学习,只要学习就会有更多的问题,有更多的难点,但也会有更多的收获。(2)的心得:通过这次微机原理的实习,我学到了很多平时在课堂上不能学到的东西。对于这次选择的交通灯的设计,我最开始抱着的是不能实现的态度,但是在我们组
7、的共同努力下,经过了三天,我们终于有了一定的思路。虽然在中途我们遇到了机器有问题的难题,但是我们还是成功的解决了种种困难,最终取得了成功。通过这次课程设计,我加深了对8255,8254芯片的工作方式的认识和使用方法,也对微机原理的理解更加的深刻了,对于实际动手能力的锻炼我也得到了很到的提高。(3)的心得:通过此次课程设计,结合所学的微机原理与接口技术这门课程的知识,对其应用之一交通灯控制器进行设计与实现。总体感觉收获比较多,因为可以将书本上的知识应用到实践当中。刚开始的时候,翻阅了一些资料,还是没有什么头绪,后来在老师和同学的帮助下,终于找到了入口点,接下来的事情就相对的容易一些了。首先,把握
8、整个的设计的大概的流程,然后再对每一个分快进行设计,最后进行调试。在设计的过程中,很重要的一点是要熟悉可编程并行通信接口芯片8255A的初始化及其端口的使用。此次课程设计感觉收获很多,比如,翻阅资料提高了自学能力,和同学一起讨论汲取别人的长处。希望老师能够引导学生应该如何去把握、分析课程设计的主题,找出突破点,让学生积极主动进行课程设计,以使学生更好地提高自学的能力。(4)的心得:通过此次实验,使我全面的解了微机接口的运行方式,以及汇编语言与接口之间的关系.同时加深了我对8255,8254芯片的工作方式的认识和使用方法。本次设计中我们克服了很多难题,在同伴的努力下我们还是按时完成了任务。而且最
9、难的就是硬件的调试,我们最开始的时候由于机器有问题,我们怎么也不能成功,但是我们换了一台机器后我们终于成功的看到了试验现象。 通过本次课设学到很多课堂上学不到的调试知识,对Debug有了一定的了解。通过实践也加深了对理论知识的理解。很感谢学校给我们提供了这么好的学习机会。六、源代码及注释:MY8255_A EQU 9C60H MY8255_B EQU 9C61HMY8255_C EQU 9C62HMY8255_MODE EQU 9C63HMY8254_COUNT0 EQU 9C40H MY8254_MODE EQU 9C43H DATA SEGMENTLED DB 3FH,06H,5BH,4F
10、H,66H,6DH,7DH,07H,7FH,6FH ;数码管七段代码表DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,MY8255_MODE ;8255初始化,连接端口IOY3MOV AL,10000001B ;A口输出接二极管,B口输出接数码管,C0输入,C4C5输出OUT DX,AL MOV CX,30 ;计时30秒A1: MOV DX,MY8255_A ;8255的A口接LED MOV AL,01111011B ;东西红,南北绿 OUT DX,AL ;将灯状态传送给LED显示 CALL
11、 INITIAL_8254LOOP2:MOV AH,0BH INT 21H CMP AL,0 JNZ EXIT0 JMP L1EXIT0:MOV AH,4CH INT 21H L1: CALL DISP L2: MOV DX,MY8255_C IN AL,DX TEST AL,1H JE LOOP2 DEC CX CMP CX,3 ;计时3秒 JA A1 JMP A2 A2: MOV DX,MY8255_A MOV AL,01110111B ;东西红,南北黄 OUT DX,ALLOOP4: JNZ EXIT1 JMP L3 EXIT1: L3: L4: IN AL,DX JE LOOP4 DE
12、C CX CMP CX,0 JE P JMP A2 P: MOV CX,30 ; JMP A3 A3:东西绿,南北红 MOV AL,11001111BLOOP5: JNZ EXIT2 JMP L6EXIT2: L6: L7: JE LOOP5 DEC CX ; CMP CX,3 JA A3 JMP A4 A4:MOV DX,MY8255_A ;东西黄,南北红 MOV AL,10101111B OUT DX,AL LOOP6: JNZ EXIT3 JMP L8EXIT3: L8: L9: JE LOOP6 JE PP JMP A4 PP: JNZ EXIT JMP START EXIT:INIT
13、IAL_8254 PROC ;8254初始化,1sPUSH AXPUSH DXMOV DX,MY8254_MODE ;初始化,计数器0工作在方式0,先写低8位,再写高8位,BCD方式计数MOV AL,00110001BOUT DX,ALMOV DX,MY8254_COUNT0 MOV AL,00H ;写低8位MOV AL,10H ;写高8位POP DXPOP AXRETINITIAL_8254 ENDP DISP PROC ;数码管显示PUSH BXPUSH CXDEC CXMOV DX,MY8255_C ;将CL中二进制数转化为十进制数MOV AL,11101111BMOV AX,CX MOV CL,0AH ;将十位数放在高位数码管,将个位数放在低位数码管DIV CL MOV BX,OFFSET LEDXLAT ;显示十位码MOV DX,MY8255_B ;将AL中8位码输出到B口,给LED显示器MOV CX,0FFFFH ;延时DELAY:NOPLOOP DELAY MOV DX,MY8255_CMOV AL,11011111BPOP AX MOV AL,AH 显示个位码POP CXPOP BXDISP ENDP CODE ENDS END START