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

📄 ad.s

📁 用ICC编写的程序包括SPI
💻 S
字号:
	.module ad.c
	.area text(rom, con, rel)
	.dbfile F:\IccAvr_Pro\ad.c
	.area data(ram, con, rel)
_AD_value::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbsym e AD_value _AD_value A[16:8]i
	.area lit(rom, con, rel)
_ad_channel::
	.byte 0,1
	.byte 2,3
	.byte 4,5
	.byte 6,7
	.dbsym e ad_channel _ad_channel A[8:8]kc
	.area vector(rom, abs)
	.org 56
	jmp _adc_isr
	.area lit(rom, con, rel)
	.area text(rom, con, rel)
	.dbfunc e adc_isr _adc_isr fV
	.even
_adc_isr::
	st -y,R0
	st -y,R1
	st -y,R2
	st -y,R3
	st -y,R4
	st -y,R5
	st -y,R6
	st -y,R7
	st -y,R24
	st -y,R25
	st -y,R30
	st -y,R31
	in R0,0x3f
	st -y,R0
	.dbline -1
	.dbline 9
; #include "ad.h"
; 
; unsigned int AD_value[AD_size]={0,0,0,0,0,0,0,0}; 
; unsigned char ad_index; 
; const unsigned char ad_channel[AD_size]={0,1,2,3,4,5,6,7};
; unsigned char ad_frist_flag;
; #pragma interrupt_handler adc_isr:15
; void adc_isr(void)
; {
	.dbline 13
;  //conversion complete, read value (int) using...
;  // value=ADCL;            //Read 8 low bits first (important)
;  // value|=(int)ADCH << 8; //read 2 high bits and shift into top byte
;  if(ad_frist_flag)
	lds R2,_ad_frist_flag
	tst R2
	breq L2
	.dbline 14
; 	  ad_frist_flag=0;
	clr R2
	sts _ad_frist_flag,R2
	xjmp L3
L2:
	.dbline 16
;  else
; 	  {
	.dbline 17
; 	  AD_value[ad_index]=ADCL;
	lds R2,_ad_index
	ldi R24,2
	mul R24,R2
	movw R30,R0
	ldi R24,<_AD_value
	ldi R25,>_AD_value
	add R30,R24
	adc R31,R25
	in R2,0x4
	clr R3
	std z+1,R3
	std z+0,R2
	.dbline 18
; 	  AD_value[ad_index]|=(int)AD_value[ad_index]<<8;
	lds R2,_ad_index
	ldi R24,2
	mul R24,R2
	movw R2,R0
	ldi R24,<_AD_value
	ldi R25,>_AD_value
	add R2,R24
	adc R3,R25
	movw R30,R2
	ldd R4,z+0
	ldd R5,z+1
	movw R6,R4
	mov R7,R6
	clr R6
	or R4,R6
	or R5,R7
	std z+1,R5
	std z+0,R4
	.dbline 19
; 	  ad_index++;
	lds R24,_ad_index
	subi R24,255    ; addi 1
	sts _ad_index,R24
	.dbline 20
; 	  if(ad_index<sizeof(ad_channel))
	cpi R24,8
	brsh L4
	.dbline 21
; 			{
	.dbline 22
; 			 ADMUX|=ad_channel[ad_index];
	ldi R24,<_ad_channel
	ldi R25,>_ad_channel
	lds R30,_ad_index
	clr R31
	add R30,R24
	adc R31,R25
	lpm R30,Z
	in R2,0x7
	or R2,R30
	out 0x7,R2
	.dbline 23
; 			 ADCSRA|=BIT(ADSC);
	sbi 0x6,6
	.dbline 24
; 			 }
L4:
	.dbline 25
L3:
	.dbline -2
L1:
	ld R0,y+
	out 0x3f,R0
	ld R31,y+
	ld R30,y+
	ld R25,y+
	ld R24,y+
	ld R7,y+
	ld R6,y+
	ld R5,y+
	ld R4,y+
	ld R3,y+
	ld R2,y+
	ld R1,y+
	ld R0,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e adc_init _adc_init fV
	.even
_adc_init::
	.dbline -1
	.dbline 29
; 	  }
; }
; 
; void adc_init(void)
; {
	.dbline 30
;  ADCSR = 0x00; //disable adc
	clr R2
	out 0x6,R2
	.dbline 32
;  	    //select adc input 0
;  ADMUX=BIT(REFS0);
	ldi R24,64
	out 0x7,R24
	.dbline 33
;  ADCSR=BIT(ADPS2)|BIT(ADEN)|BIT(ADIE);
	ldi R24,140
	out 0x6,R24
	.dbline 34
;  ad_frist_flag=1;
	ldi R24,1
	sts _ad_frist_flag,R24
	.dbline -2
L6:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e adc_start _adc_start fV
	.even
_adc_start::
	.dbline -1
	.dbline 39
;  
; }
; 
; void adc_start(void)
; {
	.dbline 40
;  	 ADMUX|=ad_channel[ad_index++];
	lds R2,_ad_index
	clr R3
	mov R24,R2
	subi R24,255    ; addi 1
	sts _ad_index,R24
	ldi R24,<_ad_channel
	ldi R25,>_ad_channel
	mov R30,R2
	clr R31
	add R30,R24
	adc R31,R25
	lpm R30,Z
	in R2,0x7
	or R2,R30
	out 0x7,R2
	.dbline 41
; 	 ADCSR|=BIT(ADSC);
	sbi 0x6,6
	.dbline -2
L7:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
_ad_frist_flag::
	.blkb 1
	.dbsym e ad_frist_flag _ad_frist_flag c
_ad_index::
	.blkb 1
	.dbsym e ad_index _ad_index c

⌨️ 快捷键说明

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