电子表综合实验
姓 名:王 江
班级:F0 80 51 02
学号:5080519046
日 期:2 0 1 1. 1. 5
一、 实验目的
了解并掌握键盘扫描程序的原理及程序实现,掌握8253的记数功能,并结合8259采用中断方式实现时钟的LED显示功能,并且可以独立地与其他的程序模块进行拆分组合实现一定的功能;在学习过程中学会与老师交流,与同学合作,并且努力发挥创新思维,进一步掌握微机课程。
二、 实验要求
1.使用8253 提供时钟,设计1 个定时装置,显示分和秒。
2.在按下特定键时实现特定功能。
按下“A”键--清除计数,显示:00-00
按下“B”键--启动电子表,实时显示时钟
按下“C”键--停止键,显示按下时刻时钟不变
按下“D”键--终止键,熄灭数码管
按下“E”键--设置键,设置时钟初始值
三、 实验创新
我们结合学过的音频发声器,然后想到可以用来报时,于是我们将实现这个功能,也就是当时间增到一个的时间点,我们调用一个独立的发声程序,来实现报时功能。
四、 实验思路
主程序中对8253进行初始化,使用方式3,每10ms产生一个方波。同时对8259初始化采用IR0、IR1、IR2、IR3、 IR4,每隔10ms刷新一次进行时钟显示。
五、 实验流程图
六、 实验程序
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,SS:CODE
ORG
JMP START
PA0 EQU 0FFE0H ;8259端口地址
PA1 EQU 0FFE1H
PB0 EQU 0FFE4H ;82533端口0地址
PB1 EQU 0FFE5H
PB2 EQU 0FFE6H
PBC EQU 0FFE7H ;8253控制端口地址
ZXK EQU 0FFDCH ;字形口
ZWK EQU 0FFDDH ;字位口
IN_KEY EQU 0FFDEH
START: CLI
MOV AX,OFFSET INT8259
MOV BX,003CH
MOV [BX],AX
MOV BX,003EH
MOV AX,0000H
MOV [BX],AX
MOV AL,3EH ;8253端口0方式3
MOV DX,PBC
OUT DX,AL
MOV AL,7EH ;8253端口1方式3
OUT DX,AL
MOV AL,13H ;ICW1
MOV DX,PA0
OUT DX,AL
MOV AL,08H ;ICW2
MOV DX,PA1
OUT DX,AL
MOV AL,1FH ;ICW4
OUT DX,AL
MOV AL,0FCH ;OCW1只允许IR1,IR2
MOV BP,64H
MOV AL,00H ;端口0方波1800,
MOV DX,PB0 ;输入时钟614.4K,输出10ms
OUT DX,AL
MOV AL,18H
OUT DX,AL
STI
PROM: LEA SI,BUF
CALL KEY
MOV AL,[SI]
CMP AL,0AH
JNZ PROA
JMP PROM
CMP AL,0BH
JNZ PROB
JMP PROM
CMP AL,0CH
JNZ PROC
JMP PROM
CMP AL,0DH
JNZ PROD
JMP PROM
CMP AL,0EH
JNZ PROE
LEA SI,DISBUF+1
CMP [SI],00
JNZ PRON
INC SI
CMP [SI],06
JNZ PRON
INC SI
INC SI
CMP [SI],00
JNZ PRON
INC SI
CMP [SI],00
JNZ PRON
CALL ALM1
JMP PROM
PRON: LEA SI,DISBUF+1
CMP [SI],00
JNZ PROM
INC SI
CMP [SI],07
JNZ PROM
INC SI
INC SI
CMP [SI],00
JNZ PROM
INC SI
CMP [SI],00
JNZ PROM
CALL ALM1
JMP PROM
KEY: MOV BL,00
SCAN: MOV AL,00
MOV DX,ZWK
OUT DX,AL
INC DX
IN AL,DX
AND AL,03H
CMP AL,03H
JZ SCAN
MOV CX,14FFH
CYCLE: LOOP CYCLE ;去抖动
MOV CL,0FEH
MOV CH,8
FCOL: MOV AL,CL
MOV DX,ZWK ;
OUT DX,AL
ROL CL,1
INC DX ;行线地址
IN AL,DX
AND AL,03H
CMP AL,03H
JNZ FROW
INC BL
DEC CH
JNZ FCOL
JMP DONE
FROW: ROR AL,1
JNC PROCE ;若CF为0,表示这一列有键按下,转到处理程序
ADD BL,8 ;BL是键值
JMP FROW
PROCE: MOV AL,BL
MOV BX,OFFSET ALTER
XLAT
MOV [SI],AL
RET
PROA: CLI
LEA DI,RUNBUF
MOV [DI],0
LEA DI,DISBUF
MOV [DI],10H
MOV [DI+1],0
MOV [DI+2],0
MOV [DI+3],11H
MOV [DI+4],0
MOV [DI+5],0
STI
RET
PROB: CLI
LEA DI,RUNBUF
MOV [DI],01
STI
RET
PROC: CLI
LEA DI,RUNBUF
MOV [DI],0
STI
RET
PROD: CLI
LEA DI,RUNBUF
MOV [DI],0
LEA DI,DISBUF
MOV [DI],10H
MOV [DI+1],10H
MOV [DI+2],10H
MOV [DI+3],10H
MOV [DI+4],10H
MOV [DI+5],10H
STI
RET
PROE: CLI
LEA DI,RUNBUF
MOV [DI],0
LEA SI,DISBUF
INC SI
STI
CALL KEY
INC SI
CALL KEY
INC SI
INC SI
CALL KEY
INC SI
CALL KEY
RET
INT8259:PUSH SI
PUSH AX
DEC BP
JNZ DISPLAY
LEA DI,RUNBUF
CMP [DI],01
JNZ DISPLAY
LEA DI,DISBUF
MOV BP,64H
INC [DI+5]
CMP [DI+5],0AH
JNZ DISPLAY
MOV [DI+5],00
INC [DI+4]
CMP [DI+4],06
JNZ DISPLAY
MOV [DI+4],00
INC [DI+2]
CMP [DI+2],0AH
JNZ DISPLAY
MOV [DI+2],00
INC [DI+1]
CMP [DI+1],06
JNZ DISPLAY
MOV [DI+1],00
DISPLAY:CALL DIS
POP AX
POP SI
IRET
DIS: PUSH DX
PUSH CX
PUSH BX
LEA BX,DISBUF
MOV CL,20H
DIS1: MOV AL,[BX]
PUSH BX
MOV BX,OFFSET LED
XLAT
POP BX
MOV DX,ZXK ;字形显示
OUT DX,AL
MOV AL,CL
MOV DX,ZWK ;字位显示
OUT DX,AL
CMP CL,01H
JZ EXIT
INC BX
SHR CL,1
JMP DIS1
EXIT: POP BX
POP CX
POP DX
RET
ALM1: PUSH CX
CALL L1
CALL L2
CALL L3
CALL L3
CALL L4
CALL L5
CALL L4
CALL L3
CALL L2
CALL L2
CALL L3
CALL L2
CALL L3
CALL L4
CALL L5
CALL L5
CALL L1
CALL L2
CALL L3
CALL L3
CALL L4
CALL L5
CALL L4
CALL L3
CALL L2
CALL L2
CALL L3
CALL L4
CALL L3
CALL L2
CALL L1
CALL L1
POP CX
RET
L1: MOV DX,A0 ;C
MOV AX,0930H
OUT DX,AL
MOV AL,AH
OUT DX,AL
CALL DELAY
RET
L2: MOV DX,A0 ;D
OUT DX,AL
MOV AL,AH
CALL DELAY
RET
L3: MOV DX,A0 ;E
MOV AX,074AH
OUT DX,AL
MOV AL,AH
OUT DX,AL
CALL DELAY
RET
L4: MOV DX,A0 ;F
MOV AX,06DFH
OUT DX,AL
MOV AL,AH
OUT DX,AL
CALL DELAY
RET
L5: MOV DX,A0 ;G
MOV AX,061EH
OUT DX,AL
MOV AL,AH
OUT DX,AL
CALL DELAY
RET
L6: MOV DX,A0 ;A
MOV AX,0573H
OUT DX,AL
MOV AL,AH
OUT DX,AL
CALL DELAY
RET
L7: MOV DX,A0 ;B
MOV AX,04DAH
OUT DX,AL
MOV AL,AH
OUT DX,AL
CALL DELAY
RET
L8: MOV DX,A0 ;STOP
MOV AX,00001H
OUT DX,AL
CALL DELAY
RET
DELAY: PUSH CX
MOV CX,2
P: PUSH CX
MOV CX,8000H
LOOP $
POP CX
LOOP P
POP CX
RET
ALTER DB 7H,4H,8H,5H,9H,6H,0AH,0BH,1H,0H,2H,0FH,3H,0EH,0CH,0DH
LED DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C0H,0A1H,86H,8EH,0FFH,0BFH
BUF DB ?
RUNBUF DB ?
DISBUF DB ?,?,?,?,?,?
CODE ENDS
END START
七、 实验中出现的问题及解决方案
1、 刚开始我们准备选电子琴,因为比较简单,但是因为有很多人选了电子琴,于是我们改成了电子表,可是我们在显示过程中发现,要让那个时钟在走的时候去调用一个发生程序的话就会占用总线,就不能记数了,于是我们有选用了另外一个芯片来实现这个功能,那就是8255,于是问题就解决了。
2、 在让8253显示时钟的时候,刚开始我对这个怎么把时间加一秒一分没什么概念,而且当我们调用中断的时候也可能会导致8253没有计时和计数,但是经过我们讨论并且参考一些其他程序,我们解决了这个问题,采用中断时刻实现的。
3、 在具体的程序与硬件相连的时候,我们的显示程序都没有显示,查了很多时候都没有办法显示,我想我们的时钟显示程序出了问题,有些问题没有考虑到,还需要改进;虽然我们自己写的程序没有显示,可是,我们找了一个实现其他功能的程序来参考了一下,发现我们有很多地方都想错了,不过在以后的复习考试或者将来走上工作岗位后会进一步学习到相关知识。
八、 实验感想
1、 在这次实验中,觉得同学们在课堂上讲的时候都很有风采,很有气度,很有梦想,也想创新,可是一到了实验室里面,就都不行了,被很多实际的问题束缚住了,看出我们对多块芯片的组合和功能实现掌握不够,还有很多细节需要注意。联系我们的人生吧,大家在课堂上的时候就像我们现在一样,都很有梦想,很有胆量,想要过多么美好的人生,可是一到实验室就都泄了气,走出实验室的时候,好像都成了落水狗一样。但是,我很不希望我们的人生也是这样,最后被生活的刻刀雕刻变了摸样,谁都不认识了。
2、 在这次试验中,老师对我们抱了很大的希望,可是当我们在实验室里面都是失败的时候,老师也一点没有生气,让我们看到了作为一个老师的开阔的心胸,同时也让我们大家深深地觉得应该好好对待自己的梦想。同时,当我们大家都有同样的感觉的时候,我们发现,同学之间的距离近了很多;大学里面。同学之间交流太少了,有这样的机会,真的值得感谢。
九、 课程建议
1、 在上课的时候,我们都是快上课了才看到课件,于是也没怎么预习,希望能在课前看到PPT能预习一下就好了,因为很多时候有一些地方漏掉了没跟上,于是以后的也就跟不上了,但是看到PPT能预习一下,不懂得问一下同学就能跟上了。
2、 上课的时候发现我们都买了新版的教材,老师用的都是旧版教材,新版上很多都没有,希望以后老师给其他同学上课之前能通知一下买哪一种教材,对一个学期的开始是一个重要的开始。
3、 老师的课后作业都差不多没有,这样的话我们下来都打游戏了,没有兴趣去看书巩固,希望在以后的教学课程中,老师最好能找助教,然后布置一些重要的作业,便于同学们课下巩固,这是很重要的,很多同学就是因为没有作业,程序也是抄的,于是天天打游戏,最后嘛,也就不理想了。
4、 微机上机实验刚开始几次还好,老师会挑一些问题来问我们,逼着我们把程序看懂,等待着老师检查,可是后来老师不怎么问问题了,于是同学们也就COPY一下程序,运行一下也就结束了,不懂的同学也就不想弄懂了,会的同学也都不教了,希望以后的教学时,实验的时候最好有两个老师都在,不然也要有一个老师和一个助教,这样可以让跟多的同学可以得到有效的解决。
5、 还有就是因为后来都是只有一个老师检查实验了,同学们很多问题很没有时间问老师,结果一等就到了下课了,强烈要求老师能请助教老师也来帮助同学们解决问题,相信学校也会同意你们的申请的。
6、 最后,一个学期下来,真的很感谢两位老师的毫无保留的教导,同学们都能感受到两位老师的工作热情还有对同学们认真负责的态度,从老师们的身上,我们也学到了很多,衷心地祝愿两位老师在以后的工作中能越来越好,也能培养出更加优秀的人才,为交大乃至中国的下一代准备精兵利器。谢谢