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