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

📄 serial_port.c

📁 本程序能够实现温度测量
💻 C
字号:
/*---------------------------------------------------
 serial_port.c file
 Creat by Computer-lov Date: 2005.7.19
 Last edit date:2005.11.17
 Copyright(C) 2005-2015 Computer-lov
 All rights reserved
 Welcome to my Blog: Http://computer00.21ic.org
-----------------------------------------------------*/

#include <serial_port.h>
#include <hardware.h>


unsigned char Sending;


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


unsigned char Buffer[10];
unsigned char OK;
unsigned char Cancel;


//*******************************   串口中断处理        ***********************************
void SerialPort(void) interrupt 4
{
 unsigned char i;
 if(RI)    //收到数据
  {
   RI=0;                     //清中断请求
   if(SBUF=='T')   //收到请求连接的命令
    {
     TI=0;
     SBUF='A';   //则返回A应答
     while(!TI);  //等待发送完毕
     TI=0;
    }
   if(SBUF=='C')    //接收到取消命令
    {
     TI=0;
     Cancel=1;    //取消置1
    }
   if(SBUF==0xAA)  //0xAA、0x55表示参数开始
    {
     while(!RI);  //等待下一个数据
     RI=0;
     if(SBUF==0x55)  //要连续收到0xAA和0x55后才能开始接收参数
      {
       for(i=0;i<10;i++)  //连续接收10个参数
        {
         while(!RI);
         RI=0;
         Buffer[i]=SBUF;  //数据保存在Buffer中
        }
       while(!RI);
       RI=0;
       if(SBUF==0x55)  //参数包以0x55结束,如果是,则表示参数接收正确
        {
         OK=1;  //则OK置1
         Cancel=0;
         return;
        }
       else  //若包尾错误,则OK置0
        {
         OK=0;
         return;
        }
      }
     else
      {
       return;
      }
    }
   return;
  }
 else  //发送完一字节数据
  {
   TI=0;
   Sending=0;               //清正在发送标志
  }
}
//*****************************************************************************************

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

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

//****************************************************************************************
//将16bit的数分成4个4bit的发送
void PrintHex(unsigned int x)
{
 SendToComport((x>>12)&0x0F);
 SendToComport((x>>8)&0x0F);
 SendToComport(((unsigned char)x>>4)&0x0F);
 SendToComport((unsigned char)x&0x0F);
}
//*****************************************************************************************


//*****************************************************************************************
/*
void PrintLongInt(unsigned long int x)  //将整数转按十进制字符串发送
{
 signed char i;
 unsigned char 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]);
}
*/
//*****************************************************************************************

⌨️ 快捷键说明

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