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

📄 testadc.lst

📁 AVR-MEGA8单片机中使用AD转换的一个例子
💻 LST
📖 第 1 页 / 共 3 页
字号:
     1B9 E624      LDI	R18,0x64
     1BA E030      LDI	R19,0
     1BB 018B      MOVW	R16,R22
     1BC D072      RCALL	div16u
     1BD 2F40      MOV	R20,R16
     1BE 1942      SUB	R20,R2
     1BF 0953      SBC	R21,R3
(0219)   srnum=ll%10;		//个位
     1C0 E02A      LDI	R18,0xA
     1C1 E030      LDI	R19,0
     1C2 018B      MOVW	R16,R22
     1C3 D069      RCALL	mod16u
     1C4 2EC0      MOV	R12,R16
(0220)   tnnum=(ll-knnum*1000-hunum*100)/10; //十位
     1C5 2D2E      MOV	R18,R14
     1C6 2733      CLR	R19
     1C7 EE08      LDI	R16,0xE8
     1C8 E013      LDI	R17,3
     1C9 D07F      RCALL	empy16s
     1CA 0118      MOVW	R2,R16
     1CB 018B      MOVW	R16,R22
     1CC 1902      SUB	R16,R2
     1CD 0913      SBC	R17,R3
     1CE E684      LDI	R24,0x64
     1CF 9F84      MUL	R24,R20
     1D0 1900      SUB	R16,R0
     1D1 0911      SBC	R17,R1
     1D2 E02A      LDI	R18,0xA
     1D3 E030      LDI	R19,0
     1D4 D05A      RCALL	div16u
     1D5 2F60      MOV	R22,R16
(0221)   
(0222)   knnum+=0x30;hunum+=0x30;srnum+=0x30;tnnum+=0x30;
     1D6 2D8E      MOV	R24,R14
     1D7 5D80      SUBI	R24,0xD0
     1D8 2EE8      MOV	R14,R24
     1D9 5D40      SUBI	R20,0xD0
     1DA 2D8C      MOV	R24,R12
     1DB 5D80      SUBI	R24,0xD0
     1DC 2EC8      MOV	R12,R24
     1DD 5D60      SUBI	R22,0xD0
(0223)   DispHalfWord(l,h,knnum,hunum);
     1DE 834A      STD	Y+2,R20
     1DF 82E8      STD	Y+0,R14
     1E0 2D2A      MOV	R18,R10
     1E1 850D      LDD	R16,Y+13
     1E2 DF49      RCALL	_DispHalfWord
(0224)   DispHalfWord(l+1,h,tnnum,srnum);
     1E3 82CA      STD	Y+2,R12
     1E4 8368      STD	Y+0,R22
     1E5 2D2A      MOV	R18,R10
     1E6 850D      LDD	R16,Y+13
     1E7 5F0F      SUBI	R16,0xFF
     1E8 DF43      RCALL	_DispHalfWord
     1E9 9623      ADIW	R28,3
     1EA D06E      RCALL	pop_xgsetF0FC
     1EB 9624      ADIW	R28,4
     1EC 9508      RET
_main:
     1ED 9722      SBIW	R28,2
