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

标题: 各位老师帮忙看下串口通讯的程序 [打印本页]

作者: min    时间: 2012-8-20 10:28
标题: 各位老师帮忙看下串口通讯的程序

我是初学者,想实现PIC与PC机的串口通讯,程序的目的是想通过串口向PIC发消息,控制LED灯的开关;

这段代码写完后,发送消息时没有任何反应,各位老师帮忙看看,谢谢!

PIC型号:16f690



#include <pic.h>
//系统配置(只读位 编程时烧写这些位)
__CONFIG(INTIO & WDTDIS & PWRTEN & MCLRDIS & UNPROTECT \
& UNPROTECT & BORDIS & IESODIS & FCMDIS);

#define uchar unsigned char
#define uint unsigned int

uchar recData;

//*****************************************************************
//延时函数
void delay(int K);
//中断函数                       
void interrupt ISrR(void);               
                          
//-----------------------------------------------------------------------------
void delay(int K)                        //Simple Delay Loop
{
    char i,j;
    for (i = 0; i < 250; i++)  
         for (j = 0; j < K; j++);
}

//-----------------------------------------------------------------------------
int main(void)
{
    recData = 0;
    uint i;                    
   

//初始化
    OSCCON = 0x65;          //时钟源设为内部振荡器4MHZ
    ANSEL  = 0x00;
    ANSELH = 0x00;          //这两句不能少
    TRISB  = 0x00;          //设为输出
    TRISC  = 0x00;          //设为输出

    PORTC = 0x80;           //点亮LED灯 C7==LED
    //获得异步串口所需要的波特率
    BRGH = 1;
    BRG16  = 0;             //8位波特率发生器
    SPBRG  = 25;            //波特率设为9600 ,时钟为4MHZ,异步模式

    TXSTA  = 0x24;          //使能发送  
    RCSTA  = 0x90;          //使能接收,连续接收
    //TXIE = 1;               //使能发送中断
    RCIE   = 1;             //允许接收中断
    GIE    = 1;             //打开全局中断  
    PEIE   = 1;             //使能外设中断  
    RCIF   = 0;             //清零外部中断标识,接收中断标志位   
   
    //TRISB  = 0x20;          //将PORB RXD设为输入口,TXD设为输出口

  
    //死循环
    while(1)
   {
       switch(recData)
      {
         case 0x01:;
         case 0x02:;
         case 0x03:;
         case 0x04ORTC = 0x00;break; //close LED
         case 0x05:;
         case 0x06:;
         case 0x07:;
         case 0x08:;
         case 0x09:;
         case 0xa0ORTC = 0x80;break;//Open LED
        //default:break;
     }
}
}
void interrupt ISrR(void)  
{  
    //判断是否为串口接收中断
if(RCIF)  
{      
       RCIF=0;
    recData = RCREG;
    TXREG = recData;   
   }
}







欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://enroobbs.com/) Powered by Discuz! X3.2