这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 对FPGA DIY 串口通信中代码的疑问

共7条 1/1 1 跳转至

对FPGA DIY 串口通信中代码的疑问

高工
2013-03-07 21:25:53     打赏

/ 关于num 和 num-1的疑问
1 在接收模块中
always @ (posedge sys_clk or negedge sys_rstn)
 begin
  if(!sys_rstn)
   begin
    rx_temp_data <= 8'd0;
    num <= 4'd0;
    rx_data_r <= 8'd0;
   end
  else if(rx_int)
   begin 
    if(clk_bps)
     begin   
      num <= num+1'b1;
      if(num<=4'd8)
       rx_temp_data[num-1]<=rs232_rx;  //为什么用的是num-1
     end
    else if(num == 4'd9)
     begin  
      num <= 4'd0;   
      rx_data_r <= rx_temp_data; 
     end
   end
  end

// 这里面用的是 rx_temp_data[num-1]<=rs232_rx;  //为什么用的是num-1  
  
2 在发送模块中 有如下代码
always @ (posedge sys_clk or negedge sys_rstn)
 begin
  if(!sys_rstn)
   begin
    num <= 4'd0;
    rs232_tx_r <= 1'b1;  // 空闲电平
   end
  else if(tx_en)
   begin
    if(clk_bps)
     begin
      num <= num+1'b1;
      rs232_tx_r<=tx_data[num];  // 这次为啥不用num-1了呢?
     end
    else if(num==4'd10)
     num <= 4'd0; 
   end
 end
// 为什么用的是 rs232_tx_r<=tx_data[num]; 而不是rs232_tx_r<=tx_data[num-1];




关键词: 串口     信中     代码     疑问    

高工
2013-03-08 09:09:25     打赏
2楼
详细看下串口通信的帧格式,第一位是起始位,rx_temp_data是接收的数据,tx_data是要发送的数据,发送数据,起始位也要发送的,所以就不需要num-1了。仔细分析下,很简单。代码这样写比较简洁,可能有些难理解,接受和发送部分可以用case语句来写,那样容易理解,你可以试试!

高工
2013-03-08 12:35:21     打赏
3楼
LS正解~!

助工
2013-03-08 16:45:46     打赏
4楼

求教:发多个数据就出现乱码是怎么回事?


高工
2013-03-08 17:55:39     打赏
5楼
建议直接发个帖子

专家
2013-03-16 10:11:03     打赏
6楼
你使用的“单字节”发送   一个字节的时候是不是不会出现乱码?       

助工
2013-03-16 23:03:52     打赏
7楼
使用16进制,发两位时正常,多了就不正常。

共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]