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

📄 adc.lst

📁 AVR程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
    0076 2022      TST	R2
    0077 F7D9      BNE	0x0073
    0078 9508      RET
FILE: F:\job\M16学习板\ADC(实验七)\M16ADC.c
(0001) /*******************************************************************
(0002)                       实验七
(0003) 实验名称: ADC转换实验
(0004) 实验目的: 学习AVR单片机的ADC功能
(0005) 实验现象: 串口发送命令开启一次ADC,并将结果通过串口发送到PC,任意字符开始
(0006) 环	  境: ICCAVR6.31A
(0007) 设 计 者: shinea8868
(0008) 说    明: 部分程序原型源自网络,经本人修改调试可用,请尊重知识产权,如
(0009) 	  	  作商业用途请保留本段文字
(0010) 完成日期: 2007年4月10日
(0011) *******************************************************************/
(0012) #include <iom16v.h>
(0013) #include <macros.h>
(0014) #include "..\ICC_H\SOFTWARE.h"
(0015) 
(0016) uchar UcAdcData;                     //ADC转换的结果
(0017) uchar AdcConCom = 0;				 //ADC转换完成标志
(0018) uchar admuxx = 0x67;   				 //外部参考源,数据存储左对齐方式			 
(0019) /*--------------------------------------------------------------------
(0020) 功    能: ADC转换初始化设定
(0021) 入口参数: 
(0022) 返 回 值: 
(0023) --------------------------------------------------------------------*/
(0024) void AdcInit(void)
(0025) {
(0026)  ADCSR 	   = 0x00;                          //ADC无效
_AdcInit:
    0079 2422      CLR	R2
    007A B826      OUT	0x06,R2
(0027)  ADMUX 	   = admuxx;                        //选择ADC通道7
    007B 90200061  LDS	R2,admuxx
    007D B827      OUT	0x07,R2
(0028)  /*--REFS1---REFS0---ADLAR---0--------------参考电源选择------对齐方式--------*/
(0029)  /*--0000-- 0001-- 0010-- 0011-- 0100-- 0101-- 0110-- 0111-- 1110--- --1111---*/
(0030)  /*--通道0--通道1--通道2--通道3--通道4--通道5--通道6-通道7--1.23V(VBG)-0V(GND)*/
(0031)  ACSR      = 0x80;                           //模拟比较器控制和状态寄存器 ACSR
    007E E880      LDI	R24,0x80
    007F B988      OUT	0x08,R24
(0032)                                              //ACD置1,使模拟比较器禁用
(0033)  /*--ACD--ACBG--ACO--ACI---ACIE---ACIC---ACIS1---ACIS0------------------------*/
(0034)  /*-模拟比较起禁用--模拟比较器的能隙基准源--模拟比较起输出--模拟比较器中断标志*/
(0035)  /*-模拟比较器中断使能--模拟比较器输入捕捉使能--模拟比较器中断模式选择--------*/
(0036)  ADCSR     = 0x8B;//模拟比较起控制和状态寄存器
    0080 E88B      LDI	R24,0x8B
    0081 B986      OUT	0x06,R24
    0082 9508      RET
_adc_isr:
    0083 922A      ST	R2,-Y
    0084 938A      ST	R24,-Y
    0085 B62F      IN	R2,0x3F
    0086 922A      ST	R2,-Y
(0037)  /*-----------ADEN---ADSC---ADFR---ADIF---ADIE---ADPS2---ADPS1---ADPS0--------*/
(0038)  //使能模数转换 ADC开始转换 ADC连续转换  ADC中断使能  128分频
(0039) }
(0040) /*-----------------------ADC转换中断程序--------------------------------------*/
(0041) #pragma interrupt_handler adc_isr:15
(0042) void adc_isr(void)
(0043) {
(0044)  	UcAdcData = ADCH;          //读ADC转换结果
    0087 B025      IN	R2,0x05
    0088 92200062  STS	UcAdcData,R2
(0045) 	AdcConCom = 1;			   //置ADC转换完成标志
    008A E081      LDI	R24,1
    008B 93800060  STS	AdcConCom,R24
    008D 9029      LD	R2,Y+
    008E BE2F      OUT	0x3F,R2
    008F 9189      LD	R24,Y+
    0090 9029      LD	R2,Y+
    0091 9518      RETI
(0046) }
(0047) 
(0048) /*-----------------------------------------------------------------
(0049) 函数名称: void Uart0Init(void) 
(0050) 函数功能: 串口初始化
(0051) 		  波特率 9600 0.2% 字符长度 8bit 无奇偶校验
(0052) 参    数: 
(0053) 返 回 值: 无
(0054) -----------------------------------------------------------------*/
(0055) void Uart0Init(void)
(0056) {
(0057)  	UCSRB = 0x00; 					//关串口
_Uart0Init:
    0092 2422      CLR	R2
    0093 B82A      OUT	0x0A,R2
(0058)  	UCSRA = 0x02;					//倍速模式   M16中文P151
    0094 E082      LDI	R24,2
    0095 B98B      OUT	0x0B,R24
(0059)  	UCSRC = BIT(URSEL) | 0x06;		//写UCSRC寄存器,设定8个bit
    0096 E886      LDI	R24,0x86
    0097 BD80      OUT	0x20,R24
(0060)  	UBRR  = 0x000c;	 	  	   		//设定串口波特率为9600
    0098 E08C      LDI	R24,0xC
    0099 B989      OUT	0x09,R24
(0061)  	UCSRB = 0x98;					//开串口
    009A E988      LDI	R24,0x98
    009B B98A      OUT	0x0A,R24
    009C 9508      RET
_UartRecvData:
  temp                 --> R16
    009D 930A      ST	R16,-Y
    009E 938A      ST	R24,-Y
    009F B70F      IN	R16,0x3F
    00A0 930A      ST	R16,-Y
(0062) }
(0063) /*-----------------------------------------------------------------
(0064) 函数名称: void Uart0Init(void) 
(0065) 函数功能: 串口初始化
(0066) 		  波特率 9600 0.2% 字符长度 8bit 无奇偶校验
(0067) 参    数: 
(0068) 返 回 值: 无
(0069) -----------------------------------------------------------------*/
(0070) #pragma interrupt_handler UartRecvData:12
(0071) void UartRecvData(void)
(0072) {
(0073)  	uchar temp;
(0074) 	temp = UDR;
    00A1 B10C      IN	R16,0x0C
(0075) 	ADMUX |= 0x07; 
    00A2 B187      IN	R24,0x07
    00A3 6087      ORI	R24,7
    00A4 B987      OUT	0x07,R24
(0076) 	ADCSR |= 0x40;	   	  			//开启一次ADC转换
    00A5 9A36      SBI	0x06,6
    00A6 9109      LD	R16,Y+
    00A7 BF0F      OUT	0x3F,R16
    00A8 9189      LD	R24,Y+
    00A9 9109      LD	R16,Y+
    00AA 9518      RETI
(0077) }
(0078) /*-----------------------------------------------------------------
(0079) 函数名称: void UartTransmitData(void)
(0080) 函数功能: 发送字符串
(0081) 参    数: 
(0082) 返 回 值: 无
(0083) -----------------------------------------------------------------*/
(0084) void UartTransmitData(void)
(0085) {
(0086)   	while(!(UCSRA&0x20));  				//判断数据寄存器是否为空
_UartTransmitData:
    00AB 9B5D      SBIS	0x0B,5
    00AC CFFE      RJMP	_UartTransmitData
(0087) 		UDR = UcAdcData;
    00AD 90200062  LDS	R2,UcAdcData
    00AF B82C      OUT	0x0C,R2
    00B0 9508      RET
(0088) }
(0089) /*-----------------------------------------------------------------
(0090) 函数名称: void InitDevices(void) 
(0091) 函数功能: 初始化各种信息
(0092) 参    数: 
(0093) 返 回 值: 无
(0094) -----------------------------------------------------------------*/
(0095) void InitDevices(void)
(0096) {
(0097)  	CLI(); 			  					//关全部中断
_InitDevices:
    00B1 94F8      BCLR	7
(0098)  	Uart0Init();
    00B2 DFDF      RCALL	_Uart0Init
(0099) 	AdcInit();
    00B3 DFC5      RCALL	_AdcInit
(0100) 
(0101)  	MCUCR = 0x00;
    00B4 2422      CLR	R2
    00B5 BE25      OUT	0x35,R2
(0102)  	SEI();   	 	   					//开全中断
    00B6 9478      BSET	7
    00B7 9508      RET
(0103) }
(0104) 
(0105) 
(0106) void main(void)
(0107) {
(0108) // 	uchar i;
(0109) 	InitDevices();
_main:
    00B8 DFF8      RCALL	_InitDevices
    00B9 C008      RJMP	0x00C2
(0110)  	while(1)
(0111) 	{
(0112) 	 	if( AdcConCom)
    00BA 90200060  LDS	R2,AdcConCom
    00BC 2022      TST	R2
    00BD F021      BEQ	0x00C2
(0113) 		{
(0114) 		 	AdcConCom = 0;				//清ADC转换完成标志
    00BE 2422      CLR	R2
    00BF 92200060  STS	AdcConCom,R2
(0115) 			UartTransmitData();			//发送转换结果
FILE: <library>
    00C1 DFE9      RCALL	_UartTransmitData
    00C2 CFF7      RJMP	0x00BA
    00C3 9508      RET
mod8u:
    00C4 9468      BSET	6
    00C5 C001      RJMP	xdiv8u
div8u:
    00C6 94E8      BCLR	6
xdiv8u:
    00C7 932A      ST	R18,-Y
    00C8 92FA      ST	R15,-Y
    00C9 92EA      ST	R14,-Y
    00CA 24FF      CLR	R15
    00CB 24EE      CLR	R14
    00CC E120      LDI	R18,0x10
    00CD 0F00      LSL	R16
    00CE 1CFF      ROL	R15
    00CF 1CEE      ROL	R14
    00D0 16E1      CP	R14,R17
    00D1 F010      BCS	0x00D4
    00D2 1AE1      SUB	R14,R17
    00D3 9503      INC	R16
    00D4 952A      DEC	R18
    00D5 F7B9      BNE	0x00CD
    00D6 F40E      BRTC	0x00D8
    00D7 2D0E      MOV	R16,R14
    00D8 90E9      LD	R14,Y+
    00D9 90F9      LD	R15,Y+
    00DA 9129      LD	R18,Y+
    00DB 9508      RET
push_gset5:
    00DC 92FA      ST	R15,-Y
    00DD 92EA      ST	R14,-Y
push_gset4:
    00DE 92DA      ST	R13,-Y
    00DF 92CA      ST	R12,-Y
push_gset3:
    00E0 92BA      ST	R11,-Y
    00E1 92AA      ST	R10,-Y
push_gset2:
    00E2 937A      ST	R23,-Y
    00E3 936A      ST	R22,-Y
push_gset1:
    00E4 935A      ST	R21,-Y
    00E5 934A      ST	R20,-Y
    00E6 9508      RET
pop_gset1:
    00E7 E0E1      LDI	R30,1
pop:
    00E8 9149      LD	R20,Y+
    00E9 9159      LD	R21,Y+
    00EA FDE0      SBRC	R30,0
    00EB 9508      RET
    00EC 9169      LD	R22,Y+
    00ED 9179      LD	R23,Y+
    00EE FDE1      SBRC	R30,1
    00EF 9508      RET
    00F0 90A9      LD	R10,Y+
    00F1 90B9      LD	R11,Y+
    00F2 FDE2      SBRC	R30,2
    00F3 9508      RET
    00F4 90C9      LD	R12,Y+
    00F5 90D9      LD	R13,Y+
    00F6 FDE3      SBRC	R30,3
    00F7 9508      RET
    00F8 90E9      LD	R14,Y+
    00F9 90F9      LD	R15,Y+
    00FA 9508      RET

⌨️ 快捷键说明

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