用汇编程序实现电子时钟
用匯編語言程序實現電子時鐘
基本思想:
 當需要編寫程序實現較復雜的功能時,整個程序就如同一個裝配體(總成),而子程序就如同裝配體中的零件,子程序與主程序的接口就如同機械中的連接件將不同零件裝配起來。
 使用子程序能使程序結構更清晰,且邏輯不易發生錯誤。
實現電子時鐘需要的子程序:
 1.顯示子程序disp
 2.顯示延時子程序dey1
 3.中斷服務intt0
 4.中斷服務退出子程序out
 5.加一子程序add1
 6.清空子程序clr0
應注意的事項:
 1.位選應與段碼輸送相配合,若使用P2位選,P2.0連接最前端的數碼管,則P2=#00000001B,即P2.0=1時,應輸送小時的最高位段碼
 2.若通過P2左移實現顯示,可通過左移次數判斷一次顯示是否完成,也可將P2的值賦給A,通過判斷ACC.7是否為1得到一次顯示是否完成,后者在實現上更方便
 3.進入中斷服務時,可將中斷允許ET0先斷開,在中斷服務退出子程序中再將ET0打開,可減少計時誤差
 4.判斷秒鐘、分鐘是否達到60,時鐘是否達到24,用DJNE語句比用減法后判斷JC更簡單
 5.當秒鐘、分鐘達到60,時鐘達到24時,需調用清空子程序clr0將其清0
 6.加一子程序add1可通過16進制數加#01h后通過十進制調整指令DA將其轉換為10進制數,通過分別屏蔽高、低4位并通過SWAP指令分別賦給對應的顯緩區
 7.共陽極8位二極管顯示0~9的段碼分別為:
顯示橫杠(——)的段碼為0bfh
 共陰極段碼取反即可
程序代碼如下:
org 0000h ljmp main org 000bh ljmp intt0 org 0100h main: mov tmod,#01h mov tl0,#0b0h mov th0,#3ch setb easetb et0 setb tr0 mov r4,#20 mov 73h,#10 mov 76h,#10 mov dptr,#tableloop: lcall disp ljmp loopdisp: mov r3,#01h mov r0,#78hplay: mov a,r3 mov p2,a mov a,@r0 movc a,@a+dptr mov p0,a lcall dey1 mov a,r3 dec r0 jb acc.7,next rl amov r3,aljmp play next:ljmp dispdey1: mov r6,#10 dl1: mov r7,#19h dl2: djnz r7,dl2djnz r6,dl1 retintt0: push acc push psw clr et0 clr tr0 mov tl0,#0b0h mov th0,#3ch setb tr0 djnz r4,out adds: mov r4,#20 mov r0,#71h lcall add1 mov a,r2 clr c cjne a,#60h,addmin addmin: jc out lcall clr0 mov r0,#74h lcall add1 mov a,r2 clr c cjne a,#60h,addh addh: jc out lcall clr0 mov r0,#77h lcall add1 mov a,r2 clr c cjne a,#24h,hourreset jc out hourreset: lcall clr0out: pop psw pop acc setb et0 retiadd1: inc r0 mov a,@r0 swap a dec r0 orl a,@r0 add a,#01h da a mov r2,a anl a,#0fh mov @r0,a mov a,r2 anl a,#0f0h swap a inc r0 mov @r0,a retclr0: mov a,#0 mov @r0,a dec r0 mov @r0,a rettable: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,0bfh end使用proteus7.5仿真的效果如下:
 
總結
以上是生活随笔為你收集整理的用汇编程序实现电子时钟的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: Sublime text代码补全插件(支
 - 下一篇: [SugerTangYL] 简易电子时钟