FILE: D:\学习\AVRpro\Mega8程序\TestADC\Main.C
(0001) //*********************************************
(0002)  //主程序Main.C
(0003)  //MCU:AVR_MEGA8L ,晶振频率:8.0 MHz
(0004)  //制作人:平顶山工学院计算机系,郭猛
(0005) //**********************************************
(0006) # include "stdlib.h"
(0007) # include "iom8v.h"
(0008) # include "macros.h"
(0009) # include "LCDFun.h"
(0010) 
(0011) #ifndef uchar
(0012) 	#define uchar unsigned char
(0013) #endif
(0014) 
(0015) void main()
(0016) {
(0017) 	LCD_Ini();
     1EE DEEB      RCALL	_LCD_Ini
(0018) 	PrintS(2,1,"欢迎使用\0\0");
     1EF E680      LDI	R24,0x60
     1F0 E090      LDI	R25,0
     1F1 8399      STD	Y+1,R25
     1F2 8388      STD	Y+0,R24
     1F3 E021      LDI	R18,1
     1F4 E002      LDI	R16,2
     1F5 DF59      RCALL	_PrintS
(0019) 	Delay(1000);
     1F6 EE08      LDI	R16,0xE8
     1F7 E013      LDI	R17,3
     1F8 DE5E      RCALL	_Delay
     1F9 C003      RJMP	0x01FD
(0020) 	
(0021) 	while(1)
(0022) 	{
(0023) 	   LCD_Ini();
     1FA DEDF      RCALL	_LCD_Ini
(0024) 	   ADC_Init();
     1FB D004      RCALL	_ADC_Init
(0025) 	   ADC_Convert();
     1FC D014      RCALL	_ADC_Convert
     1FD CFFC      RJMP	0x01FA
     1FE 9622      ADIW	R28,2
     1FF 9508      RET
FILE: D:\学习\AVRpro\Mega8程序\TestADC\ADC.C
(0001) //*********************************************
(0002)  //ADC转换
(0003)  //MCU:AVR_MEGA8L ,晶振频率:8.0 MHz
(0004)  //ADC通道:ADC3,PA3,采用软件方式
(0005)  //制作人:平顶山工学院计算机系,郭猛
(0006) //**********************************************
(0007) 
(0008) #include "iom8v.h"
(0009) #include "macros.h"
(0010) #include "LCDFun.h"
(0011) 
(0012) #define Vref 5     //参考电压为3.3V
(0013) #define VolMax 945 //电池电量满,4.15V-1.1V=3.05V,对应ADC结果为0x3ff*(3.05/3.3)=945
(0014) #define VolMin 728 //电池电量空,3.45V-1.1V=2.35V,对应ADC结果为0x3ff*(2.35/3.3)=728
(0015) #define ADC_MUX 0x03  //ADC_PC3通道
(0016) 
(0017) unsigned char Bak_DDRC,Bak_PORTC; //记录端口C的原先状态
(0018) 
(0019) //ADC初始化函数
(0020) void ADC_Init(void)
(0021) {
(0022)  	Bak_DDRC=DDRC;
_ADC_Init:
     200 B224      IN	R2,0x14
     201 9220 0070 STS	Bak_DDRC,R2
(0023) 	Bak_PORTC=PORTC; 		//保存原来的端口A状态
     203 B225      IN	R2,0x15
     204 9220 006F STS	Bak_PORTC,R2
(0024) 	DDRC&=~BIT(3);    //端口C设置为高阻态
     206 98A3      CBI	0x14,3
(0025) 	PORTC&=~BIT(3);
     207 98AB      CBI	0x15,3
(0026) 	//DDRC=0;PORTC=0;
(0027) 	
(0028) 	ADCSRA=0x00;
     208 2422      CLR	R2
     209 B826      OUT	0x06,R2
(0029) 	ADMUX=BIT(REFS0)|(3&0x0f);  //选择外部ARef为基准,ADC数据左对齐
     20A E483      LDI	R24,0x43
     20B B987      OUT	0x07,R24
(0030) 	ACSR=BIT(ACD);  //关闭模拟比较器
     20C E880      LDI	R24,0x80
     20D B988      OUT	0x08,R24
(0031) 	ADCSRA=BIT(ADEN)|BIT(ADPS2)|BIT(ADPS1); //CLK64分频,不产生ADC中断
     20E E886      LDI	R24,0x86
     20F B986      OUT	0x06,R24
     210 9508      RET
_ADC_Convert:
  i                    --> Y,+3
  rslt                 --> R10
  adc_reslt            --> R20
     211 D05D      RCALL	push_xgset300C
     212 9722      SBIW	R28,2
(0032) }
(0033) 
(0034) //ADC转换处理函数:
(0035) unsigned char ADC_Convert(void)
(0036) {
(0037)  	unsigned int adc_reslt=0;   //AD转换结果
     213 2744      CLR	R20
     214 2755      CLR	R21
(0038) 	unsigned char rslt,i;
(0039) 	ADCSRA|=BIT(ADSC);        //启动AD转换
     215 9A36      SBI	0x06,6
(0040) 	while(!(ADCSRA & BIT(ADIF))) ; //等待AD转换完毕
     216 9B34      SBIS	0x06,4
     217 CFFE      RJMP	0x0216
(0041) 	adc_reslt=ADC&0x03FF;  	  //保存ADC结果
     218 B144      IN	R20,0x04
     219 B155      IN	R21,0x05
     21A 7053      ANDI	R21,3
(0042) 	//测试使用,显示adc_reslt:
(0043) 	DisplayNumChar(3,3,adc_reslt);
     21B 8359      STD	Y+1,R21
     21C 8348      STD	Y+0,R20
     21D E023      LDI	R18,3
     21E E003      LDI	R16,3
     21F DF8B      RCALL	_DisplayNumChar
(0044) 	Delay(500);
     220 EF04      LDI	R16,0xF4
     221 E011      LDI	R17,1
     222 DE34      RCALL	_Delay
(0045) 	
(0046) 	//ADMUX=ADC_MUX;  	  //选择外部ARef为基准
(0047) 	ADCSRA|=BIT(ADIF);    //ADIF位写入1,清零
     223 9A34      SBI	0x06,4
(0048) 	ADCSRA&=~BIT(ADEN);	  //禁止ADC
     224 9837      CBI	0x06,7
(0049) 	//恢复原来的端口C状态:
(0050) 	//DDRC=Bak_DDRC;
(0051) 	//PORTC=Bak_PORTC;
(0052) 	
(0053) 	return rslt; 
FILE: <library>
     225 2D0A      MOV	R16,R10
     226 9622      ADIW	R28,2
     227 C04C      RJMP	pop_xgset300C
push_arg4:
     228 933A      ST	R19,-Y
     229 932A      ST	R18,-Y
push_arg2:
     22A 931A      ST	R17,-Y
     22B 930A      ST	R16,-Y
     22C 9508      RET
mod16u:
     22D 9468      BSET	6
     22E C001      RJMP	xdiv16u
div16u:
     22F 94E8      BCLR	6
xdiv16u:
     230 92EA      ST	R14,-Y
     231 92FA      ST	R15,-Y
     232 938A      ST	R24,-Y
     233 24EE      CLR	R14
     234 24FF      CLR	R15
     235 E180      LDI	R24,0x10
     236 0F00      LSL	R16
     237 1F11      ROL	R17
     238 1CEE      ROL	R14
     239 1CFF      ROL	R15
     23A 16E2      CP	R14,R18
     23B 06F3      CPC	R15,R19
     23C F018      BCS	0x0240
     23D 1AE2      SUB	R14,R18
     23E 0AF3      SBC	R15,R19
     23F 9503      INC	R16
     240 958A      DEC	R24
     241 F7A1      BNE	0x0236
     242 F416      BRTC	0x0245
     243 2D0E      MOV	R16,R14
     244 2D1F      MOV	R17,R15
     245 9189      LD	R24,Y+
     246 90F9      LD	R15,Y+
     247 90E9      LD	R14,Y+
     248 9508      RET
empy16s:
     249 920A      ST	R0,-Y
     24A 921A      ST	R1,-Y
     24B 938A      ST	R24,-Y
     24C 939A      ST	R25,-Y
     24D 9F02      MUL	R16,R18
     24E 01C0      MOVW	R24,R0
     24F 9F12      MUL	R17,R18
     250 0D90      ADD	R25,R0
     251 9F03      MUL	R16,R19
     252 0D90      ADD	R25,R0
     253 018C      MOVW	R16,R24
     254 9199      LD	R25,Y+
     255 9189      LD	R24,Y+
     256 9019      LD	R1,Y+
     257 9009      LD	R0,Y+
     258 9508      RET
pop_xgsetF0FC:
     259 90A9      LD	R10,Y+
     25A 90B9      LD	R11,Y+
     25B 90C9      LD	R12,Y+
     25C 90D9      LD	R13,Y+
     25D 90E9      LD	R14,Y+
     25E 90F9      LD	R15,Y+
     25F 9149      LD	R20,Y+
     260 9159      LD	R21,Y+
     261 9169      LD	R22,Y+
     262 9179      LD	R23,Y+
     263 9508      RET
push_xgsetF0FC:
     264 937A      ST	R23,-Y
     265 936A      ST	R22,-Y
push_xgset30FC:
     266 935A      ST	R21,-Y
     267 934A      ST	R20,-Y
push_xgset00FC:
     268 92FA      ST	R15,-Y
     269 92EA      ST	R14,-Y
push_xgset003C:
     26A 92DA      ST	R13,-Y
     26B 92CA      ST	R12,-Y
     26C 92BA      ST	R11,-Y
     26D 92AA      ST	R10,-Y
     26E 9508      RET
push_xgset300C:
     26F 935A      ST	R21,-Y
     270 934A      ST	R20,-Y
     271 92BA      ST	R11,-Y
     272 92AA      ST	R10,-Y
     273 9508      RET
pop_xgset300C:
     274 90A9      LD	R10,Y+
     275 90B9      LD	R11,Y+
     276 9149      LD	R20,Y+
     277 9159      LD	R21,Y+
     278 9508      RET
push_xgsetF00C:
     279 937A      ST	R23,-Y
     27A 936A      ST	R22,-Y
     27B 935A      ST	R21,-Y
     27C 934A      ST	R20,-Y
     27D 92BA      ST	R11,-Y
     27E 92AA      ST	R10,-Y
     27F 9508      RET
pop_xgsetF00C:
     280 90A9      LD	R10,Y+
     281 90B9      LD	R11,Y+
     282 9149      LD	R20,Y+
     283 9159      LD	R21,Y+
     284 9169      LD	R22,Y+
     285 9179      LD	R23,Y+
     286 9508      RET
push_xgset303C:
     287 935A      ST	R21,-Y
     288 934A      ST	R20,-Y
     289 92DA      ST	R13,-Y
     28A 92CA      ST	R12,-Y
     28B 92BA      ST	R11,-Y
     28C 92AA      ST	R10,-Y
     28D 9508      RET
pop_xgset303C:
     28E 90A9      LD	R10,Y+
     28F 90B9      LD	R11,Y+
     290 90C9      LD	R12,Y+
     291 90D9      LD	R13,Y+
     292 9149      LD	R20,Y+
     293 9159      LD	R21,Y+
     294 9508      RET

⌨️ 快捷键说明

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