请教串口发送程序

[复制链接]
2324|2
 楼主| tigris 发表于 2009-3-18 09:24 | 显示全部楼层 |阅读模式
最近在看VHDL的UART实验,本人愚笨,看得不是很懂。<br />首先一个问题:40Mhz的时钟,要获得9600波特率。假如我发送一位数据就用一个时钟周期,那么就要获得9600Hz的时钟吗?&nbsp;40M/9600=4167,我采用一个4167计数器分频,应该就可以得到时钟了吧?我那实验例子里是获得9600*8的时钟,以方便位同步。我在网上参考了一段程序,试了一下,不过发送失败了。<br /><br />entity&nbsp;s&nbsp;is<br />&nbsp;&nbsp;&nbsp;&nbsp;Port&nbsp;(&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clk&nbsp;:&nbsp;in&nbsp;std_logic;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rst&nbsp;:&nbsp;in&nbsp;std_logic;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dout&nbsp;:&nbsp;out&nbsp;std_logic<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />end&nbsp;s;<br /><br /><br /><br />architecture&nbsp;Behavioral&nbsp;of&nbsp;s&nbsp;is<br /><br />signal&nbsp;div_reg&nbsp;:&nbsp;std_logic_vector(15&nbsp;downto&nbsp;0);--分频计数器<br />signal&nbsp;clk2:&nbsp;std_logic;--分频后时钟信号<br /><br />constant&nbsp;div_par:&nbsp;&nbsp;&nbsp;&nbsp;std_logic_vector(15&nbsp;downto&nbsp;0):=&quot;0001000001000110&quot;;--波特率参数,x1046,将40M分成9600hz<br />constant&nbsp;data:&nbsp;std_logic_vector(9&nbsp;downto&nbsp;0):=&quot;1010101010&quot;;--自己定义的一个数据<br /><br />begin<br /><br />process(clk,rst)--产生9600hz时钟<br />begin<br />&nbsp;&nbsp;&nbsp;&nbsp;if(not&nbsp;rst='1')then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;div_reg&lt=&quot;0000000000000000&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;elsif(clk'event&nbsp;and&nbsp;clk='1')then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(div_reg=div_par)then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;div_reg&lt=&quot;0000000000000000&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clk2&lt=not&nbsp;clk2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;div_reg&lt=div_reg+&quot;0000000000000001&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;if;<br />&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;if;<br />end&nbsp;process;<br /><br /><br />process(clk2,rst)--发送一个十位数据(起始位是0,结束位是1)<br />variable&nbsp;count:integer&nbsp;range&nbsp;0&nbsp;to&nbsp;9&nbsp;:=0;<br /><br />begin<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(not&nbsp;rst='1')&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count:=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dout&lt='1';<br />&nbsp;&nbsp;&nbsp;&nbsp;elsif&nbsp;rising_edge(clk2)&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;count=9&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dout&lt=data(9);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dout&lt=data(count);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count:=count+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;if;<br />&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;if;<br />end&nbsp;process;<br /><br /><br />end&nbsp;Behavioral;
LMJ928 发表于 2009-3-18 10:01 | 显示全部楼层

波特率不对

你的程序是4800
 楼主| tigris 发表于 2009-3-20 09:40 | 显示全部楼层

不是4800吧?

我觉得是9600
您需要登录后才可以回帖 登录 | 注册

本版积分规则

76

主题

175

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部