微机原理课程设计报告.docx

上传人:b****6 文档编号:6835136 上传时间:2023-01-11 格式:DOCX 页数:20 大小:478.68KB
下载 相关 举报
微机原理课程设计报告.docx_第1页
第1页 / 共20页
微机原理课程设计报告.docx_第2页
第2页 / 共20页
微机原理课程设计报告.docx_第3页
第3页 / 共20页
微机原理课程设计报告.docx_第4页
第4页 / 共20页
微机原理课程设计报告.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

微机原理课程设计报告.docx

《微机原理课程设计报告.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计报告.docx(20页珍藏版)》请在冰豆网上搜索。

微机原理课程设计报告.docx

微机原理课程设计报告

江苏大学京江学院

JIANGSUUNIVERSITY

微机原理课程设计

 

电子钟

 

学院名称:

京江学院

专业班级:

J计算机1401

学号:

**********

*******

********

 

2017年1月

一、实验目的

•掌握综合使用基本输入输出设备、通用接口芯片、专用接口芯片的方法;

•掌握实时处理程序的编制和调试方法;

•掌握8253、8259、8255的使用

•掌握小键盘、LED八段式发光二极管和蜂鸣器的使用

二、实验内容

•利用8253的定时功能,产生0.5S的定时中断;

•在F5区的数码管上显示时间格式为“时:

分:

秒”(24小时)

•允许通过键盘的按键设置时钟的初值;

•允许通过键盘的按键控制时钟的启停;

•分秒值为59分55秒时开始报时,每秒钟蜂鸣器鸣叫一声,到整点报时停止。

三、使用的芯片及占用端口地址

•8253芯片:

主要用于产生定时中断,定时时间为0.5S

•端口地址:

0260H~0263H

•8255芯片:

主要用于控制键盘输入和LED数码管输出

•端口地址:

0270H~0273H

•8259芯片:

主要用于产生中断管理

•端口地址:

0250H~0251H

四、硬件连接方案

•键盘的控制——由8255的B口控制;

•LED显示模块——由8255的B口和A口控制;

•时间的精确定时——用8254定时器0产生50ms的中断信号;

•整点报时控制——用8255的某一位信号控制8254的GATE1。

GATE=1时,OUT1信号控制蜂鸣器鸣叫;GATE=0,蜂鸣器停止蜂鸣。

五、设计的系统连接总逻辑图

键盘与LED(F5)

A:

按键的列线

B:

数码管段码

C:

数码管选择脚

D:

按键的行线

蜂鸣器(F8)

Ctrl:

控制接口,0-蜂鸣

 

8253(C4)

CS:

片选信号,低电平有效;

A0、A1:

地址信号;

8255(D3)

8259(B3)

六、程序模块划分及各模块程序流程图

•主程序模块:

对8254、8259A等芯片进行初始化,设置中断向量,扫描键盘,根据按键值作相应的处理。

流程图参见图

•注意:

设置初始时间时要考虑边界,时间的最大值为23:

59:

59,不能超出此范围。

•8254中断服务程序:

刷新一遍数码管,计时时间到一秒,修改当前时间,整点报时。

流程图参见图

七、实验中遇到的问题,解决办法及实验心得体会

这次课程设计有一定的难度,期间遇到了种种困难,卡住了很久,比如在做显示的时候,先要全熄数码管,然后扫描按键,还要很好地控制延时去抖动,这是件挺繁琐的事,另外,按键之后需要给按键一个扫描码,接着转化成字形码,能够识别并在数码管上显示,也花了很多时间,再比如在设置时间的时候,对于延时时间的拿捏也很难,需要在buf缓冲区存放值,修改时,让修改位熄灭,其余位为0,若超出规定位数,则不修改,显示原值。

老师在我完成规定任务后也设下了一个小挑战,将8255的一根接线调换了位置,要求仍正确显示,最后我想出的解决的方法是段位码改共阳极,键盘扫描里修改相应端口,开头输入部分修改8255初始化控制字即可。

