打印

串口中断种添这两句话有什么用?

[复制链接]
楼主: xlsbz
手机看帖
扫描二维码
随时随地手机跟帖
41
desert_hawk| | 2009-12-13 16:12 | 只看该作者 回帖奖励 |倒序浏览
我觉得你不适合讨论技术,或许适合上街卖大白菜,当菜贩子。另外你在另一层问“如果用......发送,怎样接收,你可以查询接收”。
鲜为人知 发表于 2009-12-13 16:00

菜贩子比你混的好的有很多。。。。
我倒是很好奇,发送过程被接收中断所打断,是怎么导致你“发送的是乱数”的?查询接收可以用,中断接收却不可以用?

使用特权

评论回复
42
desert_hawk| | 2009-12-13 16:41 | 只看该作者
1.(假如你要将你接受到的数据通过串口发送)&&(没有关中断),那么可能你还没有发送完就又开始来了接收中断,那你发送的将是一串乱数据。所以要关闭中断,当你把已经通过串口接收的数据发送完后在允许中断。
2.当 ...
鲜为人知 发表于 2009-12-12 17:22

个人觉得,像这种水平还回帖,说的有鼻子有眼的,完全可以起到误导广大新人的作用。当然,回帖是每个人的权利和自由。;P

使用特权

评论回复
43
鲜为人知| | 2009-12-13 16:46 | 只看该作者
菜贩子比你混的好的有很多。。。。
我倒是很好奇,发送过程被接收中断所打断,是怎么导致你“发送的是乱数”的?查询接收可以用,中断接收却不可以用? ...
desert_hawk 发表于 2009-12-13 16:12
那是价值观的问题,不是混的好与坏的问题。
可能不止好奇这一点吧,我就不来回答你的问题了,我觉得这是个很简单的问题,但你却不这么认为,因为你说让我去研究一周,哈哈。那你慢慢研究吧,但不要说“你不适合搞什么”这之内的,因为你甚至根本不了解别人在做什么。除非那人什么都没做,才可能被你说中,但那就毫无意义了,好了吧,因为这是技术贴,讨论这些也没什么用,如果我错了,但只要不至于引导人走向犯罪:D 就没什么的

使用特权

评论回复
44
desert_hawk| | 2009-12-13 16:48 | 只看该作者
那是价值观的问题,不是混的好与坏的问题。
可能不止好奇这一点吧,我就不来回答你的问题了,我觉得这是个很简单的问题,但你却不这么认为,因为你说让我去研究一周,哈哈。那你慢慢研究吧,但不要说“你不适合搞什 ...
鲜为人知 发表于 2009-12-13 16:46

以你现在的发言,我真的很觉得你不适合做这一行。当然,只是个人看法。表达一下个人看法没什么问题吧。

使用特权

评论回复
45
desert_hawk| | 2009-12-13 21:17 | 只看该作者
1.(假如你要将你接受到的数据通过串口发送)&&(没有关中断),那么可能你还没有发送完就又开始来了接收中断,那你发送的将是一串乱数据。所以要关闭中断,当你把已经通过串口接收的数据发送完后在允许中断。
2.当 ...
鲜为人知 发表于 2009-12-12 17:22
我看错了问题,第二点确实没必要说。我不知道Ls的还有20L做没做过串口通讯,不要来了就扣顶错了的大帽子,如果错了就指出来。如果你只是天天看着书来说,我想说那你还没有真正了解这个东西。我这几天就在搞串口通讯 ...
鲜为人知 发表于 2009-12-13 10:46

顶一下。让更多的人看看这些“鲜为人知”的道理。看看号称搞“串口通讯网络”的牛人是怎么“真正了解”这么一个“很简单的问题”的。

使用特权

评论回复
46
xlsbz|  楼主 | 2009-12-13 22:18 | 只看该作者
技术只占很小一部分!但是也是立身之本!

使用特权

评论回复
47
李冬发| | 2009-12-14 02:43 | 只看该作者
倒塌,我竟然把ES看成EA了。
投降!

使用特权

评论回复
48
hotpower| | 2009-12-14 04:28 | 只看该作者
俺答的没错呀~~~

使用特权

评论回复
49
desert_hawk| | 2009-12-14 08:00 | 只看该作者
俺答的没错呀~~~
hotpower 发表于 2009-12-14 04:28

问题是,某些“做过串口通讯”的“高手”是不会仔细看谁的回答的,唯一正确的是他自己心中的“实践经验”。

使用特权

评论回复
50
冷漠| | 2009-12-14 20:56 | 只看该作者
好玩。谁都没说到正根上。

还有19楼第一条确实理解有误,“把接收来的数据再发送回去,......这时下一个接收数据中断又到了,......”你做的是RS485 ?如果是RS232全双工,发送—接收是两个独立的通道,不可能撞车的。否则是编程问题。做芯片的人都是绝顶聪明的人,不会设计那么差的硬件中断电路。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
xlsbz + 1
51
冷漠| | 2009-12-14 21:23 | 只看该作者
再说LZ的问题,中断内部电路有一个“优先级激活触发器”一旦CPU响应某一中断,即将“优先级激活触发器”置位,以阻断同优先级和低优先级的所有中断。只有RETI指令能够清除“优先级激活触发器”,从而再次打开所有中断。

