微机原理实时电子钟实验.docx

上传人:b****8 文档编号:10049079 上传时间:2023-02-08 格式:DOCX 页数:17 大小:79.22KB
下载 相关 举报
微机原理实时电子钟实验.docx_第1页
第1页 / 共17页
微机原理实时电子钟实验.docx_第2页
第2页 / 共17页
微机原理实时电子钟实验.docx_第3页
第3页 / 共17页
微机原理实时电子钟实验.docx_第4页
第4页 / 共17页
微机原理实时电子钟实验.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

微机原理实时电子钟实验.docx

《微机原理实时电子钟实验.docx》由会员分享,可在线阅读,更多相关《微机原理实时电子钟实验.docx(17页珍藏版)》请在冰豆网上搜索。

微机原理实时电子钟实验.docx

微机原理实时电子钟实验

广州大学学生实验报告

开课学院及实验室:

2013年12月19日

学院

年级、专业、班

姓名

学号

实验课程名称

微机原理实验

成绩

实验项目名称

实时电子钟实验

指导

教师

一、实验要求

利用8253定时器、8259中断控制器和实验箱上提供的数码显示电路,设计一个万年历。

格式如下:

XXXXXX由左向右分别为:

年、月、日

二、实验目的

1、进一步掌握8253定时器的使用和编程方法。

2、进一步掌握8259中断控制器的编程方法。

3、进一步掌握数码显示电路的驱动方法。

三、实验电路及连线

 

 

连线

连接孔1

连接孔2

连线

连接孔1

连接孔2

1

KEY/LED_CS

CS0

6

8253的OUT1

右8259的IR0

2

8253_CS

CS4

7

8259_CS

CS5

3

8253的GATE1

+5V

8

右8259的INT

8088的INTR

(在CPU的左侧)

4

8253的CLK1

1MHZ

9

右8259的SP/EN

+5V

5

4MHZ

Fin

10

 

四、实验说明

定时器每100us中断一次,在中断服务程序中,对中断次数进行计数,100us计数10000次就是1秒(具体要做的是一天)。

然后再对秒(天)计数得到分(月)和小时(年)值,并送入显示缓冲区。

显示子程序模块可参照硬件实验六。

五、实验框图

六、实验步骤

(1)在实验箱断电的情况下连好线。

(2)输入自编程序并检查,保存程序。

(3)调试程序。

(4)记录实验结果及分析。

七、程序

DATASEGMENTAT0USE16

ORG1000H

HOURDW?

MINDW?

SECDW?

STDB?

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

MOVST,0;开始暂停标志位置0

MOVCOUNT,0;中断次数计数初始值为0

;8255初始化,用于产生报时的脉冲

MOVDX,20FH;利用左四的8255,控制口为20FH

MOVAL,10000000B;C口输出

OUTDX,AL

MOVDX,20BHL;C0输出1,蜂鸣器不响

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:

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;控制暂停和开始

CMPST,00H

JNEL1

DECST

JMPL2

L1:

INCST

L0:

CALLKEYCHECK

CMPAL,0AH

JZL2

CALLSHOW

JMPL0

L2:

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:

CMPAX,0204H

JGEL1

MOVHOUR,AX

L5:

CALLSHOW

CALLKEYCHECK;设置分钟的十位

CALLDELAY

CMPAL,0CH

JZL5

L6:

CMPAL,06H

JGEL1

MOVAH,AL

MOVBYTEPTR[MIN+1],AL

L7:

CALLSHOW

CALLKEYCHECK;设置分钟的个位

CALLDELAY

CMPAL,0CH

JZL7

MOVAH,BYTEPTR[MIN+1]

L8:

CMPAX,0509H

JGL1

MOVMIN,AX

L9:

CALLSHOW

CALLKEYCHECK;设置秒的十位

CALLDELAY

CMPAL,0CH

JZL9

L10:

CMPAL,06H

JGEL1

MOVAH,AL

MOVBYTEPTR[SEC+1],AL

L11:

CALLSHOW

CALLKEYCHECK;设置秒的个位

CALLDELAY

CMPAL,0CH

