⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 receice.v

📁 RS232通讯VHDL源代码,MAXPLUS 2环境执行通过
💻 V
字号:
module receice(rxd,clock,sbuf);
	//9600BPS,8位数据,1位停止位
   input rxd;
	input clock;
	output [7:0] sbuf;

	reg [3:0] count_reg;				//RXD数据状态计数器
	reg [9:0] uart_buf;				//串行数据接收缓冲区
	reg [3:0] bit_cnt;				//串行数据当前位计数
	reg [2:0] bit_collect;			//采集数据缓冲区
	reg [6:0] clock_div;				//波特率时钟分频:9600*16=11.0592/72
	reg clock_pluse;					//状态计数器开始标志
	reg rxd_start_reg;				//串行接收开始标志
	reg rxd_end;						//串行接收接收标志
	reg rxd_dat;

//时钟分频,产生一个9600*16的频率
always @(negedge clock)
begin
	if (clock_div<7'd72)
	begin
		clock_div=clock_div+1;
		clock_pluse=0;
	end
	else
	begin
		clock_div=0;
		clock_pluse=1;
	end
end

//接收解码
always @(posedge clock_pluse)
begin
	if (rxd_start_reg==1'b0)
	begin
		//检测开始位
		if (rxd==1'b0)
		begin
			rxd_start_reg=1'b1;
			count_reg=4'h0;
			bit_cnt=4'h0;
		end
	end
	else
	begin
		//接收状态频率微调
		if (count_reg < 4'he)
			count_reg=count_reg+1;
		else
			count_reg=0;
	
		if (count_reg==4'h6)					//数据采集
			bit_collect[0]=rxd;
		if (count_reg==4'h7)
			bit_collect[1]=rxd;

		if (count_reg==4'h8)
		begin
			bit_collect[2]=rxd;
			rxd_dat=(bit_collect[0] & bit_collect[1]) | (bit_collect[1] & bit_collect[2]) | (bit_collect[0] & bit_collect[2]);
			uart_buf=uart_buf>>1;
			uart_buf[9]=rxd_dat;
			bit_cnt=bit_cnt+1;
			if (bit_cnt==4'h1 && uart_buf[0]==1'b1)
			begin
				rxd_start_reg=0;
			end
		end

		//检测接收结束
		if (bit_cnt > 4'h9)
		begin
			rxd_end=1;
			rxd_start_reg=0;
		end

	end
end

assign sbuf=~uart_buf[8:1];
endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -