89C52單片機之串口

#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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章