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

📄 uart2.c

📁 51单片机普通I/O口
💻 C
字号:
/****************************************************************************************
*文件:UART2.C
*功能:利用LPC900普通I/O口实现模拟串口,占用定时器1
*日期:05/07/18
*****************************************************************************************/
#include "Reg935.h"
#include "uart2.h"
#define uchar unsigned char
#define BRH  0xfd  //0xfe 0x95//波特率为9600,使用内部RC振荡
#define BRL  0x15 //0xfd 0x15 //波特率为4800,使用内部RC振荡
//////////////////////////////////////////////////////////////////////////////////////////
uchar num;
uchar uart2s;           //ie. SBUF2
unsigned char uart2f=0; //0:disable 1:read 2:send 3: read completed 4:send completed
//****************************************************************************************
void timer1_isr(void) interrupt 3
{
  TH1=BRH;
  TL1=BRL;
  if(uart2f==2) //每个IF大概运行32周期,从而可以计算出BRH和BRL
   {
    if(num>1)
      {
       if(uart2s&(0x01<<(9-num)))
         {uart2txd=1;}
       else
         {uart2txd=0;}
       num--;
      }
    else if(num==1)
         {
      uart2txd=1;
      //uart2f=4;
       num--;
      // num=9;
      }
    else {TR1=0;uart2f=4;}
   }
  if(uart2f==1)
    {
     if(num>1)
      {
       if(uart2rxd)
         {uart2s=uart2s|(0x01<<(9-num));}
       else
         {uart2s=uart2s&~(0x01<<(9-num));}
       num--;
      }
     // else if(num==1){if(uart2rxd)num--;
     //                 }
      else
      {
       uart2f=3;
       TR1=0;
       }
   }
}
//---------------------------------------------------------------------------------------
//uart2send: 向模拟串口发送一个字符
//入口参数: s 被发送字符
//出口参数: 无
//---------------------------------------------------------------------------------------
void uart2send(uchar s)
{
  TH1=BRH;
  TL1=BRL;
  num=9;
  uart2s=s;
  uart2f=2;
  uart2txd=0;
  TR1=1;
  while(uart2f!=4);
}
//---------------------------------------------------------------------------------------
//uart2read: 向模拟串口接收一个字符
//入口参数 无
//出口参数 s 被发送字符
//---------------------------------------------------------------------------------------
unsigned char uart2read(void)
{
  while(uart2rxd);
  num=9;
  uart2f=1;
  TH1=BRH-1;
  TL1=BRL;//-0x15;
  TR1=1;
  while(uart2f!=3);
  while(!uart2rxd);
  return(uart2s);
}
//---------------------------------------------------------------------------------------

⌨️ 快捷键说明

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