基于FPGA的RS232串口发送(含程序)

RS232通信协议我就不讲了,自己在网上搜,我讲一下怎么发送,怎么用。

发送数据前,发送一直是高电平,发送数据前,先发送一个低电平的起始位,然后是八个电平的数据位,再然后是一个低电平的结束位,最后保持高电平,等待下一个数据到来。发送数据为8bit位宽,在9600波特率下依次将bit位输出作为中间8位的数据位。

下面给出的是RS232发送的模块,由于没有数据位的输入,所以内部写一个1hz时钟进行自加验证输出,通过串口助手观察发送数据是否正确

module RS232(
    input clk,
	 input [7:0]k,				//输入8bit发送数据
	 output reg dout=1		//发送位,起始高电平
    ); //FPGA交流群689408654

	reg [15:0]cn=0;
	reg hp9600hz=0;
	always@(posedge clk)
	begin
		if(cn==2603)begin
			cn<=0;
			hp9600hz<=!hp9600hz;
			end
		else cn<=cn+1;
	end
	
/*	reg [30:0]cm=0;				//内部1hz自加验证程序
	reg hp1hz=0;
	always@(posedge clk)
	begin
		if(cm>=24999999)begin
			cm<=0;
			hp1hz<=!hp1hz;
			end
		else cm<=cm+1;
	end
	reg [7:0]k=0;
	reg [7:0]k2=0;
	always@(posedge hp1hz)
	begin
		k<=k+1;
	end*/
	
	reg [3:0]m=0;
	always@(posedge hp9600hz)
	begin
			k2<=k;
			case(m)
				0:if(k2!==k)begin dout<=0;m<=1;end
					else dout<=1;
				1:begin dout<=k[0];m<=2; end
				2:begin dout<=k[1];m<=3; end
				3:begin dout<=k[2];m<=4; end
				4:begin dout<=k[3];m<=5; end
				5:begin dout<=k[4];m<=6; end
				6:begin dout<=k[5];m<=7; end
				7:begin dout<=k[6];m<=8; end
				8:begin dout<=k[7];m<=9; end
				9:begin dout<=1;m<=0; end
			endcase
	end
endmodule

串口助手接收显示,注意发送的波特率是9600,这里选择9600波特率,接收是4个bit一个数据,组成16进制数。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绯红姜梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值