485例程中存在的不理解

2019-07-21 06:07发布

while(1)
{
  key=KEY_Scan(0);
  if(key==KEY0_PRES)//KEY0按下,发送一次数据
  {
   for(i=0;i<5;i++)
   {
    rs485buf=cnt+i;//填充发送缓冲区
    LCD_ShowxNum(30+i*32,190,rs485buf,3,16,0X80); //显示数据
    }
   RS485_Send_Data(rs485buf,5);//发送5个字节            
  }   
  RS485_Receive_Data(rs485buf,&key);
  if(key)//接收到有数据
  {
   if(key>5)key=5;//最大是5个数据.
    for(i=0;i<key;i++)LCD_ShowxNum(30+i*32,230,rs485buf,3,16,0X80); //显示数据
   }
  t++;
  delay_ms(10);
  if(t==20)
  {
   LED0=!LED0;//提示系统正在运行
   t=0;
   cnt++;
   LCD_ShowxNum(30+48,150,cnt,3,16,0X80); //显示数据
  }     
}
}
1.KEY_Scan(0)只能返回1或0,为什么要把它赋给key
key==KEY0_PRES赋给key应该是判断是否按下吧
2.rs485buf=cnt+i;
LCD_ShowxNum(30+i*32,190,rs485buf,3,16,0X80);
因为cnt为0,那显示的数据不就是0,1,2,3,4了吗
3.  RS485_Receive_Data(rs485buf,&key);为啥取的是key的地址,不是存有数据的rs485buf
4.  t++;这个t是干啥的
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
peng1554
1楼-- · 2019-07-21 08:21
本帖最后由 peng1554 于 2018-12-8 18:02 编辑

1.KEY_Scan()返回0,1,2,3,4
2.对
3.//RS485查询接收到的数据
//buf:接收缓存首地址
//len:读到的数据长度
void RS485_Receive_Data(u8 *buf,u8 *len)
{
        u8 rxlen=RS485_RX_CNT;
        u8 i=0;
        *len=0;                                //默认为0
        delay_ms(10);                //等待10ms,连续超过10ms没有接收到一个数据,则认为接收结束
        if(rxlen==RS485_RX_CNT&&rxlen)//接收到了数据,且接收完成了
        {
                for(i=0;i<rxlen;i++)
                {
                        buf=RS485_RX_BUF;        
                }               
                *len=RS485_RX_CNT;        //记录本次数据长度
                RS485_RX_CNT=0;                //清零
        }
}
当执行完RS485_Receive_Data(rs485buf,&key);后
key保存了接收数据的字节大小
特别注意*len=RS485_RX_CNT;        //记录本次数据长度
另外
RS485_RX_CNT在串口中断中变化~~


kkkukujiajia
2楼-- · 2019-07-21 08:25
能不能发个给我呀,我没找到例子,我是探索版的
熊猫叔叔
3楼-- · 2019-07-21 09:26
kkkukujiajia 发表于 2018-12-20 11:52
能不能发个给我呀,我没找到例子,我是探索版的

在A盘--4,程序源码--1,标准例程-寄存器版本.rar
这个压缩包里的  “实验24 485实验”
kkkukujiajia
4楼-- · 2019-07-21 10:38
 精彩回答 2  元偷偷看……

一周热门 更多>