51单片机串口输出乱码求助!
时间:10-02
整理:3721RD
点击:
#include "STC15F2Kxx.h"
#include "uart.h"
#include "intrins.h"
#define FOSC 11059200L //系统频率(这里使用内部时钟晶振)
#define BAUD 115200 //串口波特率
bit busy=0; //忙标志位
/*******************************************************************************
* 函数名 : UART1_Init_Config
* 描述 : UART1初始化配置
* 输入 : 无
* 输出 : 无
* 返回值 : 无
* 说明 : 无
*******************************************************************************/
void UART1_Init_Config(void)
{
P_SW1 &= 0x3f; //设置串口1在(P3.0/RxD, P3.1/TxD)
SCON = 0x50; //8位UART,可变波特率,允许串行接收
AUXR &= 0xfe; //定时器1为1T模式
AUXR |= 0x40; //定时器1为1T模式
TMOD &= 0xF0; //定时器1为模式0(16位自动重载)
TL1 = (65536 - (FOSC/4/BAUD)); //设置波特率重装值的低8位
TH1 = (65536 - (FOSC/4/BAUD))>>8;//设置波特率重装值的高8位
TR1 = 1; //启动定时器1计数
ES = 1; //使能串口中断
EA = 1; //使能总中断
}
/*******************************************************************************
* 函数名 : UART1_ISR
* 描述 : UART1中断服务函数
* 输入 : 无
* 输出 : 无
* 返回值 : 无
* 说明 : 无
*******************************************************************************/
void UART1_ISR(void) interrupt 4 using 1
{
if (RI) //接收数据
{
RI = 0; //清除RI位
}
if (TI) //发送数据
{
TI = 0; //清除TI位
busy = 0; //清忙标志
}
}
/*******************************************************************************
* 函数名 : SendData
* 描述 : UART1发送一个字节
* 输入 : dat:待发送数据
* 输出 : 无
* 返回值 : 无
* 说明 : 无
*******************************************************************************/
void SendData(unsigned char dat)
{
while (busy); //等待前面的数据发送完成
busy = 1;
SBUF = dat; //写数据到UART数据寄存器
}
/*******************************************************************************
* 函数名 : SendString
* 描述 : UART1发送一个字符串
* 输入 : *s:待发送字符串首地址
* 输出 : 无
* 返回值 : 无
* 说明 : 无
*******************************************************************************/
void SendString(char *s)
{
while(1)
{
if(*s == '\0')
break;
SendData(*s++); // 发送数据
}
}
#include "uart.h"
#include "intrins.h"
#define FOSC 11059200L //系统频率(这里使用内部时钟晶振)
#define BAUD 115200 //串口波特率
bit busy=0; //忙标志位
/*******************************************************************************
* 函数名 : UART1_Init_Config
* 描述 : UART1初始化配置
* 输入 : 无
* 输出 : 无
* 返回值 : 无
* 说明 : 无
*******************************************************************************/
void UART1_Init_Config(void)
{
P_SW1 &= 0x3f; //设置串口1在(P3.0/RxD, P3.1/TxD)
SCON = 0x50; //8位UART,可变波特率,允许串行接收
AUXR &= 0xfe; //定时器1为1T模式
AUXR |= 0x40; //定时器1为1T模式
TMOD &= 0xF0; //定时器1为模式0(16位自动重载)
TL1 = (65536 - (FOSC/4/BAUD)); //设置波特率重装值的低8位
TH1 = (65536 - (FOSC/4/BAUD))>>8;//设置波特率重装值的高8位
TR1 = 1; //启动定时器1计数
ES = 1; //使能串口中断
EA = 1; //使能总中断
}
/*******************************************************************************
* 函数名 : UART1_ISR
* 描述 : UART1中断服务函数
* 输入 : 无
* 输出 : 无
* 返回值 : 无
* 说明 : 无
*******************************************************************************/
void UART1_ISR(void) interrupt 4 using 1
{
if (RI) //接收数据
{
RI = 0; //清除RI位
}
if (TI) //发送数据
{
TI = 0; //清除TI位
busy = 0; //清忙标志
}
}
/*******************************************************************************
* 函数名 : SendData
* 描述 : UART1发送一个字节
* 输入 : dat:待发送数据
* 输出 : 无
* 返回值 : 无
* 说明 : 无
*******************************************************************************/
void SendData(unsigned char dat)
{
while (busy); //等待前面的数据发送完成
busy = 1;
SBUF = dat; //写数据到UART数据寄存器
}
/*******************************************************************************
* 函数名 : SendString
* 描述 : UART1发送一个字符串
* 输入 : *s:待发送字符串首地址
* 输出 : 无
* 返回值 : 无
* 说明 : 无
*******************************************************************************/
void SendString(char *s)
{
while(1)
{
if(*s == '\0')
break;
SendData(*s++); // 发送数据
}
}
乱码应该是程序波特率与串口助手不一致导致的
乱码应该是程序波特率与串口助手不一致导致的