PIC16F877A動態(tài)數(shù)碼時鐘顯示實(shí)驗參考程序
;動態(tài)數(shù)碼時鐘顯示實(shí)驗參考程序
;使用資源:
;1,TMRO定時器。確定顯示的位,及顯示延時。
;2,TMR1定時器。秒信號產(chǎn)生。
;3,PORTA端口。六共陽極位數(shù)碼管的位選信號,低電平有效
;4,PORTC端口。數(shù)碼管的七段,RC7不用。
;功能說明:
;1.六位數(shù)碼管動態(tài)掃描顯示時間(格式為:HHMMSS,24小時制)。
;2.時鐘信號由單片機(jī)內(nèi)部定時器硬件單元編程產(chǎn)生。
;本實(shí)戰(zhàn)的目的是讓大家進(jìn)一步熟悉定時器的編程,多位數(shù)碼管動態(tài)掃描顯示的編程。
;硬件接法:
;1.實(shí)驗板上撥碼開關(guān)S4、S5的所有位必須置ON,其他都可以關(guān)閉。
;2.最好把93C46跟24CXX存儲器從板上取下。
;本實(shí)例原提供者:pic16論壇會員 leef728 ,在此鳴謝leef728同志共享本實(shí)例.
;由深圳市乾龍盛電子科技有限公司技術(shù)部鐘閨田(工程師)(論壇網(wǎng)名:zhongruntian)驗正并加于整理、注釋.
;網(wǎng)站:PIC單片機(jī)學(xué)習(xí)網(wǎng) http://www.pic16.com 討論論壇:http://pic16.com/bbs/
;版權(quán)所有,轉(zhuǎn)載請注明出處,并不能去掉或改變文件中的說明文字。
;程序文件名“TIME.ASM"
;程序清單如下:
;************************************
LIST P=16F877A
INCLUDE"P16F877A.INC"
ERRORLEVEL -302
;***********************************
__CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC;
;***************文件寄存器定義**************
CBLOCK 0X20
WAW
YIW
BAW
QIW
GEW
SHW
TEMP
COUNTER
S3
DAA
STATUS_TMP
W_TMP
ENDC
;********************程序開始****************
ORG 0000H
NOP ;復(fù)位地址
GOTO MAIN
ORG 0004H
;********************中斷處理程序***********
MOVWF W_TMP
SWAPF STATUS,W
CLRF STATUS
MOVWF STATUS_TMP ;以上4條指令為中斷現(xiàn)場保護(hù)
BCF INTCON,2 ;清除TMRO中斷標(biāo)志位
MOVF TEMP,W ;時間存放單元的地址
MOVWF FSR
MOVF INDF,W ;取得某一位的時間值
CALL BMA ;查表得時間的顯示代碼
MOVWF PORTC ;送數(shù)碼管顯示
COMF DAA,W ;位碼取反
MOVWF PORTA ;點(diǎn)亮相應(yīng)的數(shù)碼管
RLF DAA,F ;準(zhǔn)備點(diǎn)亮下一位
INCF TEMP,F ;下一時間存放單元地址
BTFSS DAA,6 ;是否顯示完六位
GOTO RT
MOVLW 01H ;是,重新開始新一輪顯示
MOVWF DAA
MOVLW 20H ;重新獲取時間單元的地址
MOVWF TEMP
RT
SWAPF STATUS_TMP,W ;中斷現(xiàn)場恢復(fù)
MOVWF STATUS
SWAPF W_TMP,F
SWAPF W_TMP,W
MOVLW 0XE0 ;賦定時器初值
MOVWF TMR0
RETFIE
;*******************主程序開始****************
MAIN
BANKSEL TRISA ;選擇體1
MOVLW 00H
MOVWF TRISA ;PORTA設(shè)置為輸出
MOVWF TRISC ;PORTC設(shè)置為輸出
MOVLW 06H
MOVWF ADCON1 ;設(shè)置A口為普通數(shù)字口
BANKSEL INTCON
MOVLW 00H
MOVWF YIW
MOVWF WAW
MOVWF QIW
MOVWF BAW
MOVWF SHW
MOVWF GEW ;以上7條指令清零時間
MOVWF DAA
MOVLW 20H
MOVWF TEMP ;時間存放單元地址
BSF STATUS,RP0
MOVLW 0X05
MOVWF OPTION_REG ;分頻器給TMR0做定時用,且分頻比1:4
BCF STATUS,RP0
BSF INTCON,7 ;開啟中斷總允許位GIE
BSF INTCON,5 ;開啟TMRO中斷允許位
BCF INTCON,2 ;清除TMRO中斷標(biāo)志位
MOVLW 0XE0 ;TMRO賦初值
MOVWF TMR0
CLRF DAA
INCF DAA,F ;顯示位設(shè)置
;**************************************************************
KS
CALL DELAY ;調(diào)用200ms定時程序
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY ;調(diào)用5次,剛好1s
INCF GEW,F
MOVF GEW,W ;判斷秒的個位是否夠10
XORLW .10
BTFSS STATUS,Z
GOTO KS ;是,秒的個位清0,秒的十位加1
INCF SHW,F
CLRF GEW
CLRF STATUS
MOVF SHW,W
XORLW .6 ;判斷秒的十位是否為6(1分鐘60秒)
BTFSS STATUS,Z
GOTO KS
INCF BAW,F ;是,秒的十位清0,分的個位加1
CLRF SHW
CLRF STATUS
MOVF BAW,W
XORLW .10 ;判斷分的各位是否夠10
BTFSS STATUS,Z
GOTO KS
INCF QIW,F ;是,分的個位清0,分的十位加1
CLRF BAW
CLRF STATUS
MOVF QIW,W
XORLW .6