1、 8086 微机课程设计专业:电子信息工程班级:1130403姓名:奚阳学号:2011300403022014 年 1 月 10 日 一、实验目的 掌握通过 8255A 并行口传输数据的方法,以控制发光二极管的亮与灭。二、实验内容 用 8255 做输出口,控制十二个发光管亮灭,模拟交通灯管理。三、实验接线图 图 6-4四、编程指南 通过 8255A 控制发光二极管,PB4-PB7 对应黄灯,PC0-PC3 对应红灯,PC4-PC7 对应绿灯, 以模拟交通路灯的管理。 要完成本实验,必须先了解交通路灯的亮灭规律,设有一个十字路口 l、3 为南北方向,2、4 为东西方向,初始状态为四个路口的红灯全
2、亮,之后,1、3 路口的绿灯亮,2、4 路口的红灯亮,1、3 路口方向通车。延时一段时间后,l、3 路口的绿灯熄灭,而 l、3 路口的黄灯开始闪烁,闪烁若干次以后,l、3 路口红灯亮,而同时 2、4 路口的绿灯亮,2、4 路口方向通车,延时一段时间后,2、4 路口的绿灯熄灭,而黄灯开始闪烁,闪烁若干次以后,再切换到 l、3 路口方向,之后,重复上述过程。 程序中设定好 8255A 的工作模式及三个端口均工作在方式 0,并处于输出状态。 各发光二极管共阳极,使其点亮应使 8255A 相应端口的位清 0。五、实验程序框图 六、实验步骤 在系统显示监控提示符“P.”时,且在 PA,PB,PC 不连线
3、时按 SCAL 键。 按图 6-4 连好实验线路8255A:PC0L3,PC1L6,PC2L9,PC3L12,PC4L2,PC5L5,PC6L8,PC7L11;PB4L1,PB5L4,PB6L7,PB7L10 在“P.”态时,输入 11E0 后,按 EXEC 键;系统显示执行符“”,同时 Ll-Ll5 发光二极管模拟交通灯显示。七 实验程序; 实验任务 : 按键和发光二极管的应用; 实验说明 : 一个总开关和三个开关控; 制八个发光二极管的状态; 开关定义 : PB0 总开关,PB1 控制轮流点; 亮,PB2 控制隔灯点亮,PB3; 控制霹雳灯; 实验步骤 : 流程图见附页* CODE SEG
4、MENTASSUME CS:CODEPORT_M EQU 0FF2BH PORT_A EQU 0FF28H PORT_B EQU 0FF29H ;端口地址ORG 11B0HSTART: MOV DX,PORT_M MOV AL,82HOUT DX,ALD0: MOV DX, PORT_BIN AL, DXMOV BL, AL ;把 AL 的值暂存在 BL里MOV DX, PORT_AMOV AL, 0FFHOUT DX, ALMOV AL, BL AND AL,01HJZ D0 MOV AL, BL ;把按键值装入 ALSUB AL, 03HJZ PROGRAM1 ;按键值减 3 等于零就转移
5、 PROGRAM1MOV AL, BL ;把按键值装入AL SUB AL, 05HJZ PROGRAM2 ;按键值减 5 等于零就转移 PROGRAM2MOV AL, BL ;把按键值装入 ALSUB AL, 09HJZ PROGRAM3 ;按键值减 9 等于零就转移 PROGRAM3JMP START*连环跳*PROGRAM1: JMP PROGRAM10PROGRAM2: JMP PROGRAM20PROGRAM3: JMP PROGRAM30*1 实现轮流点亮* PROGRAM10: MOV DX,PORT_A MOV AL,0FEHMOV CX, 07 ;实现跳转轮流点亮 8 次P1:
6、 OUT DX,ALROL AL,1 ;循环左移一位MOV BX,0FFFFH ;延时WAIT1: SUB BX,01HJNZ WAIT1MOV AH, ALCALL SUBROUTINE1 ;子程序查总按键是否断开MOV AL,AHMOV DX,PORT_A ;子程序返回时DX 的内容是 PB 口要从新装 PA 口SUB CX,01 ;实现跳转轮流点亮 8次JNZ P1;*交换闪烁处理*MOV CX,03 P10: MOV AL,0FH OUT DX,ALMOV BX,0FFFFHWAIT10: SUB BX, 01HJNZ WAIT10CALL SUBROUTINE1 ;子程序查总按键是否
7、断开MOV DX,PORT_A MOV AL, 0F0HOUT DX, ALMOV BX, 0FFFFH WAIT100: SUB BX, 01H JNZ WAIT100 CALL SUBROUTINE1 ;子程序查总按键是否断开MOV DX,PORT_A LOOP P10 ;交换闪烁三次JMP START;*2 实现隔一个点亮*PROGRAM20: MOV DX,PORT_AMOV AL,0FEHMOV CH,03P2: OUT DX,ALMOV CL,2 ;DST1 要用 CL装 ROL AL,CL ;隔一个点亮MOV BX,0FFFFH ;延时WAIT2: SUB BX,01HJNZ W
8、AIT2MOV AH, ALCALL SUBROUTINE2 ;子程序查总按键是否断开MOV AL,AHMOV DX,PORT_A SUB CH, 01JNZ P2 ;*交换闪烁处理*MOV CX,03H P20: MOV AL,0FH OUT DX,ALMOV BX,0FFFFHWAIT20: SUB BX, 01HJNZ WAIT20CALL SUBROUTINE2 ;子程序查总按键是否断开MOV DX,PORT_A MOV AL, 0F0HOUT DX, ALMOV BX, 0FFFFH WAIT200: SUB BX, 01H JNZ WAIT200 CALL SUBROUTINE2
9、;子程序查总按键是否断开MOV DX,PORT_A LOOP P20 ;交换闪烁三次JMP START *实现霹雳灯点亮*PROGRAM30:MOV DX,PORT_A MOV AL,0FEHMOV CX,7P3: OUT DX,AL ROL AL,1MOV BX, 0FFFFHWAIT3: SUB BX,01HJNZ WAIT3 MOV AH, ALCALL SUBROUTINE3 ;子程序查总按键是否断开 MOV AL,AHMOV DX,PORT_A LOOP P3MOV CX,8P4: OUT DX,ALROR AL,1MOV BX,0FFFFHWAIT4: SUB BX,01HJNZ
10、WAIT4MOV AH,ALCALL SUBROUTINE3 ;子程序查总按键是否断开MOV AL,AHMOV DX,PORT_A SUB CX,01HJNZ P4 ;*交换闪烁处理*MOV CX, 03HP30: MOV AL,0FH OUT DX,ALMOV BX,0FFFFHWAIT30: SUB BX,01HJNZ WAIT30 CALL SUBROUTINE3 ;子程序查总按键是否断开 MOV DX,PORT_A MOV AL, 0F0HOUT DX, ALMOV BX, 0FFFFHWAIT300: SUB BX, 01HJNZ WAIT300CALL SUBROUTINE3 ;子
11、程序查总按键是否断开MOV DX,PORT_A LOOP P30 ;交换闪烁三次JMP START*查询总开关*SUBROUTINE1: MOV DX, PORT_BIN AL, DXMOV BL, ALAND AL, 01HSUB AL, 01HJNZ SUBROUTINE1 ;等待总开关按上MOV AL, BL SUB AL, 03HJNZ SUBROUTINE10 RET SUBROUTINE2: MOV DX, PORT_BIN AL, DXMOV BL, ALAND AL,01HSUB AL, 01HJNZ SUBROUTINE2 ;等待总开关按上MOV AL, BL SUB AL,
12、 05HJNZ SUBROUTINE20 RETSUBROUTINE3: MOV DX, PORT_BIN AL, DXMOV BL, ALAND AL,01HSUB AL, 01HJNZ SUBROUTINE3 ;等待总开关按上MOV AL, BL SUB AL, 09HJNZ SUBROUTINE30 RET*连环跳*PROGRAM100: JMP PROGRAM10PROGRAM200: JMP PROGRAM20PROGRAM300: JMP PROGRAM30;*查询其他按键按下* SUBROUTINE10: CALL PUTOFF MOV AL, BL SUB AL, 05HJZ
13、PROGRAM200MOV AL, BL SUB AL, 09HJZ PROGRAM300JMP SUBROUTINE1SUBROUTINE20: CALL PUTOFFMOV AL,BLSUB AL,03HJZ PROGRAM100MOV AL,BLSUB AL,09HJZ PROGRAM300 JMP SUBROUTINE2SUBROUTINE30: CALL PUTOFFMOV AL,BLSUB AL,03HJZ PROGRAM100MOV AL,BLSUB AL,05HJZ PROGRAM200 JMP SUBROUTINE3*熄灭处理* PUTOFF: MOV DX, PORT_BI
14、N AL, DXMOV BL, ALSUB AL, 00HJZ OFFMOV AL, BLSUB AL, 07HJZ OFFMOV AL, BL SUB AL, 0BHJZ OFFMOV AL, BL SUB AL, 0DHJZ OFFMOV AL, BL SUB AL, 0FHJZ OFFRETOFF: MOV DX, PORT_AMOV AL, 0FFHOUT DX, ALJMP PUTOFF CODE ENDSEND START 八 实验心得通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。 这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在王老师的辛勤指导下,终于游逆而解。同时,在老师的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!