×
单片机 > 单片机程序设计 > 详情

单片机 电子时钟(汇编)

发布时间:2020-06-19 发布时间:
|
今天很高兴,一次性就把这个电子时钟写了出来(今晚的单片机实验,记得去年自学单片机的时候,这个还真是写不出来,不过这个时钟只是静态的,不能够用手工来修改,这点还是不够完善,以后有时间了的话,我重新写一下,呵呵)
 

count     equ  9217  ;定义1s计数值,对于11.0592的晶振来说,延时10ms

second           equ  30h  ;定义临时变量区

second_ge     equ  31h

second_shi     equ  32h

minute           equ  33h

minute_ge      equ  34h

minute_shi     equ  35h

hour        equ  36h

hour_ge         equ  37h

hour_shi         equ  38h

 

       org  0000h

       sjmp       main   ;进入主程序

       org  0003h

       reti

       org  000bh   ;time0(定时器/计数器T0入口地址)

       ljmp int_time0   ;跳转到中断0服务程序

       org  001bh

       reti

       org  0023h

       reti

 

main:     

       mov r0,#0       ;初始化程序(本程序初始值设为13:33:22)

       mov second,#22

       mov second_ge,#0

       mov second_shi,#0

       mov minute,#33

       mov minute_ge,#0

       mov minute_shi,#0

       mov hour,#13

       mov hour_ge,#0

       mov hour_shi,#0

 

       mov tmod,#00000001b

       mov th0,#high(65536-count) ;取高八位数据

       mov tl0,#low(65536-count) ;取底五位

       clr   tf0

       setb ea

       setb et0

       setb tr0   ;开始计时

loop:      

       lcall        digitor_display         ;调用数码管扫描显示程序

       sjmp       loop           ;程序在此循环  

 

;定时器0中断

int_time0:

       push acc

       push psw

 

       clr   tf0

       mov th0,#high(65536-count) ;取高八位数据

       mov tl0,#low(65536-count) ;取底五位

       inc   r0

       cjne r0,#100,ret_loop   ;秒值加一

       sjmp       second_add

 

second_add:                          ;秒值处理

       mov r0,#0

       inc   second

       mov a,second

       cjne a,#60, ret_loop

       sjmp       minute_add

 

minute_add:                               ;分值处理

       mov second,#0

       inc   minute

       mov a,minute

       cjne a,#60, ret_loop

       sjmp       hour_add

 

hour_add:                               ;小时处理

       mov minute,#0

       inc   hour

       mov a,hour

       cjne a,#24,ret_loop

       sjmp       hour_reset

 

hour_reset:

       mov hour,#0

 

ret_loop:

       pop  psw

       pop acc

       reti  ;中断返回

 

digitor_display:               ;数码管扫描

       push acc

       push psw

       mov a,second

       mov b,#10

       div   ab

       mov second_shi,a

       mov second_ge,b

 

       mov a,minute

       mov b,#10

       div   ab

       mov minute_shi,a 

       mov minute_ge,b

 

       mov a,hour

       mov b,#10

       div   ab

       mov hour_shi,a

       mov hour_ge,b

 

       mov p1,#11011111b         ;显示秒钟的个位

       mov a,second_ge

       mov dptr,#table

       movc      a,@a+dptr

       mov p2,a

       lcall delay

 

       mov p1,#11101111b              ;显示秒钟的十位

       mov a,second_shi

       mov dptr,#table

       movc      a,@a+dptr

       mov p2,a

       lcall delay

 

       mov p1,#11110111b           ;显示分钟的个位

       mov a,minute_ge

       mov dptr,#table

       movc      a,@a+dptr

       mov p2,a

       lcall delay

 

       mov p1,#11111011b          ;显示分钟的十位

       mov a,minute_shi

       mov dptr,#table

       movc      a,@a+dptr

       mov p2,a

       lcall delay

 

       mov p1,#11111101b       ;显示小时的个位

       mov a,hour_ge

       mov dptr,#table

       movc      a,@a+dptr

       mov p2,a

       lcall delay

 

       mov p1,#11111110b ;显示小时的十位

       mov a,hour_shi

       mov dptr,#table

       movc      a,@a+dptr

       mov p2,a

       lcall delay

       pop psw

       pop  acc

 

       ret          ;扫描程序返回

 

table:             ;共阴极数码管扫描码

       DB  3FH   ;0

    DB  06H   ;1

    DB  5BH   ;2

    DB  4FH   ;3

    DB  66H   ;4

    DB  6DH   ;5

    DB  7DH   ;6

     DB  27H   ;7

    DB  7FH   ;8

    DB  6FH   ;9

     

delay:      mov r4,#5       ;延时函数(延时大概5*255*2=25ms)

l1:    mov r5,#0ffh

l2:    djnz r5,$

       djnz r4,l1

       ret  

 

       end        

关键字:单片机  电子时钟  汇编 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR熔丝位操作时的要点和需要注意的相关事项