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

📄 adc.lst

📁 基于MEGA128的双通道AD转换例程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    02FD 2300      TST	R16
    02FE F3E1      BEQ	0x02FB
(0160) 		return (Rbuf_getchar(RTbuf));// 串行口输入正确,返回输入的字符
    02FF 018A      MOVW	R16,R20
    0300 D0A9      RCALL	_Rbuf_getchar
    0301 940E0503  CALL	pop_gset2
    0303 9508      RET
_Com_Rbuf_Clear:
  RTbuf                --> R20
    0304 940E0514  CALL	push_gset1
    0306 01A8      MOVW	R20,R16
(0161) }
(0162) 
(0163) 
(0164) 
(0165) void Com_Rbuf_Clear(siocirqueue *RTbuf){
(0166) 	Rbuf_init(RTbuf);
    0307 018A      MOVW	R16,R20
    0308 D02C      RCALL	_Rbuf_init
    0309 940E0517  CALL	pop_gset1
    030B 9508      RET
_Com_getstring:
  i                    --> R20
  RTbuf                --> R22
  len                  --> R12
  p                    --> R10
    030C 940E050E  CALL	push_gset4
    030E 2EC2      MOV	R12,R18
    030F 0158      MOVW	R10,R16
    0310 8568      LDD	R22,Y+8
    0311 8579      LDD	R23,Y+9
(0167) }
(0168) 
(0169) 
(0170) 
(0171) unsigned char Com_getstring (unsigned char *p,unsigned char len,siocirqueue *RTbuf) {
(0172) unsigned char i=0;
    0312 2744      CLR	R20
(0173) //WDR(); //喂狗
(0174) if (len>0 ){
    0313 2422      CLR	R2
    0314 142C      CP	R2,R12
    0315 F460      BCC	0x0322
(0175) 	for(i=0;i<len;i++){
    0316 C007      RJMP	0x031E
(0176) 		//WDR(); //喂狗
(0177) 		*p++=Com_getchar(1,RTbuf);
    0317 019B      MOVW	R18,R22
    0318 E001      LDI	R16,1
    0319 DFDD      RCALL	_Com_getchar
    031A 01F5      MOVW	R30,R10
    031B 9301      ST	R16,Z+
    031C 015F      MOVW	R10,R30
    031D 9543      INC	R20
    031E 154C      CP	R20,R12
    031F F3B8      BCS	0x0317
(0178) 		}
(0179) 	return(len);
    0320 2D0C      MOV	R16,R12
    0321 C00D      RJMP	0x032F
(0180) 	}
(0181) 	else{
(0182) 		
(0183) 		
(0184) 		do{
(0185) 				*p++=Com_getchar(1,RTbuf);
    0322 019B      MOVW	R18,R22
    0323 E001      LDI	R16,1
    0324 DFD2      RCALL	_Com_getchar
    0325 01F5      MOVW	R30,R10
    0326 9301      ST	R16,Z+
    0327 015F      MOVW	R10,R30
(0186) 				i++;
    0328 9543      INC	R20
(0187) 				//WDR(); //喂狗
(0188) 			}while(*(p-1)!='\n');
    0329 01F5      MOVW	R30,R10
    032A 9731      SBIW	R30,1
    032B 8180      LDD	R24,Z+0
    032C 308A      CPI	R24,0xA
    032D F7A1      BNE	0x0322
(0189) //			*p++=Com_getchar(1,RTbuf);
(0190) //			*(p)=0;
(0191) 		return(i);
    032E 2F04      MOV	R16,R20
    032F 940E0509  CALL	pop_gset4
    0331 9508      RET
(0192) 		}
(0193) 	
(0194) }
(0195) 
(0196) 
(0197) /*********************************************************************************************************
(0198) ** 函数名称: Com_R_count
(0199) ** 功能描述: 返回接收缓冲区字符个数函数
(0200) ** 输 入: 
(0201) ** 输出	 : 字符个数
(0202) ** 全局变量: 无
(0203) ** 调用模块: 
(0204) ** 说明:
(0205) ** 注意:
(0206) ********************************************************************************************************/
(0207) unsigned char Com_R_count(siocirqueue *RTbuf){
(0208) return RTbuf->R_count;
_Com_R_count:
  RTbuf                --> R16
    0332 01F8      MOVW	R30,R16
    0333 8102      LDD	R16,Z+2
    0334 9508      RET
(0209) }
(0210) /*********************************************************************************************************
(0211) ** 函数名称: Rbuf_init
(0212) ** 功能描述: 接收缓冲区初始化
(0213) ** 输 入: 
(0214) ** 输出	 : 
(0215) ** 全局变量: 无
(0216) ** 调用模块: 
(0217) ** 说明:
(0218) ** 注意:
(0219) ********************************************************************************************************/
(0220) void Rbuf_init(siocirqueue *RTbuf){
(0221) 	RTbuf->R_front=0;
_Rbuf_init:
  RTbuf                --> R16
    0335 2422      CLR	R2
    0336 01F8      MOVW	R30,R16
    0337 8220      STD	Z+0,R2
(0222) 	RTbuf->R_rear=0;
    0338 8221      STD	Z+1,R2
(0223)     RTbuf->R_count=0;
    0339 01F8      MOVW	R30,R16
    033A 8222      STD	Z+2,R2
(0224) 	RTbuf->R_overflow=0;
    033B 01F8      MOVW	R30,R16
    033C 8223      STD	Z+3,R2
    033D 9508      RET
(0225) }
(0226) /*********************************************************************************************************
(0227) ** 函数名称: Tbuf_init
(0228) ** 功能描述: 发送缓冲区初始化
(0229) ** 输 入: 
(0230) ** 输出	 : 
(0231) ** 全局变量: 无
(0232) ** 调用模块: 
(0233) ** 说明:
(0234) ** 注意:
(0235) ********************************************************************************************************/
(0236) void Tbuf_init(siocirqueue *RTbuf){
(0237) 	RTbuf->T_front=0;
_Tbuf_init:
  RTbuf                --> R16
    033E 2422      CLR	R2
    033F 01F8      MOVW	R30,R16
    0340 59E8      SUBI	R30,0x98
    0341 4FFF      SBCI	R31,0xFF
    0342 8220      STD	Z+0,R2
(0238) 	RTbuf->T_rear=0;
    0343 01F8      MOVW	R30,R16
    0344 59E7      SUBI	R30,0x97
    0345 4FFF      SBCI	R31,0xFF
    0346 8220      STD	Z+0,R2
(0239)     RTbuf->T_count=0;
    0347 01F8      MOVW	R30,R16
    0348 59E6      SUBI	R30,0x96
    0349 4FFF      SBCI	R31,0xFF
    034A 8220      STD	Z+0,R2
(0240) 	RTbuf->T_disabled=1;
    034B E081      LDI	R24,1
    034C 01F8      MOVW	R30,R16
    034D 53E1      SUBI	R30,0x31
    034E 4FFF      SBCI	R31,0xFF
    034F 8380      STD	Z+0,R24
    0350 9508      RET
_Rbuf_empty:
  RTbuf                --> R16
    0351 940E0514  CALL	push_gset1
(0241) 	}
(0242) /*********************************************************************************************************
(0243) ** 函数名称: Rbuf_empty
(0244) ** 功能描述: 接收缓冲区判空
(0245) ** 输 入: 
(0246) ** 输出	 :  TRUE 空 FALSE 非空
(0247) ** 全局变量: 无
(0248) ** 调用模块: 
(0249) ** 说明:
(0250) ** 注意:
(0251) ********************************************************************************************************/
(0252) unsigned char Rbuf_empty(siocirqueue *RTbuf){
(0253) 	return RTbuf->R_count==0;
    0353 01F8      MOVW	R30,R16
    0354 8022      LDD	R2,Z+2
    0355 2022      TST	R2
    0356 F419      BNE	0x035A
    0357 E041      LDI	R20,1
    0358 E050      LDI	R21,0
    0359 C002      RJMP	0x035C
    035A 2744      CLR	R20
    035B 2755      CLR	R21
    035C 2F04      MOV	R16,R20
    035D 940E0517  CALL	pop_gset1
    035F 9508      RET
_Tbuf_full:
  RTbuf                --> R16
    0360 940E0514  CALL	push_gset1
(0254) 	}
(0255) /*********************************************************************************************************
(0256) ** 函数名称: Tbuf_empty
(0257) ** 功能描述: 发送缓冲区判空
(0258) ** 输 入: 
(0259) ** 输出	 :  TRUE 空 FALSE 非空
(0260) ** 全局变量: 无
(0261) ** 调用模块: 
(0262) ** 说明:
(0263) ** 注意:
(0264) ********************************************************************************************************
(0265) unsigned char Tbuf_empty(void){
(0266) 	return RTbuf->T_count==0;
(0267) 	}
(0268) /*********************************************************************************************************
(0269) ** 函数名称: Rbuf_full
(0270) ** 功能描述: 接收缓冲区判满
(0271) ** 输 入: 
(0272) ** 输出	 :  TRUE 满 FALSE 非满
(0273) ** 全局变量: 无
(0274) ** 调用模块: 
(0275) ** 说明:
(0276) ** 注意:
(0277) ********************************************************************************************************
(0278) unsigned char Rbuf_full (void){
(0279) 	return RTbuf->R_count==RBUF_SIZE;
(0280) 	}
(0281) /*********************************************************************************************************
(0282) ** 函数名称: Tbuf_full
(0283) ** 功能描述: 发送缓冲区判满
(0284) ** 输 入: 
(0285) ** 输出	 :  TRUE 满 FALSE 非满
(0286) ** 全局变量: 无
(0287) ** 调用模块: 
(0288) ** 说明:
(0289) ** 注意:
(0290) ********************************************************************************************************/
(0291) unsigned char Tbuf_full(siocirqueue *RTbuf){
(0292) 	return RTbuf->T_count==TBUF_SIZE;
    0362 01F8      MOVW	R30,R16
    0363 59E6      SUBI	R30,0x96
    0364 4FFF      SBCI	R31,0xFF
    0365 8180      LDD	R24,Z+0
    0366 3684      CPI	R24,0x64
    0367 F419      BNE	0x036B
    0368 E041      LDI	R20,1
    0369 E050      LDI	R21,0
    036A C002      RJMP	0x036D
    036B 2744      CLR	R20
    036C 2755      CLR	R21
    036D 2F04      MOV	R16,R20
    036E 940E0517  CALL	pop_gset1
    0370 9508      RET
_Tbuf_putchar:
  RTbuf                --> R20
  x                    --> R22
    0371 940E0512  CALL	push_gset2
    0373 01A9      MOVW	R20,R18
    0374 2F60      MOV	R22,R16
(0293) 	}
(0294) /*********************************************************************************************************
(0295) ** 函数名称: Rbuf_putchar
(0296) ** 功能描述: 把一个字符放入接收缓冲区
(0297) ** 输 入: 
(0298) ** 输出	 :  
(0299) ** 全局变量: 无
(0300) ** 调用模块: 
(0301) ** 说明:
(0302) ** 注意:
(0303) ********************************************************************************************************
(0304) void  Rbuf_putchar (unsigned char x){
(0305) 	if(!Rbuf_full()){
(0306) 		REV_DIS();
(0307) 		RTbuf->R_count++;
(0308) 		RTbuf->R_buf[RTbuf->R_rear]=x;
(0309) 		RTbuf->R_rear=(RTbuf->R_rear+1) % RBUF_SIZE;
(0310) 		REV_EN();
(0311) 	}
(0312) }
(0313) /*********************************************************************************************************
(0314) ** 函数名称: Tbuf_putchar
(0315) ** 功能描述: 把一个字符放入发送缓冲区
(0316) ** 输 入: 
(0317) ** 输出	 :  
(0318) ** 全局变量: 无
(0319) ** 调用模块: 
(0320) ** 说明:
(0321) ** 注意:
(0322) ********************************************************************************************************/
(0323) void Tbuf_putchar(unsigned char x,siocirqueue *RTbuf){
(0324) 	if(!Tbuf_full(RTbuf)){
    0375 018A      MOVW	R16,R20
    0376 DFE9      RCALL	_Tbuf_full
    0377 2300      TST	R16
    0378 F009      BEQ	0x037A
    0379 C02D      RJMP	0x03A7
(0325) 		TXC_DIS();
    037A 9856      CBI	0x0A,6
(0326) 		if (RTbuf->T_disabled)
    037B 01FA      MOVW	R30,R20
    037C 53E1      SUBI	R30,0x31
    037D 4FFF      SBCI	R31,0xFF
    037E 8020      LDD	R2,Z+0
    037F 2022      TST	R2
    0380 F039      BEQ	0x0388
(0327) 			{
(0328) 			UDR0=x;
    0381 B96C      OUT	0x0C,R22
(0329) 			RTbuf->T_disabled=0;
    0382 2422      CLR	R2
    0383 01FA      MOVW	R30,R20
    0384 53E1      SUBI	R30,0x31
    0385 4FFF      SBCI	R31,0xFF
    0386 8220      STD	Z+0,R2
(0330) 			}
    0387 C01E      RJMP	0x03A6
(0331) 		else
(0332) 			{
(0333) 			RTbuf->T_count++;
    0388 01CA      MOVW	R24,R20
    0389 5986      SUBI	R24,0x96
    038A 4F9F      SBCI	R25,0xFF
    038B 01FC      MOVW	R30,R24
    038C 8180      LDD	R24,Z+0
    038D 5F8F      SUBI	R24,0xFF
    038E 8380      STD	Z+0,R24
(0334) 			RTbuf->T_buf[RTbuf->T_rear]=x;
    038F 01CA      MOVW	R24,R20
    0390 5985      SUBI	R24,0x95
    0391 4F9F      SBCI	R25,0xFF
    0392 01FA      MOVW	R30,R20
    0393 59E7      SUBI	R30,0x97
    0394 4FFF      SBCI	R31,0xFF
    0395 81E0      LDD	R30,Z+0
    0396 27FF      CLR	R31
    0397 0FE8      ADD	R30,R24
    0398 1FF9      ADC	R31,R25
    0399 8360      STD	Z+0,R22
(0335) 			RTbuf->T_rear=(RTbuf->T_rear+1) % TBUF_SIZE;
    039A 01CA      MOVW	R24,R20
    039B 5987      SUBI	R24,0x97
    039C 4F9F      SBCI	R25,0xFF
    039D 011C      MOVW	R2,R24
    039E E614      LDI	R17,0x64
    039F 01FC      MOVW	R30,R24
    03A0 8100      LDD	R16,Z+0
    03A1 5F0F      SUBI	R16,0xFF
    03A2 940E04EB  CALL	mod8u
    03A4 01F1      MOVW	R30,R2
    03A5 8300      STD	Z+0,R16
(0336) 			}
(0337) 		TXC_EN();
    03A6 9A56      SBI	0x0A,6
(0338) 	}
    03A7 940E0503  CALL	pop_gset2
    03A9 9508      RET
_Rbuf_getchar:
  Btemp                --> R20
  RTbuf                --> R22
    03AA 940E0512  CALL	push_gset2
    03AC 01B8      MOVW	R22,R16
(0339) }
(0340) /*********************************************************************************************************
(0341) ** 函数名称: Rbuf_getstring
(0342) ** 功能描述: 从接收缓冲区返回当前子串指针
(0343) ** 输 入: 
(0344) ** 输出	 :  当前子串指针
(0345) ** 全局变量: 无
(0346) ** 调用模块: 
(0347) ** 说明:
(0348) ** 注意:
(0349) ********************************************************************************************************
(0350) unsigned char * Rbuf_getstring(void){
(0351) 	return (RTbuf->R_buf[RTbuf->R_front]);
(0352) }
(0353) /*********************************************************************************************************
(0354) ** 函数名称: Tbuf_getstring
(0355) ** 功能描述: 从发送缓冲区返回当前子串指针
(0356) ** 输 入: 
(0357) ** 输出	 :  当前子串指针
(0358) ** 全局变量: 无
(0359) ** 调用模块: 
(0360) ** 说明:
(0361) ** 注意:
(0362) ********************************************************************************************************
(0363) unsigned char * Tbuf_getstring(void){
(0364) 	return (RTbuf->T_buf[RTbuf->T_front]);
(0365) }
(0366) /*********************************************************************************************************
(0367) ** 函数名称: Rbuf_putchar
(0368) ** 功能描述: 从接收缓冲区读一个字符
(0369) ** 输 入: 
(0370) ** 输出	 :  读字符
(0371) ** 全局变量: 无
(0372) ** 调用模块: 
(0373) ** 说明:
(0374) ** 注意:
(0375) ********************************************************************************************************/
(0376) unsigned char Rbuf_getchar(siocirqueue *RTbuf){
(0377) 	unsigned char Btemp=0;
    03AD 2744      CLR	R20
(0378) 	if (!Rbuf_empty(RTbuf)){
    03AE 018B      MOVW	R16,R22
    03AF DFA1      RCALL	_Rbuf_empty
    03B0 2300      TST	R16
    03B1 F4C1      BNE	0x03CA
(0379) 		Btemp=RTbuf->R_buf[RTbuf->R_front];
    03B2 01CB      MOVW	R24,R22
    03B3 9604      ADIW	R24,4
    03B4 01FB      MOVW	R30,R22

⌨️ 快捷键说明

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