#include <reg52.h>
#include <stdio.h>
#define uint unsigned int
#define uchar unsigned char
uchar flag = 0;
uchar buf = 0x55; //u
void init_T1(); //定時器1
void uart_init(); //串口
void UART1_SendData(char dat); //發送數據
void UART1_SendString(char *s); //發送字符串
char putchar(char c); //重寫putchar
/************主函數******************/
void main()
{
init_T1();
uart_init();
UART1_SendString("Hello World!\r\n");
printf("printf Test!\r\n");
printf("Complie Time:%s\r\n", __TIME__);
while(1)
{
if(flag)
{
ES = 0;
SBUF = buf;
while(TI ==1)
TI = 0;
ES = 1;
flag = 0;
}
}
}
/***********串口中斷***************/
void UART_isr(void) interrupt 4 using 0
{
TI = 1;
buf = SBUF;
while(!RI);
flag = 1;
TI = 0;
RI = 0;
}
/***************定時器1初始化****************/
void init_T1()
{
TMOD = 0x20;
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
}
/****************串口初始化*************/
void uart_init()
{
SM0 = 0;
SM1 = 1;
REN = 1;
EA = 1;
ES = 1;
}
/*************UART1 發送串口數據**********/
void UART1_SendData(char dat)
{
ES=0; //關串口中斷
SBUF=dat;
while(TI!=1); //等待發送成功
TI=0; //清除發送中斷標誌
ES=1; //開串口中斷
}
/***********UART1 發送字符串*************/
void UART1_SendString(char *s)
{
while(*s)//檢測字符串結束符
{
UART1_SendData(*s++);//發送當前字符
}
}
/***********重寫putchar函數*************/
char putchar(char c) //printf函數會調用putchar()
{
UART1_SendData(c);
return c;
}
89C52單片機之串口
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.