📄 sl05.asm
字号:
;*****************************************
;*用声音(PC3) 控制喇叭(PA3)音乐程序发音。
;*AT90S8515 8MHz
;*双龙电子 www.sl.com.cn
;* liqing 2002.05.08
;*****************************************
.include "8515def.inc"
.org $000
rjmp sl05
.def TEMPDH =r2
.def TEMPDL =r3
.def CNT =r10
.def SCNN =r11
.def KEYN =r12
.def SCNK =r13
.def SCNDP =r14
.def KSNI =r15
.def TEMP =r16
.def TEMP1 =r17
.def TEMP2 =r18
.def TEMP3 =r19
.def SCNTT =r26 ;
.def MUSN =r22
.def TONL =r21
.def TONH =r20
.def PLYTON =r25
.def TONSET =r24
.def TONLNG =r23
.cseg
.org 0x06 ;TIM1_OVF定时器1溢出中断处理入口地址
intt1: RJMP OUTPM ;转定时器1溢出中断处理,发音周期到,
;则跳转到发音输出态
.cseg ;跳过中断区
.org 0x010 ;定时器1溢出中断处理程序。
;发音周期到,重新装入计数值,并由PC0输出
OUTPM: OUT TCNT1H,TONH ;重新将TONH新计时值载入TCNT1H内
OUT TCNT1L,TONL ;重新将TONH新计时值载入TCNL1H内
SBIS PORTA,03 ;先检测PA3是否为1而跳转
RJMP SETOP1 ;若PA3口为0,则跳转到SETOP1,令PA3转为1
SETOP0: CBI PORTA,03 ;若PA3为1,则令PA3转为1
LDI MUSN,$00 ;同时令MUSN为00值
RETI ;回中断前主程序,并令可再次中断返回
SETOP1: SBI PORTA,03 ;若PA3为1,则令PA3转为1
LDI MUSN,$01 ;同时令MUSN为01值
RETI ;回中断前主程序,并令可再次中断返回
.cseg
.org 0x020 ;
sl05:
ldi r17,$02 ;栈指针置为$025f
ldi r16,$5f
out sph,r17
out spl,r16
wdr ;在使用看门狗计时器前需重设看门狗计时器
ldi temp,$0F ;WDTCR地址$21设定以TEMP缓冲,令WDE=D3=1
out WDTCR,temp ;并令预除为2048ms,设定WDE=D3=1,输出到WDTCR内
LDI MUSN,$00 ;令MUSN为00值
ldi temp,$00 ;令TEMP暂存器放入00
OUT TCCR1A,TEMP ;将TEMP=00输出到TCCR1A内,禁止比较器及PWM动作
OUT TCCR1B,TEMP ;将TEMP=00输出到TCCR1A内,停止TC1计时及捕捉
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -