⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 测试.s

📁 ISD1720芯片实现录音,定点录音,播放,定点播放等.
💻 S
📖 第 1 页 / 共 5 页
字号:
	xjmp L80
L84:
	.dbline 27
;    case 0x7B:key=11;break;//*
	ldi R20,11
	.dbline 27
	xjmp L80
L85:
	.dbline 28
;    case 0x77:key=15;break;//=
	ldi R20,15
	.dbline 28
	xjmp L80
L86:
	.dbline 29
;    case 0xBE:key=1;break;//1
	ldi R20,1
	.dbline 29
	xjmp L80
L87:
	.dbline 30
;    case 0xBD:key=2;break;//2
	ldi R20,2
	.dbline 30
	xjmp L80
L88:
	.dbline 31
;    case 0xBB:key=3;break;//3
	ldi R20,3
	.dbline 31
	xjmp L80
L89:
	.dbline 32
;    case 0xB7:key=14;break;//-
	ldi R20,14
	.dbline 32
	xjmp L80
L90:
	.dbline 33
;    case 0xDE:key=4;break;//4
	ldi R20,4
	.dbline 33
	xjmp L80
L91:
	.dbline 34
;    case 0xDD:key=5;break;//5
	ldi R20,5
	.dbline 34
	xjmp L80
L92:
	.dbline 35
;    case 0xDB:key=6;break;//6
	ldi R20,6
	.dbline 35
	xjmp L80
L93:
	.dbline 36
;    case 0xD7:key=13;break;//+
	ldi R20,13
	.dbline 36
	xjmp L80
L94:
	.dbline 37
;    case 0xEE:key=7;break;//7
	ldi R20,7
	.dbline 37
	xjmp L80
L95:
	.dbline 38
;    case 0xED:key=8;break;//8
	ldi R20,8
	.dbline 38
	xjmp L80
L96:
	.dbline 39
;    case 0xEB:key=9;break;//9
	ldi R20,9
	.dbline 39
	xjmp L80
L97:
	.dbline 40
;    case 0xE7:key=12;break;//C
	ldi R20,12
	.dbline 40
	xjmp L80
L79:
	.dbline 41
;    default:key=16;
	ldi R20,16
	.dbline 42
;    }
L80:
	.dbline 43
;     return key;}
	mov R16,R20
	.dbline -2
L75:
	.dbline 0 ; func end
	xjmp pop_xgsetF00C
	.dbsym r j 10 c
	.dbsym r key 20 c
	.dbsym r i 22 c
	.dbend
	.dbfunc e key_press _key_press fc
;              j -> R20
;              i -> R20
	.even
_key_press::
	st -y,R20
	.dbline -1
	.dbline 46
