英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

 找回密码
 立即注册
搜索
电子烟方案单片机单片机开发深圳单片机开发
单片机方案国产单片机8位单片机电子烟方案开发
查看: 3340|回复: 1
打印 上一主题 下一主题

一个小程序,关于中断的

[复制链接]
跳转到指定楼层
1#
发表于 2009-3-28 14:12:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void interrupt usart(void)
{
rcdata.address = RCREG;
while(RCIF == 1)
{}      //待数据被读取
if(usflag.sflag.cdtransmit == 0)
{
  RC3 = 1;
  usflag.sflag.cdtransmit = 1;
  d5ms(15000);
}
else
{
  while(1)
  {
   RC3 = 0;
   d5ms(15000);
   RC3 = 1;
   d5ms(15000);
  }
}
}
void main(void)
{
usart_initinal();
while(1)
{ }
}
void usart_initinal(void)//串口模块初始化
{   
GIE = 1; //开全局中断
PEIE = 1; //开局部中断
TXIE = 0; //发送中断禁止 
RCIE = 1; //接收中断允许位
SPEN = 1; //串口模块使能
CREN = 1; //连续接收数据  
TX9 = 0; //8位数据发送格式  
RX9 = 0; //8位数据接收格式
SYNC = 0; //异步串行通信方式
BRGH = 1; //高速波特率使能
SPBRG = 0x48;//11MHZ时波特率为9600
TRISC6 = 1;
TRISC7 = 1;
TRISC3 = 0;
TRISC4 = 0;
RC3 = 0;
RC4 = 0;
}                                             
这样的芯片初始化后,上电后就产生了一个中断,我不知这个中断初始是不是有问题
2#
 楼主| 发表于 2009-3-28 14:12:31 | 只看该作者
while(RCIF == 1)
{}

多余。

RCIF由硬件自动清零,在RCREG被读以后。



GIE = 1; //开全局中断
PEIE = 1; //开局部中断
TXIE = 0; //发送中断禁止 
RCIE = 1; //接收中断允许位


中断设定应该在所有IO口被设定好以后再开。

你的原因应该是先开了中断,而后在设定C6、7时候,错误产生了串口的起始位,而发生了错误的中断。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|公司首页|Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 ( 粤ICP备09008620号 )

GMT+8, 2024-11-24 08:32 , Processed in 0.051986 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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