这是原代码#include "reg52.h" //定义51单片机特殊功能寄存器
#define BAUDRATE 2400 //波特率
#define SYSTEMCLOCK 12000000 //系统时钟频率
void uart_sendstring(unsigned char *str);
//主函数
void main(void)
{
SCON = 0x50;
TMOD |= 0x20;
TH1 = 256 - (unsigned int)(SYSTEMCLOCK/BAUDRATE/384+0.5);
ES = 1; //时能串口中断
EA = 1;
TR1 = 1; //启动定时器1
uart_sendstring("hello,world.\r\n");
while(1);
}
//通过串口发送字符串
void uart_sendstring(unsigned char *str)
{
unsigned char *p;
p = str;
while(*p != '\0')
{
SBUF = *p;
while(TI == 0); //等待发送标志位置位
TI = 0;
p++;
}
}
然后有人说IAP15F2K62S2的波特率是1T 就这样改了
#include "reg52.h" //定义51单片机特殊功能寄存器
sfr AUXR =0x8E;
//#define BAUDRATE 2400 //波特率
//#define SYSTEMCLOCK 12000000 //系统时钟频率
void uart_sendstring(unsigned char *str);
void UartInit(void) //2400bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xF4; //设定定时初值
TH1 = 0xF4; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
//主函数
void main(void)
{
UartInit();
uart_sendstring("hello,world.\r\n"); //'\r' 13 回车(return) '\n' 10 换行(newline)
while(1);
}
//通过串口发送字符串
void uart_sendstring(unsigned char *str)
{
unsigned char *p;
p = str; //p获得str内存储的地址值
while(*p != '\0') // '\0'字符串结束标志
{
SBUF = *p;
while(TI == 0); //等待发送标志位置位 TI=0时循环 TI=1时跳出循环
TI = 0;
p++; //向高地址移动指针
}
}
发现还是没用 不知道是哪里出了问题了
|