📄 adc.lst
字号:
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 + -