[X]关闭

串口问题

文档创建者:愤怒的小孩
浏览次数:5211
最后更新:2019-12-06
悬赏1积分未解决
各位麻烦问一下,本人才开始学习,麻烦各位了。最近在学习串口,想用串口接收到的数据来控制8个LED,但是在控制的时候遇到问题。下面是程序
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date:    21:42:16 08/28/2016
// Design Name:
// Module Name:    uart_rx_tx
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module uart_rx_tx(
        input clk_i,
        input reset,
        input uart_rx_data,
        output uart_tx_data,
        output [7:0] led
    );
(*keep = "true"*)
wire [7:0] uart_data_o;
(*keep = "true"*)
wire uart_rx_done;
//wire [1:0] led;    //在整合过程中 输入输出不需要重新定义  

// Instantiate the module
uart uart_u(
    .clk(clk_i),
    .uart_rx_i(uart_rx_data),
    .uart_data_o(uart_data_o),
    .rx_done(uart_rx_done),
         .uart_bps_sam()     //虽然这里没有用到 但是也必须和底层相匹配
    );
         
//         // Instantiate the module
uart_tx uart_tx_u (
    .clk(clk_i),
    .uart_tx_data_o(uart_data_o),
    .uart_tx_en(uart_rx_done),
    .uart_tx_o(uart_tx_data)
    );

// Instantiate the module
uart_led uart_led_u (
    .clk(clk_i),
         .led(led),
         .reset(reset),
         .led_en(uart_rx_done),
    .uart_rx_data_i(uart_data_o)
    );


endmodule


这是顶层的程序

串口接收的程序是参考米联的。
下面是我的控制程序:
module uart_led(
        input  clk,
        input  reset,
        output reg [7:0] led = 8'b11111111,
        input  [7:0] uart_rx_data_i,
        input led_en
    );
         
reg [7:0]  led_cnv;

always @ (posedge clk ) begin

           if(led_en)
                        led_cnv <= uart_rx_data_i;
                else
                        led_cnv <= led_cnv;
                       
end

always @ (posedge clk ) begin

                case (led_cnv)

                        8'b11111000:
                                led[0] <= ~led[0];
                               
                        8'b11111001:
                                led[1] <= ~led[1];
                               
                        8'b11111010:
                                led[2] <= ~led[2];       
                               
                        8'b11111011:
                                led[3] <= ~led[3];
                               
                        8'b11111100:
                                led[4] <= ~led[4];
                               
                        8'b11111101:
                                led[5] <= ~led[5];       
                               
                        8'b11111110:
                                led[6] <= ~led[6];
                               
                        8'b11111111:
                                led[7] <= ~led[7];
                               
                default:
                                led <=8'b10101010;
                       
                endcase       
       
end


endmodule


问题是我只要下完程序运行的就是default里面的数据,我在发送也没有用了,求大神帮忙,谢谢!!

发表评论已发布 3

uisrc

发表于 2016-9-1 08:16:08 | 显示全部楼层




应该是串口数据接收有问题把,你用chipscope观察下 接收到的数据是否正确

越努力越幸运!加油!
回复

使用道具 举报

愤怒的小孩

发表于 2016-9-1 09:04:38 | 显示全部楼层

admin 发表于 2016-9-1 08:16
应该是串口数据接收有问题把,你用chipscope观察下 接收到的数据是否正确

我接受完成又发出去了,通过串口助手可以看到发送的数据。我在看看,谢谢

回复

使用道具 举报

A1_Vincent

发表于 2019-12-6 17:00:08 | 显示全部楼层

clk_i频率有多高?在每次时钟上升沿翻转LED,太快了,不说人眼不能分辨,LED灯可能都反应不过来。话说人眼可以看出来的闪烁应该低于20几赫兹,高了就看不出来闪了,以前旧的放电影的机器就是几十赫兹的刷新率。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则