学习串口通信,想通过电脑串口助手发送字符单片机,单片机再把接收到的字符发送给串口助手,可是串口助手接收到的数据全是00,#include <STC15F2K60S2.H>
#include "intrins.h"
#define uint_16 unsigned int
#define uchar_8 unsigned char
typedef unsigned char BYTE;
typedef unsigned int WORD;
#define FOSC 11059200L //系统频率
#define BAUD 57600 //串口波特率
#define NONE_PARITY 0 //无校验
#define ODD_PARITY 1 //奇校验
#define EVEN_PARITY 2 //偶校验
#define MARK_PARITY 3 //标记校验
#define SPACE_PARITY 4 //空白校验
#define PARITYBIT NONE_PARITY //定义校验位
#define BN 6
uchar_8 code tbuf[6]={"AT+VCC"};
uchar_8 rbuf;
bit busy;
uchar_8 i,y,h=65;
void UART_INIT();
void SendData(BYTE dat);
void SendString(char *s);
void SendData2();
void main() //主程序
{
UART_INIT();
_nop_();
_nop_();
SendData2();
while(1)
{
}
}
/*----------------------------
串口初始化
----------------------------*/
void UART_INIT() //串口初始化
{
SCON= 0x50; //9位可变波特率,校验位初始为0
T2L = (65536 - (FOSC/4/BAUD)); //设置波特率重装值
T2H = (65536 - (FOSC/4/BAUD))>>8;
AUXR = 0x14; //T2为1T模式, 并启动定时器2
AUXR |= 0x01; //选择定时器2为串口1的波特率发生器
ES = 1; //使能串口1中断
EA = 1;
}
void Uart() interrupt 4
{
if (RI)
{
ES=0;
RI = 0; //清除RI位
ACC= SBUF; //P0显示串口数据
ES=1;
}
if (TI)
{
TI = 0; //清除TI位
busy = 0; //清忙标志
}
}
/*----------------------------
发送串口数据
----------------------------*/
void SendData(BYTE dat)
{
while (busy); //等待前面的数据发送完成
ACC = dat; //获取校验位P (PSW.0)
busy = 1;
SBUF = ACC; //写数据到UART数据寄存器
}
void SendData2()
{
//while(busy);
SBUF=ACC;
}
/*----------------------------
发送字符串
----------------------------*/
void SendString(char *s)
{
while (*s) //检测字符串结束标志
{
SendData(*s++); //发送当前字符
}
}
不知道是哪里有问题?
|