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

📄 adc.lst

📁 基于MEGA128的双通道AD转换例程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0225 940E05F5  CALL	sub32f
    0227 940E0548  CALL	fp2int
    0229 01C8      MOVW	R24,R16
    022A 5080      SUBI	R24,0
    022B 4890      SBCI	R25,0x80
    022C 015C      MOVW	R10,R24
    022D C00B      RJMP	0x0239
    022E 9120012D  LDS	R18,adc_result+2
    0230 9130012E  LDS	R19,adc_result+3
    0232 9100012B  LDS	R16,adc_result
    0234 9110012C  LDS	R17,adc_result+1
    0236 940E0548  CALL	fp2int
    0238 0158      MOVW	R10,R16
    0239 E02A      LDI	R18,0xA
    023A E030      LDI	R19,0
    023B 0185      MOVW	R16,R10
    023C 940E045E  CALL	mod16u
    023E 01C8      MOVW	R24,R16
    023F 96C0      ADIW	R24,0x30
    0240 01FA      MOVW	R30,R20
    0241 A385      STD	Z+37,R24
(0055)   
(0056)   Com_putstring (adc_str,41,&RTbuf_UART0);
    0242 E28F      LDI	R24,0x2F
    0243 E091      LDI	R25,1
    0244 8399      STD	Y+1,R25
    0245 8388      STD	Y+0,R24
    0246 E229      LDI	R18,0x29
    0247 018A      MOVW	R16,R20
    0248 940E02D2  CALL	_Com_putstring
(0057)   i++;
    024A 9563      INC	R22
(0058)   if(i>1) i=0;
    024B E081      LDI	R24,1
    024C 1786      CP	R24,R22
    024D F408      BCC	0x024F
    024E 2766      CLR	R22
(0059)   
(0060)   delay_nms(300);
    024F E20C      LDI	R16,0x2C
    0250 E011      LDI	R17,1
    0251 940E0271  CALL	_delay_nms
    0253 CEA9      RJMP	0x00FD
    0254 9622      ADIW	R28,2
    0255 9508      RET
