|
程序如下:
module UART
(
clk_48M,
rst,
TXD
);
input clk_48M;
input rst;
output TXD;
wire clk_144M;
reg [3:0] state;
reg clk_115200;
reg [15:0]count;
reg TXD;
reg [7:0]TXDATA;
UARTPLL U0
(
.inclk0(clk_48M),
.c0(clk_144M)
);
always @ (posedge clk_144M or negedge rst)
begin
if (!rst)
begin
count<=0;
clk_115200<=0;
end
else
begin
if (count<625) //-------144M/115200=1250
count<=count+16'b1;
else
begin
count<=0;
clk_115200<=~clk_115200;
end
end
end
always @ (posedge clk_115200 or negedge rst)
begin
if (!rst)
begin
state<=0;
TXDATA<=43;
end
else
begin
if (state<10)
state<=state+4'b1;
else
begin
state<=0;
if ((TXDATA>42)&&(TXDATA<122))
TXDATA<=TXDATA+1;
else
TXDATA<=43;
end
end
end
always @ (state)
begin
case (state)
4'd0:TXD<=1'b1;
4'd1:TXD<=1'b0;
4'd2:TXD<=TXDATA[0];
4'd3:TXD<=TXDATA[1];
4'd4:TXD<=TXDATA[2];
4'd5:TXD<=TXDATA[3];
4'd6:TXD<=TXDATA[4];
4'd7:TXD<=TXDATA[5];
4'd8:TXD<=TXDATA[6];
4'd9:TXD<=TXDATA[7];
4'd10:TXD<=1'b1;
default:TXD<=1'b1;
endcase
end
endmodule
锁相环锁到144MHZ以后刚好能整除115200,停止位2,用超级终端(一行80个字符)来查看,程序中是80个字符循环显示,前面大概5秒左右均无法完整显示(有乱码),之后就能正常,按下RST也能一行一行对齐显示,为什么呢?是锁相环达到稳定之前的延迟吗?
还有,如果我想隔一段时间输出一个数,在state<10处改成<100等数(当然state的位数有修改),就会一直输出乱码,不解中…… |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|