stc15w4k系列,,,,串口收发数据的问题
时间:10-02
整理:3721RD
点击:
#include<STC15F2K60S2.H>
#define uint unsigned int
#define uchar unsigned char
//uint temp,flag;
uchar temp,flag;
sbit led=P2^1;
void Delay5ms() //@11.0592MHz
{
unsigned char i, j;
i = 54;
j = 199;
do
{
while (--j);
} while (--i);
}
void init()
{
P2M0=1;
P2M1=0;
SCON = 0x50; //8位数据,可变波特率9600
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设定定时器1为16位自动重装方式
TL1 = 0xE0; //设定定时初值
TH1 = 0xFE; //设定定时初值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
ES=1;
EA=1;
}
void main()
{
init();
while(1)
{
if(flag)
{
flag=0;
ES=0;
SBUF=temp;
while(!TI);
TI=0;
ES=1;
}
}
}
void uart1() interrupt 4
{
RI=0;
temp=SBUF;
flag=1;
}
程序比较简单,就直接传上来了,初始化和配置那块应该是没有问题,上来两张图
为什么16进制发送和接收时,AA 0A 1A都可以,但是01 02 A0是个什么情况?
到底是为什么呢?
#define uint unsigned int
#define uchar unsigned char
//uint temp,flag;
uchar temp,flag;
sbit led=P2^1;
void Delay5ms() //@11.0592MHz
{
unsigned char i, j;
i = 54;
j = 199;
do
{
while (--j);
} while (--i);
}
void init()
{
P2M0=1;
P2M1=0;
SCON = 0x50; //8位数据,可变波特率9600
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设定定时器1为16位自动重装方式
TL1 = 0xE0; //设定定时初值
TH1 = 0xFE; //设定定时初值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
ES=1;
EA=1;
}
void main()
{
init();
while(1)
{
if(flag)
{
flag=0;
ES=0;
SBUF=temp;
while(!TI);
TI=0;
ES=1;
}
}
}
void uart1() interrupt 4
{
RI=0;
temp=SBUF;
flag=1;
}
程序比较简单,就直接传上来了,初始化和配置那块应该是没有问题,上来两张图
为什么16进制发送和接收时,AA 0A 1A都可以,但是01 02 A0是个什么情况?
到底是为什么呢?
不明白你想问什么?
你走断点看一下吧,你的程序应该没有问题。
两张图不是有差别吗?
事实证明,程序的确没有问题,问题在这,看图,这是买的系统板人家附带的下载说明,之前用这个板子的时候,包括串口的接受和其他的都OK,只是串口的发送是有问题,也没有太在意这个设置,因为我并没有在程序里面配置系统时钟,并且我用的不管是内部(默认)还是外部都是11.0592,还有那个上点复位延时的,万万没想到问题就出现在这里,只是一个串口打印的程序,花了3天的时间才找到是这个原因,并且我并不知道为什么要这样配置,真的要好好反思自己了
还是详细看手册看说明,刚开始都难免会碰到一些问题,以后就好了。
换个串口软件试一下
换个串口软件试一下
我这个下载直接都是默认的,都没改过。