📄 main.lst
字号:
(0180) }
(0181) else{
(0182)
(0183)
(0184) do{
(0185) *p++=Com_getchar(1,RTbuf);
0126 019B MOVW R18,R22
0127 E001 LDI R16,1
0128 DFD2 RCALL _Com_getchar
0129 01F5 MOVW R30,R10
012A 9301 ST R16,Z+
012B 015F MOVW R10,R30
(0186) i++;
012C 9543 INC R20
(0187) //WDR(); //喂狗
(0188) }while(*(p-1)!='\n');
012D 01F5 MOVW R30,R10
012E 9731 SBIW R30,1
012F 8180 LDD R24,Z+0
0130 308A CPI R24,0xA
0131 F7A1 BNE 0x0126
(0189) // *p++=Com_getchar(1,RTbuf);
(0190) // *(p)=0;
(0191) return(i);
0132 2F04 MOV R16,R20
0133 940E0316 CALL pop_gset4
0135 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
0136 01F8 MOVW R30,R16
0137 8102 LDD R16,Z+2
0138 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
0139 2422 CLR R2
013A 01F8 MOVW R30,R16
013B 8220 STD Z+0,R2
(0222) RTbuf->R_rear=0;
013C 8221 STD Z+1,R2
(0223) RTbuf->R_count=0;
013D 01F8 MOVW R30,R16
013E 8222 STD Z+2,R2
(0224) RTbuf->R_overflow=0;
013F 01F8 MOVW R30,R16
0140 8223 STD Z+3,R2
0141 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
0142 2422 CLR R2
0143 01F8 MOVW R30,R16
0144 59E8 SUBI R30,0x98
0145 4FFF SBCI R31,0xFF
0146 8220 STD Z+0,R2
(0238) RTbuf->T_rear=0;
0147 01F8 MOVW R30,R16
0148 59E7 SUBI R30,0x97
0149 4FFF SBCI R31,0xFF
014A 8220 STD Z+0,R2
(0239) RTbuf->T_count=0;
014B 01F8 MOVW R30,R16
014C 59E6 SUBI R30,0x96
014D 4FFF SBCI R31,0xFF
014E 8220 STD Z+0,R2
(0240) RTbuf->T_disabled=1;
014F E081 LDI R24,1
0150 01F8 MOVW R30,R16
0151 53E1 SUBI R30,0x31
0152 4FFF SBCI R31,0xFF
0153 8380 STD Z+0,R24
0154 9508 RET
_Rbuf_empty:
RTbuf --> R16
0155 940E0321 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;
0157 01F8 MOVW R30,R16
0158 8022 LDD R2,Z+2
0159 2022 TST R2
015A F419 BNE 0x015E
015B E041 LDI R20,1
015C E050 LDI R21,0
015D C002 RJMP 0x0160
015E 2744 CLR R20
015F 2755 CLR R21
0160 2F04 MOV R16,R20
0161 940E0324 CALL pop_gset1
0163 9508 RET
_Tbuf_full:
RTbuf --> R16
0164 940E0321 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;
0166 01F8 MOVW R30,R16
0167 59E6 SUBI R30,0x96
0168 4FFF SBCI R31,0xFF
0169 8180 LDD R24,Z+0
016A 3684 CPI R24,0x64
016B F419 BNE 0x016F
016C E041 LDI R20,1
016D E050 LDI R21,0
016E C002 RJMP 0x0171
016F 2744 CLR R20
0170 2755 CLR R21
0171 2F04 MOV R16,R20
0172 940E0324 CALL pop_gset1
0174 9508 RET
_Tbuf_putchar:
RTbuf --> R20
x --> R22
0175 940E031F CALL push_gset2
0177 01A9 MOVW R20,R18
0178 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)){
0179 018A MOVW R16,R20
017A DFE9 RCALL _Tbuf_full
017B 2300 TST R16
017C F009 BEQ 0x017E
017D C02D RJMP 0x01AB
(0325) TXC_DIS();
017E 9856 CBI 0x0A,6
(0326) if (RTbuf->T_disabled)
017F 01FA MOVW R30,R20
0180 53E1 SUBI R30,0x31
0181 4FFF SBCI R31,0xFF
0182 8020 LDD R2,Z+0
0183 2022 TST R2
0184 F039 BEQ 0x018C
(0327) {
(0328) UDR0=x;
0185 B96C OUT 0x0C,R22
(0329) RTbuf->T_disabled=0;
0186 2422 CLR R2
0187 01FA MOVW R30,R20
0188 53E1 SUBI R30,0x31
0189 4FFF SBCI R31,0xFF
018A 8220 STD Z+0,R2
(0330) }
018B C01E RJMP 0x01AA
(0331) else
(0332) {
(0333) RTbuf->T_count++;
018C 01CA MOVW R24,R20
018D 5986 SUBI R24,0x96
018E 4F9F SBCI R25,0xFF
018F 01FC MOVW R30,R24
0190 8180 LDD R24,Z+0
0191 5F8F SUBI R24,0xFF
0192 8380 STD Z+0,R24
(0334) RTbuf->T_buf[RTbuf->T_rear]=x;
0193 01CA MOVW R24,R20
0194 5985 SUBI R24,0x95
0195 4F9F SBCI R25,0xFF
0196 01FA MOVW R30,R20
0197 59E7 SUBI R30,0x97
0198 4FFF SBCI R31,0xFF
0199 81E0 LDD R30,Z+0
019A 27FF CLR R31
019B 0FE8 ADD R30,R24
019C 1FF9 ADC R31,R25
019D 8360 STD Z+0,R22
(0335) RTbuf->T_rear=(RTbuf->T_rear+1) % TBUF_SIZE;
019E 01CA MOVW R24,R20
019F 5987 SUBI R24,0x97
01A0 4F9F SBCI R25,0xFF
01A1 011C MOVW R2,R24
01A2 E614 LDI R17,0x64
01A3 01FC MOVW R30,R24
01A4 8100 LDD R16,Z+0
01A5 5F0F SUBI R16,0xFF
01A6 940E02F8 CALL mod8u
01A8 01F1 MOVW R30,R2
01A9 8300 STD Z+0,R16
(0336) }
(0337) TXC_EN();
01AA 9A56 SBI 0x0A,6
(0338) }
01AB 940E0310 CALL pop_gset2
01AD 9508 RET
_Rbuf_getchar:
Btemp --> R20
RTbuf --> R22
01AE 940E031F CALL push_gset2
01B0 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;
01B1 2744 CLR R20
(0378) if (!Rbuf_empty(RTbuf)){
01B2 018B MOVW R16,R22
01B3 DFA1 RCALL _Rbuf_empty
01B4 2300 TST R16
01B5 F4C1 BNE 0x01CE
(0379) Btemp=RTbuf->R_buf[RTbuf->R_front];
01B6 01CB MOVW R24,R22
01B7 9604 ADIW R24,4
01B8 01FB MOVW R30,R22
01B9 81E0 LDD R30,Z+0
01BA 27FF CLR R31
01BB 0FE8 ADD R30,R24
01BC 1FF9 ADC R31,R25
01BD 8140 LDD R20,Z+0
(0380) REV_DIS();
01BE 9857 CBI 0x0A,7
(0381) RTbuf->R_count--;
01BF 01CB MOVW R24,R22
01C0 9602 ADIW R24,2
01C1 01FC MOVW R30,R24
01C2 8180 LDD R24,Z+0
01C3 5081 SUBI R24,1
01C4 8380 STD Z+0,R24
(0382) RTbuf->R_front=(RTbuf->R_front+1) % RBUF_SIZE;
01C5 E614 LDI R17,0x64
01C6 01FB MOVW R30,R22
01C7 8100 LDD R16,Z+0
01C8 5F0F SUBI R16,0xFF
01C9 940E02F8 CALL mod8u
01CB 01FB MOVW R30,R22
01CC 8300 STD Z+0,R16
(0383) REV_EN();
01CD 9A57 SBI 0x0A,7
(0384) }
(0385) return (Btemp);
01CE 2F04 MOV R16,R20
01CF 940E0310 CALL pop_gset2
01D1 9508 RET
_uart0_rx_isr:
data --> R22
status --> R10
RTbuf --> R20
01D2 922A ST R2,-Y
01D3 923A ST R3,-Y
01D4 930A ST R16,-Y
01D5 931A ST R17,-Y
01D6 938A ST R24,-Y
01D7 939A ST R25,-Y
01D8 93EA ST R30,-Y
01D9 93FA ST R31,-Y
01DA B62F IN R2,0x3F
01DB 922A ST R2,-Y
01DC 940E031D 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) ***********************************************************************/
(0414) #if USEUART0
(0415) #pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
(0416) void uart0_rx_isr(void)
(0417) {
(0418) unsigned char status,data;
(0419) siocirqueue *RTbuf;
(0420) RTbuf=&RTbuf_UART0;
01DE E040 LDI R20,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -