單片機(jī)打鈴器設(shè)計(jì)
;**** 單片機(jī)打鈴器設(shè)計(jì) **************************************************
;* 編號(hào):LRDZAVR0100
;* 標(biāo)題: 32點(diǎn)打鈴器例程
;* 文件名:timecontr.asm
;* 版本: 1.0
;* 開始日期: 02.06.13
;* 目標(biāo)MCU: AT90S8515
;* 技術(shù)支持: http://www.dianz.cn
;* 硬件結(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
;****單片機(jī)打鈴器設(shè)計(jì)主程序*****************************************************
.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
;****單片機(jī)打鈴器參數(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)。
相關(guān)推薦
技術(shù)專區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線
- 開關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車電子
- 轉(zhuǎn)換器
- 電源管理
- 信號(hào)放大器
評(píng)論