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

📄 m16adc.s

📁 AVR程序
💻 S
字号:
	.module M16ADC.c
	.area text(rom, con, rel)
	.dbfile F:\job\M16学习板\ADC(实验七)\M16ADC.c
	.dbfile F:\job\M16学习板\ADC(实验七)\..\ICC_H\SOFTWARE.h
	.dbfunc e ChangeIntToHex _ChangeIntToHex fV
;            dec -> R20,R21
	.even
_ChangeIntToHex::
	xcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 136
; /*******************************************************************
;                       实验七
; 实验名称: ADC转换实验
; 实验目的: 学习AVR单片机的ADC功能
; 实验现象: 串口发送命令开启一次ADC,并将结果通过串口发送到PC,任意字符开始
; 环	  境: ICCAVR6.31A
; 设 计 者: shinea8868
; 说    明: 部分程序原型源自网络,经本人修改调试可用,请尊重知识产权,如
; 	  	  作商业用途请保留本段文字
; 完成日期: 2007年4月10日
; *******************************************************************/
; #include <iom16v.h>
; #include <macros.h>
; #include "..\ICC_H\SOFTWARE.h"
; 
; uchar UcAdcData;                     //ADC转换的结果
; uchar AdcConCom = 0;				 //ADC转换完成标志
; uchar admuxx = 0x67;   				 //外部参考源,数据存储左对齐方式			 
; /*--------------------------------------------------------------------
; 功    能: ADC转换初始化设定
; 入口参数: 
; 返 回 值: 
; --------------------------------------------------------------------*/
; void AdcInit(void)
; {
;  ADCSR 	   = 0x00;                          //ADC无效
;  ADMUX 	   = admuxx;                        //选择ADC通道7
;  /*--REFS1---REFS0---ADLAR---0--------------参考电源选择------对齐方式--------*/
;  /*--0000-- 0001-- 0010-- 0011-- 0100-- 0101-- 0110-- 0111-- 1110--- --1111---*/
;  /*--通道0--通道1--通道2--通道3--通道4--通道5--通道6-通道7--1.23V(VBG)-0V(GND)*/
;  ACSR      = 0x80;                           //模拟比较器控制和状态寄存器 ACSR
;                                              //ACD置1,使模拟比较器禁用
;  /*--ACD--ACBG--ACO--ACI---ACIE---ACIC---ACIS1---ACIS0------------------------*/
;  /*-模拟比较起禁用--模拟比较器的能隙基准源--模拟比较起输出--模拟比较器中断标志*/
;  /*-模拟比较器中断使能--模拟比较器输入捕捉使能--模拟比较器中断模式选择--------*/
;  ADCSR     = 0x8B;//模拟比较起控制和状态寄存器
;  /*-----------ADEN---ADSC---ADFR---ADIF---ADIE---ADPS2---ADPS1---ADPS0--------*/
;  //使能模数转换 ADC开始转换 ADC连续转换  ADC中断使能  128分频
; }
; /*-----------------------ADC转换中断程序--------------------------------------*/
; #pragma interrupt_handler adc_isr:15
; void adc_isr(void)
; {
;  	UcAdcData = ADCH;          //读ADC转换结果
; 	AdcConCom = 1;			   //置ADC转换完成标志
; }
; 
; /*-----------------------------------------------------------------
; 函数名称: void Uart0Init(void) 
; 函数功能: 串口初始化
; 		  波特率 9600 0.2% 字符长度 8bit 无奇偶校验
; 参    数: 
; 返 回 值: 无
; -----------------------------------------------------------------*/
; void Uart0Init(void)
; {
;  	UCSRB = 0x00; 					//关串口
;  	UCSRA = 0x02;					//倍速模式   M16中文P151
;  	UCSRC = BIT(URSEL) | 0x06;		//写UCSRC寄存器,设定8个bit
;  	UBRR  = 0x000c;	 	  	   		//设定串口波特率为9600
;  	UCSRB = 0x98;					//开串口
; }
; /*-----------------------------------------------------------------
; 函数名称: void Uart0Init(void) 
; 函数功能: 串口初始化
; 		  波特率 9600 0.2% 字符长度 8bit 无奇偶校验
; 参    数: 
; 返 回 值: 无
; -----------------------------------------------------------------*/
; #pragma interrupt_handler UartRecvData:12
; void UartRecvData(void)
; {
;  	uchar temp;
; 	temp = UDR;
; 	ADMUX |= 0x07; 
; 	ADCSR |= 0x40;	   	  			//开启一次ADC转换
; }
; /*-----------------------------------------------------------------
; 函数名称: void UartTransmitData(void)
; 函数功能: 发送字符串
; 参    数: 
; 返 回 值: 无
; -----------------------------------------------------------------*/
; void UartTransmitData(void)
; {
;   	while(!(UCSRA&0x20));  				//判断数据寄存器是否为空
; 		UDR = UcAdcData;
; }
; /*-----------------------------------------------------------------
; 函数名称: void InitDevices(void) 
; 函数功能: 初始化各种信息
; 参    数: 
; 返 回 值: 无
; -----------------------------------------------------------------*/
; void InitDevices(void)
; {
;  	CLI(); 			  					//关全部中断
;  	Uart0Init();
; 	AdcInit();
; 
;  	MCUCR = 0x00;
;  	SEI();   	 	   					//开全中断
; }
; 
; 
; void main(void)
; {
; // 	uchar i;
; 	InitDevices();
;  	while(1)
; 	{
; 	 	if( AdcConCom)
; 		{
; 		 	AdcConCom = 0;				//清ADC转换完成标志
; 			UartTransmitData();			//发送转换结果
; 		}
; 	}
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
	.dbline 137
; }
	movw R30,R20
	ldd R2,z+0
	clr R3
	ldi R17,10
	mov R16,R2
	xcall mod8u
	mov R4,R16
	ldi R17,10
	mov R16,R2
	xcall div8u
	mov R24,R16
	andi R24,#0x0F
	swap R24
	or R24,R4
	movw R30,R20
	std z+0,R24
	.dbline -2
