×
单片机 > 单片机程序设计 > 详情

STC15F2系列单片机UART1使用定时器1做波特率发生器

发布时间:2020-05-18 发布时间:
|

#include

#include "main.h"

#include "intrins.h"


//使用T2定时器2 ,控制串口1 波特率


#define  FOSC 18432000L  //系统频率

#define  BAUD 9600     //串口1波特率

#define  TM2  (65536-(FOSC/4/BAUD))


#define NONE_PARITY      0   //无校验

#define ODD_PARITY       1   //奇校验

#define EVEN_PARITY      2   //偶校验

#define MARSK_PARITY     3   //标记校验

#define SPACE_PARITY     4   //空白校验 

#define PARITYBIT NONE_PARITY   //定义校验位


bit busy1 = 0;

BYTE c_data;

BYTE s_data;



void uart1_SendString(char *s);

void uart1_SendData(BYTE dat);


void main(void)

{

        SCON = 0x50;  //八位可变波特率

        T2L   = TM2;

        T2H   = TM2>>8;        

        AUXR  = AUXR_T2R;

        AUXR |= AUXR_T2x12

        AUXR |= AUXR_S1ST2;//使用定时器2 作为串口1的波特率发生器

        ES = 1;

    EA = 1;

        uart1_SendString("rn stc15f2k08s uart1 test rn");

        while(1);

}

/*********************************

串口1应用

**********************************/

/*UART1 中断服务程序*/

void uart1_ISR() interrupt 4 using 1

{

        uchar r_data;

        if(RI)

        {

                RI = 0;

                r_data  = SBUF;

                c_data = RB8;

                uart1_SendData(r_data);

                

        }

        if(TI)

        {

                TI = 0;   //清除TI位

                busy1 = 0; //清忙标志

        }

}


void uart1_SendData(BYTE dat)

{

        while(busy1); //等待前面的数据发送完成

        ACC = dat;   // 获取校验位

        if(P)

        {

        #if (PARITYBIT == ODD_PARITY)

                {

                        TB8 = 0;  //设置校验位为0

                }

        #elif (PARITYBIT == EVEN_PARITY)

                {

                        TB8 = 1;  //设置校验位为1

                }

        #endif

        }

        else

        {

        #if (PARITYBIT == ODD_PARITY)

                {

                        TB8 = 1;  //设置校验位为1

                }

        #elif (PARITYBIT == EVEN_PARITY)

                {

                        TB8 = 0;  //设置校验位为0

                }

        #endif

        }

        busy1 = 1;

        SBUF = ACC;  //写数据到UART 数据寄存器

}

void uart1_SendString(char *s)

{

        while(*s)                  //检测字符串结束标识

        { 

                uart1_SendData(*s++); //发送当前字符

        }

}




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址