51单片机串口底层

#include "serial_port.h"
 

void uart_init(void)
{
    SCON= 0x50;       //开串口1,8位数据,可变波特率
    AUXR |= 0x01;          //选择定时器2为波特率发生器
    AUXR |= 0x04;     //定时器选择1T模式
    T2L = 0xc7;            //
    T2H = 0xfe;          //
  AUXR |= 0x10;     // 启动定时器2,定时器2开始计时,防止与定时器0,1冲突写法
    ES = 1;           //打开串口中断
    EA = 1;           //打开总中断
}

void uart_sendbyte(unsigned char dat)  //字节发送函数
{
    SBUF=dat;         //把数据传给SBUF
    while(TI==0);     //等待发送
    TI=0;                  //结束后手动清零
}

void uart_send_string(unsigned char *dat)//字符串发送函数
{
    while(*dat != '\0')       //当字符不为空时继续发送
     uart_sendbyte(*dat++);   // 发送一个字符指针加一,指向下一个字符
}

H文件

#include "STC15F2K60S2.h"


void uart_init(void);
void uart_sendbyte(unsigned char byte);
void uart_send_string(unsigned char *dat);

main函数

#include "serial_port.h"
 

    void main()
    {

    Timer0_Init();                     //
 

    uart_init();                        //

     while(1) 

{

urat_proc();

}

}

  void Time_0 (void) interrupt 1

{

 TL0 = 0x18;    

 TH0 = 0xFC;

        if(++uart_slow_down==500)
        {uart_slow_down = 0;}

}

    void uart_routine() interrupt 4               //串口中断函数
    {
      if(RI==1)
        { 
      uart_recv[uart_recv_index] = SBUF;
          uart_recv_index++;
            RI=0;                    
        }    
    }

  void urat_proc()             //串口处理函数(接收)

{

    if(uart_slow_down) return;
     uart_slow_down = 1;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值