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

📄 lesson8.s

📁 基于AVR的模数转换程序。是开发单片机必备的基本技巧。 本程序出自高手之手
💻 S
字号:
	.module lesson8.c
	.area text(rom, con, rel)
	.dbfile I:\AVR视频教程\视频教程\lesson8\lesson8/Skey.c
	.dbfunc e delay _delay fV
;              i -> R20,R21
;              j -> R22,R23
;             ms -> R16,R17
	.even
_delay::
	rcall push_gset2
	.dbline -1
	.dbline 2
; #include <iom16v.h>
; #include <macros.h>
	.dbline 4
; #define  uchar unsigned char
; #define  uint  unsigned int
	clr R20
	clr R21
	rjmp L5
L2:
	.dbline 5
; #include "Skey.c"
	.dbline 6
	clr R22
	clr R23
	rjmp L9
L6:
	.dbline 6
L7:
	.dbline 6
	subi R22,255  ; offset = 1
	sbci R23,255
L9:
	.dbline 6
	cpi R22,117
	ldi R30,4
	cpc R23,R30
	brlo L6
	.dbline 7
L3:
	.dbline 4
	subi R20,255  ; offset = 1
	sbci R21,255
L5:
	.dbline 4
	cp R20,R16
	cpc R21,R17
	brlo L2
	.dbline -2
	.dbline 8
; void spi_init()
; {
;      DDRB|=0XA0;
L1:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r j 22 i
	.dbsym r ms 16 i
	.dbend
	.dbfunc e key_press _key_press fc
;              j -> R16
	.even
_key_press::
	.dbline -1
	.dbline 11
; 	 DDRA|=BIT(PA1);
; 	 SPCR=0X57;
; }
	.dbline 13
; void ad5300(uchar daword)
; {
	in R24,0x11
	ori R24,15
	out 0x11,R24
	.dbline 14
;     uchar temp1=0,temp2=0,status;
	in R24,0x12
	ori R24,15
	out 0x12,R24
	.dbline 16
;     temp1|=daword<<4;//1101 1001
;     temp2|=daword>>4;
	in R24,0x11
	andi R24,240
	out 0x11,R24
	.dbline 18
; 	
; 	PORTA&=~BIT(PA1);
	in R16,0x10
	.dbline 19
; 	SPSR=0;
	andi R16,15
	.dbline 20
; 	SPDR=temp2;
	cpi R16,15
	brne L11
	.dbline 21
;     do
	.dbline 22
; 	{
	clr R16
	rjmp L10
L11:
	.dbline 25
; 	  status=SPSR;
; 	}while(!(status&=0X80));
; 	
	.dbline 26
; 	delay(10);
	ldi R16,1
	.dbline -2
L10:
	.dbline 0 ; func end
	ret
	.dbsym r j 16 c
	.dbend
	.dbfunc e key_scan _key_scan fc
;            key -> R20
	.even
_key_scan::
	rcall push_gset2
	.dbline -1
	.dbline 32
; 	SPSR=0;
; 	SPDR=temp1;
; 	do
; 	{
; 	  status=SPSR;
; 	}while(!(status&=0X80));
	.dbline 34
; 	SPSR=0;
; 	delay(10);
	ldi R16,10
	ldi R17,0
	rcall _delay
	.dbline 35
; 	PORTA|=BIT(PA1);
	rcall _key_press
	tst R16
	breq L14
	.dbline 36
; } 
	.dbline 37
; void main()
	in R20,0x10
	.dbline 38
