stc8a和电脑串口通信,用的是串口1 定时器1(16位自动装载),波特率也没有问题,硬件(TXD,RXD)连线也没有问题,但是电脑上接收的依旧是□?
uart.c代码:
#include "uart.h"
/*******************************************************************************
* 函 数 名 : Init_UART
* 函数功能 : 初始化串口
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Init_UART()
{
P3M1 = 0X00; //
P3M0 = 0x00;
//UART_P_SW1 = 0X00; //S1_S[1:0] =>RXD=P3.0 TXD=P3.1
SCON = 0X50; //SM0=0,SM1=1 串口选择模式1 可变波特率8位数据方式
TMOD = 0X00; //定时器1为模式0(16位自动重载)
AUXR = 0x40; //定时器1为1T模式
TL1 = (65536 - (FOSC/4/BAUD)); //设置波特率重装值
TH1 = (65536 - (FOSC/4/BAUD))>>8;
TR1 = 1; //定时器1开始启动
ES = 1; //串口中断允许位
EA = 1; //总中断允许位
}
/*******************************************************************************
* 函 数 名 : UART_Send_Byte
* 函数功能 : 发送一个字节的数据
* 输 入 : unsigned char dat
* 输 出 : 无
*******************************************************************************/
void UART_Send_Byte(unsigned char dat)
{
ES=0;
SBUF = dat;
while(!TI);
TI=0;
ES=1;
}
/*******************************************************************************
* 函 数 名 : UART_Send_String
* 函数功能 : 发送字符串
* 输 入 : char *s
* 输 出 : 无
*******************************************************************************/
void UART_Send_String(char *s)
{
while (*s){ //检测字符串结束标志
UART_Send_Byte(*s++);
}
}
/*******************************************************************************
* 函 数 名 : UART1_Routine
* 函数功能 : 串口1中断
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void UART1_Routine(void) interrupt 4
{
unsigned char i = 0,temp;
if (RI){
RI=0;
temp = SBUF;
UAR[i]=temp; //接收到的数据存入数组UAR中
i++;
}
UART_Send_String(UAR);
}
uart.h代码
#ifndef _UART_H_
#define _UART_H_
#include <reg52.h>
sfr UART_P_SW2 = 0XBA;
sfr UART_P_SW1 = 0XA2;
sfr AUXR = 0X8E;
sfr P3M0 = 0xB2;
sfr P3M1 = 0xB1;
#define P3PU (*(unsigned char volatile xdata *)0xFE13)
#define FOSC 11059200UL //系统时钟
#define BAUD 115200 //波特率设定115200,也可设置9600
extern char UAR[20]; //全局量
void Init_UART();
void UART_Send_Byte(unsigned char dat);
void UART_Send_String(char *s);
#endif
主函数代码:void main(void)
{
//Init_PWM();
Init_UART();
//UART_Send_String("Welcome to Uart");
//Set_PWM1_Value(0x100);
//Start_PWM();
while(1)
{
UART_Send_Byte('1');
delay(50000);
}
}
|