PIC串口问题!!

[复制链接]
7163|11
 楼主| win2000_li 发表于 2007-12-27 22:57 | 显示全部楼层 |阅读模式
在PIC单片机的串行口发送中断里的发送中断标志位TXIF,在启动发送时,就开始被置1了,并且还不能软件清除。<br /><br />现在我想用串口发送中断来发送数据,不知道如何是好!!!<br /><br />请高手指点!!!<br /><br />如果来判断发送中断??并且自已怎么样来控制发送中断。<br /><br />比如在`51里,可以将TI&nbsp;=&nbsp;1;来让串口发送中断。<br /><br />请高手指点PIC发送中断的方法。<br />
 楼主| win2000_li 发表于 2007-12-27 23:55 | 显示全部楼层

111111

&quot;TXIF为1表示发送寄存器为空!当你把TXEN置1后,会立即把txreg中的数据转存到移位寄存器中,导致TXIF马上置1,且不能用软件方法清0,当向txreg中写入数据时自动清零!”,那当我用中断来做串口发送的时候如果有连续大量的数据需要发送的话好像没问题,通过中断不断的发送,但假如当前需要发送的数据已经全部发完后已经不需要在发送了,这个时候TXIF始终为“1”,那不是会进入中断,但前无数据发送退出中断,但此时txif=&quot;1&quot;,又马上进入中断的死循环吗。如此疑惑还望给位高手给与解答,或给个串口发送中断的例子.
hotpower 发表于 2007-12-28 00:04 | 显示全部楼层

txif="1"立即引发发送中断,在中断里清除txif即可,这有何难???

  
兰天白云 发表于 2007-12-28 11:33 | 显示全部楼层

hotpower刚刚还在玩,应该最清楚了

  
iaiwork21 发表于 2007-12-28 13:55 | 显示全部楼层

需要发送时,置TXIE;否则清TXIE

  
 楼主| win2000_li 发表于 2007-12-28 14:36 | 显示全部楼层

回!!!!!!!!!!

TXIF软件清楚不了啊!!!<br /><br />所以现在我的中断发送函数都不知道怎么办了啊!!!
 楼主| win2000_li 发表于 2007-12-28 21:31 | 显示全部楼层

hotpower老师,你错了。

并不是你说的那样啊!!<br /><br />真的,不信你看一看PDF吧!!
兰天白云 发表于 2007-12-29 12:11 | 显示全部楼层

不知到hotpower有没有用示波器看过?

win2000_li:刚开始发送时,连发2个数据比较好<br /><br />其实&quot;在启动发送时,就开始被置1了&quot;也没什么大不了的<br />进中断后再发下一个数据就行了&nbsp;
 楼主| win2000_li 发表于 2007-12-29 18:56 | 显示全部楼层

hotpower老师!!!!!

其实你的那个程序是用查询方式的.<br /><br />根本就不是中断方式.<br /><br />当然你这种查询方式我也做成过.<br /><br />一会回家好后,我发出来.<br /><br />我们现在讨论的是中断方式.<br /><br />
兰天白云 发表于 2007-12-29 21:00 | 显示全部楼层

用我9楼的方法吧,可以的

  
 楼主| win2000_li 发表于 2007-12-29 22:56 | 显示全部楼层

可以啊!!!

但是我想用中断来发送啊!!!<br /><br />如果用查询发送的话还不行用我的这个<br /><br />/////////////////////////////////////////////////////////<br />//函&nbsp;数&nbsp;名:void&nbsp;SendNumChar(uint8&nbsp;*SendAddr,&nbsp;uint8&nbsp;Num)<br />//功能描述:发送函数<br />//函数说明:<br />//调用函数:&nbsp;<br />//全局变量:&nbsp;<br />//输入参数:uint8&nbsp;*SendAddr是要发送数据的首地址<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;Num是要发送数据的个数<br />//返回参数:&nbsp;无<br />//////////////////////////////////////////////////////////<br />void&nbsp;SendNumChar(uint8&nbsp;*SendAddr,&nbsp;uint8&nbsp;Num)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(;&nbsp;Num&nbsp;&gt&nbsp;0;&nbsp;Num--)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TXREG&nbsp;=&nbsp;*SendAddr;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendAddr++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!PIR1bits.TXIF);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PIR1bits.TXIF&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//未发送完毕,等待<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />&nbsp;&nbsp;&nbsp;&nbsp;
xieyuanbin 发表于 2007-12-30 12:13 | 显示全部楼层

仔细看五楼的解决方法

不发送数据时将串口发送模块禁止掉
您需要登录后才可以回帖 登录 | 注册

本版积分规则

142

主题

718

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部