OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6586|回复: 10

串口起始位下降沿代码请教

[复制链接]

58

主题

288

帖子

1

精华

高级会员

Rank: 4

积分
813
金钱
813
注册时间
2012-3-29
在线时间
81 小时
发表于 2018-12-5 15:05:05 | 显示全部楼层 |阅读模式
1金钱
      不理解串口通信中下降沿的判断方法,有知道的指导一下哈。
      例程是这样的:
                   assign start_flag = uart_rx_d1&(~uart_rxd_d0);
                   always语句中的赋值
                        uart_rxd_d0 <= uart_rxd;
                        uart_rxd_d1 <= uart_rxd_d0;

       我觉得d1的值是d0赋值给的,d0和d1的值什么都一样吧,那start_flag的值什么时候能变1呢。我理解always语句中的赋值应该这样:
                        uart_rxd_d1 <= uart_rxd_d0;
                        uart_rxd_d0 <= uart_rxd;
       rxd的电平发生变化以后,d1的值和d0的值就不相等了,下降沿就判断出来了。 不理解例程上的判断方法,帮我解答一下吧朋友们。               



1.jpg
2.jpg

最佳答案

查看完整内容[请看2#楼]

要理解阻塞赋值啊兄弟, assign start_flag = uart_rx_d1&(~uart_rxd_d0);是说前一拍是1后一拍是0的时候赋值为1,不就是下降沿,重点是阻塞赋值理解下
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

26

主题

1533

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6369
金钱
6369
注册时间
2015-8-25
在线时间
1004 小时
发表于 2018-12-5 15:05:06 | 显示全部楼层
要理解阻塞赋值啊兄弟, assign start_flag = uart_rx_d1&(~uart_rxd_d0);是说前一拍是1后一拍是0的时候赋值为1,不就是下降沿,重点是阻塞赋值理解下
回复

使用道具 举报

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-8-29
在线时间
16 小时
发表于 2018-12-5 15:12:56 | 显示全部楼层
d1和d0的值并一样哦兄弟,d0是rxd延时一个时钟节拍得到的,d1是d0延时一个时钟节拍得到的。 所以d1是rxd延时2个时钟节拍得到的,你最好结合仿真看一下波形,一目了然
回复

使用道具 举报

58

主题

288

帖子

1

精华

高级会员

Rank: 4

积分
813
金钱
813
注册时间
2012-3-29
在线时间
81 小时
 楼主| 发表于 2018-12-5 15:26:41 来自手机 | 显示全部楼层
1210568312 发表于 2018-12-5 15:12
d1和d0的值并一样哦兄弟,d0是rxd延时一个时钟节拍得到的,d1是d0延时一个时钟节拍得到的。 所以d1是rxd延 ...

你好,else语句中rxd赋值给d0 d0赋值给d1这两个语句在每个时钟节拍中都会执行吧
回复

使用道具 举报

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-8-29
在线时间
16 小时
发表于 2018-12-5 15:59:51 | 显示全部楼层
业未央 发表于 2018-12-5 15:26
你好,else语句中rxd赋值给d0 d0赋值给d1这两个语句在每个时钟节拍中都会执行吧

是的,而且是并行执行的,d0 = rxd指的是,将上一个时钟沿下rxd的值赋值给d0;
d1 = d0 指的是,将上一个时钟沿下 d0的值赋值给d1(同时这也是上上个时钟下rxd的值);
回复

使用道具 举报

58

主题

288

帖子

1

精华

高级会员

Rank: 4

积分
813
金钱
813
注册时间
2012-3-29
在线时间
81 小时
 楼主| 发表于 2018-12-5 16:13:43 来自手机 | 显示全部楼层
1210568312 发表于 2018-12-5 15:59
是的,而且是并行执行的,d0 = rxd指的是,将上一个时钟沿下rxd的值赋值给d0;
d1 = d0 指的是,将上一 ...

我理解了,else中的语句是串行的两个语句需要两个时钟周期来执行,d1保存的实际就是上一个时钟rxd的状态
回复

使用道具 举报

58

主题

288

帖子

1

精华

高级会员

Rank: 4

积分
813
金钱
813
注册时间
2012-3-29
在线时间
81 小时
 楼主| 发表于 2018-12-5 16:27:22 来自手机 | 显示全部楼层
szczyb1314 发表于 2018-12-5 16:16
要理解阻塞赋值啊兄弟, assign start_flag = uart_rx_d1&(~uart_rxd_d0);是说前一拍是1后一拍是0的时候赋 ...

谢谢老哥,刚开始学,语法不太熟
回复

使用道具 举报

26

主题

1533

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6369
金钱
6369
注册时间
2015-8-25
在线时间
1004 小时
发表于 2018-12-5 16:29:45 | 显示全部楼层
业未央 发表于 2018-12-5 16:27
谢谢老哥,刚开始学,语法不太熟

阻塞赋值,就像是一个移位寄存器一样的
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复

使用道具 举报

26

主题

1533

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6369
金钱
6369
注册时间
2015-8-25
在线时间
1004 小时
发表于 2018-12-5 16:30:42 | 显示全部楼层
在时钟边沿的触发下,移位寄存器一位一位的移动
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复

使用道具 举报

58

主题

288

帖子

1

精华

高级会员

Rank: 4

积分
813
金钱
813
注册时间
2012-3-29
在线时间
81 小时
 楼主| 发表于 2018-12-5 16:45:38 来自手机 | 显示全部楼层
szczyb1314 发表于 2018-12-5 16:30
在时钟边沿的触发下,移位寄存器一位一位的移动

谢谢,我再琢磨琢磨
回复

使用道具 举报

29

主题

162

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1243
金钱
1243
注册时间
2018-4-25
在线时间
185 小时
发表于 2018-12-14 16:28:35 | 显示全部楼层
你这样换个顺序没区别  理解先阻塞和非阻塞赋值吧
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 05:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表