1、微机原理与接口技术课程方案设计书报告电子钟微机原理与接口技术课程设计报告电子钟实验学院:计算机学院指导教师:马学文一实验任务及要求任务:1、掌握综合使用基本输入输出设备、通用接口芯片、专用接口芯片的方法;2、掌握实时处理程序的编制和调试方法。要求设计一个定时显示装置,用实验仪左侧的六个LED数码管显示时间,时间显示格式为24小时制。分秒值为59分55秒时开始报时,每秒钟蜂鸣器鸣叫一声,到整点报时停止。0123456789GS用小键盘控制时钟的启停和时钟的设置,键的定义参见上图键值具体定义如下:G键(启停键)程序启动后,按下该键时钟启动;再次按下该键,暂停计时,显示当前时间。S键(设置键)按下S
2、键后,为时钟设置时、分、秒初始值。二 硬件连线键盘的控制、LED显示模块:采用74系列模块控制键盘的行信号Q_0、Q_1、Q_2、Q_3分别与开放的输入信号Q0、Q1、Q2、Q3相连,键盘的列信号P_0、P_1、P_2和开放的输出信号P0、P1、P2相连。74芯片的片选信号CS1接地址译码信号340H, CS2接地址译码信号360H。时间的精确定时:用8254定时器0产生25ms的中断信号;8254的片选CS连地址输出端320H,A0,A1分别连地址总线A2,A3,GATE0连+5V,CLK0连74LS393分频输出的47K输出端,OUT0连接到8259的IRQ0整点报时控制:由8255模块控
3、制;PC0直接与蜂鸣器相连,CS_4连接到实验仪中部的地址输出端CS_4中断处理模块:由8259控制8259的片选CS-1连地址输出300H, INT1连总线输入INTR,8259模块的INT-A连总线的INTA,8259的SP/1连+5V, 8259的IRQ0连接到8254的 OUT0。三、程序流程图主程序初始化各阶段寄存器及相关变量初始化8254、8259、8255芯片设置中断向量、开放8259中断屏蔽开放处理器中断扫描键盘 G键 S键其他键Stop值取反Stop置0FF调用键盘扫描程序设置当前时分秒值Stop置为0中断服务程序保护现场判断时间是否不小于59分55秒报时扫描键盘G键?调用启
4、停子程序S键?调用设置时间子程序COUNT加1COUNT=40?修改时间,调用ADDONE子程序COUNT清0显示时间,调用显示时间子程序结束中断(发EOI命令)恢复现场中断返回四、实验源代码.486p DATA SEGMENT AT 0 USE16 ORG 1000H HOUR DW ? MIN DW ? SEC DW ? SLL DB ? COUNT DB ?DATA ENDSCODE SEGMENT USE16 ASSUME CS:CODE,DS:DATAORG 1500H BEG:JMP START TAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,
5、6FH,77H,7CH,00H 。0F的共阴极七段译码表 00H表示不显示任何东西KEYCOD DB 0EEH,0DEH,0BEH,0EDH,0DDH,0BDH,0EBH,0DBH,0BBH,0E7H,0D7H,0B7H 。行列编码值 KEYVAL DB 0,1,2,3,4,5,6,7,8,9,0AH,0BH 。所有键的键面值 PORT1 EQU 340H 。数码管段选端口 PORT2 EQU 360H 。数码管位选端口,键盘矩阵的行列端口START: MOV EAX,60000000H MOV CR0,EAX MOV AX,DATA MOV DS,AX MOV HOUR,0203H 。小时分
6、钟以及秒的初始化 MOV MIN,0509H MOV SEC,0502H LEA BX,TAB MOV SLL,0 。开始暂停标志位置0 MOV COUNT ,0 。中断次数计数初始值为0 。8255初始化,用于产生报时的脉冲 MOV EAX,80808080H。控制字 MOV DX,20CH 。后面的是4个8255的控制端口20C-20F (这个地址由实验台决定) OUT DX,EAX 。初始化8255,A、B、C口均为方式0输出 MOV DX,20BH MOV AL,0FFH OUT DX,AL 。8254初始化,用于产生周期为25ms的中断 MOV AL,00110110B 。计数器0,
7、先低后高,方式三,二进制 MOV DX,32cH 。写往控制口 OUT DX,AL MOV DX,320H 。计数器0写初值:47KHz*25ms MOV AX,1175 OUT DX,AL MOV AL,AH OUT DX,AL 。8259初始化 CLI :关中断 MOV DX,300H 。ICW1 MOV AL,00010011B OUT DX,AL MOV DX,308H 。ICW2 MOV AL,08H 。IR0中断类型号为08H OUT DX,AL MOV AL,00000001B 。ICW4 OUT DX,AL MOV AL,0FEH 。IR0开屏蔽 OUT DX,AL XOR A
8、X,AX 。装载中断向量 MOV ES,AX MOV DI,08H*4 MOV AX,OFFSET INTSR MOV ES:DI,AX MOV AX,SEG INTSR MOV ES:DI+2,AX STI 。开中断 JMP $ INTSR PROC 。中断服务程序 CMP MIN,0509H 。比较当前时间是否在59分55秒00分00秒之间 JL NEXT1 CMP SEC,0505H JL NEXT1 MOV DX,20BH MOV AL,00H 。蜂鸣器低有效,报时 OUT DX,AL JMP NEXT2NEXT1: CMP MIN,0 JNE NEXT3 CMP SEC,0 JNE
9、NEXT3 MOV DX,20BH MOV AL,00H 。蜂鸣器低有效,报时 OUT DX,AL JMP NEXT2NEXT3: MOV DX,20BH MOV AL,0FFH OUT DX,ALNEXT2: CMP COUNT,20 。用8255产生0.5ms的蜂鸣 JLE NEXT4 MOV DX,20BH MOV AL,0FFH OUT DX,ALNEXT4:CMP SLL,0 JZ LOB CALL TSTARTLOB: CALL KEYCHECK 。检测有无键按下 CMP AL,0AH 。启停键按下,调用启停程序 JNZ NEXT5 CALL TSTART JMP NEXT6NEX
10、T5: CMP AL,0BH 。设置键按下,调用设置时间程序 JNZ NEXT6 CALL SETTIMENEXT6: INC COUNT 。当COUNT直为40时,加一秒,之后置0 CMP COUNT,40 。25ms*40=1s JB NEXT7 CALL ADDONE MOV COUNT,0NEXT7: CALL SHOW 。显示时间 MOV AL,20H 。发EOI命令,结束中断 MOV DX,300H OUT DX,AL IRETINTSR ENDPTSTART PROC ;控制时间暂停和开始。 CMP SLL,0 JNZ R1 DEC SLLR1: CALL KEYCHECK CM
11、P AL,0AH JZ R2 CALL SHOW JMP R1R2 : INC SLL RETTSTART ENDPADDONE PROC 。加1秒子程序 MOV AX,SEC 。当前秒个位为9,加1后变0,十位加1 CMP AL,9 JE N1 INC AL MOV SEC,AX JMP N6N1: INC AH MOV AL,0 CMP AH,6 。十位加1后为6,则秒变为00,分钟个位加1 JE N2 MOV SEC,AX JMP N6N2: MOV AX,0 MOV SEC,AX MOV AX,MIN 。 当前分钟个位为9,加1后变0,十位加1 CMP AL,9 JE N3 INC A
12、L MOV MIN,AX JMP N6N3: INC AH MOV AL,0 CMP AH,6 。十位加1后为6,则分钟变为00,小时个位加1 JE N4 MOV MIN,AX JMP N6N4: MOV AX,0 MOV MIN,AX MOV AX,HOUR INC AL CMP AX,0204H 。小时加1后与24比,相等,则变为0 JE N5 MOV HOUR,AX JMP N6N5: MOV AX,0 MOV HOUR,AXN6: RETADDONE ENDPSETTIME PROC 。设置时间子程序 LEA BX,TAB MOV HOUR,0 MOV MIN,0 MOV SEC,0
13、NOP NOPL1: CALL KEYCHECK 。调用KEYCHECK,无键按下时,AL中值为0CH CALL DELAY CMP AL,0CH JNZ L2 JMP L1L2: CMP AL,02H JG L1 。设置小时十位时,将其他各位数码管灭掉及对应的七段译码表0CH MOV AH,AL MOV BYTE PTRHOUR+1,AL MOV BYTE PTRHOUR,0CH MOV MIN,0C0CH MOV SEC,0C0CHL3: CALL SHOW CALL KEYCHECK 。设置小时的个位 CALL DELAY CMP AL,0CH JZ L3 MOV AH,BYTE PTR
14、HOUR+1L4: CMP AX,0204H JGE L1 MOV HOUR,AXL5: CALL SHOW CALL KEYCHECK 。设置分钟的十位 CALL DELAY CMP AL,0CH JZ L5L6: CMP AL,06H JGE L1 MOV AH,AL MOV BYTE PTRMIN+1,ALL7: CALL SHOW CALL KEYCHECK 。设置分钟的个位 CALL DELAY CMP AL,0CH JZ L7 MOV AH,BYTE PTRMIN+1 L8: CMP AX,0509H JG L1 MOV MIN,AX L9: CALL SHOW CALL KEYCHECK 。设置秒的十位 CALL DELAY CMP AL,0CH JZ L9 L10: CMP
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1