L1:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r dec 20 pc
	.dbend
	.dbfunc e ChangeHexToInt _ChangeHexToInt fV
;            hex -> R16,R17
	.even
_ChangeHexToInt::
	.dbline -1
	.dbline 166
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
	.dbline 167
; }
	movw R30,R16
	ldd R2,z+0
	clr R3
	mov R24,R2
	swap R24
	andi R24,#0x0F
	ldi R25,10
	mul R25,R24
	mov R24,R2
	andi R24,15
	mov R2,R0
	add R2,R24
	std z+0,R2
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbsym r hex 16 pc
	.dbend
	.dbfunc e Delay _Delay fV
;              i -> R16
	.even
_Delay::
	.dbline -1
	.dbline 180
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
	.dbline 182
; }
; }
	ldi R16,200
L4:
	.dbline 183
L5:
	.dbline 183
; }
	mov R2,R16
	clr R3
	subi R16,1
	tst R2
	brne L4
	.dbline -2
L3:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.area data(ram, con, rel)
	.dbfile F:\job\M16学习板\ADC(实验七)\..\ICC_H\SOFTWARE.h
_AdcConCom::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile F:\job\M16学习板\ADC(实验七)\..\ICC_H\SOFTWARE.h
	.dbfile F:\job\M16学习板\ADC(实验七)\M16ADC.c
	.dbsym e AdcConCom _AdcConCom c
_admuxx::
	.blkb 1
	.area idata
	.byte 103
	.area data(ram, con, rel)
	.dbfile F:\job\M16学习板\ADC(实验七)\M16ADC.c
	.dbsym e admuxx _admuxx c
	.area text(rom, con, rel)
	.dbfile F:\job\M16学习板\ADC(实验七)\M16ADC.c
	.dbfunc e AdcInit _AdcInit fV
	.even
_AdcInit::
	.dbline -1
	.dbline 25
	.dbline 26
	clr R2
	out 0x6,R2
	.dbline 27
	lds R2,_admuxx
	out 0x7,R2
	.dbline 31
	ldi R24,128
	out 0x8,R24
	.dbline 36
	ldi R24,139
	out 0x6,R24
	.dbline -2
L7:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 56
	jmp _adc_isr
	.area text(rom, con, rel)
	.dbfile F:\job\M16学习板\ADC(实验七)\M16ADC.c
	.dbfunc e adc_isr _adc_isr fV
	.even
_adc_isr::
	st -y,R2
	st -y,R24
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 43
	.dbline 44
	in R2,0x5
	sts _UcAdcData,R2
	.dbline 45
	ldi R24,1
	sts _AdcConCom,R24
	.dbline -2
L8:
	ld R2,y+
	out 0x3f,R2
	ld R24,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e Uart0Init _Uart0Init fV
	.even
_Uart0Init::
	.dbline -1
	.dbline 56
	.dbline 57
	clr R2
	out 0xa,R2
	.dbline 58
	ldi R24,2
	out 0xb,R24
	.dbline 59
	ldi R24,134
	out 0x20,R24
	.dbline 60
	ldi R24,12
	out 0x9,R24
	.dbline 61
	ldi R24,152
	out 0xa,R24
	.dbline -2
L9:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 44
	jmp _UartRecvData
	.area text(rom, con, rel)
	.dbfile F:\job\M16学习板\ADC(实验七)\M16ADC.c
	.dbfunc e UartRecvData _UartRecvData fV
;           temp -> R16
	.even
_UartRecvData::
	st -y,R16
	st -y,R24
	in R16,0x3f
	st -y,R16
	.dbline -1
	.dbline 72
	.dbline 74
	in R16,0xc
	.dbline 75
	in R24,0x7
	ori R24,7
	out 0x7,R24
	.dbline 76
	sbi 0x6,6
	.dbline -2
L10:
	ld R16,y+
	out 0x3f,R16
	ld R24,y+
	ld R16,y+
	.dbline 0 ; func end
	reti
	.dbsym r temp 16 c
	.dbend
	.dbfunc e UartTransmitData _UartTransmitData fV
	.even
_UartTransmitData::
	.dbline -1
	.dbline 85
L12:
	.dbline 86
L13:
	.dbline 86
	sbis 0xb,5
	rjmp L12
	.dbline 87
	lds R2,_UcAdcData
	out 0xc,R2
	.dbline -2
L11:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e InitDevices _InitDevices fV
	.even
_InitDevices::
	.dbline -1
	.dbline 96
	.dbline 97
	cli
	.dbline 98
	xcall _Uart0Init
	.dbline 99
	xcall _AdcInit
	.dbline 101
	clr R2
	out 0x35,R2
	.dbline 102
	sei
	.dbline -2
L15:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 107
	.dbline 109
	xcall _InitDevices
	xjmp L18
L17:
	.dbline 111
	.dbline 112
	lds R2,_AdcConCom
	tst R2
	breq L20
	.dbline 113
	.dbline 114
	clr R2
	sts _AdcConCom,R2
	.dbline 115
	xcall _UartTransmitData
	.dbline 116
L20:
	.dbline 117
L18:
	.dbline 110
	xjmp L17
X0:
	.dbline -2
L16:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile F:\job\M16学习板\ADC(实验七)\M16ADC.c
_UcAdcData::
	.blkb 1
	.dbsym e UcAdcData _UcAdcData c

⌨️ 快捷键说明

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