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

📄 tea5767.s

📁 用TEA5767 自己动手制作的收音机。效果很好
💻 S
字号:
	.module tea5767.c
	.area text(rom, con, rel)
	.dbfile tea5767.c
	.dbfunc e delay _delay fV
;              i -> R16,R17
	.even
_delay::
	.dbline -1
	.dbline 7
; #include<iom32v.h>
; #include<macros.h>
; #define uchar unsigned char 
; #define uint unsigned int 
; #define ulong unsigned long 
; void delay()
; {
	.dbline 8
; uint i=0;
	clr R16
	clr R17
	.dbline 9
; for (i=0;i<2000;i++)
	xjmp L5
L2:
	.dbline 10
L3:
	.dbline 9
	subi R16,255  ; offset = 1
	sbci R17,255
L5:
	.dbline 9
	cpi R16,208
	ldi R30,7
	cpc R17,R30
	brlo L2
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 i
	.dbend
	.area data(ram, con, rel)
	.dbfile tea5767.c
_radio_write_data::
	.blkb 2
	.area idata
	.byte 'i,40
	.area data(ram, con, rel)
	.dbfile tea5767.c
	.blkb 2
	.area idata
	.byte 160,19
	.area data(ram, con, rel)
	.dbfile tea5767.c
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile tea5767.c
	.dbsym e radio_write_data _radio_write_data A[5:5]c
	.area text(rom, con, rel)
	.dbfile tea5767.c
	.dbfunc e inputbyte _inputbyte fV
;            mid -> R20
;              i -> R22
;             CD -> R10
	.even
_inputbyte::
	xcall push_gset3
	mov R10,R16
	.dbline -1
	.dbline 14
; ;
; }
; unsigned char radio_write_data[5]={0x69,0x28,0xa0,0x13,0x00};   //要写入TEA5767的数据
; void inputbyte(uchar CD)  //写入一字节数据
; {
	.dbline 15
; uchar i,mid=0;
	clr R20
	.dbline 16
; for (i=0;i<8;i++)
	clr R22
	xjmp L10
L7:
	.dbline 17
; {
	.dbline 18
; mid=CD&0x80;
	mov R20,R10
	andi R20,128
	.dbline 19
; if (mid==0)
	brne L11
	.dbline 20
; PORTC&=~BIT(PA0);
	cbi 0x15,0
	xjmp L12
L11:
	.dbline 22
; else 
; PORTC|=BIT(PA0);
	sbi 0x15,0
L12:
	.dbline 23
	sbi 0x15,1
	.dbline 24
	xcall _delay
	.dbline 25
	cbi 0x15,1
	.dbline 26
	xcall _delay
	.dbline 27
	lsl R10
	.dbline 28
L8:
	.dbline 16
	inc R22
L10:
	.dbline 16
	cpi R22,8
	brlo L7
	.dbline -2
L6:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r mid 20 c
	.dbsym r i 22 c
	.dbsym r CD 10 c
	.dbend
	.area data(ram, con, rel)
	.dbfile tea5767.c
_radio::
	.blkb 4
	.area idata
	.word 33728,1327
	.area data(ram, con, rel)
	.dbfile tea5767.c
	.dbsym e radio _radio L
_N::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile tea5767.c
	.dbsym e N _N I
	.area text(rom, con, rel)
	.dbfile tea5767.c
	.dbfunc e GetKey _GetKey fV
	.even
_GetKey::
	xcall push_gset2
	.dbline -1
	.dbline 33
; PORTC|=BIT(PA1); 
; delay();
; PORTC&=~BIT(PA1);
; delay();
; CD=CD<<1;
; }
; }
; long radio=87000000;
; int N=0;
; void GetKey(void)	
; { 
	.dbline 34
; 		if(!(PINA&0x20)){
	sbic 0x19,5
	rjmp L14
	.dbline 34
	.dbline 35
; 		radio+=100000;
	ldi R20,160
	ldi R21,134
	ldi R22,1
	ldi R23,0
	lds R4,_radio+2
	lds R5,_radio+2+1
	lds R2,_radio
	lds R3,_radio+1
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	sts _radio+1,R3
	sts _radio,R2
	sts _radio+2+1,R5
	sts _radio+2,R4
	.dbline 36
; 		if (radio>108000000)
	ldi R20,0
	ldi R21,243
	ldi R22,111
	ldi R23,6
	cp R20,R2
	cpc R21,R3
	cpc R22,R4
	cpc R23,R5
	brge L16
	.dbline 37
; 		radio=87000000;
	ldi R20,192
	ldi R21,131
	ldi R22,47
	ldi R23,5
	sts _radio+1,R21
	sts _radio,R20
	sts _radio+2+1,R23
	sts _radio+2,R22
L16:
	.dbline 38
; 		N=(long)((radio-225000)*4)/32768;
	lds R4,_radio+2
	lds R5,_radio+2+1
	lds R2,_radio
	lds R3,_radio+1
	ldi R20,4
	ldi R21,0
	ldi R22,0
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	xcall empy32s
	ldi R20,160
	ldi R21,187
	ldi R22,13
	ldi R23,0
	movw R2,R16
	movw R4,R18
	sub R2,R20
	sbc R3,R21
	sbc R4,R22
	sbc R5,R23
	ldi R20,0
	ldi R21,128
	ldi R22,0
	ldi R23,0
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	movw R16,R2
	movw R18,R4
	xcall div32s
	sts _N+1,R17
	sts _N,R16
	.dbline 39
; 		PORTC|=BIT(PA2); 
	sbi 0x15,2
	.dbline 40
; 		inputbyte(N>>8);
	mov R16,R17
	clr R17
	sbrc R16,7
	com R17
	xcall _inputbyte
	.dbline 41
; 		inputbyte(N);
	lds R16,_N
	xcall _inputbyte
	.dbline 42
; 		inputbyte(0xa0);
	ldi R16,160
	xcall _inputbyte
	.dbline 43
; 		inputbyte(0x13);
	ldi R16,19
	xcall _inputbyte
	.dbline 44
; 		inputbyte(0x00);
	clr R16
	xcall _inputbyte
	.dbline 45
; 		PORTC&=~BIT(PA2);
	cbi 0x15,2
	.dbline 46
; 		delay();
	xcall _delay
	.dbline 48
; 		
; 		}
	xjmp L15
L14:
	.dbline 49
; 		else if(!(PINA&0x10)){
	sbic 0x19,4
	rjmp L18
	.dbline 49
	.dbline 50
; 		radio-=100000;
	ldi R20,160
	ldi R21,134
	ldi R22,1
	ldi R23,0
	lds R4,_radio+2
	lds R5,_radio+2+1
	lds R2,_radio
	lds R3,_radio+1
	sub R2,R20
	sbc R3,R21
	sbc R4,R22
	sbc R5,R23
	sts _radio+1,R3
	sts _radio,R2
	sts _radio+2+1,R5
	sts _radio+2,R4
	.dbline 51
; 		if (radio<87000000)
	ldi R20,192
	ldi R21,131
	ldi R22,47
	ldi R23,5
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brge L20
	.dbline 52
; 		radio=108000000;
	ldi R20,0
	ldi R21,243
	ldi R22,111
	ldi R23,6
	sts _radio+1,R21
	sts _radio,R20
	sts _radio+2+1,R23
	sts _radio+2,R22
L20:
	.dbline 53
; 		N=(long)((radio-225000)*4)/32768;
	lds R4,_radio+2
	lds R5,_radio+2+1
	lds R2,_radio
	lds R3,_radio+1
	ldi R20,4
	ldi R21,0
	ldi R22,0
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	xcall empy32s
	ldi R20,160
	ldi R21,187
	ldi R22,13
	ldi R23,0
	movw R2,R16
	movw R4,R18
	sub R2,R20
	sbc R3,R21
	sbc R4,R22
	sbc R5,R23
	ldi R20,0
	ldi R21,128
	ldi R22,0
	ldi R23,0
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	movw R16,R2
	movw R18,R4
	xcall div32s
	sts _N+1,R17
	sts _N,R16
	.dbline 54
; 		PORTC|=BIT(PA2); 
	sbi 0x15,2
	.dbline 55
; 		inputbyte(N>>8);
	mov R16,R17
	clr R17
	sbrc R16,7
	com R17
	xcall _inputbyte
	.dbline 56
; 		inputbyte(N);
	lds R16,_N
	xcall _inputbyte
	.dbline 57
; 		inputbyte(0xa0);
	ldi R16,160
	xcall _inputbyte
	.dbline 58
; 		inputbyte(0x13);
	ldi R16,19
	xcall _inputbyte
	.dbline 59
; 		inputbyte(0x00);
	clr R16
	xcall _inputbyte
	.dbline 60
; 		PORTC&=~BIT(PA2);
	cbi 0x15,2
	.dbline 61
; 		delay();
	xcall _delay
	.dbline 62
; 		}
L18:
L15:
	.dbline -2
L13:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
;              i -> R20
	.even
_main::
	.dbline -1
	.dbline 68
; 		
; 		
; }
; 
; void main()
; {
	.dbline 69
; uchar i=0;
	clr R20
	.dbline 70
; DDRC=0xff;
	ldi R24,255
	out 0x14,R24
	.dbline 71
; DDRA=0x00;
	clr R2
	out 0x1a,R2
	.dbline 72
; PORTA=0xff;
	out 0x1b,R24
	.dbline 73
; delay();
	xcall _delay
	.dbline 75
; //PORTC|=BIT(PA3); 
; PORTC|=BIT(PA4); 
	sbi 0x15,4
	xjmp L24
L23:
	.dbline 77
	.dbline 78
	xcall _GetKey
	.dbline 79
L24:
	.dbline 76
	xjmp L23
X0:
	.dbline -2
L22:
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend

⌨️ 快捷键说明

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