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

 找回密码
 立即注册
搜索
电子烟方案单片机单片机开发深圳单片机开发
单片机方案国产单片机8位单片机电子烟方案开发
查看: 4774|回复: 1

各位老师帮忙看下串口通讯的程序

[复制链接]
发表于 2012-8-20 10:28:15 | 显示全部楼层 |阅读模式

我是初学者,想实现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;   
   }
}


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

本版积分规则

关闭

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

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

GMT+8, 2024-3-28 20:24 , Processed in 0.055995 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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