📄 boyin.s
字号:
.module boyin.c
.area lit(rom, con, rel)
L2:
.byte 170,170
.byte 170,170
.byte 170
.area text(rom, con, rel)
.dbfile G:\AVR系列\boyin\boyin.c
.dbfunc e main _main fV
; address -> y+0
; j -> R20
; i -> R22
; add -> R10
.even
_main::
sbiw R28,5
.dbline -1
.dbline 5
; /*/boyin.c*/
; //单片机控制语音芯片pm50放音程序
; #include<iom8v.h>
; void main() //控制语音芯片pm50放音主程序
; {
.dbline 7
; char i,j,add;
; char address[5]={0xaa,0xaa,0xaa,0xaa,0xaa};//存储语音芯片中语音段的地址
ldi R24,<L2
ldi R25,>L2
movw R30,R28
ldi R16,5
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
rcall asgncblk
.dbline 8
; DDRD|=0xa0; //设置PD5,6为输出口.PD5发送地址,PD6为时钟信号,
in R24,0x11
ori R24,160
out 0x11,R24
.dbline 9
; DDRD&=0xfb; //设置PD2为输入口.拉低时表示PM50播放完毕.
in R24,0x11
andi R24,251
out 0x11,R24
.dbline 10
; PORTD&=0x5f;
in R24,0x12
andi R24,95
out 0x12,R24
rjmp L4
L3:
.dbline 12
; while(1) //进入死循环
; {
.dbline 13
; for(j=0;j<5;j++) //连续播放五段录音
clr R20
rjmp L9
L6:
.dbline 14
; {
.dbline 15
; add=address[j];
movw R24,R28
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R10,z+0
.dbline 16
; if(!(PIND&0x04))
sbic 0x10,2
rjmp L10
.dbline 17
; for(i=0;i<8;i++) //发送八位地址
clr R22
rjmp L15
L12:
.dbline 18
.dbline 19
in R24,0x12
andi R24,223
out 0x12,R24
.dbline 20
mov R24,R10
andi R24,1
lsl R24
lsl R24
lsl R24
lsl R24
lsl R24
in R2,0x12
or R2,R24
out 0x12,R2
.dbline 21
sbi 0x12,7
.dbline 22
in R24,0x12
andi R24,127
out 0x12,R24
.dbline 23
lsr R10
.dbline 24
L13:
.dbline 17
inc R22
L15:
.dbline 17
cpi R22,8
brlo L12
L10:
.dbline 25
L7:
.dbline 13
inc R20
L9:
.dbline 13
cpi R20,5
brlo L6
.dbline 26
L4:
.dbline 11
rjmp L3
X0:
.dbline -2
L1:
adiw R28,5
.dbline 0 ; func end
ret
.dbsym l address 0 A[5:5]c
.dbsym r j 20 c
.dbsym r i 22 c
.dbsym r add 10 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -