專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命
提供開發(fā)工具、應(yīng)用測試 完善的開發(fā)代碼案例庫分享
從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無限潛能!
提供新的芯片及解決方案,提升客戶產(chǎn)品競爭力
提供最新的單片機(jī)資訊,行業(yè)消息以及公司新聞動態(tài)
![]() |
![]() |
中國·深圳市龍崗區(qū)坂田環(huán)城南路坂田國際中心C2棟815
4007-888-234
enroo@enroo.com
當(dāng)前位置:單片機(jī)開發(fā)>>技術(shù)支持>>正文
0
點(diǎn)擊次數(shù):856次 更新時間:2012-08-22
;****************************************************************
LIST P=16F84A,R=DEC ;MCU:16F84,默認(rèn)數(shù)制為十進(jìn)制
;-----------------------------------------------
__CONFIG B'11111111110001';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC
;沒有代碼保護(hù)
;看門狗關(guān)閉
;上電廷時器開啟
;振蕩器模式為XT
;---------------------
RTCC EQU 01H ;計數(shù)器
PC EQU 02H ;程序計數(shù)器
STATUS EQU 03H ;狀態(tài)寄存器
PORTA EQU 05H
PORTB EQU 06H
INTCON EQU 0BH
OPTION_REG EQU 1H ;81H
TRISA EQU 5H
TRISB EQU 6H
;-----------------------STATUS
C EQU 0
Z EQU 2
RP0 EQU 5 ;寄存器體選
;-------------------------INTCON
T0IF EQU 2 ;定時器0溢出中斷標(biāo)志位
T0IE EQU 5 ;定時器0溢出中斷允許/禁止
GIE EQU 7 ;總中斷允許/禁止
;-------------------------
TABADD EQU 13H ;轉(zhuǎn)換數(shù)碼管地址
FLAGS EQU 14H ;顯示位選標(biāo)志位
DISPBUF_H EQU 15H ;顯示器秒拾位
DISPBUF_L EQU 16H ;顯示器秒個位
DIGIT EQU 1AH ;5ms計數(shù)器
W_TEMP EQU 1BH ;W現(xiàn)場保護(hù)寄存器
STATUS_TEMP EQU 1CH ;STATUS現(xiàn)場保護(hù)寄存器
;--------------------
ORG 0000H
GOTO MAIN
ORG 004H
TMR0SERV
MOVWF W_TEMP ;現(xiàn)場保護(hù)
SWAPF STATUS,W ;用SWAPF才不會影響標(biāo)志位
MOVWF STATUS_TEMP ;將W和STATUS存入各保護(hù)寄存器
MOVLW 100 ;送定時器初值
MOVWF RTCC
BCF INTCON,T0IF ;清定時器0溢出中斷標(biāo)志位
MOVLW 0FFH
MOVWF PORTB ;先熄滅數(shù)碼管以免閃爍
BSF PORTA,1
BSF PORTA,2
MOVLW TABLE
MOVWF TABADD ;將轉(zhuǎn)換表的首地址存入TABADD
MOVFW DISPBUF_L ;計數(shù)值(W)與轉(zhuǎn)換表的起始地址相加
BTFSS FLAGS,1 ;FLAGS1位為1時,顯示低位
MOVFW DISPBUF_H
ADDWF TABADD,W
CALL CONVERT ;存入W后調(diào)用轉(zhuǎn)換表子程序
MOVWF PORTB ;送RB口顯示
BTFSS FLAGS,1 ;根據(jù)標(biāo)志位選擇是點(diǎn)亮那一個數(shù)碼管
BCF PORTA,1
BTFSC FLAGS,1
BCF PORTA,2
COMF FLAGS,1
INCF DIGIT,1
MOVLW 200 ;計數(shù)值為200后不再加1
XORWF DIGIT,0
BNZ TIMEND
CLRF DIGIT
INCF DISPBUF_L,1 ;秒個位加1
MOVLW 10
XORWF DISPBUF_L,0
BNZ TIMEND
CLRF DISPBUF_L
INCF DISPBUF_H,1 ;秒拾位加1
MOVLW 10
XORWF DISPBUF_H,0
BNZ TIMEND
CLRF DISPBUF_H
TIMEND
SWAPF STATUS_TEMP,W ;恢復(fù)中斷前STATUS,W的值
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W ;(用SWAPF才不會影響STATUS的值)
RETFIE
;------------------------------------------------
MAIN
CLRF PORTA
CLRF PORTB ;初始化IO口
BSF STATUS,RP0 ;設(shè)置寄存器體1
MOVLW 00000000B
MOVWF TRISA
MOVLW 00000000B
MOVWF TRISB
MOVLW 10000100B
MOVWF OPTION_REG ;預(yù)分頻器分配給定時器0,分頻比1:32
BCF STATUS,RP0 ;恢復(fù)寄存器體0
MOVLW 100
MOVWF RTCC ;定時器送初值(256-100)*32US=4.992MS,每4.992MS一次中斷
MOVLW 0FFH ;先讓數(shù)碼管全部不顯示
MOVWF PORTB
CLRF DIGIT ;顯示計數(shù)器清0
CLRF DISPBUF_L ;數(shù)碼管先顯示00
CLRF DISPBUF_H
BCF INTCON,T0IF
BSF INTCON,T0IE ;定時器0溢出中斷允許
BSF INTCON,GIE ;總中斷允許
;--------------------------------------------------
LOOP
GOTO LOOP ;循環(huán)掃描
CONVERT
MOVWF PC ;將W寄存器內(nèi)的7段顯示碼地址放入PC
TABLE ;PC執(zhí)行新地址指令, 跳到相對的地址執(zhí)行?
RETLW 081H ;0 ;RETLW指令,將七段顯示碼存入W后返回
RETLW 0E7H ;1
RETLW 092H ;2
RETLW 0A2H ;3
RETLW 0E4H ;4
RETLW 0A8H ;5
RETLW 088H ;6
RETLW 0E3H ;7
RETLW 080H ;8
RETLW 0A0H ;9
;----- -----------------------------------------------
END