迪文科技论坛

 找回密码
 立即注册
搜索
查看: 1009|回复: 1

There is a mistake, isn't it?

[复制链接]

26

主题

79

回帖

405

积分

中级会员

Rank: 3Rank: 3

积分
405
发表于 2019-12-17 22:29:51 | 显示全部楼层 |阅读模式
This program was recommended by producing company for "Serial Communication with C51". But somewhere in the program "RXFRMOK" have to be = 0,  haven't it?



**********************************************************************************
#define uchar unsigned char
#define uint unsigned int
bit RXAAOK;                                                         // The 0xAA header is received by serial port
bit RXFRMOK;                                                         // A valid data frame is received by serial port
bit TI0FLAG;                                                         // Send a TI sign back to the main program’s serial port
uchar RXBUF[32];                                                 // Buffer is received and saved by serial port. But the buffer must be remove
                                                                        // 0XAA frame head and the UART LCM response of un-fixed format has the
                                                                        // length return. So it needs to record length
uchar Rx_P;                                                         // Data position is received and saved by serial port

void UART0_ISR() interrupt 4
{
        uchar i;
        if(RI)                        
        {
          i=SBUF;                
          RI=0;                
                if(RXFRMOK==0)     //if RXFRMOK=1 means that the current data is not be processed in foreground and remove
                  {
                        if(RXAAOK)     //received 0xAA
                        {         
                      RXBUF[Rx_P]=i;
                                 if((Rx_P>3) && (RXBUF[Rx_P-3]==0xCC) && (RXBUF[Rx_P-2]==0x33) && (RXBUF[Rx_P-1]==0xC3) && (RXBUF[RX_P]==0x3C))
                                   {                                       
                                  RXFRMOK=1;     // My question:  When will RXFRMO be = 0 again ?                   
                                  RXAAOK=0;                       
                                   }         
                          Rx_P++;
                        }                 
                        if(!RXAAOK && (i==0xaa))
                         {
                                RXAAOK=1; Rx_P=0;  
                        }
                }               
        }        
        if(TI) //********The interrupt is sent by serial port******************
        {
                TI=0;
                TI0FLAG=1;
        }         
}
******************************************************************************************************


回复

使用道具 举报

0

主题

655

回帖

7546

积分

论坛元老

Rank: 8Rank: 8

积分
7546
发表于 2019-12-18 14:28:31 | 显示全部楼层
Yes, when ‘rxfrmok’ = 0, the frame header will be judged.
沧海横流,方显英雄本色。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2024-11-26 06:25 , Processed in 0.085978 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表