pic单片机用串口发送接收数据

pic单片机用串口发送接收数据,第1张

这个问题是这样的,当接收到数据时,RCIF会被置1,如果你读了接收结果RCREG,则系统自动会把RCIF清0。

你这程序把清RCIF语句屏蔽了,但TXREG=RCREG这一句就是读接收结果(把接收结果RCREG送到发送寄存器TXREG里),所以会自动让RCIF清0,只有新数据来时,RCIF才会置1,才能再进入中断。

如果你把发送的语句改为TXREG=0X12(或其他不是RCREG的寄存器的变量),因此中断后没有读取接收数据,也就不能清RCIF,RCIF仍然为1,即中断服务程序退出后,还存在的中断请求,因此就会马上进入中断,从而出现不停的发送数据的现象。

解决的办法有2:

1、让原来屏蔽的语句RCIF=0有效;

2、空读RCREG,如定义一个变量A(unsigned

char

A),在发送数据后或前,增加A=RCREG就可以了。

给你个例子,pic16f77 usart的驱动;

http://blog.ednchina.com/warden/236267/message.aspx

上面例子是用轮循方式做的,在很多地方有限制。

PIC的USART使用发送中断时要注意:Once the TXREG register transfers the data to the TSR register(occurs in one TCYCLE), the TXREG is empty and interrupt bit TXIF (PIR1<4>) is set。就是只要TXREG里没有数据就会置TXIF中断标志。

你可以这样实现:先把TX中断关了,把要发的数据放入一个定义好的TX_BUF[]中,然后再开TX中断,把TX_BUF发出,发完之后再关TX中断!

希望对你有点帮助。

if(RCIF==1)

{

v = RCREG

rxstr[rx_count]=v

PrintChar(rxstr[rx_count])//PrintChar的原型是什么???

rx_count++

if(rx_count >7)

testcomflag =1

}

// RCIF=0去掉这两句,没必要+上去

// RCIE=1

1。把最后两句去掉

2。你的PintChar原型是什么?


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11147387.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存