微机原理
课程设计报告
课 题: 定时器 姓 名: 王 刚 学 号: 060303236 班 级: 06计本(2)班 指导教师: 巫宗宾
二OO九年六月
电 子 钟
一、设计要求
1、用6位数码管显示时、分、秒,每一秒钟变化一次。并且能用小键盘控制走时、显示和 初始值设置 2、键盘设计要求:’C’ 键,清除计数器;‘G‘键,启动计数器;’D’ 键,暂停计数显示;’P’ 键,设置初值,不符合格式则显示出错标志’E’;’E’键,退出程序
二、开发环境及设备 1、设计环境
PC机一台、windows 98系统、实验箱、导线若干。 2、设计所用设备
8253定时器:用于产生秒脉冲,其输出信号可作为中断请示信号送IRQ2。 8255并口:用做接口芯片,和小键盘相连。 8259中断控制器:用于产生中断。
LED:六个LED用于显示时:分:秒值。 小键盘:用于控制设置。
三、设计思想与原理 1、设计原理
利用实验台上提供的定时器8253和扩展板上提供的8259以及键盘和数码显示电路,设计一个电子时钟,由8253中断定时,小键盘控制电子时钟的启停及初始值的预置。电子时钟的显示格式HH:MM:SS由左到右分别为时、分、秒,最大记时59:59:59超过这个时间时分秒位都清零从00:00:00重新开始。
基本工作原理:每百分之一秒对百分之一秒寄存器的内容加一,并依次对秒、分、小时寄存器的内容加一,六个数码管动态显示时、分、秒的当前值。
利用实验台上提供的定时器8253和扩展板上提供的8259以及键盘和数码显示电路,设计一个电子时钟,由8253中断定时,小键盘控制电子时钟的启停及初始值的预置。
电子时钟的显示格式HH:MM:SS由左到右分别为时、分、秒,最大记时59:59:59超过这个时间时分秒位都清零从00:00:00重新开始。 2、设计环境
PC机一台、windows 98系统、实验箱,导线若干。 3、设计所用设备
8253定时器:用于产生秒脉冲,其输出信号可作为中断请示信号送IRQ2。 8255并口:用做接口芯片,和小键盘相连。 8259中断控制器:用于产生中断。
LED:六个LED用于显示时:分:秒值。 小键盘:用于控制设置。
四、程序流程图 主程序流程图:
开始 8253A作为中断源产生20MS脉冲 设置堆栈 显示提示信息 用INT21H35H号功能保存系统中8259A原中断向量 用INT21H35H号功能设置0A中断新的中断向量,指向年,月,日加1的中断处理程序 置8259A的IMR第2位为0,允许IRQ2中断 调用键扫描子程序(KEY),键号的ASCII码在[CHAR1]单元中 是C键码? N 是G键码? N 是D键码? N 是P键码? N N 是E键码? Y Y 调用C键处理子程序 Y 调用G键处理子程序 Y 调用D键处理子程序 Y 调用P键处理子程序 用INT21H35H号功能恢复原中断向量 开中断 返回DOS
键盘扫描程序流程图:(KEY)
开始 置8255A控制字,A口为输出,B口为输入 A口全输出低电平,从B口读入数据 KKKKK Y 列线全为高电平吗 N 保存列值,延时取抖动 置8255控制字,A口为输入,B口为输出 往B口输出保存的列值 从A口读入行值 和键表比较 N 是否找到匹配键 Y 显示输入的字符 置8255A控制字,A口为输出,B口为输入 A口全输出低电平,从B口读入 N 键释放了吗? Y 返回
中断处理程序流程图:
开始 开中断 Y 秒个位加一 秒个位小于9 N 秒个位清零,秒十位加一 秒十位小于6 N 秒十位清零,分个位加一 Y Y 分个位小于A N 分个位清零,分十位加一 Y 分十位小于6 N 分十位清零,时个位加一 时十位小于2 N Y 时个位小于9 N 时个位清零,时十位加一 时个位小于4 N 时个位清零,时十位清零 Y 发中断结束命令,中断返回
五、程序代码 INTA00 EQU 20H INTA01 EQU 21H PORTSEG EQU 211H PORTBIT EQU 210H TIM-CTL EQU 203H TIMER0 EQU 200H TIMER1 EQU 201H MODE03 EQU 36H MODE12 EQU 54H PA55 EQU 218H PB55 EQU 219H P55CTL EQU 21BH
STACK SEGMENT STACK STA DW 512 DUP(?) TOP EQU LENGTH STA STACK ENDS DATA SEGMENT Hou1 DB 0 Hou2 DB 0 Min1 DB 0 Min2 DB 0 SEC1 DB 0 SEC2 DB 0 COUNT DB 0 CHAR1 DB ? INTMAST DB ? CSREG DW ? IPREG DW ? LED DB
3FH,06H,5BH,4FH,66H,7DH,07H,7FH,6FH,40H,79H,00H TABLE DW
0101H,0201H,0401H,0801H,1001H,2001H,4001H,8001H DW
0102H,0202H,0402H,0802H,1002H,2002H,4002H,8002H DW
0104H,0204H,0404H,0804H,1004H,2004H,4004H,8004H
CHAR DB 'CDEFBA9845673210 RPMG' MAXTIME DB
00H,1FH,1CH,1FH,1EH,1FH,1EH,1FH,1FH,1
EH,1FH,1EH,1FH
MEX DB 'IN SMALL KEYRORD',0AH,0DH
DB 'C-DISPLAY 00,00,00;G-GO AHEAD',0AH,0DH
DB 'D-STOP TO
DISPLAY;E-EXIT TO DOS',0AH,0DH DB 'P-POSITION THE BENINNING TIME',0AH,ODH,$ DATA ENDS
CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATA,SS:STACK START CLI MOV AX,DATA MOV DS,AX
MOV DX,TIM-CTL MOV AX,MODE03 OUT DX,AL MOV DX,TIMER0 MOV AL,00H OUT DX,AL MOV AL,02H OUT DX,AL
MOV DX,TIM-CTL MOV AL,MODE12 OUT DX,AL MOV DX,TIMER1 MOV AL,0AH OUT DX,AL MOV AX,STACK MOV SS,AX MOV SP,TOP
MOV DX,OFFSET MES MOV AH,09H INT 21H
MOV AX,350AH INT 21H MOV AX,ES MOV CSREG,AX MOV IPREG,BX PUSH DS
MOV AX,CS MOV DS,AX
MOV DX,OFFSET INT-PROC MOV AX,250AH INT 21H POP DS
MOV DX,INTA01 IN AL,DX
MOV INTMASK,AL AND AL,OFBH OUT DX,AL
LKEY: CALL KEY
MOV DL,[CHAR1] CMP DL,'C' JNZ LGY CALL CPRO JMP LKEY LGY:
CMP DL,'G' JNZ LDY CALL GPRO JMP LKEY LDY:
CMP DL,'D' JNZ LPY CALL DPRO JMP LKEY LPY:
CMP DL,'P' JNZ LEY CALL PPRO JMP LKEY LEY:
CMP DL,'E' JNZ LKEY CLI
MOV DX,INTA01 MOV AL,INTMAST OUT DX,AL MOV AX,250AH MOV DX,IPREG MOV BX,,CSREG MOV DS,BX INT 21H STI
MOV AX,4C00H INT 21H MAIN ENDP PUSH CX PUSH DX PUSH DI
MOV AX,DATA MOV DS,AX
MOV DI,OFFSRT hou1 MOV CL,01
DIS1:
MOV BX,BX,OFFSET,LED XLAT
MOV DX,PORTSEG CMP CL,08H JZ ABC CMP CL,02 JNZ PP
ABC:
OR AL,80H PP:
OUT DX,AL MOV AL,CL
MOV DX,PORTBIT OUT DX,AL PUSH CX
MOV CX,350H
DELAY1:
LOOP DELAY1 POP CX
INT-PROC PUSH AX MOV AL,[DI]
CMP CL,20H JZ CHG NIC DI SHL CL,1 MOV AL,00 OUT DX,AL JMP DISI CHG:
INC COUNT CMP COUNT, 50 JL QUIT MOV COUNT, 0 INC SEC2 CMP SEC2, 10 JL QUIT MOV SEC2, 0 INC SEC1 CMP SEC1,6 JL QUIT MOV SEC1, 0 INC MIN2 CMP MIN2, 10 JL QUIT MOV MIN2, 0 INC MIN1 CMP MIM1, 6 JL QUIT MOV MIN1, 0 INC HOU2 CMP HOU1, 2 JL PPP CMP HOU2, 4 JL OOO MOV HOU1, 0 MOV HOU2, 0
OOO:
INC HOU2 JMP QUIT PPP:
CMP HOU2,10 JL QUIT MOV HOU2,0 INC HOU1
QUIT:
MOV DX,PORTBIT MOV AL,00 OUT DX,AL MOV DX,INTA00 MOV AL,20H OUT DX,AL POP DI POP DX POP CX POP AX IRET
KEY PROC NEAR
PUSH CX KST
MOV AL,82H MOV DX,P55CTL OUT DX,AL MOV AL,00H
MOV DX,PA55 OUT DX,AL MOV DX,PB55 IN AL,DX OR OF8H CMP AL,0FFH MOV CX,0300H
DLY: LOOP DLY MOV CL,08H MOV AH,0FEH
SCAN:
MOV DX,PA55 OUT DX,AL MOV DX,PB55
JZ DELAY MOV AL,AH IN AL,DX OR AL,0F8H CMP AL,0FFH JNZ KEYN ROL AH,1 REC CL JNZ SCAN1 JMP KST
KEYN: PUSH AX
MOV DX,PB55
RELEA:
IN AL,DX OR AL,0F8H CMP AL,0FFH JNZ RELEA POP AX NOT AX
MOV SI,OFFSET TABLE MOV DI,OFFSET CHAR MOV CX,24H
TT:
CMP AX,[SI] JZ NN DEC CX JZ KST ADD SI,02 INC DI JMP TT
NN:
MOV DL,[DI] MOV [CHAR1],DL MOV AH,02H INT 21H POP CX JMP YANG
DELAY:
CALL DISPLAY JMP KST
YANG: RET
KEY: ENDP
;---------------- DISPLAY: PROC NEAR PUSH CX
MOV BX,OFFSET LED MOV CX,0006
MOV SI,OFFSET HOU1 MOV AH,01H
DISPLAY1: CLD LODSB XLAT
MOV DX,PORTSEG OUT DX,AL MOV AL,AH
MOV DX,PORTBIT OUT DX,AL SHL AH,1 MOV AL,00 OUT DX,AL LOOP DISPLAY1 POP CX RET
DISPLAY:ENDP
;---------------- CPRO PROC NEAR CLI
MOV WORD PTR[HOU1],0000H MOV WORD PTR[HOU1+2],0000H MOV WORD PTR[HOU1+4],0000H RET
CPRO ENDP
;---------------- GPRO PROC NEAR STI RET
GPRO ENDP
;----------------- DPRO ENDP
;---------------- PPRO: PROC NEAR CLI
PUSH AX PUSH BX
MOV WORD PTR[HOU1],0C0CH MOV WORD PTR[HOU1+2],0C0CH MOV WORD PTR[HOU1+4],0C0CH CALL DISPLAY CALL KEY
MOV DL,[CHAR1] CMP DL,'2' JNZ NEXT1 JMP ERR
NEXT1:
SUB DL,30H MOV [HOU1],DL CALL DISPLY CALL KEY
MOV DL,[CHAR1] CMP [HOU1],2 JL QW CMP DL,'3' JNG NEXT2 JMP ERR
QW:
CMP DL,'9'
NEXT2:
SUB DL,30H MOV [HOU1+1]DL CALL DISPLY CALL KEY
MOV DL,[CHAR1] CMP DL,'5' JNZ NEXT3 JMP ERR
NEXT3:
SUB DL,30H MOV [HOU1+2],DL CALL DISPLY CALL KEY
MOV DL,[CHAR1] CMP NEXT4 JMP ERR
NEXT4:
SUB DL,30H
MOV [HOU1+3],DL MOV AH,0AH MUL AH ADD AL,DL MOV [MIN1],AL CMP AL,0CH JG ERR CMP AL,00 JZ ERR
MOV [HOU1+3],DL CALL DIPLY CALL KEY
MOV DL,[CHAR1] CMP DL,'5' JG ERR SUB DL,30H MOV AL,[MIN1] CMP AL,02H JZ PPRO1
MOV [HOU1+4],DL CALL DISPLY JMP PPRO2
PPRO1:
CMP DL,02 JG ERR
MOV [HOU1+4],DL CALL DISPLY
PPRO2: CALL KEY
MOV DL,[CHAR1] CMP DL,'9' JG ERR SUB DL,30H
MOV [HOU1+5],DL CALL DISPLY WW: JMP WW POP BX POP AX ERR: RET MOV WORD PTR [HOU1],0A0AH PPRO ENDP MOV WORD PTR [HOU1+2],0A0AH CODE ENDS MOV WORD PTR [HOU1+4],0A0AH END STARTCALL DISPLY
六、心得体会
这次微机原理课程设计历时两个星期,在整整两星期的日子里,可以说得是苦多于甜, 但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。以前在上课的时候,老师经常强调在写一个程序的时候,一定要事先把程序原理方框图化出来,但是我开始总觉得这样做没必要,很浪费时间。但是,这次课程设计完全改变了我以前的那种错误的认识,以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的那些需要很多代码才能完成的任务,画程序方框图是很有必要的。因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错。 其次,以前对于编程工具的使用还处于一知半解的状态上,但是经过一段上机的实践,对于怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个寄存器的内容以确保程序的正确性上都有了很大程度的提高。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。 这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在巫老师的辛勤指导下,终于游逆而解。同时,在赵老师的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
七、参考资料
1、戴梅萼,史嘉权编著.微型计算机技术及应用(第三版).北京:清华大学出版社,2003 2、周明德编著.微型计算机系统原理及应用(第四版).北京:清华大学出版社,2002 3、李顺增,吴国东,赵河明等.微机原理及接口技术.北京:机械工业出版社,2006 4、杨立新.微型计算机原理和应用[M].北京:科学技术文献出版社,1986.11 5、李大友.微型计算机原理[M].北京:清华大学出版社,1998.7 6、眭碧霞.微型计算机原理与组成[M].人民邮电出版社,2003.8
因篇幅问题不能全部显示,请点此查看更多更全内容