这次课程设计对于这门课的认知的提升很有帮助,本来只是理解了理论,对于亲自动手实现还是感到茫然,甚至不相信自己能完成,但是在一步一步实现各个功能模块后,发现点连成了线,线动成面,知识点是能够串联起来的,只要自己愿意动手,愿意思考,没有什么是做不成的,当然期间必然会遇到各种各样的问题,只要肯向老师或同学请教,他们也一定会给你的思维一些启发。

这次的课程设计虽然只是做了一个看似简单的电子钟,但是它几乎涵盖了我们这学期所学的大部分内容,完成这项课程设计必然要深入理解课本上的知识,这就起到了查漏补缺,融会贯通的作用,我想这对日后学习其他硬件方面的知识都是很有益的,也很大程度上激发了我对硬件方面课程的更大热情。

八、源程序清单

.MODELTINY

C0_8253EQU260H;计数器0的端口地址

C1_8253EQU261H;计数器1的端口地址

C2_8253EQU262H;计数器2的端口地址

CTRL_8253EQU263H;控制端口的端口地址

PA_8255EQU270H;端口A的地址

PB_8255EQU271H;端口B的地址

PC_8255EQU272H;端口C的地址

CTRL_8255EQU273H;控制端口的端口地址

EVEN_8259EQU250H

ODD_8259EQU251H

.STACK100

.DATA

BUFFERDB0,0,0,0,0,0;数码上显示的内容

KEYDB0

FLAGDB1

BUFDB0,?

SEG_TABDB03FH,06H,05BH,04FH,66H,6DH,7DH,07H,7FH,6FH;0~9的段码表

SEG_TAB2DB0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH

.CODE

START:

MOVAX,@DATA

MOVDS,AX

MOVES,AX

NOP

MOVAL,30H;00110000B,计数器0,方式0,二进制计数

MOVDX,CTRL_8253

OUTDX,AL

MOVDX,C0_8253

MOVAL,0DH;Fout=1/25ms=40Hz,Fclk=31250Hz,N=Fclk/Fout=31250Hz/40Hz=781,N=781

OUTDX,AL

MOVAL,03H

OUTDX,AL

MOVDX,CTRL_8253

MOVAL,76H;01110110B,计数器1,方式3,二进制计数

OUTDX,AL

MOVDX,C1_8253

MOVAL,12H;31250Hz

OUTDX,AL

MOVAL,7AH

OUTDX,AL

CALLSET_VECTOR;设置中断向量

CALLINIT_8259

MOVAL,11111110B;开放IR0请求的屏蔽位

MOVDX,ODD_8259

OUTDX,AL

L1:

STI

MOVDX,CTRL_8255;8255初始化

MOVAL,80H;10000000B,端口A方式0输出,端口B方式0输出,C输出

OUTDX,AL

LEASI,BUFFER

MOVCX,8

LP:

CALLDIR

LOOPLP

MOVDX,CTRL_8255;8255初始化

MOVAL,82H;10000010B,端口A方式0输出,端口B方式0输入,C输出

OUTDX,AL

L2:

CALLKEYSCAN

JMPL1

JMP$

DIRPROCNEAR

PUSHAX

PUSHBX

PUSHDX

MOVAL,BUFFER[0]

CMPFLAG,0

JNZQ0

CMPKEY,0

JNZQ0

LEABX,SEG_TAB2

JMPW0

Q0:

LEABX,SEG_TAB;BX置为段码表首址

W0:

XLAT;转换成七段码

MOVDX,PA_8255;段码端口

OUTDX,AL

MOVDX,PB_8255;位码端口

MOVAL,7FH;小时的十位

OUTDX,AL

CALLDELAY;延时

MOVAL,BUFFER[1]

CMPFLAG,0

JNZQ1

CMPKEY,1

JNZQ1

LEABX,SEG_TAB2

JMPW1

Q1:

LEABX,SEG_TAB

W1:

XLAT;转换成七段码

MOVDX,PA_8255;段码端口

OUTDX,AL

MOVDX,PB_8255;位码端口

MOVAL,0BFH;小时的个位

OUTDX,AL

CALLDELAY;延时

MOVAL,BUFFER[2]

CMPFLAG,0

JNZQ2

CMPKEY,2

JNZQ2

