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

📄 test.s

📁 较新的adc+lcd1602代码
💻 S
📖 第 1 页 / 共 2 页
字号:
;           data -> y+0
;              i -> R20
;            dat -> R20,R21
;              Y -> R12
;              X -> R10
	.even
_LCD_write_data::
	xcall push_xgsetF03C
	mov R12,R18
	mov R10,R16
	sbiw R28,5
	ldd R20,y+13
	ldd R21,y+14
	.dbline -1
	.dbline 138
; }
; 
; /*-------------------------------------------------------------
; 函数: 写数字
; 参数:列---X=0~15,行---Y=0~1 写地址
;       dat为所要写的数字
; ---------------------------------------------------------------*/
; void LCD_write_data(unsigned char X,unsigned char Y,int dat)
; {
	.dbline 143
;  unsigned char fuhao;
;  unsigned char data[5];
;  unsigned char i;
;   
;  if(dat<0)
	cpi R20,0
	ldi R30,0
	cpc R21,R30
	brge L37
X8:
	.dbline 144
;  {
	.dbline 145
;   fuhao='-';
	ldi R22,45
	.dbline 146
;   dat=0-dat;
	clr R2
	clr R3
	sub R2,R20
	sbc R3,R21
	movw R20,R2
	.dbline 147
;  }
	xjmp L38
L37:
	.dbline 149
;  else
;   fuhao=' ';
	ldi R22,32
L38:
	.dbline 150
;  data[0]=fuhao;
	std y+0,R22
	.dbline 151
;  data[1]=dat/1000+0x30; dat%=1000;
	ldi R18,1000
	ldi R19,3
	movw R16,R20
	xcall div16s
	movw R24,R16
	adiw R24,48
	std y+1,R24
	.dbline 151
	ldi R18,1000
	ldi R19,3
	movw R16,R20
	xcall mod16s
	movw R20,R16
	.dbline 152
;  data[2]=dat/100+0x30;  dat%=100;
	ldi R18,100
	ldi R19,0
	xcall div16s
	movw R24,R16
	adiw R24,48
	std y+2,R24
	.dbline 152
	ldi R18,100
	ldi R19,0
	movw R16,R20
	xcall mod16s
	movw R20,R16
	.dbline 153
;  data[3]=dat/10+0x30; 
	ldi R18,10
	ldi R19,0
	xcall div16s
	movw R24,R16
	adiw R24,48
	std y+3,R24
	.dbline 154
;  data[4]=dat%10+0x30; 
	ldi R18,10
	ldi R19,0
	movw R16,R20
	xcall mod16s
	movw R24,R16
	adiw R24,48
	std y+4,R24
	.dbline 156
;  
;  LCD_set_xy(X,Y);
	mov R18,R12
	mov R16,R10
	xcall _LCD_set_xy
	.dbline 157
;  for(i=0;i<5;i++)
	clr R20
	xjmp L46
L43:
	.dbline 158
;   LCD_write_char(0,data[i]);
	movw R24,R28
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R18,z+0
	clr R19
	clr R16
	clr R17
	xcall _LCD_write_char
L44:
	.dbline 157
	inc R20
L46:
	.dbline 157
	cpi R20,5
	brlo L43
X9:
	.dbline -2
L36:
	.dbline 0 ; func end
	adiw R28,5
	xjmp pop_xgsetF03C
	.dbsym r fuhao 22 c
	.dbsym l data 0 A[5:5]c
	.dbsym r i 20 c
	.dbsym r dat 20 I
	.dbsym r Y 12 c
	.dbsym r X 10 c
	.dbend
	.dbfunc e LCD_write_adc _LCD_write_adc fV
;           data -> y+0
;              i -> R20
;            dat -> R14,R15
;              Y -> R12
;              X -> R10
	.even
_LCD_write_adc::
	xcall push_xgset30FC
	mov R12,R18
	mov R10,R16
	sbiw R28,5
	ldd R14,y+13
	ldd R15,y+14
	.dbline -1
	.dbline 167
; }
; 
; /*-------------------------------------------------------------
; 函数: 写数字
; 参数:列---X=0~15,行---Y=0~1 写地址
;       dat为所要写的数字
; ---------------------------------------------------------------*/
; void LCD_write_adc(unsigned char X,unsigned char Y,int dat)
; {
	.dbline 171
;  unsigned char data[5];
;  unsigned char i;
; 
;  dat*=4.928; 
	ldi R16,<L48
	ldi R17,>L48
	xcall lpm32
	movw R2,R16
	movw R4,R18
	movw R16,R14
	xcall int2fp
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R2
	movw R18,R4
	xcall fpmule2
	xcall fpint
	movw R14,R16
	.dbline 172
;  data[0]=dat/1000+0x30; dat%=1000;
	ldi R18,1000
	ldi R19,3
	xcall div16s
	movw R24,R16
	adiw R24,48
	std y+0,R24
	.dbline 172
	ldi R18,1000
	ldi R19,3
	movw R16,R14
	xcall mod16s
	movw R14,R16
	.dbline 173
;  data[1]='.';
	ldi R24,46
	std y+1,R24
	.dbline 174
;  data[2]=dat/100+0x30;  dat%=100;
	ldi R18,100
	ldi R19,0
	xcall div16s
	movw R24,R16
	adiw R24,48
	std y+2,R24
	.dbline 174
	ldi R18,100
	ldi R19,0
	movw R16,R14
	xcall mod16s
	movw R14,R16
	.dbline 175
;  data[3]=dat/10+0x30;   
	ldi R18,10
	ldi R19,0
	xcall div16s
	movw R24,R16
	adiw R24,48
	std y+3,R24
	.dbline 176
;  data[4]=dat%10+0x30; 
	ldi R18,10
	ldi R19,0
	movw R16,R14
	xcall mod16s
	movw R24,R16
	adiw R24,48
	std y+4,R24
	.dbline 178
;  
;  LCD_set_xy(X,Y);
	mov R18,R12
	mov R16,R10
	xcall _LCD_set_xy
	.dbline 179
;  for(i=0;i<5;i++)
	clr R20
	xjmp L56
L53:
	.dbline 180
;   LCD_write_char(0,data[i]);
	movw R24,R28
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R18,z+0
	clr R19
	clr R16
	clr R17
	xcall _LCD_write_char
L54:
	.dbline 179
	inc R20
L56:
	.dbline 179
	cpi R20,5
	brlo L53
X10:
	.dbline -2
L47:
	.dbline 0 ; func end
	adiw R28,5
	xjmp pop_xgset30FC
	.dbsym l data 0 A[5:5]c
	.dbsym r i 20 c
	.dbsym r dat 14 I
	.dbsym r Y 12 c
	.dbsym r X 10 c
	.dbend
	.dbfile D:\iccavr\mega16\11\10bit_adc\adc.h
	.dbfunc e adc_init _adc_init fV
;    adc_channel -> R16
	.even
_adc_init::
	.dbline -1
	.dbline 6
; 
; /******************************************************
; **                  ADC转换初始化                    **
; ******************************************************/
; void adc_init(unsigned char adc_channel) 
; { 
	.dbline 7
;   PORTA&=~(BIT(PA0)|BIT(PA1));
	in R24,0x1b
	andi R24,252
	out 0x1b,R24
	.dbline 8
;   DDRA&=~(BIT(PA0)|BIT(PA1));
	in R24,0x1a
	andi R24,252
	out 0x1a,R24
	.dbline 9
;   ACSR=0x80; 
	ldi R24,128
	out 0x8,R24
	.dbline 10
;   ADMUX=(0<<REFS1)|(1<<REFS0)|adc_channel; 
	mov R24,R16
	ori R24,64
	out 0x7,R24
	.dbline 11
;   ADCSRA=(1<<ADEN)|(0<<ADSC)|(0<<ADIE)|(0<<ADPS2)|(0<<ADPS1)|(0<<ADPS0); 
	ldi R24,128
	out 0x6,R24
	.dbline -2
L57:
	.dbline 0 ; func end
	ret
	.dbsym r adc_channel 16 c
	.dbend
	.dbfunc e GetAdcValue _GetAdcValue fi
;              i -> R20
;      adc_value -> R10,R11
;           temp -> R12,R13
;    adc_channel -> R12
	.even
_GetAdcValue::
	xcall push_xgset303C
	mov R12,R16
	.dbline -1
	.dbline 18
; }
; 
; /******************************************************
; **             取通道adc_channel的ADC值              **
; ******************************************************/
; unsigned int GetAdcValue(unsigned char adc_channel) 
; { 
	.dbline 19
;  unsigned int adc_value=0; //定义全局变量来存储ADC值
	clr R10
	clr R11
	.dbline 23
;  unsigned int temp; 
;  unsigned char i; 
; 
;  adc_init(adc_channel); 
	mov R16,R12
	xcall _adc_init
	.dbline 24
;  delay_nms(30); 
	ldi R16,30
	ldi R17,0
	xcall _delay_nms
	.dbline 26
;  
;  for(i=0;i<19;i++) 
	clr R20
	xjmp L62
L59:
	.dbline 27
;  { 
	.dbline 28
;   ADCSRA|=(1<<ADSC); 
	sbi 0x6,6
L63:
	.dbline 29
;   while((ADCSRA&0x10)==0); 
L64:
	.dbline 29
	sbis 0x6,4
	rjmp L63
X11:
	.dbline 30
;   temp=ADCL; 
	in R12,0x4
	clr R13
	.dbline 31
;   temp|=(int)ADCH<<8; 
	in R2,0x5
	clr R3
	mov R3,R2
	clr R2
	or R12,R2
	or R13,R3
	.dbline 32
;   adc_value=adc_value+temp; 
	add R10,R12
	adc R11,R13
	.dbline 33
;   ADCSR|=(0<<ADSC);
	in R2,0x6
	out 0x6,R2
	.dbline 34
;  } 
L60:
	.dbline 26
	inc R20
L62:
	.dbline 26
	cpi R20,19
	brlo L59
X12:
	.dbline 36
; 
;  adc_value=adc_value/19;
	ldi R18,19
	ldi R19,0
	movw R16,R10
	xcall div16u
	movw R10,R16
	.dbline 37
;  return adc_value; 
	.dbline -2
L58:
	.dbline 0 ; func end
	xjmp pop_xgset303C
	.dbsym r i 20 c
	.dbsym r adc_value 10 i
	.dbsym r temp 12 i
	.dbsym r adc_channel 12 c
	.dbend
	.dbfile D:\iccavr\mega16\11\10bit_adc\test.c
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 13
; //ICC-AVR application builder : 2008-11-4 12:53:50
; // Target : M16
; // Crystal: 8.0000Mhz
; 
; #include <iom16v.h>
; #include <macros.h>
; 
; #include "delay.h"
; #include "lcd1602.h"
; #include "adc.h"
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
	.dbline 15
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
	cli
	.dbline 16
;  LCD_init();
	xcall _LCD_init
	.dbline 17
;  PORTD|=BIT(PD7);
	sbi 0x12,7
	.dbline 18
;  DDRD|=BIT(PD7);
	sbi 0x11,7
	.dbline 20
;  
;  MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 21
;  GICR  = 0x00;
	out 0x3b,R2
	.dbline 22
;  TIMSK = 0x00; //timer interrupt sources
	out 0x39,R2
	.dbline 23
;  SEI(); //re-enable interrupts
	sei
	.dbline -2
L66:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
;           adc1 -> R10,R11
;           adc0 -> R10,R11
	.even
_main::
	sbiw R28,2
	.dbline -1
	.dbline 29
;  //all peripherals are now initialized
; }
; 
; //
; void main(void)
; {
	.dbline 31
;  unsigned int adc0,adc1;
;  init_devices();
	xcall _init_devices
	.dbline 33
;  //insert your functional code here...
;  LCD_write_string(0,0,"10_Bit ADC Test!");
	ldi R24,<L68
	ldi R25,>L68
	std y+1,R25
	std y+0,R24
	clr R18
	clr R16
	xcall _LCD_write_string
	.dbline 34
;  delay_nms(2000);
	ldi R16,2000
	ldi R17,7
	xcall _delay_nms
	.dbline 35
;  LCD_write_string(0,0," ADC0:      V   ");
	ldi R24,<L69
	ldi R25,>L69
	std y+1,R25
	std y+0,R24
	clr R18
	clr R16
	xcall _LCD_write_string
	.dbline 36
;  LCD_write_string(0,1," ADC1:      V   ");
	ldi R24,<L70
	ldi R25,>L70
	std y+1,R25
	std y+0,R24
	ldi R18,1
	clr R16
	xcall _LCD_write_string
	xjmp L72
L71:
	.dbline 38
;  while(1)
;  {
	.dbline 39
;   adc0=GetAdcValue(0);
	clr R16
	xcall _GetAdcValue
	movw R10,R16
	.dbline 40
;   LCD_write_adc(7,0,adc0);
	std y+1,R11
	std y+0,R10
	clr R18
	ldi R16,7
	xcall _LCD_write_adc
	.dbline 42
;   
;   adc1=GetAdcValue(1);
	ldi R16,1
	xcall _GetAdcValue
	movw R10,R16
	.dbline 43
;   LCD_write_adc(7,1,adc1);
	std y+1,R11
	std y+0,R10
	ldi R18,1
	ldi R16,7
	xcall _LCD_write_adc
	.dbline 44
;  }
L72:
	.dbline 37
	xjmp L71
X13:
	.dbline -2
L67:
	.dbline 0 ; func end
	adiw R28,2
	ret
	.dbsym r adc1 10 i
	.dbsym r adc0 10 i
	.dbend
	.area data(ram, con, rel)
	.dbfile D:\iccavr\mega16\11\10bit_adc\test.c
L70:
	.blkb 17
	.area idata
	.byte 32,'A,'D,'C,49,58,32,32,32,32,32,32,'V,32,32,32
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\iccavr\mega16\11\10bit_adc\test.c
L69:
	.blkb 17
	.area idata
	.byte 32,'A,'D,'C,48,58,32,32,32,32,32,32,'V,32,32,32
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\iccavr\mega16\11\10bit_adc\test.c
L68:
	.blkb 17
	.area idata
	.byte 49,48,95,'B,'i,'t,32,'A,'D,'C,32,'T,'e,'s,'t,33
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\iccavr\mega16\11\10bit_adc\test.c
	.area lit(rom, con, rel)
L48:
	.word 0xb22d,0x409d
; }
; 

⌨️ 快捷键说明

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