我刚开始接触单片机,做了一个程序,实现的功能就是从PC机上接收一个字符串,然后就回发到PC机上,利用串口调试助手来发送和接收显示,但是做了好几天,都没找到毛病,希望有人能指教一下.程序如下:
//波特率为115200
#include <c8051f310.h>
#define uchar unsigned char
#define uint unsigned int
#define MaxLen 100
//----------------------------------------
//硬件地址
//----------------------------------------
sbit LED1=P3^3;
sbit LED2=P3^4;
uint readflag=0; //读标志
uchar idata RxData[MaxLen]; //接收数据存放位置
//-----------------------------------------
// 端口初始化
// P0.4 - UART TX
// P0.5 - UART RX
//-----------------------------------------
void PORT_Init (void)
{
P3MDOUT |= 0x18; // 使能 LED p3.3, p3.4为推挽输出
XBR0 = 0x01; // 交叉开关使能 UART P0.4(TX) and P0.5(RX)
XBR1 = 0x40; //使能交叉开关
}
//-----------------------------------------
// 系统时钟初始化
//-----------------------------------------
void SYSCLK_Init (void)
{
OSCICN |= 0x83; // 配置内部振荡器的的最大频率 1000 0011
RSTSRC = 0x04; // 使能始终丢失检测寄存器
}
//-----------------------------------------
// 串口初始化
//-----------------------------------------
void UART0_Init (void)
{
SCON0 = 0x10; //波特率可编程8位UART,UART接收允许
CKCON = 0x08; //定器1使用系统时钟(=0x08可将波特率设为115200,=00可将波特率设为9600)
TMOD = 0x20; //定时器1设为自动重装8位计数定时器
TH1=0X96; //为波特率装定时器初值
TL1=TH1;
TR1 = 1; //起动定时器1
}
//-----------------------------------------
// 延时程序
//-----------------------------------------
void Delayms(unsigned int count)
{
unsigned int i,j;
for(i=0;i<count;i++)
for(j=0;j<200;j++);
}
//-------------------------------------
//串口发送一个字节
//-------------------------------------
void Putchar(char c)
{
SBUF0=c; //发送一个字节
while(TI0==0); //等待发完一个字节
TI0=0; //清除发送中断标志
//readflag -=1;
}
//-------------------------------------
//串口发送接收到的数据存储区中的字符串
//-------------------------------------
void Putsting(char *ptr)
{
int i=0;
while(*(ptr+i) != '\0') //判断是否发完一个字符串
{
Putchar(*ptr);
ptr++;
i++;
//LED1=1;
};
//LED1=~LED1;
}
//----------------------
//系统初始化
//---------------------
void sys_init(void)
{
PCA0MD &= ~0x40; // 禁止看门狗
PORT_Init(); // 初始化端口I/O
SYSCLK_Init (); //初始化系统时钟
UART0_Init(); //串口初始化
ES0=1; //开串行中断
TI0=0;
//TR0=1;