微机接口课设.docx
《微机接口课设.docx》由会员分享,可在线阅读,更多相关《微机接口课设.docx(20页珍藏版)》请在冰豆网上搜索。
微机接口课设
微机原理与接口技术
课程设计
2014~2015学年第一学期
课设题目:
电子钟实验
院(系)计算机科学与通信工程
专业计算机科学与技术
班级:
计算机1201
姓名:
学号:
指导教师:
韩晓茹
完成日期:
2015年1月14日
一、实验任务及要求
目的:
1、掌握综合使用基本输入输出设备、通用接口芯片、专用接口芯片的方法;
2、掌握实时处理程序的编制和调试方法。
要求
设计一个定时显示装置,用实验仪左侧的六个LED数码管显示时间,时间显示格式为24小时制。
分秒值为59分55秒时开始报时,每秒钟蜂鸣器鸣叫一声,到整点报时停止。
0
1
2
3
4
5
6
7
8
9
G
S
用小键盘控制时钟的启停和时钟的设置,键的定义参见上图
键值具体定义如下:
G键(启停键)——程序启动后,按下该键时钟启动;再次按下该键,暂停计时,显示当前时间。
S键(设置键)——按下S键后,为时钟设置时、分、秒初始值。
二、硬件连线
键盘的控制、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模块控制;
PC0直接与蜂鸣器相连,CS_4连接到实验仪中部的地址输出端CS_4
中断处理模块:
由8259控制
8259的片选CS-1连地址输出300H,INT1连总线输入INTR,8259模块的INT-A连总线的INTA,8259的SP/1连+5V,8259的IRQ0连接到8254的OUT0。
三、子模块功能与介绍
1.TSTART控制时间暂停和开始。
2.ADDONE加1秒子程序
3.SETTIME设置时间子程序
4.KEYCHECK判断有无键按下子程序
5.SHOW显示时间
6.DELAY延时子程序
四、运行调试
编译、链接、下载、全速后74模块LED灯显示23.59.52,自动开始计时,到23.59.55时蜂鸣器响0.5秒停0.5秒,直到00.00.00。
按G键LED停止(开始)计时,按S键LED全灭,进入时间设置,设置完时间后按G键开始。
五、程序流程图
主程序
初始化各阶段寄存器及相关变量
初始化8254、8259、8255芯片
设置中断向量、开放8259中断屏蔽
开放处理器中断
扫描键盘
G键S键其他键
Stop值取反
Stop置0FF
调用键盘扫描程序设置当前时分秒值
Stop置为0
中断服务程序
保护现场
判断时间是否不小于59分55秒
报时
扫描键盘
G键?
调用启停子程序
S键?
调用设置时间子程序
COUNT加1
COUNT=40?
修改时间,调用ADDONE子程序
COUNT清0
显示时间,调用显示时间子程序
结束中断(发EOI命令)
恢复现场
中断返回
六、实验源代码
.486p
DATASEGMENTAT0USE16
ORG1000H
HOURDW?
MINDW?
SECDW?
SLLDB?
COUNTDB?
DATAENDS
CODESEGMENTUSE16
ASSUMECS:
CODE,DS:
DATA
ORG1500H
BEG:
JMPSTART
TABDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,00H;0~F的共阴极七段译码表00H表示不显示任何东西
KEYCODDB0EEH,0DEH,0BEH,0EDH,0DDH,0BDH,0EBH,0DBH,0BBH,0E7H,0D7H,0B7H;行列编码值
KEYVALDB0,1,2,3,4,5,6,7,8,9,0AH,0BH;所有键的键面值
PORT1EQU340H;数码管段选端口
PORT2EQU360H;数码管位选端口,键盘矩阵的行列端口
START:
MOVEAX,60000000H
MOVCR0,EAX
MOVAX,DATA
MOVDS,AX
MOVHOUR,0203H;小时分钟以及秒的初始化
MOVMIN,0509H
MOVSEC,0502H
LEABX,TAB
MOVSLL,0;开始暂停标志位置0
MOVCOUNT,0;中断次数计数初始值为0
;8255初始化,用于产生报时的脉冲
MOVEAX,80808080H;控制字
MOVDX,20CH;后面的是4个8255的控制端口20C-20F(这个地址由实验台决定)
OUTDX,EAX;初始化8255,A、B、C口均为方式0输出
MOVDX,20BH
MOVAL,0FFH
OUTDX,AL
;8254初始化,用于产生周期为25ms的中断
MOVAL,00110110B;计数器0,先低后高,方式三,二进制
MOVDX,32cH;写往控制口
OUTDX,AL
MOVDX,320H;计数器0写初值:
47KHz*25ms
MOVAX,1175
OUTDX,AL
MOVAL,AH
OUTDX,AL
;8259初始化
CLI:
关中断
MOVDX,300H;ICW1
MOVAL,00010011B
OUTDX,AL
MOVDX,308H;ICW2
MOVAL,08H;IR0中断类型号为08H
OUTDX,AL
MOVAL,00000001B;ICW4
OUTDX,AL
MOVAL,0FEH;IR0开屏蔽
OUTDX,AL
XORAX,AX;装载中断向量
MOVES,AX
MOVDI,08H*4
MOVAX,OFFSETINTSR
MOVES:
[DI],AX
MOVAX,SEGINTSR
MOVES:
[DI+2],AX
STI;开中断
JMP$
INTSRPROC;中断服务程序
CMPMIN,0509H;比较当前时间是否在59分55秒~00分00秒之间
JLNEXT1
CMPSEC,0505H
JLNEXT1
MOVDX,20BH
MOVAL,00H;蜂鸣器低有效,报时
OUTDX,AL
JMPNEXT2
NEXT1:
CMPMIN,0
JNENEXT3
CMPSEC,0
JNENEXT3
MOVDX,20BH
MOVAL,00H;蜂鸣器低有效,报时
OUTDX,AL
JMPNEXT2
NEXT3:
MOVDX,20BH
MOVAL,0FFH
OUTDX,AL
NEXT2:
CMPCOUNT,20;用8255产生0.5ms的蜂鸣
JLENEXT4
MOVDX,20BH
MOVAL,0FFH
OUTDX,AL
NEXT4:
CMPSLL,0
JZLOB
CALLTSTART
LOB:
CALLKEYCHECK;检测有无键按下
CMPAL,0AH;启停键按下,调用启停程序
JNZNEXT5
CALLTSTART
JMPNEXT6
NEXT5:
CMPAL,0BH;设置键按下,调用设置时间程序
JNZNEXT6
CALLSETTIME
NEXT6:
INCCOUNT;当COUNT直为40时,加一秒,之后置0
CMPCOUNT,40;25ms*40=1s
JBNEXT7
CALLADDONE
MOVCOUNT,0
NEXT7:
CALLSHOW;显示时间
MOVAL,20H;发EOI命令,结束中断
MOVDX,300H
OUTDX,AL
IRET
INTSRENDP
TSTARTPROC;控制时间暂停和开始。
CMPSLL,0
JNZR1
DECSLL
R1:
CALLKEYCHECK
CMPAL,0AH
JZR2
CALLSHOW
JMPR1
R2:
INCSLL
RET
TSTARTENDP
ADDONEPROC;加1秒子程序
MOVAX,SEC;当前秒个位为9,加1后变0,十位加1
CMPAL,9
JEN1
INCAL
MOVSEC,AX
JMPN6
N1:
INCAH
MOVAL,0
CMPAH,6;十位加1后为6,则秒变为00,分钟个位加1
JEN2
MOVSEC,AX
JMPN6
N2:
MOVAX,0
MOVSEC,AX
MOVAX,MIN;当前分钟个位为9,加1后变0,十位加1
CMPAL,9
JEN3
INCAL
MOVMIN,AX
JMPN6
N3:
INCAH
MOVAL,0
CMPAH,6;十位加1后为6,则分钟变为00,小时个位加1
JEN4
MOVMIN,AX
JMPN6
N4:
MOVAX,0
MOVMIN,AX
MOVAX,HOUR
INCAL
CMPAX,0204H;小时加1后与24比,相等,则变为0
JEN5
MOVHOUR,AX
JMPN6
N5:
MOVAX,0
MOVHOUR,AX
N6:
RET
ADDONEENDP
SETTIMEPROC;设置时间子程序
LEABX,TAB
MOVHOUR,0
MOVMIN,0
MOVSEC,0
NOP
NOP
L1:
CALLKEYCHECK;调用KEYCHECK,无键按下时,AL中值为0CH
CALLDELAY
CMPAL,0CH
JNZL2
JMPL1
L2:
CMPAL,02H
JGL1;设置小时十位时,将其他各位数码管灭掉及对应的七段译码表0CH
MOVAH,AL
MOVBYTEPTR[HOUR+1],AL
MOVBYTEPTR[HOUR],0CH
MOVMIN,0C0CH
MOVSEC,0C0CH
L3:
CALLSHOW
CALLKEYCHECK;设置小时的个位
CALLDELAY
CMPAL,0CH
JZL3
MOVAH,BYTEPTR[HOUR+1]
L4:
CMP