单片机发没问题。就是接收上有问题,接收的时候IR能置位就是SBUF没有任何数据,看了几遍手册也没发现哪里有问题,代码用的论坛上的一段代码。大家帮忙看下哪里的问题。#include<sh88f54.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<delay.h>
unsigned char Data[8] = {0};
bit Flag;
/*------------------------------------------------
串口初始化
------------------------------------------------*/
void InitUART (void)
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
TH1 = 0xF7; // TH1: 重装值 4800 波特率 晶振 16.6MHz
TL1 = TH1;
TR1 = 1; // TR1: timer 1 打开
PCON = 0X80; // 倍频 得到波特率为9600
IEN0 = 0x90; // 打开串口中断
}
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
unsigned char i;
unsigned char wei;
wei = 1;
P0M0 = 0X00;
P0M1 = 0XFF;//推挽输出
P1M0 = 0X00;
P1M1 = 0XFF;//推挽输出
P2M0 = 0X00;
P2M1 = 0XFF;//推挽输出
P3M0 = 0X01;
P3M1 = 0XFE;//推挽输出
P4M0 = 0X00;
P4M1 = 0XFF;//推挽输出
P3_0 = 1;
P3_1 = 1;
InitUART();
while(wei)
{
if(Flag)
{
Flag = 0;
for(i=0;i<8;i++)
{
SBUF = Data[i];
while(!TI);
TI = 0;
}
if(i==8)
{
i = 0;
wei = 0;
}
}
}
}
/*------------------------------------------------
串口中断程序
------------------------------------------------*/
void UART_SER (void) interrupt 4 //串行中断服务程序
{
static unsigned char Count;
if(RI) //判断是接收中断产生
{
RI=0; //标志位清零
Data[Count] = SBUF;
Count++;
}
if(Count==8)
{
Count = 0;
Flag = 1;
} |