請大俠指點下:
串口為什么發送正常,接收卻不正常呢?
單片機源程序如下:
#include "STC8G.h"
#include "intrins.h"
void UartInit(void) //115200bps@33.1776MHz
{
SCON = 0x50; //8位數據,可變波特率
AUXR |= 0x40; //定時器時鐘1T模式
AUXR &= 0xFE; //串口1選擇定時器1為波特率發生器
TMOD &= 0x0F; //設置定時器模式
TL1 = 0xB8; //設置定時初始值
TH1 = 0xFF; //設置定時初始值
ET1 = 0; //禁止定時器%d中斷
TR1 = 1; //定時器1開始計時
}
void GPI_Init(void)
{
P3M0 = 0x00;
P3M1 = 0x00;
P31 = 0; //PWM關
}
/* 串口發送字節數據函數 參數是要發送的字節 */
void UartSend_Data(unsigned char dat)
{
SBUF = dat; // 把要發送的數據給了SBUF寄存器
while(!TI); // 等待數據發送完成
TI = 0; // 清除發送完成標志位
}
void main()
{
/* 定義一個8位變量 用于接收串口接收的字節 */
unsigned char x =0;
GPI_Init();
UartInit(); // 串口初始化
while (1)
{
SBUF = 0x01; // 把要發送的數據給了SBUF寄存器
while(!TI); // 等待數據發送完成
TI = 0;
if (TI)
{
TI = 0; //清中斷標志
P31 = !P31; //測試PWM端口
}
if (RI)// 如果串口接收到數據
{
RI = 0; //清中斷標志
x =SBUF;
if (x == 0x01)
{
P31 = !P31; //翻轉MOS管狀態
UartSend_Data('l');
}
if (x == 0x02)
{
P32 = !P32; //翻轉led狀態
SBUF = 'm'; // 把要發送的數據給了SBUF寄存器
while(!TI); // 等待數據發送完成
TI = 0; // 清除發送完成標志位
}
}
}
}
|