JZL11

MOVAH,BYTEPTR[SEC+1]

L12:

CMPAX,0509H

JGL1

MOVSEC,AX

L13:

CALLSHOW

CALLKEYCHECK;再次按键,启动计时

CALLDELAY

CMPAL,0CH

JZL13

RET

SETTIMEENDP

KEYCHECKPROC;判断有无键按下子程序

PUSHBX

CALLCLEAR

MOVDX,PORT2

INAL,DX

ANDAL,0FH

CMPAL,0FH

JZEXIT;有按键按下,延时消抖

NOP

NOP

;再次确认是否有键按下

INAL,DX

ANDAL,0FH

CMPAL,0FH

JZEXIT

;开始对每一列进行逐行扫描

MOVCX,3

MOVBL,0FEH

NEXT:

MOVAL,BL

MOVDX,PORT2

OUTDX,AL

NOP

NOP

INAL,DX

ANDAL,0FH

CMPAL,0FH

JNZKEY

ROLBL,1

LOOPNEXT

JMPEXIT

KEY:

SHLBL,4

ORAL,BL;形成一个字节的键码信息存入AL,高4位为列信息低4位为行信息

LEASI,KEYCOD

LEADI,KEYVAL

MOVCX,12

NEXT11:

CMPAL,[SI]

JZFIND

INCSI

INCDI

LOOPNEXT11

JMPEXIT

FIND:

MOVAL,[DI];AL中内容为所按键的键面值

PUSHAX

NOP

NOP

WAIT1:

INAL,DX;判断按键是否已释放,若无则等待

ANDAL,0FH

CMPAL,0FH

JNZWAIT1

POPAX

JMPEXIT2

EXIT:

MOVAL,0CH

EXIT2:

NOP

POPBX

RET

KEYCHECKENDP

 

SHOWPROC;显示时间

MOVAX,HOUR

XLAT

MOVDX,PORT1;段选输出数据

OUTDX,AL

MOVDX,PORT2;位选输出小时的个位

MOVAL,0C2H

OUTDX,AL

CALLDELAY

CALLCLEAR

MOVAL,AH

XLAT

MOVDX,PORT1;段选输出数据

OUTDX,AL

MOVDX,PORT2;位选输出小时的十位

MOVAL,0C1H

OUTDX,AL

CALLDELAY

CALLCLEAR

MOVAX,MIN

XLAT

MOVDX,PORT1;段选输出数据

OUTDX,AL

MOVDX,PORT2;位选输出分钟的个位

MOVAL,0C8H

OUTDX,AL

CALLDELAY

CALLCLEAR

MOVAL,AH

XLAT

MOVDX,PORT1;段选输出数据

OUTDX,AL

MOVDX,PORT2;位选输出分钟的十位

MOVAL,0C4H

OUTDX,AL

CALLDELAY

CALLCLEAR

MOVAX,SEC

XLAT

MOVDX,PORT1;段选输出数据

OUTDX,AL

MOVDX,PORT2;位选输出秒的个位

MOVAL,0E0h

OUTDX,AL

CALLDELAY

CALLCLEAR

MOVAL,AH

XLAT

MOVDX,PORT1;段选输出数据

OUTDX,AL

MOVDX,PORT2;位选输出秒的十位

MOVAL,0D0H

OUTDX,AL

CALLDELAY

CALLCLEAR

RET

SHOWENDP

CODEENDS

ENDBEG

DELAYPROC;延时子程序

PUSHCX

MOVCX,1000

LOOP$

POPCX

RET

DELAYENDP

CLEARPROC;使七段译码管全灭子程序

MOVAL,00H

MOVDX,PORT1

OUTDX,AL

MOVDX,PORT2

OUTDX,AL

NOP

NOP

RET

CLEARENDP

五、实验结果

通过这次实验,我们学习了8253定时器的使用和编程方法;通过年月日的实验,使我进一步掌握8259中断控制器的编程方法,以及进一步掌握数码显示电路的驱动方法,但过程中也遇到很多麻烦。

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

当前位置:首页 > 表格模板 > 调查报告

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

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