|
楼主 |
发表于 2014-9-1 16:44:52
|
显示全部楼层
刚才的有点乱,我重新发一遍
我是在protues上仿真的,中断就是进不去啊
#include <pic.h> //包含单片机内部资源预定义
//__CONFIG (HS & WDTEN & PWRTEN & BOREN & LVPDIS
unsigned int unCount = 0, unRvCount = 0, unSendCount = 0;
unsigned char ucFlag = 0, ucRvFlag = 0;
unsigned char ucRvData[10] = {0}, ucSendData[10] = {0};
void delay(void);
void main(void)
{
OSCCON = 0X75; //内部振荡器选为8Mhz
INTCON = 0x00; //关闭所有中断
PIE1 = 0x00; //外设中断禁止寄存器1
TRISC = 0X80;
SPBRG = 51; //8M晶振 设置波特率2400 波特率:Fosc/[64(n+1)]
BRGH = 0;
BRG16 = 0; //BRG 8位定时器 异步
SPEN = 1;
SYNC = 0;
TXSTA = 0x20;
CREN = 1;
RCIE = 1; //允许接收中断
PEIE = 1; //使能所有未屏蔽的外设中断
GIE = 1; //开放总中断
while(1 == 1)
{
// TXREG = 0x21;
// while(!TXIF); //TXIE置1时,TXIF被置1;待发送的最后一个字符写入TXREG时,TXIF被清零
delay();
asm("clrwdt"); //清除看门狗
if (unRvCount == 10)
{
CREN = 0;
for (unRvCount = 10; unRvCount>=0; unRvCount--)
{
TXREG = ucRvData[10-unRvCount];
while(!TXIF);
}
unRvCount = 0;
CREN = 1;
}
}
}
void delay(void)
{
unsigned int x = 2000;
while(--x){ NOP();}
}
void interrupt ISR(void) //中断服务程序
{
if(RCIF)
{
RA3 = ~RA3;
if (OERR) //溢出错误恢复
{
CREN = 0;
CREN = 1;
}
ucRvData[unRvCount++] = RCREG; //RCREG被读走时RCIF自动清零
}
}
|
|