所以,当串口中断发生,CPU响应并进入中断之后,串口中断当然自动被阻断,即使你再次接收到多少数据,CPU在RETI结束之前都不会响应。

所以,在串口中断内,“ES=0/1“,纯粹是装聪明。设计芯片的人没那么笨,想不到这一点?

使用特权

评论回复
52
冷漠| | 2009-12-15 11:16 | 只看该作者
本帖最后由 冷漠 于 2009-12-15 11:18 编辑

对19楼的第一条,还有一点:如果将接收缓冲器的数据搬移到发送缓冲器发送回去,进入发送缓冲器的数据将毫无阻碍地、不受任何干扰和控制地、由发送硬件时序电路发送出去,无论接收通道发生了什么事件、中断不中断,发送时序电路都会将缓冲器内的数据“义无反顾地”**发送完,并置位TI向CPU 告知“发送缓冲器空,可以输入下一发送数据”。至于CPU是否响应TI的请求,那是CPU的事情。它可以因为正在处理RI中断而对TI请求置之不理或者推后处理,因为RI显然应该紧急性更高。

所以,MOV  SBUF,  DATA; 之后,发送动作已经开始,谁想或者谁能够打乱、停止这个发送操作,可能“后悔莫及”。除非有人过于高明。

  在那些成帧发送标准适配器中,例如:CAN,CSMA,HDLC,发送缓冲器一帧可能1,000字节之长连续发送,那里可以有CPU 半途废弃,终止发送的指令。玩过吗?

使用特权

评论回复
53
desert_hawk| | 2009-12-15 11:41 | 只看该作者
呵呵,估计19楼的高手已经没有勇气再看这个帖子了。

使用特权

评论回复
54
xlsbz|  楼主 | 2009-12-15 12:00 | 只看该作者
本帖最后由 xlsbz 于 2009-12-15 12:02 编辑

52# 冷漠

大侠很厉害!功力很深!
看看这个.........

执行下面的语句(单片机与电脑连接)
while (1) {
          SBUF = 'a';
          SBUF = 'b';
}
那么电脑能收到啥?
--------------------------
执行下面的语句(单片机与电脑连接)
while (1) {
          SBUF = 'a';
          SBUF = 'b';
          SBUF = 'c';
}
那么电脑能收到啥?
--------------------------
执行下面的语句(单片机与电脑连接)
while (1) {
          SBUF = 'a';
          SBUF = 'b';
          SBUF = 'c';
           SBUF = 'd';
}
那么电脑能收到啥?

使用特权

评论回复
55
xlsbz|  楼主 | 2009-12-15 12:10 | 只看该作者
本帖最后由 xlsbz 于 2009-12-15 12:15 编辑
MOV  SBUF,  DATA; 之后,发送动作已经开始,谁想或者谁能够打乱、停止这个发送操作,可能“后悔莫及”。除非有人过于高明。

冷漠 发表于 2009-12-15 11:16


哈哈我想到一个办法!!
MOV  SBUF,  DATA0 ;//这条语句用波特率较低速度运行比如说300
这里赶紧变换成速度快的波特率啊,换的越利索越好
MOV  SBUF,  DATA1 ;// 以速度快的波特率运行这句

那么DATA1不能追上DATA0的后几位么?追上几位就干掉几位!:lol

使用特权

评论回复
56
5880527| | 2009-12-15 13:54 | 只看该作者
停止发送是应该可以的,毕竟串口节拍需要一个定时器配合,所以让那定时器停止就可以了

使用特权

评论回复
57
xlsbz|  楼主 | 2009-12-15 15:59 | 只看该作者
哈哈我想到一个办法!!
MOV  SBUF,  DATA0 ;//这条语句用波特率较低速度运行比如说300
这里赶紧变换成速度快的波特率啊,换的越利索越好
MOV  SBUF,  DATA1 ;// 以速度快的波特率运行这句

那么DATA1不能追上DA ...
xlsbz 发表于 2009-12-15 12:10


嗨 晕头了!这种方法可行性可能只有一半吧!

使用特权

评论回复
58
xlsbz|  楼主 | 2009-12-15 16:06 | 只看该作者
停止发送是应该可以的,毕竟串口节拍需要一个定时器配合,所以让那定时器停止就可以了
5880527 发表于 2009-12-15 13:54


冷漠的意思是数据已经完全进入了移位寄存器了!

定时器已经管不着了

使用特权

评论回复
59
yixiao2000| | 2009-12-15 16:26 | 只看该作者
没啥用,没这两句话,中断返回前也不会进入新的串口中断。

使用特权

评论回复
60
5880527| | 2009-12-15 16:29 | 只看该作者
58# xlsbz
数据进入移位寄存器了也应该是受定时器管的,旁边没人吹口哨喊121了它也不走了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则