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

📄 adc.s

📁 AVR-MEGA8单片机中使用AD转换的一个例子
💻 S
字号:
	.module ADC.C
	.area text(rom, con, rel)
	.dbfile D:\学习\AVRpro\Mega8程序\TestADC\ADC.C
	.dbfunc e ADC_Init _ADC_Init fV
	.even
_ADC_Init::
	.dbline -1
	.dbline 21
; //*********************************************
;  //ADC转换
;  //MCU:AVR_MEGA8L ,晶振频率:8.0 MHz
;  //ADC通道:ADC3,PA3,采用软件方式
;  //制作人:平顶山工学院计算机系,郭猛
; //**********************************************
; 
; #include "iom8v.h"
; #include "macros.h"
; #include "LCDFun.h"
; 
; #define Vref 5     //参考电压为3.3V
; #define VolMax 945 //电池电量满,4.15V-1.1V=3.05V,对应ADC结果为0x3ff*(3.05/3.3)=945
; #define VolMin 728 //电池电量空,3.45V-1.1V=2.35V,对应ADC结果为0x3ff*(2.35/3.3)=728
; #define ADC_MUX 0x03  //ADC_PC3通道
; 
; unsigned char Bak_DDRC,Bak_PORTC; //记录端口C的原先状态
; 
; //ADC初始化函数
; void ADC_Init(void)
; {
	.dbline 22
;  	Bak_DDRC=DDRC;
	in R2,0x14
	sts _Bak_DDRC,R2
	.dbline 23
; 	Bak_PORTC=PORTC; 		//保存原来的端口A状态
	in R2,0x15
	sts _Bak_PORTC,R2
	.dbline 24
; 	DDRC&=~BIT(3);    //端口C设置为高阻态
	cbi 0x14,3
	.dbline 25
; 	PORTC&=~BIT(3);
	cbi 0x15,3
	.dbline 28
; 	//DDRC=0;PORTC=0;
; 	
; 	ADCSRA=0x00;
	clr R2
	out 0x6,R2
	.dbline 29
; 	ADMUX=BIT(REFS0)|(3&0x0f);  //选择外部ARef为基准,ADC数据左对齐
	ldi R24,67
	out 0x7,R24
	.dbline 30
; 	ACSR=BIT(ACD);  //关闭模拟比较器
	ldi R24,128
	out 0x8,R24
	.dbline 31
; 	ADCSRA=BIT(ADEN)|BIT(ADPS2)|BIT(ADPS1); //CLK64分频,不产生ADC中断
	ldi R24,134
	out 0x6,R24
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e ADC_Convert _ADC_Convert fc
;              i -> <dead>
;           rslt -> R10
;      adc_reslt -> R20,R21
	.even
_ADC_Convert::
	rcall push_xgset300C
	sbiw R28,2
	.dbline -1
	.dbline 36
; }
; 
; //ADC转换处理函数:
; unsigned char ADC_Convert(void)
; {
	.dbline 37
;  	unsigned int adc_reslt=0;   //AD转换结果
	clr R20
	clr R21
	.dbline 39
; 	unsigned char rslt,i;
; 	ADCSRA|=BIT(ADSC);        //启动AD转换
	sbi 0x6,6
L3:
	.dbline 40
; 	while(!(ADCSRA & BIT(ADIF))) ; //等待AD转换完毕
L4:
	.dbline 40
	sbis 0x6,4
	rjmp L3
X0:
	.dbline 41
; 	adc_reslt=ADC&0x03FF;  	  //保存ADC结果
	in R20,0x4
	in R21,0x5
	andi R21,3
	.dbline 43
; 	//测试使用,显示adc_reslt:
; 	DisplayNumChar(3,3,adc_reslt);
	std y+1,R21
	std y+0,R20
	ldi R18,3
	ldi R16,3
	rcall _DisplayNumChar
	.dbline 44
; 	Delay(500);
	ldi R16,500
	ldi R17,1
	rcall _Delay
	.dbline 47
; 	
; 	//ADMUX=ADC_MUX;  	  //选择外部ARef为基准
; 	ADCSRA|=BIT(ADIF);    //ADIF位写入1,清零
	sbi 0x6,4
	.dbline 48
; 	ADCSRA&=~BIT(ADEN);	  //禁止ADC
	cbi 0x6,7
	.dbline 53
; 	//恢复原来的端口C状态:
; 	//DDRC=Bak_DDRC;
; 	//PORTC=Bak_PORTC;
; 	
; 	return rslt; 
	mov R16,R10
	.dbline -2
L2:
	.dbline 0 ; func end
	adiw R28,2
	rjmp pop_xgset300C
	.dbsym l i 3 c
	.dbsym r rslt 10 c
	.dbsym r adc_reslt 20 i
	.dbend
	.area bss(ram, con, rel)
	.dbfile D:\学习\AVRpro\Mega8程序\TestADC\ADC.C
_Bak_PORTC::
	.blkb 1
	.dbsym e Bak_PORTC _Bak_PORTC c
_Bak_DDRC::
	.blkb 1
	.dbsym e Bak_DDRC _Bak_DDRC c
; }

⌨️ 快捷键说明

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