LEABX,SEG_TAB2

JMPW2

Q2:

LEABX,SEG_TAB

W2:

XLAT;转换成七段码

MOVDX,PA_8255

OUTDX,AL

MOVDX,PB_8255;位码端口

MOVAL,0EFH;分钟的十位

OUTDX,AL

CALLDELAY;延时

MOVAL,BUFFER[3]

CMPFLAG,0

JNZQ3

CMPKEY,3

JNZQ3

LEABX,SEG_TAB2

JMPW3

Q3:

LEABX,SEG_TAB

W3:

XLAT;转换成七段码

MOVDX,PA_8255;段码端口

OUTDX,AL

MOVDX,PB_8255;位码端口

MOVAL,0F7H;分钟的个位

OUTDX,AL

CALLDELAY;延时

MOVAL,BUFFER[4]

CMPFLAG,0

JNZQ4

CMPKEY,4

JNZQ4

LEABX,SEG_TAB2

JMPW4

Q4:

LEABX,SEG_TAB

W4:

XLAT;转换成七段码

MOVDX,PA_8255;段码端口

OUTDX,AL

MOVDX,PB_8255;位码端口

MOVAL,0FDH;秒的十位

OUTDX,AL

CALLDELAY;延时

MOVAL,BUFFER[5]

CMPFLAG,0

JNZQ5

CMPKEY,5

JNZQ5

LEABX,SEG_TAB2

JMPW5

Q5:

LEABX,SEG_TAB

W5:

XLAT;转换成七段码

MOVDX,PA_8255;段码端口

OUTDX,AL

MOVDX,PB_8255;位码端口

MOVAL,0FEH;秒的个位

OUTDX,AL

CALLDELAY;延时

POPDX

POPBX

POPAX

RET

DIRENDP

KEYSCANPROCNEAR

PUSHAX

PUSHCX

PUSHBX

PUSHDX

MOVBL,KEY

MOVDX,PC_8255

MOVAL,11111110B

OUTDX,AL

MOVAH,AL

MOVAL,00H

MOVDX,PB_8255

INAL,DX

CMPAL,0FFH

JZL4

JMPL3

L4:

MOVDX,PC_8255

MOVAL,11111101B

OUTDX,AL

MOVAH,AL

MOVAL,00H

MOVDX,PB_8255

INAL,DX

L3:

CMPFLAG,0

JNZD4

CMPBX,4

JZD1

CMPBX,2

JZD1

CMPBX,0

JZD0

CMPAX,0FDFDH;按键9

JZBUFF9

CMPAX,0FDFEH;按键8

JZBUFF8

CMPAX,0FE7FH;按键7

JZBUFF7

CMPAX,0FEBFH;按键6

JZBUFF6

D1:

CMPAX,0FEDFH;按键5

JZBUFF5

CMPAX,0FEEFH;按键4

JZBUFF4

CMPAX,0FEF7H;按键3

JZBUFF3

D0:

CMPAX,0FEFBH;按键2

JZBUFF2

CMPAX,0FEFDH;按键1

JZBUFF1

CMPAX,0FEFEH;按键0

JZBUFF0

CMPAX,0FD7FH;按键F

JZBUFFF

D4:

CMPAX,0FDFBH;按键A

JZBUFFA

CMPAX,0FDF7H;按键B

JZBUFFB

JMPOUTPUT

BUFF9:

MOVBUFFER[BX],9

JMPOUTPUT

BUFF8:

MOVBUFFER[BX],8

JMPOUTPUT

BUFF7:

MOVBUFFER[BX],7

JMPOUTPUT

BUFF6:

MOVBUFFER[BX],6

JMPOUTPUT

BUFF5:

MOVBUFFER[BX],5

JMPOUTPUT

BUFF4:

MOVBUFFER[BX],4

JMPOUTPUT

BUFF3:

MOVBUFFER[BX],3

JMPOUTPUT

BUFF2:

MOVBUFFER[BX],2

JMPOUTPUT

BUFF1:

MOVBUFFER[BX],1

JMPOUTPUT

BUFF0:

MOVBUFFER[BX],0

JMPOUTPUT