; 
; uchar key_press()
; {   uchar i,j;
	.dbline 47
;     DDRD=0XFF;
	ldi R24,255
	out 0x11,R24
	.dbline 48
;     PORTD=0XF0;
	ldi R24,240
	out 0x12,R24
	.dbline 49
; 	DDRD=0X0F;
	ldi R24,15
	out 0x11,R24
	.dbline 50
; 	delay_ms(1);
	ldi R16,1
	ldi R17,0
	xcall _delay_ms
	.dbline 51
; 	i=PIND;
	in R20,0x10
	.dbline 52
; 	if(i==0xF0) j = 0;
	cpi R20,240
	brne L102
X45:
	.dbline 52
	clr R20
	xjmp L103
L102:
	.dbline 53
; 	else j = 1;
	ldi R20,1
L103:
	.dbline 54
; 	return j;
	mov R16,R20
	.dbline -2
L101:
	.dbline 0 ; func end
	ld R20,y+
	ret
	.dbsym r j 20 c
	.dbsym r i 20 c
	.dbend
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\4X4键盘.c
_data_zi::
	.blkb 27
	.area idata
	.byte 194,188,210,244,178,165,183,197,181,218,48,49,50,51,52,53
	.byte 54,55,56,57,182,206,178,193,179,253,0
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\4X4键盘.c
	.dbfile E:\写的程序\AVR(C)\测试.c
	.dbsym e data_zi _data_zi A[27:27]c
_data_ziju::
	.blkb 11
	.area idata
	.byte 194,188,210,244,181,218,48,49,182,206,0
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.dbsym e data_ziju _data_ziju A[11:11]c
_caToneAdd::
	.blkb 2
	.area idata
	.word 16
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.blkb 2
	.area idata
	.word 19
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.blkb 2
	.area idata
	.word 20
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.blkb 2
	.area idata
	.word 23
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.blkb 2
	.area idata
	.word 24
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.blkb 2
	.area idata
	.word 27
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.blkb 2
	.area idata
	.word 28
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.blkb 2
	.area idata
	.word 31
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.blkb 2
	.area idata
	.word 32
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.blkb 2
	.area idata
	.word 35
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.blkb 2
	.area idata
	.word 36
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.blkb 2
	.area idata
	.word 39
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.blkb 2
	.area idata
	.word 40
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.blkb 2
	.area idata
	.word 43
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.blkb 2
	.area idata
	.word 44
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.blkb 2
	.area idata
	.word 47
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.blkb 2
	.area idata
	.word 48
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.blkb 2
	.area idata
	.word 51
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.blkb 2
	.area idata
	.word 52
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.blkb 2
	.area idata
	.word 55
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.blkb 2
	.area idata
	.word 56
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.blkb 2
	.area idata
	.word 59
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.blkb 2
	.area idata
	.word 60
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.blkb 2
	.area idata
	.word 63
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.blkb 2
	.area idata
	.word 64
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.blkb 2
	.area idata
	.word 67
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.dbsym e caToneAdd _caToneAdd A[52:26]i
_APCL::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.dbsym e APCL _APCL c
_APCH::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.dbsym e APCH _APCH c
	.area text(rom, con, rel)
	.dbfile E:\写的程序\AVR(C)\测试.c
	.dbfunc e spi_sent_init _spi_sent_init fV
	.even
_spi_sent_init::
	.dbline -1
	.dbline 52
; #include <iom16v.h>
; #include <macros.h>
; #include "12864显示.c"
; #include"4X4键盘.c"
; //#include "延时子程序.c"
; #define uchar unsigned char
; #define uint unsigned int
; /*****************************************************
; /             要播放或要录音的开始与结果地址
; **********************************************************/
; uchar data_zi[]={"录音播放第0123456789段擦除"};
; uchar data_ziju[]={"录音第01段"}; 
; uint caToneAdd[]={0x0010,0x0013,0x0014,0x0017,0x0018,0x001b,0x001c,0x001f,
;                         0x0020,0x0023,0x0024,0x0027,0x0028,0x002b,0x002c,0x002f,
; 						0x0030,0x0033,0x0034,0x0037,0x0038,0x003b,0x003c,0x003f,
; 						0x0040,0x0043};     
; 
; #define  PU                     0x11   //POWER UP 01
; #define  STOP                   0x12  //停止   02
; #define  RESET                  0x13  //复位  03
; #define  CLI_INT                0x14  //清除中断和EOM位  04 
; #define  RD_STATUS              0x15  //读取状态寄存器,当前地址 05
; #define  RD_PLAY_PTR            0x16  //读取状态寄存器,当前地址和播放指针 06
; #define  PD                     0x17  //POWER DOWN 07
; #define  RD_REC_PTR             0x18  //读取状态寄存器,当前地址和录音指针 08
; #define  RD_DEVID               0x19  //读取器件ID 09
; #define  PLAY                   0x50  //播放
; #define  REC                    0x51  //录音
; #define  FWD                    0x58  //下一曲
; #define  ERASE                  0X52  //擦除当前曲目
; #define  G_ERASE                0x53  //擦除全部曲目除了提示音 43
; #define  RD_APC                 0x54  //读取状态寄存器,当前地址和APC寄存器 44
; #define  WR_APC1                0x55  //将<D11:D0>的数据写进APC寄存器,并由VOL管脚调节音量 45
; #define  WR_APC2                0x75  //将<D11:D0>的数据写进APC寄存器,并由<D2:D0>调节音量 65
; #define  WR_NVCFG               0x56  //将APC的内容写到NVCFG中 46
; #define  CHK_MEM                0x59   //检查环形存储结构 49
; #define  SET_PLAY               0x90  //从<S10:S0>开始播放,直到<E10:E0>或EOM 80
; #define  SET_REC                0x91   //从<S10:S0>开始录音,直到<E10:E0> 81
; #define  SET_ERASE              0x92  //擦除<S10:S0>到<E10:E0>的内容 82
; 
; #define SS_1 PORTB|=(1<<PB4)  //停止SPI
; 
; uchar  SR0_L; //SR0的低位 
; uchar  SR0_H;  //SR0的高位
; uchar  SR1;  //SR1寄存器
; uchar ID,APCL=0,APCH=0;//ID和APC寄存器
; /**************************************************************************  
; *    函数原型: ISD_SendData(unsigned int Data)  
; *    功    能: SPI发送数据  
; **************************************************************************/  
; void spi_sent_init(void)
; { PORTB |= (1<<PB4)|(1<<PB5)|(1<<PB6)|(1<<PB7); 	
	.dbline 52
	in R24,0x18
	ori R24,240
	out 0x18,R24
	.dbline 53
;   DDRB |= (1<<DDB5)|(1<<DDB7)|(1<<DDB4);       //设置MOSI,SCK和SS为输出 
	in R24,0x17
	ori R24,176
	out 0x17,R24
	.dbline 54
;   SPCR = (1<<SPE)|(1<<DORD)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0);//设置为主机,LSB先发送
	ldi R24,115
	out 0xd,R24
	.dbline 55
;   SPSR = 0x00;              //预分频为128
	clr R2
	out 0xe,R2
	.dbline -2
L104:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e ISD_SendData _ISD_SendData fc
;           sign -> R10
;           Data -> R16,R17
	.even
_ISD_SendData::
	st -y,R10
	.dbline -1
	.dbline 59
; }
; 
; unsigned char ISD_SendData(unsigned int Data)
; { 
	.dbline 61
;   unsigned char sign;
;   PORTB &=~ (1<<PB4);            //强制接收方进入从模式
	cbi 0x18,4
	.dbline 62
;   SPCR |= (1<<MSTR);             // MSTR有时会被清零,这里强制进入主机模式
	sbi 0xd,4
	.dbline 63
;   SPDR = Data;              //启动数据传输 
	out 0xf,R16
L106:
	.dbline 64
;   while(!(SPSR&(1<<SPIF)));      //等待传输结束 
L107:
	.dbline 64
	sbis 0xe,7
	rjmp L106
X46:
	.dbline 65
;   sign=SPSR;
	in R10,0xe
	.dbline 66
;   sign=SPDR;
	in R10,0xf
	.dbline 68
;   //PORTB |= (1<<PB4);
;   return sign;            
	mov R16,R10
	.dbline -2
L105:
	.dbline 0 ; func end
	ld R10,y+
	ret
	.dbsym r sign 10 c
	.dbsym r Data 16 i
	.dbend
	.dbfunc e GetToneAdd _GetToneAdd fV
;       ipEndAdd -> y+0
;     ipStartAdd -> R18,R19
;           cNum -> R16
	.even
_GetToneAdd::
	.dbline -1
	.dbline 75
; }
; /**************************************************************************  
; *    函数原型: void GetToneAdd(uchar cNum, Uint  ipStartAdd, Uint  ipEndAdd);  
; *    功    能: 取出当前语音的首末地址  
; **************************************************************************/  
;   
; void GetToneAdd(uchar cNum, uint * ipStartAdd, uint * ipEndAdd){  
	.dbline 77
; 
;         *ipStartAdd=caToneAdd[cNum*2];  
	ldi R24,<_caToneAdd
	ldi R25,>_caToneAdd
	mov R30,R16
	clr R31
	lsl R30
	rol R31
	lsl R30
	rol R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	movw R30,R18
	std z+1,R3
	std z+0,R2
	.dbline 78
;         *ipEndAdd=caToneAdd[cNum*2+1];  
	mov R30,R16
	clr R31
	lsl R30
	rol R31
	adiw R30,1
	lsl R30
	rol R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldd R30,y+0
	ldd R31,y+1
	std z+1,R3
	std z+0,R2
	.dbline -2
L109:
	.dbline 0 ; func end
	ret
	.dbsym l ipEndAdd 0 pi
	.dbsym r ipStartAdd 18 pi
	.dbsym r cNum 16 c
	.dbend
	.dbfunc e ISD_PU _ISD_PU fV
	.even
_ISD_PU::
	.dbline -1
	.dbline 85
; }  
; 
; /**************************************************************************  
; *    函数原型: void ISD_PU(void);  
; *    功    能: 上电  
; **************************************************************************/  
; void  ISD_PU(void){  
	.dbline 86
;         ISD_SendData(PU);  
	ldi R16,17
	ldi R17,0
	xcall _ISD_SendData
	.dbline 87
;         ISD_SendData(0x00);  
	clr R16
	clr R17
	xcall _ISD_SendData
	.dbline 88
;         SS_1;  
	sbi 0x18,4
	.dbline 89
;     delay_ms(50);  
	ldi R16,50
	ldi R17,0
	xcall _delay_ms
	.dbline -2
L110:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e ISD_CHK_MEM _ISD_CHK_MEM fV
	.even
_ISD_CHK_MEM::
	.dbline -1
	.dbline 95
; }
; /**************************************************************************  
; *    函数原型: void ISD_CHK_MEM(void);  
; *    功    能: 空间检查  
; **************************************************************************/  
; void ISD_CHK_MEM(void){  
	.dbline 96
;         ISD_SendData(CHK_MEM);  
	ldi R16,89
	ldi R17,0
	xcall _ISD_SendData
	.dbline 97
;         ISD_SendData(0x00);  
	clr R16
	clr R17
	xcall _ISD_SendData
	.dbline 98
;         SS_1;  
	sbi 0x18,4
	.dbline 99
;         delay_ms(10);  
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline -2
L111:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e ISD_Play _ISD_Play fV
	.even
_ISD_Play::
	.dbline -1
	.dbline 106
; } 
; 
; /**************************************************************************  
; *    函数原型: void ISD_Play(void);  
; *    功    能: 播放 
; **************************************************************************/  
; void ISD_Play(void){  
	.dbline 107
;         ISD_SendData(PLAY);  
	ldi R16,80
	ldi R17,0
	xcall _ISD_SendData
	.dbline 108
;         ISD_SendData(0x00);
	clr R16
	clr R17
	xcall _ISD_SendData
	.dbline 109
; 		SS_1;    
	sbi 0x18,4
	.dbline 110
;         delay_ms(10);  
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline -2
L112:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e ISD_Stop _ISD_Stop fV
	.even
_ISD_Stop::
	.dbline -1
	.dbline 117
; }    
; /**************************************************************************  
; *    函数原型: void ISD_Stop(void);  
; *    功    能: 停止  
; **************************************************************************/  
;   
; void ISD_Stop(void){  
	.dbline 118
;         ISD_SendData(STOP);  
	ldi R16,18
	ldi R17,0
	xcall _ISD_SendData
	.dbline 119
;         ISD_SendData(0x00);  
	clr R16
	clr R17
	xcall _ISD_SendData
	.dbline 120
;         SS_1;  
	sbi 0x18,4
	.dbline 121
;     delay_ms(50);  
	ldi R16,50
	ldi R17,0
	xcall _delay_ms
	.dbline -2
L113:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e ISD_FWD _ISD_FWD fV
	.even
_ISD_FWD::
	.dbline -1
	.dbline 129
; }  
; 
; /**************************************************************************  
; *    函数原型: void ISD_FWD(void);  
; *    功    能: 下一曲  
; **************************************************************************/  
;   
; void ISD_FWD(void){  
	.dbline 130
;         ISD_SendData(FWD);  
	ldi R16,88
	ldi R17,0
	xcall _ISD_SendData
	.dbline 131
;         ISD_SendData(0x00);  
	clr R16
	clr R17

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -