⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.c

📁 模仿ucos ii和RTX Tiny写的一个小操作系统
💻 C
字号:

#include <AT89X52.H>

#include "os_core.h"
#include "main.h"
#include "task_switch.h"
#include "sem.h"
#include "q.h"
#include "uart.h"


//////////////////////////////串口初始化函数,9600bps波特率,使用24M晶体///////////////
void uart_init(void)
{
 TMOD=(TMOD & 0x0F)|0x20;         //定时器1工作在模式2
 SCON=0x50;    //串口工作在模式1
 ES=0;         //禁止串行中断
 PCON|=0x80;    //串口波特率加倍
 TH1=0xF3;    
 TL1=0xF3;     //串口波特率为9600
 TR1=1;        //启动定时器1
 REN=1;        //允许接收  
}

//////////////////////////////// 通过串口发送1字节数据/////////////////////////////////
void sendbyte(uint8 byte) reentrant
{
   TI=0;              //清TI
   SBUF=byte;       //发送数据
   while(!TI);        //等待发送完毕
}

/////////////////////////////////从串口接收一字节数据///////////////////////////////////
uint8  getbyte(void)reentrant
{
 uint8 temp;          //临时变量
 while(1)                     //一直等待,直到接收到数据才返回
  {
   if(RI)                     //如果串口收到数据
    {                         //如果收到,则
     temp=SBUF;               //读回数据
     RI=0;                    //清RI
     return temp;             //返回数据
    }
    else
    {                       
      OSWait(K_TMO,1);          //延迟一个时钟节拍
    }
  }
}


////////////////////////////// 发送一个字符串 ///////////////////////////////////////////
void prints(unsigned char * s) reentrant
{
 uint8  i=0;  
  while(s[i]!=0)    //判断字符串是否结束
  {
   if(s[i]=='\n')
   s[i]='\r'; 
   TI=0;
   SBUF=s[i];      //发送一字节
   while(!TI);     //等待该发送完毕
   i++;            //移到下字节
   }
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -