uart.c文件
#include "uart.h"
void UartInit(void) //4800bps@11.0592MHz
{
PCON |= 0x80; //使能波特率倍速位SMOD
SCON = 0x50; //8位数据,可变波特率。使能接收
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xF4; //设定定时初值
TH1 = 0xF4; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
//配置串口中断
EA=1;
ES=1;
}
void UartSendByte(unsigned char byte)
{
SBUF=byte;
//检测是否发送完成(标志位)
while(TI==0);//发送完成会置1
TI=0;//需要手动软件复位
}
void UartSendString(unsigned char *string){
while(*string!='\0') //指针的数据没到最后一位一直执行循环体
{
UartSendByte(*string++); //发送指针指向的数据(字节byte)。指针自增,指向下一个数据
}
}
/*重写printf调用的putchar函数,重定向到串口输出*/
char putchar(char c){
//输出重定向到串口
UartSendByte(c);
return c; //返回给函数的调用者printf
}
uart.h
#ifndef __UART_H__
#define __UART_H__
#include <REGX52.H>
void UartInit(void); //4800bps@11.0592MHz
void UartSendByte(unsigned char byte);
void UartSendString(unsigned char *string);
#endif
main.c文件
#include <REGX52.H>
#include <stdio.h>
//自定义的源文件
#include "uart.h"
void main()
{
/* 串口初始化 */
UartInit();
while(1)
{
/* 利用keil内置的宏来获取编译时的日期和时间,这两个宏是字符串形式,可以直接打印 */
printf("Line:%s\r\n",__LINE__); //行号
printf("File:%s\r\n",__FILE__); //文件名
printf("Complie Data:%s\r\n",__DATE__); //日期
printf("Complie Time:%s\r\n", __TIME__); //时间
}
}
结果:显示打印信息(STC-ISP)