; {
	andi R20,15
	.dbline 39
;     uchar i,data=128;
	mov R22,R20
	clr R23
	cpi R22,7
	ldi R30,0
	cpc R23,R30
	breq L22
	cpi R22,11
	ldi R30,0
	cpc R23,R30
	breq L21
	cpi R22,13
	ldi R30,0
	cpc R23,R30
	breq L20
	cpi R22,14
	ldi R30,0
	cpc R23,R30
	breq L19
	rjmp L16
X0:
	.dbline 40
;     DDRB=0XFF;
L19:
	.dbline 42
; 	spi_init();
; 	ad5300(0);
	clr R20
	.dbline 43
; 	ad5300(data);
	rjmp L24
L20:
	.dbline 45
; 	
; 	while(1)
	ldi R20,1
	.dbline 46
; 	{
	rjmp L24
L21:
	.dbline 48
; 	   if(key_press())
; 	   {
	ldi R20,2
	.dbline 49
; 	      i=key_scan();
	rjmp L24
L22:
	.dbline 51
; 		  switch(i)
; 		  {
	ldi R20,3
	.dbline 52
; 		    case 0:
	rjmp L24
L16:
	.dbline 54
; 			  data=data+16;
; 			  break;
	clr R20
	.dbline 55
; 			case 1:
L23:
	.dbline 56
L24:
	.dbline 56
; 			  data=data-16;
	rcall _key_press
	tst R16
	brne L23
	.dbline 57
; 			  break;
	rjmp L15
L14:
	.dbline 59
; 			case 2:
; 			  data=0;
	.dbline 60
; 			  break;
	clr R20
	.dbline 61
; 			 case 3:
L15:
	.dbline 62
; 			  data=255;
	mov R16,R20
	.dbline -2
L13:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r key 20 c
	.dbend
	.dbfile I:\AVR视频教程\视频教程\lesson8\lesson8\lesson8.c
	.dbfunc e spi_init _spi_init fV
	.even
_spi_init::
	.dbline -1
	.dbline 7
	.dbline 8
	in R24,0x17
	ori R24,160
	out 0x17,R24
	.dbline 9
	sbi 0x1a,1
	.dbline 10
	ldi R24,87
	out 0xd,R24
	.dbline -2
	.dbline 11
L26:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e ad5300 _ad5300 fV
;          temp2 -> R22
;          temp1 -> R20
;         status -> R22
;         daword -> R10
	.even
_ad5300::
	rcall push_gset3
	mov R10,R16
	.dbline -1
	.dbline 13
	.dbline 14
	clr R20
	.dbline 14
	clr R22
	.dbline 15
	mov R24,R10
	andi R24,#0x0F
	swap R24
	or R20,R24
	.dbline 16
	mov R24,R10
	swap R24
	andi R24,#0x0F
	or R22,R24
	.dbline 18
	cbi 0x1b,1
	.dbline 19
	clr R2
	out 0xe,R2
	.dbline 20
	out 0xf,R22
L28:
	.dbline 22
	.dbline 23
	in R22,0xe
	.dbline 24
L29:
	.dbline 24
	mov R24,R22
	andi R24,128
	mov R22,R24
	tst R24
	breq L28
	.dbline 26
	ldi R16,10
	ldi R17,0
	rcall _delay
	.dbline 27
	clr R2
	out 0xe,R2
	.dbline 28
	out 0xf,R20
L31:
	.dbline 30
	.dbline 31
	in R22,0xe
	.dbline 32
L32:
	.dbline 32
	mov R24,R22
	andi R24,128
	mov R22,R24
	tst R24
	breq L31
	.dbline 33
	clr R2
	out 0xe,R2
	.dbline 34
	ldi R16,10
	ldi R17,0
	rcall _delay
	.dbline 35
	sbi 0x1b,1
	.dbline -2
	.dbline 36
L27:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r temp2 22 c
	.dbsym r temp1 20 c
	.dbsym r status 22 c
	.dbsym r daword 10 c
	.dbend
	.dbfunc e main _main fV
;           data -> R20
;              i -> R10
	.even
_main::
	.dbline -1
	.dbline 38
	.dbline 39
	ldi R20,128
	.dbline 40
	ldi R24,255
	out 0x17,R24
	.dbline 41
	rcall _spi_init
	.dbline 42
	clr R16
	rcall _ad5300
	.dbline 43
	mov R16,R20
	rcall _ad5300
	rjmp L36
L35:
	.dbline 46
	.dbline 47
	rcall _key_press
	tst R16
	breq L38
	.dbline 48
	.dbline 49
	rcall _key_scan
	mov R10,R16
	.dbline 50
	mov R22,R10
	clr R23
	cpi R22,0
	cpc R22,R23
	breq L43
X1:
	cpi R22,1
	ldi R30,0
	cpc R23,R30
	breq L44
	cpi R22,2
	ldi R30,0
	cpc R23,R30
	breq L45
	cpi R22,3
	ldi R30,0
	cpc R23,R30
	breq L46
	rjmp L40
X2:
	.dbline 51
L43:
	.dbline 53
	subi R20,240    ; addi 16
	.dbline 54
	rjmp L41
L44:
	.dbline 56
	subi R20,16
	.dbline 57
	rjmp L41
L45:
	.dbline 59
	clr R20
	.dbline 60
	rjmp L41
L46:
	.dbline 62
	ldi R20,255
	.dbline 63
; 			  break;      
L40:
L41:
	.dbline 65
; 		  }
; 		  ad5300(data);
	mov R16,R20
	rcall _ad5300
	.dbline 66
; 	   }
L38:
	.dbline 67
L36:
	.dbline 45
	rjmp L35
X3:
	.dbline -2
	.dbline 68
; 	}
; }
L34:
	.dbline 0 ; func end
	ret
	.dbsym r data 20 c
	.dbsym r i 10 c
	.dbend

⌨️ 快捷键说明

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