微机实验:脑时钟

单片机实验

27人已加入

描述

微机实验:脑时钟

实验目的

1、掌握定时器的编程方式。

2、了解中断子程序的执行过程,掌握其编程设计和调试方法。

3、加深对51系列单片机内部结构和使用方法的理解。

4、初步理解基于8031的微机化仪表的整体设计。

实验内容和原理:

利用实验板设计电脑时钟,既能显示时间,又能调整时间。
微机实验

显示格式如图5-1。相应地,在片内RAM开辟显示缓冲区2A∽2FH,每一个显示缓冲单元对应一个数码管,为便于显示,采用非压缩BCD码。另外,还开辟时、分、秒、0.1秒四个计时单元,地址为40-43H,为便于计算,采用16进制数。

为产生时间基准,用定时器0,工作方式1,溢出周期0.1S。即每隔0.1s产生一次中断请求,0.1s单元加1。中断10次即1秒,秒单元加1。秒单元计数到60时,分单元加1。分单元计数到60时,时单元加1。显然,只要把时、分、秒计时单元中的值转送至显示缓冲单元(需16进制转换为10进制),那么,就能实现时间显示。

为实现时间调整,键盘布置如图5-2所示。键号为9、A、B的三只键分别用作秒、分、时选择键;键号为4、5的二只键分别用作减少和增加键。例如,需要“分”调整,则先按“分”键,再按“↓”或“↑”键。

整个程序,由主程序,定时中断程序,时间设置程序等部分组成。

微机实验

图5-3   主程序框图

主程序(流程框图见图5-3):

ORG  0000H

LJMP  MAIN

ORG  000BH

LJMP  CLOCK

;定时中断入口

 MAIN:

MOV  SP, #60H

;设置堆栈

MOV  DPTR, #0B000H

;8155命令字

MOV  A, #03H

;A、B口输出,C口输入

MOVX  @DPTR, A

MOV  TMOD, #01H

;定时器T0,方式1

MOV  TH0, #3CH

;定时间100ms

MOV  TL0, #B0H

MOV  IE, #82H

;开T0中断

SETB  TR0

;启动T0

MOV  40H, #00H

;计时单元清零

MOV  41H, #00H

MOV  42H, #00H

MOV  43H, #00H

MOV  R0, #2AH

;显示缓冲2A~2F清零

CLR  A

  MP0:

MOV  @ R0, A

INC  R0

CJNE  R0, #30H, MP0

  DIS:

LCALL  DISP

;调显示子程序

LCALL  SETUP

;调设置子程序

SJMP  DIS

定时中断服务子程序(流程框图见图5-4)

ORG  0500H

 CLOCK:

PUSH  PSW

;压栈保护

PUSH  A

MOV  TH0,  #3CH

;重装初值

MOV  TL0,  #0BCH

INC  43H

;0.1s单元加1

  

MOV  A, 43H

CJNE  A, #0AH, RET0

;1s不到,转RET0

MOV  43H, #00H

;1s到,0.1s单元清零 

INC  42H

;秒单元加1

MOV  A, 42H

CJNE  A, #3CH, RET0

;1分不到,转RET0

MOV  42H ,  #00H

;1分到,秒单元清零

INC  41H

;分单元加1

MOV  A,  41H

CJNE  A, #3CH, RET0

;1小时不到,转RET0

MOV  41H,  #00H

;1小时到,分单元清零

INC  40H

;时单元加1

MOV  A, 40H

CJNE  A, #81H, RET0

;24小时到否?

MOV  40H, #00H

;到,则时清零

   RET0:

MOV  A, 40H

;将计时单元中16进制转换

MOV  B, #0AH

;为十进制后,送显示缓冲

DIV  AB

MOV  2AH, A

;“时”送显示

MOV  2BH, B

MOV  A, 41H

MOV  B, #0AH

DIV  AB

MOV  2CH, A

;“分”送显示

MOV  2DH, B

MOV  A,  42H

MOV  B,  #0AH

  

DIV  AB

MOV  2EH, A

;“秒”送显示

MOV  2FH, B

POP  A

;出栈

POP  PSW

RETI

时间设置子程序(流程框图见图5-5)

ORG  0450H

SETUP:

LCALL  KS1

;判别有无键按下?

JZ  ST9

;无键按下,退出

CLR  EA

;关中断

LCALL  KEYA

;求键号→A

CJNE  A, #0BH, ST1

;“时”键?

MOV  20H, #01 H

;是,置时标志

SJMP  ST9

    ST1:

CJNE  A, #0AH, ST2

;“分”键?

MOV  20H, #02H

;是,置分标志

SJMP  ST9

    ST2:

CJNE  A, #09H, ST3

;“秒”键?

MOV  20H, #04H

;是,置秒标志

  

SJMP  ST9

    ST3:

CJNE  A, #05H, ST6

;“增加”键?

MOV  A, 20H

;是,则判时分秒标志

CJNE  A, #01H, ST4

  

INC  40H

;“时”+1

SJMP  ST9

    ST4:

CJNE  A, #02H, ST5

INC  41H

;“分”+1

SJMP  ST9

    ST5:

CJNE  A, #04H, ST9

INC  42H

;“秒”+1

SJMP  ST9

    ST6:

CJNE  A, #04H, ST10

;“减少”键?

MOV  A, 20H

;是,判时分秒标志

CJNE  A, #01H, ST7

DEC  40H

;“时”-1

SJMP  ST9

    ST7:

CJNE  A, #02H, ST8

DEC  41H

;“分”-1

SJMP  ST9

    ST8:

CJNE  A, #04H, ST9

DEC  42H

;“秒”-1

    ST9:

SETB  EA

;开中断

RET

   ST10:

MOV  20H, #00H

RET

 

实验步骤:

1、输入程序。

2、连续运行程序,检查显示能否正常计时,按键能否实现调整。如发现不正常,可采用断点、单步等方法进行分段调试。

思考题:

1、如何调整时钟精度?

2、如何判断CPU是否响应定时中断?

3、主程序最后一句能否改为NOP或SJMP$?

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分