專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

51單片機(jī)時鐘匯編程序

作者:黃大垣   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時間:2013年11月28日   【字體:

終于到了……感動ing...自己也可以DIY一個電子時鐘了。

電路板和原件要另外找,南寧市的電子元件稀少得真難找啊,弄好后焊接,看來要找個好點(diǎn)的焊臺,這樣焊接電路時比較方便。

電路如下:

;簡單的89C2051時鐘程序
;顯示方式為.12:34之12小時制
;P1口輸出段數(shù)據(jù),P3口輸出位數(shù)據(jù)
;P1.7為秒點(diǎn),P3.7為PM輸出
;P3.4校時,P3.5校分
;晶振12MHz


       flash equ 31h
       sec equ 32h      ;定義秒存儲位置
       min equ 33h      ;定義分存儲位置
       hour equ 34h
       hourk bit p3.4   ;調(diào)時按鈕
       mink bit p3.5    ;調(diào)分按鈕
       pm bit p3.7      ;PM輸出端
       org 0000h
       ajmp start
       org 000bh
       ajmp int_t0
       org 0100h
start: mov a,#00h       ;清0
       mov 30h,a
       mov flash,a
       mov sec,a        ;秒清0
       mov min,#00      ;分清0
       mov hour,#12
       mov sp,#60h      ;重設(shè)堆棧指針
       setb pm          ;PM清0
       mov p1,#0ffh
       mov p3,#0ffh
       mov tmod,#01h    ;設(shè)定定時器0工作于方式1
       mov tl0,#0b0h    ;設(shè)定定時初始值50ms
       mov th0,#3ch
       setb ea          ;啟動定時
       setb et0
       setb tr0
key:   lcall disp       ;按鍵處理子程序
       jb hourk,mmm
hhh:   lcall disp
       jnb hourk,hhh
       inc hour         ;時加1
       mov a,hour
       cjne a,#12,ppp
       cpl pm           ;PM取反
ppp:   cjne a,#13,key
       mov hour,#01h    ;12小時到,清零.
mmm:   jb mink,key
nnn:   lcall disp
       jnb mink,nnn
       inc min
       mov a,min
       cjne a,#60,key
       mov min,#00h     ;一小時時間到
       ajmp key
int_t0:push acc         ;保護(hù)現(xiàn)場
       mov tl0,#0b0h    ;賦定時初值
       mov th0,#3ch
       inc 30h          ;20H地址加1
       mov a,30h
       cjne a,#10,reti1
       mov 30h,#00h     ;半秒鐘時間到
       inc flash        ;半秒加1
       mov a,flash
       cjne a,#2,reti1
       mov flash,#00h
       inc sec          ;秒加1
       mov a,sec
       cjne a,#60,reti1
       mov sec,#00h     ;一分鐘時間到
       inc min          ;分加1
       mov a,min
       cjne a,#60,reti1
       mov min,#00h     ;一小時時間到
       inc hour         ;時加1
       mov a,hour
       cjne a,#12,cont
       cpl pm           ;PM取反
cont:  cjne a,#13,reti1
       mov hour,#01h    ;12小時到,清零.
reti1: pop acc          ;恢復(fù)現(xiàn)場
       reti             ;中斷返回
disp:  mov a,#10
       mov b,a
       mov a,hour
       div ab     
       cjne a,#01,zero
       jmp normal
zero:  mov a,#10        ;消隱無效零
normal:mov dptr,#tab
       movc a,@a+dptr
       mov p1,a
       clr p3.0
       lcall dely
       setb p3.0
       mov a,b
       mov dptr,#tab
       movc a,@a+dptr
       mov p1,a
       clr p3.1
       lcall dely
       setb p3.1
       mov a,#10
       mov b,a
       mov a,min
       div ab
       mov dptr,#tab
       movc a,@a+dptr
       mov p1,a
       clr p3.3
       lcall dely
       setb p3.3
       mov a,b
       mov dptr,#tab
       movc a,@a+dptr
       mov p1,a
       clr p3.2
       lcall dely
       setb p3.2
       mov a,flash
       cjne a,#00,light
       setb p1.7
       lcall dely
       jmp over
light: clr p1.7
       lcall dely
over:  ret              ;子程序返回
tab:   db 88h,0afh,91h,0a1h,0a6h,0e0h,0c0h,0adh,80h,0a0h,0ffh;共陽段碼表0123456789不亮
dely:  mov r6,#10
d1:    mov r7,#20
d2:    djnz r7,d2
       djnz r6,d1
       ret

       end

關(guān)閉窗口

相關(guān)文章