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

📄 uart.c

📁 STC89C52单片机平台上实现用外线通讯并能与PC实现USB的通讯
💻 C
字号:
/******************************************************************
   本程序只供学习使用,未经作者许可,不得用于其它任何用途
      我的邮箱:computer-lov@tom.com
        欢迎访问我的blog:  http://computer00.21ic.org

UART.C  file

作者:Computer-lov
建立日期: 2007.03.20
修改日期: 2007.03.22
版本:V1.1
版权所有,盗版必究。
Copyright(C) Computer-lov 2007-2017
All rights reserved            
*******************************************************************/

#include <at89x52.H>

#include "UART.h"
#include "my_type.h"

uint8 Sending;


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


//*******************************   串口中断处理        ***********************************
void SerialPort(void) interrupt 4
{
 if(RI)    //收到数据
  {
   RI=0;                     //清中断请求
  }
 else  //发送完一字节数据
  {
   TI=0;
   Sending=0;               //清正在发送标志
  }
}
//*****************************************************************************************

//*****************************************************************************************
void SendToComport(unsigned char d)       //往串口发送一字节数据
{
 Sending=1;
 SBUF=d;
 while(Sending);
}
//*****************************************************************************************

//*****************************************************************************************
//发送一个字符串
void prints(uint8 * pd,uint8 line_feed)
{
 while((*pd)!='\0')
  {
   SendToComport(*pd);
   pd++;
  }
 if(line_feed)
 {
  SendToComport(13);
  SendToComport(10);
 }
}
//****************************************************************************************



//*****************************************************************************************
void PrintLongInt(uint32 x)  //将整数转按十进制字符串发送
{
 int8 i;
 uint8 display_buffer[10];
 display_buffer[10]=0;
 for(i=9;i>=0;i--)
  {
   display_buffer[i]='0'+x%10;
   x/=10;
  }
 for(i=0;i<9;i++)
  {
   if(display_buffer[i]!='0')break;
  }
 for(;i<10;i++)SendToComport(display_buffer[i]);
}
//*****************************************************************************************


code uint8 HexTable[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
//*****************************************************************************************
/*
void PrintLongIntHex(uint32 x)  //将整数按十六进制发送
{
 uint8 i;
 uint8 display_buffer[11];
 display_buffer[10]=0;
 display_buffer[0]='0';
 display_buffer[1]='x';
 for(i=9;i>=2;i--)
  {
   display_buffer[i]=HexTable[(x&0xf)];
   x>>=4;
  }
 prints(display_buffer,0);
}
*/
//*****************************************************************************************


//*****************************************************************************************
void Printc(uint8 x)  //发送一个byte的数据
{
 Sending=1;
 SBUF=x;
 while(Sending);
}
//*****************************************************************************************


//*****************************************************************************************
void PrintHex(uint8 x)  //以HEX格式发送一个byte的数据
{
 Printc('0');
 Printc('x');
 Printc(HexTable[x>>4]);
 Printc(HexTable[x&0xf]);
 Printc(' ');
}
//*****************************************************************************************

⌨️ 快捷键说明

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