?? at90s8515打鈴程序.asm
字號(hào):
;**** AVR編程說明 ********************************************************************
;* 編號(hào):LRDZAVR0100
;* 標(biāo)題: 32點(diǎn)打鈴器例程
;* 文件名:timecontr.asm
;* 版本: 1.0
;* 開始日期: 02.06.13
;* 目標(biāo)MCU: AT90S8515
;* 技術(shù)支持: webmaster@lrdz.51.net
;* 硬件結(jié)構(gòu): PA0-5對(duì)應(yīng)6個(gè)LED數(shù)顯管的位 ,PC0-7對(duì)應(yīng)各LED數(shù)顯管的段 ,PB4-7為鍵盤。
;* 軟件描述: 上電后,時(shí)鐘從00.00.00(時(shí)/分/秒)自動(dòng)走時(shí),在走時(shí)狀態(tài)時(shí) , 按PB4(設(shè)定
;* 鍵)超過3秒可循環(huán)選擇調(diào)整時(shí)間/工作參數(shù) ,接著按PB5以確定選擇的操作 ,進(jìn)入調(diào)整操作后 ,
;* 按PB5選擇欲調(diào)整參數(shù),按PB6(增加鍵)完成調(diào)整參數(shù)操作 。按PB7,進(jìn)入時(shí)控運(yùn)行,PB1亮,
;* 再按PB7停止時(shí)控運(yùn)行,回顯走時(shí)。在定時(shí)到時(shí),PB0點(diǎn)亮。
;*************************************************************************************
.device AT90S8515
.include "8515def.inc"
.equ DISBUF = $0060 ;顯示緩沖區(qū)起始地址
.equ TIMEDIS = $0066 ;時(shí)鐘時(shí)分秒存放單元
.equ XSDBZ = $0073 ;小數(shù)點(diǎn)位標(biāo)志
.equ DISTBL = $0f00 ;顯示字符編碼表起始地址
.equ TIMECTR = $0010 ;32段時(shí)間控制表首址(EEPRON)
.equ TIMECBZ = $0080 ;控制時(shí)間到標(biāo)志
.cseg
.org $0000
rjmp RESET
.org $0007
rjmp TIM0_OVF
;****主程序***************************************************************************
.def cntms =r9
.def hour =r10
.def minute =r11
.def second =r12
.def EEdwr =r16
.def EEawr =r17
.def EEawrh =r18
.def EEdrd =r16
.def EEard =r17
.def EEardh =r18
.def temp =r20
.def temp1 =r21
.def temp2 =r22
.def temp3 =r23
.def temp4 =r24
.def TIM0INT =r19
.org $0020
RESET: ldi temp,low(ramend) ;設(shè)置堆棧指針
out spl,temp
ldi temp,high(ramend)
out sph,temp
ldi temp,0b11111111 ;設(shè)置各口線輸入輸出狀態(tài)
out ddra,temp
ldi temp,0b00000011
out ddrb,temp
ldi temp,0b11111111
out ddrc,temp
ldi zl,TIMECBZ
clr zh
clr temp
st y,temp
clr r9 ;清各工作寄存器
clr r10
clr r11
clr r12
clr r13
clr r14
clr r15
clr r16
clr r17
clr r18
clr r19
clr r25
ldi temp,$5
out tccr0,temp ;T0設(shè)置ck/1024分頻
ldi temp,256-195
out tcnt0,temp ;裝T0時(shí)間常數(shù)
res1: ldi temp,$02 ;允許T0中斷,并計(jì)時(shí)
out timsk,temp
sei ;開中斷
res2: clr r6
clr r7
sbi PORTb,1
sbi PORTB,0
res3: ldi temp,$af
res4: rcall colodis ;時(shí)鐘走時(shí)顯示
dec temp
brne res4
sbis pinb,7 ;鍵掃描
rjmp PB7M
sbis pinb,4
rjmp BP4M ;去參數(shù)設(shè)置
rjmp res3
;****《系統(tǒng)功能程序》
.org $0080 ;定義系統(tǒng)功能程序存放區(qū)首址
;****32點(diǎn)打鈴器工作程序*************************************************************************
PB7M: cbi PORTb,1 ;置運(yùn)行指示燈亮
clr r25
clr r7
GNCX11:ldi r17,TIMECTR ;首個(gè)控制點(diǎn)EEPRON地址
clr r18
lsl r25
lsl r25
add r17,r25 ;取得EEPRON中控制點(diǎn)地址(Aj=A0+4*j),A=(r17),j=(r25)
lsr r25
lsr r25
rcall EERead
cpi r16,0
breq GNCX12 ;r16=(r17)=0為“ON”
inc r25
cpi r25,31
brmi GNCX11
rjmp GNCX16
GNCX12:inc r17
rcall EERead
cp r16,r10
brne GNCX13
inc r17
rcall EERead
cp r16,r11
brne GNCX14
inc r17
rcall EERead
mov r7,r16
inc r7
cbi PORTb,0
rjmp GNCX15
GNCX13:dec r17
inc r25
rjmp GNCX11
GNCX14:dec r17
dec r17
inc r25
rjmp GNCX11
GNCX15:cpi TIM0INT,1
brne GNCX17
clr TIM0INT
dec r7
brne GNCX17
clr r7
sbi PORTb,0
rjmp GNCX16
GNCX17:rcall colodis
sbic pinb,7
rjmp GNCX15
rjmp res2
GNCX16:ldi temp,$5f
GNCX18:rcall colodis
dec temp
brne GNCX18
sbic pinb,7
rjmp GNCX11
rjmp res2
;****參數(shù)設(shè)置
BP4M: ldi temp3,$ff
ldi temp4,$f
BP4M1: nop
rcall colodis
sbic pinb,4
rjmp res1
dec temp3 ;PB4有按下
brne BP4M1
inc temp3
dec temp4
brne BP4M1
ldi temp3,$ff ;超3秒進(jìn)入
ldi temp4,$f
BP4M2: clr yh
ldi yl,low(DISBUF) ;設(shè)置顯示cloc.
ldi temp,25
st y+,temp
st y+,temp
ldi temp,18
st y+,temp
ldi temp,19
st y+,temp
ldi temp,20
st y+,temp
ldi temp,18
st y,temp
ldi zl,low(XSDBZ)
clr zh
ldi temp,0b00100000 ;b0-5對(duì)應(yīng)LED自左到右1-6位的小數(shù)點(diǎn),置“1”在該位置小數(shù)點(diǎn)。
st z,temp
rcall display
sbis pinb,5
rjmp cloc ;進(jìn)入時(shí)間設(shè)置
dec temp3
brne BP4M2
inc temp3
dec temp4
brne BP4M2
BP4M3: ldi temp3,$ff
ldi temp4,$f
BP4M4: clr yh
ldi yl,low(DISBUF) ;設(shè)置顯示labor.
ldi temp,25
st y+,temp
ldi temp,19
st y+,temp
ldi temp,10
st y+,temp
ldi temp,11
st y+,temp
ldi temp,20
st y+,temp
ldi temp,22
st y,temp
ldi zl,low(XSDBZ)
clr zh
ldi temp,0b00100000 ;b0-5對(duì)應(yīng)LED自左到右1-6位的小數(shù)點(diǎn),置“1”在該位置小數(shù)點(diǎn)。
st z,temp
rcall display
sbis pinb,5
rjmp GNCS1 ;進(jìn)入工作參數(shù)設(shè)置
dec temp3
brne BP4M4
inc temp3
dec temp4
brne BP4M4
sbic pinb,4
rjmp BP4M
rjmp res1
;****時(shí)鐘調(diào)整******************************************************************
cloc: clr temp
out timsk,temp ;不許T0中斷
cli ;關(guān)中斷
rcall colodis
mov temp,r10
clr temp4
ldi temp1,20
ldi temp3,$80
cloc3: ldi yl,low(DISBUF)
add yl,temp4
sbic pinb,5 ;選擇時(shí)分秒
rjmp cloc4
dec temp1
brne cloc4
ldi temp1,80
inc temp4
inc temp4
add yl,temp4
cpi yl,$68
brmi cloc4
clr temp4
ldi yl,low(DISBUF)
cloc4: nop
sbic pinb,6 ;調(diào)整時(shí)分秒值
rjmp cloc8
dec temp3
brne cloc8
ldi temp3,$20
cloc5: cpi yl,$60
brne cloc6
inc r10
mov temp,r10
cpi temp,24
brmi cloc8
clr temp
clr r10
cloc6: cpi yl,$62
brne cloc7
inc r11
mov temp,r11
cpi temp,60
brmi cloc8
clr temp
clr r11
cloc7: cpi yl,$64
brne cloc8
inc r12
mov temp,r12
cpi temp,60
brmi cloc8
clr temp
clr r12
cloc8: cpi yl,$60
brne cloc9
ldi zl,low(XSDBZ)
clr zh
ldi temp,0b00000010 ;b0-5對(duì)應(yīng)LED自左到右1-6位的小數(shù)點(diǎn),置“1”在該位置小數(shù)點(diǎn)。
st z,temp
mov r16,r10
rjmp cloc11
cloc9: cpi yl,$62
brne cloc10
ldi zl,low(XSDBZ)
clr zh
ldi temp,0b00001000 ;b0-5對(duì)應(yīng)LED自左到右1-6位的小數(shù)點(diǎn),置“1”在該位置小數(shù)點(diǎn)。
st z,temp
mov r16,r11
cloc10: cpi yl,$64
brne cloc11
ldi zl,low(XSDBZ)
clr zh
ldi temp,0b00100000 ;b0-5對(duì)應(yīng)LED自左到右1-6位的小數(shù)點(diǎn),置“1”在該位置小數(shù)點(diǎn)。
st z,temp
mov r16,r12
cloc11: rcall bto
st y+,r3
st y,r4
rcall display
sbis pinb,4 ;退出
rjmp cloc12
rjmp cloc3
cloc12: ldi temp,$02
out timsk,temp ;允許T0中斷
sei ;開中斷
rjmp res1
;****32點(diǎn)打鈴器工作參數(shù)調(diào)整**********************************************************
GNCS1: clr r25 ;首個(gè)控制點(diǎn)
clr r22 ;r22為0顯示開關(guān)頁面,為1顯示h-xx頁面,為2顯示m-xx頁面,為3顯示c-xx頁面
ldi zl,low(XSDBZ)
clr zh
ldi r19,0b00000010
st z,r19
gncs: ldi r17,TIMECTR ;首個(gè)控制點(diǎn)EEPRON地址
clr r18
ldi yl,low(DISBUF) ;設(shè)置顯示緩沖區(qū)起始地址
clr yh
lsl r25
lsl r25
add r17,r25 ;取得EEPRON中控制點(diǎn)地址(Aj=A0+4*j),A=(r17),j=(r25)
lsr r25
lsr r25
mov r16,r25
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -