main.lst

来自「ATMEGA128的PCF8536驱动程序」· LST 代码 · 共 1,956 行 · 第 1/5 页

LST
1,956
字号
(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
    0320 01F8      MOVW	R30,R16
    0321 8102      LDD	R16,Z+2
    0322 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
    0323 2422      CLR	R2
    0324 01F8      MOVW	R30,R16
    0325 8220      STD	Z+0,R2
(0222) 	RTbuf->R_rear=0;
    0326 8221      STD	Z+1,R2
(0223)     RTbuf->R_count=0;
    0327 01F8      MOVW	R30,R16
    0328 8222      STD	Z+2,R2
(0224) 	RTbuf->R_overflow=0;
    0329 01F8      MOVW	R30,R16
    032A 8223      STD	Z+3,R2
    032B 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
    032C 2422      CLR	R2
    032D 01F8      MOVW	R30,R16
    032E 59E8      SUBI	R30,0x98
    032F 4FFF      SBCI	R31,0xFF
    0330 8220      STD	Z+0,R2
(0238) 	RTbuf->T_rear=0;
    0331 01F8      MOVW	R30,R16
    0332 59E7      SUBI	R30,0x97
    0333 4FFF      SBCI	R31,0xFF
    0334 8220      STD	Z+0,R2
(0239)     RTbuf->T_count=0;
    0335 01F8      MOVW	R30,R16
    0336 59E6      SUBI	R30,0x96
    0337 4FFF      SBCI	R31,0xFF
    0338 8220      STD	Z+0,R2
(0240) 	RTbuf->T_disabled=1;
    0339 E081      LDI	R24,1
    033A 01F8      MOVW	R30,R16
    033B 53E1      SUBI	R30,0x31
    033C 4FFF      SBCI	R31,0xFF
    033D 8380      STD	Z+0,R24
    033E 9508      RET
_Rbuf_empty:
  RTbuf                --> R16
    033F 940E04E1  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;
    0341 01F8      MOVW	R30,R16
    0342 8022      LDD	R2,Z+2
    0343 2022      TST	R2
    0344 F419      BNE	0x0348
    0345 E041      LDI	R20,1
    0346 E050      LDI	R21,0
    0347 C002      RJMP	0x034A
    0348 2744      CLR	R20
    0349 2755      CLR	R21
    034A 2F04      MOV	R16,R20
    034B 940E04E4  CALL	pop_gset1
    034D 9508      RET
_Tbuf_full:
  RTbuf                --> R16
    034E 940E04E1  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;
    0350 01F8      MOVW	R30,R16
    0351 59E6      SUBI	R30,0x96
    0352 4FFF      SBCI	R31,0xFF
    0353 8180      LDD	R24,Z+0
    0354 3684      CPI	R24,0x64
    0355 F419      BNE	0x0359
    0356 E041      LDI	R20,1
    0357 E050      LDI	R21,0
    0358 C002      RJMP	0x035B
    0359 2744      CLR	R20
    035A 2755      CLR	R21
    035B 2F04      MOV	R16,R20
    035C 940E04E4  CALL	pop_gset1
    035E 9508      RET
_Tbuf_putchar:
  RTbuf                --> R20
  x                    --> R22
    035F 940E04DF  CALL	push_gset2
    0361 01A9      MOVW	R20,R18
    0362 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)){
    0363 018A      MOVW	R16,R20
    0364 DFE9      RCALL	_Tbuf_full
    0365 2300      TST	R16
    0366 F009      BEQ	0x0368
    0367 C02D      RJMP	0x0395
(0325) 		TXC_DIS();
    0368 9856      CBI	0x0A,6
(0326) 		if (RTbuf->T_disabled)
    0369 01FA      MOVW	R30,R20
    036A 53E1      SUBI	R30,0x31
    036B 4FFF      SBCI	R31,0xFF
    036C 8020      LDD	R2,Z+0
    036D 2022      TST	R2
    036E F039      BEQ	0x0376
(0327) 			{
(0328) 			UDR0=x;
    036F B96C      OUT	0x0C,R22
(0329) 			RTbuf->T_disabled=0;
    0370 2422      CLR	R2
    0371 01FA      MOVW	R30,R20
    0372 53E1      SUBI	R30,0x31
    0373 4FFF      SBCI	R31,0xFF
    0374 8220      STD	Z+0,R2
(0330) 			}
    0375 C01E      RJMP	0x0394
(0331) 		else
(0332) 			{
(0333) 			RTbuf->T_count++;
    0376 01CA      MOVW	R24,R20
    0377 5986      SUBI	R24,0x96
    0378 4F9F      SBCI	R25,0xFF
    0379 01FC      MOVW	R30,R24
    037A 8180      LDD	R24,Z+0
    037B 5F8F      SUBI	R24,0xFF
    037C 8380      STD	Z+0,R24
(0334) 			RTbuf->T_buf[RTbuf->T_rear]=x;
    037D 01CA      MOVW	R24,R20
    037E 5985      SUBI	R24,0x95
    037F 4F9F      SBCI	R25,0xFF
    0380 01FA      MOVW	R30,R20
    0381 59E7      SUBI	R30,0x97
    0382 4FFF      SBCI	R31,0xFF
    0383 81E0      LDD	R30,Z+0
    0384 27FF      CLR	R31
    0385 0FE8      ADD	R30,R24
    0386 1FF9      ADC	R31,R25
    0387 8360      STD	Z+0,R22
(0335) 			RTbuf->T_rear=(RTbuf->T_rear+1) % TBUF_SIZE;
    0388 01CA      MOVW	R24,R20
    0389 5987      SUBI	R24,0x97
    038A 4F9F      SBCI	R25,0xFF
    038B 011C      MOVW	R2,R24
    038C E614      LDI	R17,0x64
    038D 01FC      MOVW	R30,R24
    038E 8100      LDD	R16,Z+0
    038F 5F0F      SUBI	R16,0xFF
    0390 940E04B8  CALL	mod8u
    0392 01F1      MOVW	R30,R2
    0393 8300      STD	Z+0,R16
(0336) 			}
(0337) 		TXC_EN();
    0394 9A56      SBI	0x0A,6
(0338) 	}
    0395 940E04D0  CALL	pop_gset2
    0397 9508      RET
_Rbuf_getchar:
  Btemp                --> R20
  RTbuf                --> R22
    0398 940E04DF  CALL	push_gset2
    039A 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;
    039B 2744      CLR	R20
(0378) 	if (!Rbuf_empty(RTbuf)){
    039C 018B      MOVW	R16,R22
    039D DFA1      RCALL	_Rbuf_empty
    039E 2300      TST	R16
    039F F4C1      BNE	0x03B8
(0379) 		Btemp=RTbuf->R_buf[RTbuf->R_front];
    03A0 01CB      MOVW	R24,R22
    03A1 9604      ADIW	R24,4
    03A2 01FB      MOVW	R30,R22
    03A3 81E0      LDD	R30,Z+0
    03A4 27FF      CLR	R31
    03A5 0FE8      ADD	R30,R24
    03A6 1FF9      ADC	R31,R25
    03A7 8140      LDD	R20,Z+0
(0380) 		REV_DIS();
    03A8 9857      CBI	0x0A,7
(0381) 		RTbuf->R_count--;
    03A9 01CB      MOVW	R24,R22
    03AA 9602      ADIW	R24,2
    03AB 01FC      MOVW	R30,R24
    03AC 8180      LDD	R24,Z+0
    03AD 5081      SUBI	R24,1
    03AE 8380      STD	Z+0,R24
(0382) 		RTbuf->R_front=(RTbuf->R_front+1) % RBUF_SIZE;
    03AF E614      LDI	R17,0x64
    03B0 01FB      MOVW	R30,R22
    03B1 8100      LDD	R16,Z+0
    03B2 5F0F      SUBI	R16,0xFF
    03B3 940E04B8  CALL	mod8u
    03B5 01FB      MOVW	R30,R22
    03B6 8300      STD	Z+0,R16
(0383) 		REV_EN();
    03B7 9A57      SBI	0x0A,7
(0384) 		}
(0385) 	return (Btemp);
    03B8 2F04      MOV	R16,R20
    03B9 940E04D0  CALL	pop_gset2
    03BB 9508      RET
_uart0_rx_isr:
  data                 --> R22
  status               --> R10
  RTbuf                --> R20
    03BC 922A      ST	R2,-Y
    03BD 923A      ST	R3,-Y
    03BE 930A      ST	R16,-Y
    03BF 931A      ST	R17,-Y
    03C0 938A      ST	R24,-Y
    03C1 939A      ST	R25,-Y
    03C2 93EA      ST	R30,-Y
    03C3 93FA      ST	R31,-Y
    03C4 B62F      IN	R2,0x3F
    03C5 922A      ST	R2,-Y
    03C6 940E04DD  CALL	push_gset3
(0386) 	
(0387) }
(0388) /*********************************************************************************************************
(0389) ** 函数名称: Tbuf_getchar
(0390) ** 功能描述: 从发送缓冲区读一个字符
(0391) ** 输 入: 
(0392) ** 输出	 :  读字符
(0393) ** 全局变量: 无
(0394) ** 调用模块: 
(0395) ** 说明:
(0396) ** 注意:
(0397) ********************************************************************************************************
(0398) unsigned char Tbuf_getchar(void){
(0399) 	unsigned char Btemp;
(0400) 	if (!Tbuf_empty()){
(0401) 		Btemp=RTbuf->T_buf[RTbuf->T_front];
(0402) 		TXC_DIS();
(0403) 		RTbuf->T_count--;
(0404) 		RTbuf->T_front=(RTbuf->T_front+1) % TBUF_SIZE;
(0405) 		TXC_EN();
(0406) 		return (Btemp);
(0407) 	}
(0408) }
(0409) */
(0410) 
(0411) /******************************* 中断处理函数 ***************************
(0412) * 功能:完成数据得的接收和发送
(0413) ***********************************************************************/

⌨️ 快捷键说明

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