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

📄 ad.s

📁 基于AVR的模数转换程序。是开发单片机必备的基本技巧。 本程序出自高手之手
💻 S
字号:
	.module ad.c
	.area code(ram, con, rel)
	.area lit(rom, con, rel)
_table::
	.word 63
	.word 6
	.word 91
	.word 79
	.word 102
	.word 109
	.word 125
	.word 7
	.word 127
	.word 111
	.word 119
	.word 124
	.word 57
	.word 94
	.word 121
	.word 113
	.dbfile I:\AVR视频教程\视频教程\lesson8\ad/xianshi.c
	.dbsym e table _table A[32:16]I
	.area text(rom, con, rel)
	.dbfile I:\AVR视频教程\视频教程\lesson8\ad/xianshi.c
	.dbfunc e delay _delay fV
;              i -> R20,R21
;              j -> R22,R23
;             ms -> R16,R17
	.even
_delay::
	rcall push_gset2
	.dbline -1
	.dbline 6
; #include <iom16v.h>
; #include <macros.h>
; #define  uchar unsigned char
; #define  uint  unsigned int
; #include "xianshi.c"
; uint mega16_ad()
	.dbline 8
; {
;      uint addata;
	clr R20
	clr R21
	rjmp L5
L2:
	.dbline 9
; 	 DDRA&=~BIT(PA0);
	.dbline 10
	clr R22
	clr R23
	rjmp L9
L6:
	.dbline 10
L7:
	.dbline 10
	subi R22,255  ; offset = 1
	sbci R23,255
L9:
	.dbline 10
	cpi R22,117
	ldi R30,4
	cpc R23,R30
	brlo L6
	.dbline 11
L3:
	.dbline 8
	subi R20,255  ; offset = 1
	sbci R21,255
L5:
	.dbline 8
	cp R20,R16
	cpc R21,R17
	brlo L2
	.dbline -2
	.dbline 12
; 	 PORTA&=~BIT(PA0);
; 	 ADMUX=0;
; 	 ADCSR=0X80;
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 show _show fV
;              k -> R20
;              j -> R22
	.even
_show::
	rcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 14
; 	 ADCSR|=BIT(ADSC);
; 	 while(!(ADCSR&(BIT(ADIF))));
	.dbline 15
;      addata=ADCL;
	sbi 0x1a,3
	.dbline 16
; 	 addata=addata+ADCH*256;
	sbi 0x1a,4
	.dbline 17
; 	 return addata;
	ldi R24,255
	out 0x17,R24
	.dbline 18
; }   
	sbi 0x1b,3
	.dbline 19
; 
	ldi R24,<_table
	ldi R25,>_table
	mov R16,R22
	clr R17
	lsl R16
	rol R17
	add R16,R24
	adc R17,R25
	rcall lpm16
	out 0x18,R16
	.dbline 20
; void main()
	cbi 0x1b,3
	.dbline 22
; {
;    uint ada,i,ad[4];
	ldi R24,255
	out 0x18,R24
	.dbline 23
;    while(1)
	ldi R16,1
	mov R17,R20
	rcall lsl8
	mov R2,R16
	com R2
	in R3,0x18
	and R3,R2
	out 0x18,R3
	.dbline 24
;    {
	sbi 0x1b,4
	.dbline 25
;       ada=mega16_ad();//999  0999
	cbi 0x1b,4
	.dbline 26
; 	  for(i=0;i<4;i++)
	ldi R16,1
	ldi R17,0
	rcall _delay
	.dbline -2
	.dbline 27
; 	  {
L10:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r k 20 c
	.dbsym r j 22 c
	.dbend
	.dbfile I:\AVR视频教程\视频教程\lesson8\ad\ad.c
	.dbfunc e mega16_ad _mega16_ad fi
;         addata -> R16,R17
	.even
_mega16_ad::
	.dbline -1
	.dbline 7
	.dbline 9
	cbi 0x1a,0
	.dbline 10
	cbi 0x1b,0
	.dbline 11
	clr R2
	out 0x7,R2
	.dbline 12
	ldi R24,128
	out 0x6,R24
	.dbline 13
	sbi 0x6,6
L12:
	.dbline 14
L13:
	.dbline 14
	sbis 0x6,4
	rjmp L12
	.dbline 15
	in R16,0x4
	clr R17
	.dbline 16
	in R2,0x5
	clr R3
	mov R3,R2
	clr R2
	add R16,R2
	adc R17,R3
	.dbline 17
	.dbline -2
L11:
	.dbline 0 ; func end
	ret
	.dbsym r addata 16 i
	.dbend
	.dbfunc e main _main fV
;             ad -> y+0
;            ada -> R20,R21
;              i -> R22,R23
	.even
_main::
	sbiw R28,8
	.dbline -1
	.dbline 21
	rjmp L17
L16:
	.dbline 24
	.dbline 25
	rcall _mega16_ad
	mov R20,R16
	mov R21,R17
	.dbline 26
	clr R22
	clr R23
	rjmp L22
L19:
	.dbline 27
	.dbline 28
	ldi R30,3
	ldi R31,0
	sub R30,R22
	sbc R31,R23
	lsl R30
	rol R31
	mov R24,R28
	mov R25,R29
	add R30,R24
	adc R31,R25
	ldi R18,10
	ldi R19,0
	mov R16,R20
	mov R17,R21
	rcall mod16u
	std z+0,R16
	std z+1,R17
	.dbline 29
	ldi R18,10
	ldi R19,0
	mov R16,R20
	mov R17,R21
	rcall div16u
	mov R20,R16
	mov R21,R17
	.dbline 30
L20:
	.dbline 26
	subi R22,255  ; offset = 1
	sbci R23,255
L22:
	.dbline 26
	cpi R22,4
	ldi R30,0
	cpc R23,R30
	brlo L19
	.dbline 32
; 	    ad[3-i]=ada%10;
; 		ada=ada/10;
; 	  }
; 	  
; 	  for(i=0;i<4;i++)
	clr R22
	clr R23
	rjmp L26
L23:
	.dbline 33
	.dbline 34
	mov R18,R22
	mov R24,R28
	mov R25,R29
	mov R30,R22
	mov R31,R23
	lsl R30
	rol R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	rcall _show
	.dbline 35
	ldi R16,2
	ldi R17,0
	rcall _delay
	.dbline 35
	sbi 0x1a,3
	.dbline 36
	sbi 0x1a,4
	.dbline 37
	ldi R24,255
	out 0x17,R24
	.dbline 38
L24:
	.dbline 32
	subi R22,255  ; offset = 1
	sbci R23,255
L26:
	.dbline 32
	cpi R22,4
	ldi R30,0
	cpc R23,R30
	brlo L23
	.dbline 39
L17:
	.dbline 23
	rjmp L16
X0:
	.dbline -2
	.dbline 40
; 	  {
; 	     show(ad[i],i);
; 		 delay(2);       DDRA|=BIT(3);
; 	DDRA|=BIT(4);
; 	DDRB=0XFF;
; 	  }
;    }
; }
L15:
	adiw R28,8
	.dbline 0 ; func end
	ret
	.dbsym l ad 0 A[8:4]i
	.dbsym r ada 20 i
	.dbsym r i 22 i
	.dbend

⌨️ 快捷键说明

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