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

📄 serial.c

📁 51串口通讯程序
💻 C
字号:
#include <reg52.h>

unsigned char revbuf;//接收到的字符
unsigned char number;
unsigned code cash = '9';
unsigned char copyOK,re_finish;
//串口初始化
void initial()
{
   SCON=0x50;           //串口工作方式1,允许接收
   PCON=0x80;           //波特率翻倍
   TCON=0;              
   TMOD=0x26;           //T1用于串口波特率控制
   TL1=0xfa;            //初始化T1,波特率为9600(晶振11.0592M)
   TH1=0xfa;                    
   TR1=1;               //开定时器
   EA=1;                //开总中断
   ES=1;                //开串口中断
   copyOK=0;
   re_finish=0;
}


void  send(void)//向串口发送字符串
 { 
   
   if(copyOK)  //串口准备好且缓冲区准备好
    { 
     REN = 0;               //发送过程中禁止接收数据
     copyOK = 0;            //清缓冲区准备好标志
     SBUF = cash;      //发送字符串首字符
     number = 0;            //置发送计数器
      }
   else
       return;              //没准备好则返回
  }
//串口中断处理函数_接收数据
void serial(void) interrupt 4//串口中断响应
{  
  if(RI)//为接收中断
     {      
	      RI=0;                                         //清接收中断标志
	      revbuf = SBUF; 								//读取串口缓冲区数据
		  revbuf=revbuf-'0';
		  re_finish=1;
	 }
  else
  { 
     TI=0;                   //为单个字符发送完中断
     if(!number)             //字符串发送完
     {
	   REN = 1;              //允许接收
     }
     else
	 {                       //字符串未发送完
        SBUF =  cash;   //发送下一字符
		number--;            //发送字符数减一
     }             
   }                              
}

main()
{
	 initial();
	 while(1)
	 {
	   if(re_finish)
	   {
	     re_finish=0;
		 switch(revbuf)
		 {
		 case 0:
		    P0=0xfe;
		 	break;
		 case 1:
		    P0=0xfd;
			break;
		 case 2:
		    P0=0xfb;
		 	break;
		 case 3:
		    P0=0xf7;
			break;
		 case 4:
		    P0=0xef;
		 	break;
		 case 5:
		    P0=0xdf;
			break;
		 case 6:
		    P0=0xbf;
		 	break;
		 case 7:
		    P0=0x7f;
			break;
		 default:
		    P0=0xff;
			break;
	     }
		 copyOK=1;
		 send();
	   }
	 }
}


















⌨️ 快捷键说明

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