用uart串口发送16位数据总是不对,调了一天了,不知道问题在哪。

2019-12-02 16:10发布

<p> 设置的16位数据是01000010 01000010,2个8位的10进制都是66,对应ascii是B,用串口调试工具显示接受了2个字符,但是只显示一个B</p><p> 然后又用labwindows试验,收到的数据显示是66和-2,实在不知道哪里有问题</p><p> 我把16位数据一起发送了,是按照uart协议发的,大佬们能看下吗</p><p> always@(posedge clk or negedge rst)</p><br><pre style="max-width: 100%;"><code class="makefile hljs" codemark="1">begin IF (!rst) begin num&lt;=0; tx_r&lt;=1'b1; end else if(tx_en) begin if(clk_bps) begin num&lt;=num+1; case(num) 4'd0:tx_r&lt;=1'b0; 4'd1:tx_r&lt;=tx_data[0]; 4'd2:tx_r&lt;=tx_data[1]; 4'd3:tx_r&lt;=tx_data[2]; 4'd4:tx_r&lt;=tx_data[3]; 4'd5:tx_r&lt;=tx_data[4]; 4'd6:tx_r&lt;=tx_data[5]; 4'd7:tx_r&lt;=tx_data[6]; 4'd8:tx_r&lt;=tx_data[7]; 4'd9:tx_r&lt;=1'b1; 4'd14:tx_r&lt;=1'b0; 4'd15:tx_r&lt;=tx_data[8]; 4'd16:tx_r&lt;=tx_data[9]; 4'd17:tx_r&lt;=tx_data[10]; 4'd18:tx_r&lt;=tx_data[11]; 4'd19:tx_r&lt;=tx_data[12]; 4'd20:tx_r&lt;=tx_data[13]; 4'd21:tx_r&lt;=tx_data[14]; 4'd22:tx_r&lt;=tx_data[15]; 4'd23:tx_r&lt;=1'b1; default:tx_r&lt;=1'b1; endcase end else if(num==24) num&lt;=0; end end</code></pre><p><br></p>
5条回答
hayiji
1楼 · 2019-12-02 16:53.采纳回答
4bit位宽最大能表示的数是15 


星云云
2楼-- · 2019-12-02 20:19
 精彩回答 2  元偷偷看……
hayiji
3楼-- · 2019-12-03 00:00
4'd16到4‘d23这种表达方式是错的。4表示位宽,4bit数最大是15
asuyyy
4楼-- · 2019-12-03 03:51
接收方要设置好接收的速度,格式,校验位
我_有志青年
5楼-- · 2019-12-03 09:50
串口调试的uart读取返回数据默认应该只读八位吧,发过去16个实际读的只有8个吧,你可以写两个串口让两块板子通信一下试试

一周热门 更多>