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

📄 adc.lst

📁 LCD1602来显示通过AVR ADC0采集的信号
💻 LST
📖 第 1 页 / 共 2 页
字号:
  row                  --> R22
     186 940E 02C7 CALL	push_xgsetF00C
     188 0159      MOVW	R10,R18
     189 01B8      MOVW	R22,R16
     18A 814E      LDD	R20,Y+6
     18B 815F      LDD	R21,Y+7
(0180) 	}
(0181) }
(0182) //====================================================
(0183) // 描述:在任意位置写数字函数
(0184) // 入口:’row‘表示要写数字所在的行地址,只能为1或2
(0185) //       ’col‘表示要写数字所在的列地址,只能为0--15
(0186) //		 ‘num’表示要写的数字,只能为0--9
(0187) // 出口:无
(0188) //===================================================
(0189) void	WriteNum(uint	row,uint	col,uint	 num)
(0190) {
(0191) 	if (row == 1)	row = 0x80 + col;
     18C 3061      CPI	R22,1
     18D E0E0      LDI	R30,0
     18E 077E      CPC	R23,R30
     18F F421      BNE	0x0194
     190 01B5      MOVW	R22,R10
     191 5860      SUBI	R22,0x80
     192 4F7F      SBCI	R23,0xFF
     193 C003      RJMP	0x0197
(0192) 	else	row = 0xC0 + col;
     194 01B5      MOVW	R22,R10
     195 5460      SUBI	R22,0x40
     196 4F7F      SBCI	R23,0xFF
(0193) 	writecom(row);
     197 2F06      MOV	R16,R22
     198 DF10      RCALL	_writecom
(0194) 	if (num<=0 | num>9)	num =0x30;
     199 3040      CPI	R20,0
     19A 0745      CPC	R20,R21
     19B F421      BNE	0x01A0
     19C E081      LDI	R24,1
     19D E090      LDI	R25,0
     19E 015C      MOVW	R10,R24
     19F C002      RJMP	0x01A2
     1A0 24AA      CLR	R10
     1A1 24BB      CLR	R11
     1A2 E089      LDI	R24,0x9
     1A3 E090      LDI	R25,0
     1A4 1784      CP	R24,R20
     1A5 0795      CPC	R25,R21
     1A6 F418      BCC	0x01AA
     1A7 E061      LDI	R22,1
     1A8 E070      LDI	R23,0
     1A9 C002      RJMP	0x01AC
     1AA 2766      CLR	R22
     1AB 2777      CLR	R23
     1AC 0115      MOVW	R2,R10
     1AD 2A26      OR	R2,R22
     1AE 2A37      OR	R3,R23
     1AF 2022      TST	R2
     1B0 F411      BNE	0x01B3
     1B1 2033      TST	R3
     1B2 F019      BEQ	0x01B6
     1B3 E340      LDI	R20,0x30
     1B4 E050      LDI	R21,0
     1B5 C002      RJMP	0x01B8
(0195) 	else	num = 0x30 + num;
     1B6 5D40      SUBI	R20,0xD0
     1B7 4F5F      SBCI	R21,0xFF
(0196) 
(0197) 	PORTA|=(1<<RS);
     1B8 9ADD      SBI	0x1B,5
(0198) 	s_ms(500);
     1B9 EF04      LDI	R16,0xF4
     1BA E011      LDI	R17,1
     1BB DEB9      RCALL	_s_ms
(0199) 	PORTA&=~(1<<RW);
     1BC 98DE      CBI	0x1B,6
(0200) 	s_ms(500);
     1BD EF04      LDI	R16,0xF4
     1BE E011      LDI	R17,1
     1BF DEB5      RCALL	_s_ms
(0201) 	PORTD = num;
     1C0 BB42      OUT	0x12,R20
(0202) 	s_ms(500);
     1C1 EF04      LDI	R16,0xF4
     1C2 E011      LDI	R17,1
     1C3 DEB1      RCALL	_s_ms
(0203) 	PORTA|=(1<<EN);
     1C4 9ADF      SBI	0x1B,7
(0204) 	s_ms(500);
     1C5 EF04      LDI	R16,0xF4
     1C6 E011      LDI	R17,1
     1C7 DEAD      RCALL	_s_ms
(0205) 	PORTA&=~(1<<EN);	
     1C8 98DF      CBI	0x1B,7
(0206) 	s_ms(500);			
     1C9 EF04      LDI	R16,0xF4
     1CA E011      LDI	R17,1
     1CB DEA9      RCALL	_s_ms
     1CC 940C 02CE JMP	pop_xgsetF00C
_WriteChar:
  t                    --> R12
  i                    --> R10
  pBuffer              --> R20
  num                  --> Y,+8
  col                  --> R10
  row                  --> R22
     1CE 940E 02D5 CALL	push_xgsetF03C
     1D0 2EA2      MOV	R10,R18
     1D1 2F60      MOV	R22,R16
     1D2 854A      LDD	R20,Y+10
     1D3 855B      LDD	R21,Y+11
(0207) }
(0208) //================================================================
(0209) // 描述:在任意位置写任意多个字符
(0210) // 入口:’row‘要写的字符所在的行,只能为1或2;
(0211) //       ‘col’要写的字符所在的列,只能为0---15
(0212) //       ‘num’要写字符的个数
(0213) //       ‘pbuffer’要写字符的首地址
(0214) //================================================================== 
(0215) void	WriteChar(uchar row,uchar col,uint num,uchar *pBuffer)
(0216) {
(0217) 	uchar i,t;
(0218) 	if (row == 1)	row = 0x80 + col;
     1D4 3061      CPI	R22,1
     1D5 F419      BNE	0x01D9
     1D6 2D6A      MOV	R22,R10
     1D7 5860      SUBI	R22,0x80
     1D8 C002      RJMP	0x01DB
(0219) 	else	row = 0xC0 + col;
     1D9 2D6A      MOV	R22,R10
     1DA 5460      SUBI	R22,0x40
(0220) 	writecom(row);
     1DB 2F06      MOV	R16,R22
     1DC DECC      RCALL	_writecom
(0221) 	//if (num<=0 | num>9)	num =0x30;
(0222) 	//else	num = 0x30 + num;
(0223) 
(0224) 	PORTA|=(1<<RS);
     1DD 9ADD      SBI	0x1B,5
(0225) 	s_ms(500);
     1DE EF04      LDI	R16,0xF4
     1DF E011      LDI	R17,1
     1E0 DE94      RCALL	_s_ms
(0226) 	PORTA&=~(1<<RW);
     1E1 98DE      CBI	0x1B,6
(0227) 	s_ms(500);
     1E2 EF04      LDI	R16,0xF4
     1E3 E011      LDI	R17,1
     1E4 DE90      RCALL	_s_ms
(0228) 	for(i=num;i!=0;i--)
     1E5 84A8      LDD	R10,Y+8
     1E6 C014      RJMP	0x01FB
(0229) 	{
(0230) 		t = *pBuffer;
     1E7 01FA      MOVW	R30,R20
     1E8 80C0      LDD	R12,Z+0
(0231) 		s_ms(500);
     1E9 EF04      LDI	R16,0xF4
     1EA E011      LDI	R17,1
     1EB DE89      RCALL	_s_ms
(0232) 		PORTD = t;
     1EC BAC2      OUT	0x12,R12
(0233) 		s_ms(500);
     1ED EF04      LDI	R16,0xF4
     1EE E011      LDI	R17,1
     1EF DE85      RCALL	_s_ms
(0234) 		PORTA|=(1<<EN);
     1F0 9ADF      SBI	0x1B,7
(0235) 		s_ms(500);
     1F1 EF04      LDI	R16,0xF4
     1F2 E011      LDI	R17,1
     1F3 DE81      RCALL	_s_ms
(0236) 		PORTA&=~(1<<EN);		
     1F4 98DF      CBI	0x1B,7
(0237) 		s_ms(500);		
     1F5 EF04      LDI	R16,0xF4
     1F6 E011      LDI	R17,1
     1F7 DE7D      RCALL	_s_ms
(0238) 		pBuffer++;
     1F8 5F4F      SUBI	R20,0xFF
     1F9 4F5F      SBCI	R21,0xFF
     1FA 94AA      DEC	R10
     1FB 20AA      TST	R10
     1FC F751      BNE	0x01E7
     1FD 940C 02DE JMP	pop_xgsetF03C
_main:
  adc_h1               --> Y,+5
  adc_l1               --> Y,+5
  ten_4                --> Y,+5
  adc_h0               --> R12
  adc_l0               --> R10
  adc_data1            --> R20
  ten_1                --> R10
  ten_2                --> R12
  adc_data0            --> R22
  ten_3                --> R14
  i                    --> R20
     1FF 9724      SBIW	R28,4
FILE: D:\16实验程序\模数转换\adc_1602\ADC-1602.c
(0001) //ADC转换程序
(0002) //通过电位器W1来调节ADC0的电压输入
(0003) //采集的电压值用1602液晶显示
(0004) #include<iom16v.h>
(0005) #include <macros.h>
(0006) #include"1602.h"
(0007) #define uchar unsigned char 
(0008) #define uint unsigned int 
(0009) 
(0010) uchar adc_0[]={"ADC_0: .  V"};
(0011) uchar adc_1[]={"ADC_1: .  V"};
(0012) 
(0013) //ADC测试,使用1602显示ADC0和ADC1的值
(0014) //主函数
(0015) main()
(0016) {
(0017) uchar ten_1,ten_2,ten_3,ten_4,i;
(0018) uint adc_data0,adc_l0,adc_h0,adc_data1,adc_l1,adc_h1;
(0019) 
(0020) //初始化端口
(0021) DDRA=0xf0;
     200 EF80      LDI	R24,0xF0
     201 BB8A      OUT	0x1A,R24
(0022) PORTA=0x00;
     202 2422      CLR	R2
     203 BA2B      OUT	0x1B,R2
(0023) DDRB=0x00;
     204 BA27      OUT	0x17,R2
(0024) DDRD=0xff;
     205 EF8F      LDI	R24,0xFF
     206 BB81      OUT	0x11,R24
(0025) PORTD=0x00;
     207 BA22      OUT	0x12,R2
(0026) //1602初始化
(0027) LcdInit();   
     208 DEBC      RCALL	_LcdInit
(0028) WriteChar(1,2,11,adc_0);
     209 E080      LDI	R24,0
     20A E091      LDI	R25,1
     20B 839B      STD	Y+3,R25
     20C 838A      STD	Y+2,R24
     20D E08B      LDI	R24,0xB
     20E E090      LDI	R25,0
     20F 8399      STD	Y+1,R25
     210 8388      STD	Y+0,R24
     211 E022      LDI	R18,2
     212 E001      LDI	R16,1
     213 DFBA      RCALL	_WriteChar
(0029) WriteChar(2,2,11,adc_1);
     214 E08C      LDI	R24,0xC
     215 E091      LDI	R25,1
     216 839B      STD	Y+3,R25
     217 838A      STD	Y+2,R24
     218 E08B      LDI	R24,0xB
     219 E090      LDI	R25,0
     21A 8399      STD	Y+1,R25
     21B 8388      STD	Y+0,R24
     21C E022      LDI	R18,2
     21D E002      LDI	R16,2
     21E DFAF      RCALL	_WriteChar
     21F C088      RJMP	0x02A8
(0030) 
(0031) while(1)
(0032)      {
(0033) 	  //取ADC_0
(0034)       ADCSR=0x00;
     220 2422      CLR	R2
     221 B826      OUT	0x06,R2
(0035)       ADMUX=0x40;
     222 E480      LDI	R24,0x40
     223 B987      OUT	0x07,R24
(0036)       ADCSR=(1<<ADEN)|(1<<ADSC)|(1<<ADFR)|0x07;   //128分频,连续转换
     224 EE87      LDI	R24,0xE7
     225 B986      OUT	0x06,R24
(0037)       s_ms(500);                                   //延时很重要,给出转换的时间
     226 EF04      LDI	R16,0xF4
     227 E011      LDI	R17,1
     228 DE4C      RCALL	_s_ms
(0038)       adc_l0=ADCL;
     229 B0A4      IN	R10,0x04
     22A 24BB      CLR	R11
(0039)       adc_h0=ADCH;
     22B B0C5      IN	R12,0x05
     22C 24DD      CLR	R13
(0040)       adc_data0=adc_h0<<8|adc_l0;                  
     22D 01B6      MOVW	R22,R12
     22E 2F76      MOV	R23,R22
     22F 2766      CLR	R22
     230 296A      OR	R22,R10
     231 297B      OR	R23,R11
(0041)       adc_data0=adc_data0>>1;               //放弃一位的精度
     232 9576      LSR	R23
     233 9567      ROR	R22
(0042)       adc_data0-=35;                        //修正
     234 5263      SUBI	R22,0x23
     235 4070      SBCI	R23,0
(0043) 	  
(0044) 	  //取ADC_1
(0045)       //ADCSR=0x00;
(0046)       //ADMUX=0x41;
(0047)       //ADCSR=(1<<ADEN)|(1<<ADSC)|(1<<ADFR)|0x07;   
(0048)       //s_ms(500);                           
(0049)       //adc_l1=ADCL;
(0050)       //adc_h1=ADCH;
(0051)       //adc_data1=adc_h1<<8|adc_l1;  
(0052)       //adc_data1=adc_data1>>1;
(0053)       //adc_data1-=35;                       
(0054) 	  adc_data1=500;
     236 EF44      LDI	R20,0xF4
     237 E051      LDI	R21,1
(0055) 	  
(0056) 	  //显示ADC0
(0057) 	  ten_3=(adc_data0)/100;
     238 E624      LDI	R18,0x64
     239 E030      LDI	R19,0
     23A 018B      MOVW	R16,R22
     23B 940E 02AD CALL	div16u
     23D 2EE0      MOV	R14,R16
(0058) 	  ten_2=(adc_data0-(ten_3*100))/10;
     23E E684      LDI	R24,0x64
     23F 9D8E      MUL	R24,R14
     240 018B      MOVW	R16,R22
     241 1900      SUB	R16,R0
     242 0911      SBC	R17,R1
     243 E02A      LDI	R18,0xA
     244 E030      LDI	R19,0
     245 940E 02AD CALL	div16u
     247 2EC0      MOV	R12,R16
(0059) 	  ten_1=adc_data0-(ten_3*100)-ten_2*10;
     248 E684      LDI	R24,0x64
     249 9D8E      MUL	R24,R14
     24A 2EA6      MOV	R10,R22
     24B 18A0      SUB	R10,R0
     24C 08B1      SBC	R11,R1
     24D E08A      LDI	R24,0xA
     24E 9D8C      MUL	R24,R12
     24F 18A0      SUB	R10,R0
     250 08B1      SBC	R11,R1
(0060) 	  WriteNum(1,8,(ten_3));
     251 2C2E      MOV	R2,R14
     252 2433      CLR	R3
     253 8239      STD	Y+1,R3
     254 8228      STD	Y+0,R2
     255 E028      LDI	R18,0x8
     256 E030      LDI	R19,0
     257 E001      LDI	R16,1
     258 E010      LDI	R17,0
     259 DF2C      RCALL	_WriteNum
(0061) 	  WriteNum(1,10,(ten_2));
     25A 2C2C      MOV	R2,R12
     25B 2433      CLR	R3
     25C 8239      STD	Y+1,R3
     25D 8228      STD	Y+0,R2
     25E E02A      LDI	R18,0xA
     25F E030      LDI	R19,0
     260 E001      LDI	R16,1
     261 E010      LDI	R17,0
     262 DF23      RCALL	_WriteNum
(0062) 	  WriteNum(1,11,(ten_1));
     263 2C2A      MOV	R2,R10
     264 2433      CLR	R3
     265 8239      STD	Y+1,R3
     266 8228      STD	Y+0,R2
     267 E02B      LDI	R18,0xB
     268 E030      LDI	R19,0
     269 E001      LDI	R16,1
     26A E010      LDI	R17,0
     26B DF1A      RCALL	_WriteNum
(0063) 	  
(0064) 	  //显示ADC1
(0065) 	  ten_3=(adc_data1)/100;
     26C E624      LDI	R18,0x64
     26D E030      LDI	R19,0
     26E 018A      MOVW	R16,R20
     26F 940E 02AD CALL	div16u
     271 2EE0      MOV	R14,R16
(0066) 	  ten_2=(adc_data1-(ten_3*100))/10;
     272 E684      LDI	R24,0x64
     273 9D8E      MUL	R24,R14
     274 018A      MOVW	R16,R20
     275 1900      SUB	R16,R0
     276 0911      SBC	R17,R1
     277 E02A      LDI	R18,0xA
     278 E030      LDI	R19,0
     279 940E 02AD CALL	div16u
     27B 2EC0      MOV	R12,R16
(0067) 	  ten_1=adc_data1-(ten_3*100)-ten_2*10;
     27C E684      LDI	R24,0x64
     27D 9D8E      MUL	R24,R14
     27E 2EA4      MOV	R10,R20
     27F 18A0      SUB	R10,R0
     280 08B1      SBC	R11,R1
     281 E08A      LDI	R24,0xA
     282 9D8C      MUL	R24,R12
     283 18A0      SUB	R10,R0
     284 08B1      SBC	R11,R1
(0068) 	  WriteNum(2,8,(ten_3));
     285 2C2E      MOV	R2,R14
     286 2433      CLR	R3
     287 8239      STD	Y+1,R3
     288 8228      STD	Y+0,R2
     289 E028      LDI	R18,0x8
     28A E030      LDI	R19,0
     28B E002      LDI	R16,2
     28C E010      LDI	R17,0
     28D DEF8      RCALL	_WriteNum
(0069) 	  WriteNum(2,10,(ten_2));
     28E 2C2C      MOV	R2,R12
     28F 2433      CLR	R3
     290 8239      STD	Y+1,R3
     291 8228      STD	Y+0,R2
     292 E02A      LDI	R18,0xA
     293 E030      LDI	R19,0
     294 E002      LDI	R16,2
     295 E010      LDI	R17,0
     296 DEEF      RCALL	_WriteNum
(0070) 	  WriteNum(2,11,(ten_1));
     297 2C2A      MOV	R2,R10
     298 2433      CLR	R3
     299 8239      STD	Y+1,R3
     29A 8228      STD	Y+0,R2
     29B E02B      LDI	R18,0xB
     29C E030      LDI	R19,0
     29D E002      LDI	R16,2
     29E E010      LDI	R17,0
     29F DEE6      RCALL	_WriteNum
(0071) 	  
(0072) 	  for(i=0;i<18;i++)
     2A0 2744      CLR	R20
     2A1 C004      RJMP	0x02A6
(0073) 	     {
(0074) 	      s_ms(60000);
FILE: <library>
     2A2 E600      LDI	R16,0x60
     2A3 EE1A      LDI	R17,0xEA
     2A4 DDD0      RCALL	_s_ms
     2A5 9543      INC	R20
     2A6 3142      CPI	R20,0x12
     2A7 F3D0      BCS	0x02A2
     2A8 CF77      RJMP	0x0220
     2A9 9624      ADIW	R28,4
     2AA 9508      RET
mod16u:
     2AB 9468      BSET	6
     2AC C001      RJMP	xdiv16u
div16u:
     2AD 94E8      BCLR	6
xdiv16u:
     2AE 92EA      ST	R14,-Y
     2AF 92FA      ST	R15,-Y
     2B0 938A      ST	R24,-Y
     2B1 24EE      CLR	R14
     2B2 24FF      CLR	R15
     2B3 E180      LDI	R24,0x10
     2B4 0F00      LSL	R16
     2B5 1F11      ROL	R17
     2B6 1CEE      ROL	R14
     2B7 1CFF      ROL	R15
     2B8 16E2      CP	R14,R18
     2B9 06F3      CPC	R15,R19
     2BA F018      BCS	0x02BE
     2BB 1AE2      SUB	R14,R18
     2BC 0AF3      SBC	R15,R19
     2BD 9503      INC	R16
     2BE 958A      DEC	R24
     2BF F7A1      BNE	0x02B4
     2C0 F416      BRTC	0x02C3
     2C1 2D0E      MOV	R16,R14
     2C2 2D1F      MOV	R17,R15
     2C3 9189      LD	R24,Y+
     2C4 90F9      LD	R15,Y+
     2C5 90E9      LD	R14,Y+
     2C6 9508      RET
push_xgsetF00C:
     2C7 937A      ST	R23,-Y
     2C8 936A      ST	R22,-Y
     2C9 935A      ST	R21,-Y
     2CA 934A      ST	R20,-Y
     2CB 92BA      ST	R11,-Y
     2CC 92AA      ST	R10,-Y
     2CD 9508      RET
pop_xgsetF00C:
     2CE 90A9      LD	R10,Y+
     2CF 90B9      LD	R11,Y+
     2D0 9149      LD	R20,Y+
     2D1 9159      LD	R21,Y+
     2D2 9169      LD	R22,Y+
     2D3 9179      LD	R23,Y+
     2D4 9508      RET
push_xgsetF03C:
     2D5 937A      ST	R23,-Y
     2D6 936A      ST	R22,-Y
     2D7 935A      ST	R21,-Y
     2D8 934A      ST	R20,-Y
     2D9 92DA      ST	R13,-Y
     2DA 92CA      ST	R12,-Y
     2DB 92BA      ST	R11,-Y
     2DC 92AA      ST	R10,-Y
     2DD 9508      RET
pop_xgsetF03C:
     2DE 90A9      LD	R10,Y+
     2DF 90B9      LD	R11,Y+
     2E0 90C9      LD	R12,Y+
     2E1 90D9      LD	R13,Y+
     2E2 9149      LD	R20,Y+
     2E3 9159      LD	R21,Y+
     2E4 9169      LD	R22,Y+
     2E5 9179      LD	R23,Y+
     2E6 9508      RET

⌨️ 快捷键说明

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