BUFFA:

MOVFLAG,1

JMPOUTPUT

BUFFB:

MOVFLAG,0

JMPOUTPUT

BUFFF:

CMPBUF[0],1

JNZA7

MOVDL,BUF[1]

MOVBL,KEY

MOVBUFFER[BX],DL

MOVBUF[0],0

A7:

CALLDELAY1

CMPBL,0

JZL5

A8:

MOVBL,KEY

CMPBX,5

JNZL5

MOVBX,0

JMPL6

L5:

INCBL

L6:

MOVKEY,BL

OUTPUT:

POPDX

POPCX

POPBX

POPAX

RET

KEYSCANENDP

SET_VECTORPROCNEAR

PUSHAX

PUSHBX

MOVAX,0

MOVES,AX;中断向量表段基址为0000H

MOVBX,40H*4;BX中预置中断向量地止,中断类型号为40H

MOVAX,OFFSETINTRPROC;向量表中低地址存放偏移地址,

MOVES:

[BX],AX

MOVAX,SEGINTRPROC

MOVES:

[BX+2],AX;向量表中高地址存放段基地址

POPBX

POPAX

RET

SET_VECTORENDP

INIT_8259PROCNEAR

PUSHAX

PUSHDX

MOVAL,13H;ICW1:

边沿触发,单片系统,需要ICW4

MOVDX,EVEN_8259

OUTDX,AL

MOVAL,40H;ICW2:

类型号从40H开始

MOVDX,ODD_8259

OUTDX,AL

MOVAL,01H;ICW4:

完全嵌套方式,非缓冲,非自动结束

MOVDX,ODD_8259

OUTDX,AL

POPDX

POPAX

RET

INIT_8259ENDP

INTRPROCPROCFAR

PUSHAX

PUSHBX;保护现场

PUSHDS

PUSHDX

STI

MOVAL,FLAG

CMPAL,1

JNZD5

CALLCHANGE

D5:

MOVAL,30H

MOVDX,CTRL_8253

OUTDX,AL

MOVDX,C0_8253

MOVAL,12H;31250Hz

OUTDX,AL

MOVAL,7AH

OUTDX,AL

CLI

MOVAL,20H

MOVDX,EVEN_8259;发送EOI命令

OUTDX,AL

POPDX

POPDS

POPBX;恢复现场

POPAX

IRET;中断返回

INTRPROCENDP

CHANGEPROCNEAR

PUSHAX

PUSHDX

MOVBL,BUFFER[5]

CMPBL,9

JLL7

MOVBL,0

MOVBUFFER[5],BL

MOVBL,BUFFER[4]

CMPBL,5

JLL9

MOVBL,0

MOVBUFFER[4],BL

MOVBL,BUFFER[3]

CMPBL,9

JLL10

MOVBL,0

MOVBUFFER[3],BL

MOVBL,BUFFER[2]

CMPBL,5

JLL11

MOVBL,0

MOVBUFFER[2],BL

MOVBL,BUFFER[1]

CMPBL,9

JLL12

MOVBL,0

MOVBUFFER[1],BL

MOVBL,BUFFER[0]

CMPBL,2

JLL13

MOVBL,0

MOVBUFFER[0],BL

JMPL8

L7:

INCBL

MOVBUFFER[5],BL

JMPL8

L13:

INCBL

MOVBUFFER[0],BL

JMPL8

L12:

INCBL

MOVBUFFER[1],BL

JMPL8

L11:

INCBL

MOVBUFFER[2],BL

JMPL8

L10:

INCBL

MOVBUFFER[3],BL

JMPL8

L9:

INCBL

MOVBUFFER[4],BL

JMPL8

L8:

POPDX

POPAX

RET

CHANGEENDP

DELAYPROCNEAR

PUSHCX

MOVCX,500

LOOP$

POPCX

RET

DELAYENDP

DELAY1PROCNEAR

PUSHCX

MOVCX,25000

LOOP$

POPCX

RET

DELAY1ENDP

DELAY2PROCNEAR

PUSHCX

MOVCX,50

LOOP$

POPCX

RET

DELAY2ENDP

ENDSTART

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1