FILE: D:\avrvi\AVRVi_m128_Starter_Kit\ADC_2_Channel\source\lib\delay.c
(0001) /************************************************
(0002) 文件:delay.c
(0003) 用途:延时函数
(0004) 注意:系统时钟8M
(0005) 创建:2008.1.25
(0006) 修改:2008.1.25
(0007) Copy Right  (c)  www.avrvi.com  AVR与虚拟仪器
(0008) ************************************************/
(0009) 
(0010) void delay_1us(void)                 //1us延时函数
(0011)   {
(0012)    asm("nop");
_delay_1us:
    0256 0000      NOP
    0257 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R22
    0258 940E0512  CALL	push_gset2
    025A 01B8      MOVW	R22,R16
(0013)   }
(0014) 
(0015) void delay_nus(unsigned int n)       //N us延时函数
(0016)   {
(0017)    unsigned int i=0;
    025B 2744      CLR	R20
    025C 2755      CLR	R21
(0018)    for (i=0;i<n;i++)
    025D C003      RJMP	0x0261
(0019)    delay_1us();
    025E DFF7      RCALL	_delay_1us
    025F 5F4F      SUBI	R20,0xFF
    0260 4F5F      SBCI	R21,0xFF
    0261 1746      CP	R20,R22
    0262 0757      CPC	R21,R23
    0263 F3D0      BCS	0x025E
    0264 940E0503  CALL	pop_gset2
    0266 9508      RET
(0020)   }
(0021)   
(0022) void delay_1ms(void)                 //1ms延时函数
(0023)   {
(0024)    unsigned int i;
(0025)    for (i=0;i<1140;i++);
_delay_1ms:
  i                    --> R16
    0267 2700      CLR	R16
    0268 2711      CLR	R17
    0269 C002      RJMP	0x026C
    026A 5F0F      SUBI	R16,0xFF
    026B 4F1F      SBCI	R17,0xFF
    026C 3704      CPI	R16,0x74
    026D E0E4      LDI	R30,4
    026E 071E      CPC	R17,R30
    026F F3D0      BCS	0x026A
    0270 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    0271 940E0512  CALL	push_gset2
    0273 01B8      MOVW	R22,R16
(0026)   }
(0027)   
(0028) void delay_nms(unsigned int n)       //N ms延时函数
(0029)   {
(0030)    unsigned int i=0;
    0274 2744      CLR	R20
    0275 2755      CLR	R21
(0031)    for (i=0;i<n;i++)
    0276 C003      RJMP	0x027A
(0032)    delay_1ms();
    0277 DFEF      RCALL	_delay_1ms
    0278 5F4F      SUBI	R20,0xFF
    0279 4F5F      SBCI	R21,0xFF
    027A 1746      CP	R20,R22
    027B 0757      CPC	R21,R23
    027C F3D0      BCS	0x0277
    027D 940E0503  CALL	pop_gset2
    027F 9508      RET
FILE: D:\avrvi\AVRVi_m128_Starter_Kit\ADC_2_Channel\source\lib\sio.c
(0001) /************************************************
(0002) 文件:sio.c
(0003) 用途:结构化串口通信程序
(0004) 注意:
(0005) 创建:2008.1.26
(0006) 修改:2008.1.26
(0007) Copy Right  (c)  www.avrvi.com  AVR与虚拟仪器
(0008) ************************************************/
(0009) #include "..\config.h"
(0010) 
(0011) #if USEUART0
(0012) siocirqueue RTbuf_UART0;
(0013) #endif
(0014) #if USEUART1
(0015) siocirqueue RTbuf_UART1;
(0016) #endif
(0017) 
(0018) #if (CPU_TYPE == M32)||(CPU_TYPE == M16)||(CPU_TYPE == M8)
(0019) #define USEUART0  TRUE
(0020) #define USEUART1  FALSE
(0021) #define iv_USART0_RXC   iv_USART_RXC
(0022) #define iv_USART0_TXC   iv_USART_TXC
(0023) #define UDR0  	  UDR 
(0024) #define UCSR0A    UCSRA
(0025) #define UCSR0B    UCSRB
(0026) #define UCSR0C	  UCSRC
(0027) #define UBRR0H	  UBRRH
(0028) #define UBRR0L	  UBRRL
(0029) #define RXCIE0	  RXCIE
(0030) #define TXCIE0	  TXCIE
(0031) #endif
(0032) 
(0033) 
(0034) /*********************************************************************************************************
(0035) ** 函数名称: Com_init
(0036) ** 功能描述: 初始化串行口
(0037) ** 输 入: 
(0038) ** 全局变量: 无
(0039) ** 调用模块: Com_baudrate
(0040) ** 说明:
(0041) ** 注意:
(0042) ********************************************************************************************************/
(0043) void Com_init (void) {
(0044) //WDR(); //喂狗 
(0045) //CLI();                     // 关中断
(0046) #if USEUART0
(0047) Tbuf_init(&RTbuf_UART0);              //初始化接收缓冲
_Com_init:
    0280 E20F      LDI	R16,0x2F
    0281 E011      LDI	R17,1
    0282 D0BB      RCALL	_Tbuf_init
(0048) Rbuf_init(&RTbuf_UART0);
    0283 E20F      LDI	R16,0x2F
    0284 E011      LDI	R17,1
    0285 D0AF      RCALL	_Rbuf_init
(0049) UCSR0B = 0x00; //disable while setting baud rate
    0286 2422      CLR	R2
    0287 B82A      OUT	0x0A,R2
(0050) UCSR0A=0x00;
    0288 B82B      OUT	0x0B,R2
(0051) 
(0052) #if CPU_TYPE <= M32
(0053) UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
(0054) UCSR0B = (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);  // RXCIE=1;TXCIE=1;UDREIE=0;RXEN=1;TXEN=1
(0055) #else
(0056) UCSR0C=0x06;  //8 DATA ,1 STOP, NO PARITY
    0289 E086      LDI	R24,6
    028A 93800095  STS	0x95,R24
(0057) UCSR0B = (1<<RXCIE0)|(1<<TXCIE0)|(1<<RXEN0)|(1<<TXEN0);  // RXCIE=1;TXCIE=1;UDREIE=0;RXEN=1;TXEN=1
    028C ED88      LDI	R24,0xD8
    028D B98A      OUT	0x0A,R24
(0058) #endif
(0059) 
(0060) #endif
(0061) 
(0062) 
(0063) #if USEUART1
(0064) Tbuf_init(&RTbuf_B);              //初始化接收缓冲
(0065) Rbuf_init(&RTbuf_B);
(0066) UCSR1B = 0x00; //disable while setting baud rate
(0067) UCSR1A = 0x00;
(0068) UCSR1C = 0x06;
(0069) UCSR1B = 0xD8;
(0070) #endif
(0071) Com_baudrate (9600);		 // 
    028E E800      LDI	R16,0x80
    028F E215      LDI	R17,0x25
    0290 D001      RCALL	_Com_baudrate
    0291 9508      RET
_Com_baudrate:
  tmp                  --> R10
  baudrate             --> R10
    0292 940E0510  CALL	push_gset3
    0294 0158      MOVW	R10,R16
(0072) 
(0073) //SEI();                     // 开中断
(0074) }
(0075) /*********************************************************************************************************
(0076) ** 函数名称: Com_baudrate
(0077) ** 功能描述: 利用定时器T1产生由参数baudrate指定的波特率
(0078) ** 输 入: baudrate指定的波特率
(0079) ** 全局变量: 无
(0080) ** 调用模块: 无
(0081) ** 说明:
(0082) ** 注意:
(0083) ********************************************************************************************************/
(0084) void Com_baudrate (unsigned int baudrate) {
(0085) unsigned int tmp;
(0086) tmp= F_CPU/baudrate/16-1;
    0295 0115      MOVW	R2,R10
    0296 2444      CLR	R4
    0297 2455      CLR	R5
    0298 E040      LDI	R20,0
    0299 E152      LDI	R21,0x12
    029A E76A      LDI	R22,0x7A
    029B E070      LDI	R23,0
    029C 925A      ST	R5,-Y
    029D 924A      ST	R4,-Y
    029E 923A      ST	R3,-Y
    029F 922A      ST	R2,-Y
    02A0 018A      MOVW	R16,R20
    02A1 019B      MOVW	R18,R22
    02A2 940E0480  CALL	div32s
    02A4 E140      LDI	R20,0x10
    02A5 E050      LDI	R21,0
    02A6 E060      LDI	R22,0
    02A7 E070      LDI	R23,0
    02A8 937A      ST	R23,-Y
    02A9 936A      ST	R22,-Y
    02AA 935A      ST	R21,-Y
    02AB 934A      ST	R20,-Y
    02AC 940E0480  CALL	div32s
    02AE 0118      MOVW	R2,R16
    02AF 0129      MOVW	R4,R18
    02B0 E041      LDI	R20,1
    02B1 E050      LDI	R21,0
    02B2 E060      LDI	R22,0
    02B3 E070      LDI	R23,0
    02B4 1A24      SUB	R2,R20
    02B5 0A35      SBC	R3,R21
    02B6 0A46      SBC	R4,R22
    02B7 0A57      SBC	R5,R23
    02B8 0151      MOVW	R10,R2
(0087) #if USEUART0
(0088) UBRR0H=(unsigned char)(tmp>>8);
    02B9 2C23      MOV	R2,R3
    02BA 2433      CLR	R3
    02BB 92200090  STS	0x90,R2
(0089) UBRR0L=(unsigned char)tmp;
    02BD B8A9      OUT	0x09,R10
    02BE 940E0506  CALL	pop_gset3
    02C0 9508      RET
_Com_putchar:
  RTbuf                --> R22
  c                    --> R20
    02C1 940E0512  CALL	push_gset2
    02C3 01B9      MOVW	R22,R18
    02C4 2F40      MOV	R20,R16
(0090) #endif
(0091) #if USEUART1
(0092) UBRR1H=(unsigned char)(tmp>>8);
(0093) UBRR1L=(unsigned char)tmp;
(0094) #endif
(0095) }
(0096) /*********************************************************************************************************
(0097) ** 函数名称: Com_putchar
(0098) ** 功能描述: 从串行口输出一个字符c
(0099) ** 输 入: c:输出字符
(0100) ** 输出	 : 0:失败 1:成功
(0101) ** 全局变量: 无
(0102) ** 调用模块: 
(0103) ** 说明:
(0104) ** 注意:
(0105) ********************************************************************************************************/
(0106) unsigned char Com_putchar (unsigned char c,siocirqueue *RTbuf) {
(0107) //WDR(); //喂狗
(0108) if (Tbuf_full(RTbuf)) 
    02C5 018B      MOVW	R16,R22
    02C6 D099      RCALL	_Tbuf_full
    02C7 2300      TST	R16
    02C8 F011      BEQ	0x02CB
(0109)    return(0);
    02C9 2700      CLR	R16
    02CA C004      RJMP	0x02CF
(0110) else{
(0111) 	Tbuf_putchar(c,RTbuf);				// 将数据加入到发送缓冲区并开中断
    02CB 019B      MOVW	R18,R22
    02CC 2F04      MOV	R16,R20
    02CD D0A3      RCALL	_Tbuf_putchar
(0112) 	return(1);
    02CE E001      LDI	R16,1
    02CF 940E0503  CALL	pop_gset2
    02D1 9508      RET
_Com_putstring:
  i                    --> R12
  RTbuf                --> R22
  len                  --> R10
  p                    --> R20
    02D2 940E050E  CALL	push_gset4
    02D4 2EA2      MOV	R10,R18
    02D5 01A8      MOVW	R20,R16
    02D6 8568      LDD	R22,Y+8
    02D7 8579      LDD	R23,Y+9
(0113) 	}
(0114) }
(0115) /*********************************************************************************************************
(0116) ** 函数名称: Com_putstring
(0117) ** 功能描述: 从串行口输出一个字符串
(0118) ** 输 入: p:指向输出字符串 len:输出长度
(0119) ** 输出	 : 
(0120) ** 全局变量: 无
(0121) ** 调用模块: 
(0122) ** 说明:
(0123) ** 注意:
(0124) ********************************************************************************************************/
(0125) void Com_putstring (unsigned char *p,unsigned char len,siocirqueue *RTbuf) {
(0126) unsigned char i;
(0127) //WDR(); //喂狗
(0128) if (len!=0 ){
    02D8 20AA      TST	R10
    02D9 F079      BEQ	0x02E9
(0129) 	for(i=0;i<len;i++)
    02DA 24CC      CLR	R12
    02DB C00A      RJMP	0x02E6
(0130) 	while(Com_putchar(p[i],RTbuf)==0);//WDR(); //喂狗;
    02DC 019B      MOVW	R18,R22
    02DD 2DEC      MOV	R30,R12
    02DE 27FF      CLR	R31
    02DF 0FE4      ADD	R30,R20
    02E0 1FF5      ADC	R31,R21
    02E1 8100      LDD	R16,Z+0
    02E2 DFDE      RCALL	_Com_putchar
    02E3 2300      TST	R16
    02E4 F3B9      BEQ	0x02DC
    02E5 94C3      INC	R12
    02E6 14CA      CP	R12,R10
    02E7 F3A0      BCS	0x02DC
(0131) 	}
    02E8 C00B      RJMP	0x02F4
(0132) 	else {
(0133) 		do{
(0134) 			while(Com_putchar(*p,RTbuf)==0);//WDR(); //喂狗;
    02E9 019B      MOVW	R18,R22
    02EA 01FA      MOVW	R30,R20
    02EB 8100      LDD	R16,Z+0
    02EC DFD4      RCALL	_Com_putchar
    02ED 2300      TST	R16
    02EE F3D1      BEQ	0x02E9
(0135) 			}while(*p++!='\n');
    02EF 01FA      MOVW	R30,R20
    02F0 9181      LD	R24,Z+
    02F1 01AF      MOVW	R20,R30
    02F2 308A      CPI	R24,0xA
    02F3 F7A9      BNE	0x02E9
(0136) 	}
    02F4 940E0509  CALL	pop_gset4
    02F6 9508      RET
_Com_getchar:
  RTbuf                --> R20
  mode                 --> R22
    02F7 940E0512  CALL	push_gset2
    02F9 01A9      MOVW	R20,R18
    02FA 2F60      MOV	R22,R16
(0137) 	
(0138) }
(0139) /*********************************************************************************************************
(0140) ** 函数名称: Com_getchar
(0141) ** 功能描述: 从串行口输入一个字符
(0142) ** 输 入: mode:0不需等待,在调用函数前检测Com_R_count的值
(0143) **              1 等待数据到来
(0144) ** 输出	 : 读入的字符
(0145) ** 全局变量: 无
(0146) ** 调用模块: 
(0147) ** 说明:
(0148) ** 注意:
(0149) ********************************************************************************************************/
(0150) 
(0151) unsigned char Com_getchar (unsigned char mode,siocirqueue *RTbuf) {
(0152) //WDR(); //喂狗
(0153) //    Delay(Delay_Comget,MaxLimit_Comget_Delay);
(0154) //	if (mode>0) while(Com_R_count(RTbuf)==0 && !DelayOvf(Delay_Comget))//WDR(); //喂狗;
(0155) //	if (DelayOvf(Delay_Comget))
(0156) //	    return 0;    //时间超时
(0157) //	else 
(0158) 	    
(0159) 		while(!Com_R_count(RTbuf));
    02FB 018A      MOVW	R16,R20
    02FC D035      RCALL	_Com_R_count

⌨️ 快捷键说明

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