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

📄 2.c

📁 用c语言串口接受数据的功能 在单片机中很实用!
💻 C
字号:
#include <reg52.h> 

#define T1MS_1200bps   0xD8;     /* (e8,-24,SMOD=0) @4800bps  pcon&=0x7f @11.0592MHz*/
#define T1MS_2400bps   0xEC;     /* (f4,-12,SMOD=0) @4800bps  pcon&=0x7f */
#define T1MS_4800bps   0xfa;     /* (fa, -6,SMOD=0) @4800bps  pcon&=0x7f */
#define T1MS_9600bps   0xfd;     /* (fd, -3,SMOD=0) @9600bps  pcon&=0x7f */
#define T1MS_19k2bps   0xfd;     /* (fd, -3,SMOD=1) @19.2kbps pcon|=0x80 */

unsigned char z,i,flag,a;
unsigned int receivesbuf[]={0};
sbit  left1=P0^4;
sbit  left2=P0^5;
sbit  right1=P0^6;
sbit  right2=P0^7;

//延时 
void delay5ms(void) 
{ 
unsigned int TempCyc = 1000; 
while(TempCyc--); 
} 


/*********************************
函数名:sel_bps(select bps)
功能:设置串口波特率
sel为选择通讯速率:
  0=1200,1=2400,2=4800,3=9600,4=19.2k
作者:于振南
日期:06.02.25
*********************************/
void sel_bps(unsigned char sel)
{
     switch(sel)
     {
        case 0:PCON&=0x7f;
               TH1=T1MS_1200bps;   /* T1 use sio */
               TL1=T1MS_1200bps;
               break;
        case 1:PCON&=0x7f;
               TH1=T1MS_2400bps;   /* T1 use sio */
               TL1=T1MS_2400bps;
               break;
        case 2:PCON&=0x7f;
               TH1=T1MS_4800bps;   /* T1 use sio */
               TL1=T1MS_4800bps;
               break;
        case 3:PCON&=0x7f;
               TH1=T1MS_9600bps;   /* T1 use sio */
               TL1=T1MS_9600bps;
               break;
        case 4:PCON|=0x80;
               TH1=0xfd;   /* T1 use sio */
               TL1=0xfd;
               break;
     }

}

/*********************************
函数名:tran_init()(tranmit initialize)
功能:串口初始化
     通讯有关参数初始化
作者:于振南
日期:06.02.25
包含子函数:sel_bps
*********************************/
void tran_init()        /* 通讯有关参数初始化 */
{
    sel_bps(3); /* 选择通讯速率:0=1200,1=2400,2=4800,3=9600,4=19.2k */
    /* T1 use sio */
    TMOD=0x21;  /* T1=MODE2,sio; T0=MODE1,16bit,use time */
    PS=1;       /* SIO int high  优先级 */
    EA=1;
    ET1=0;

    SM0=0;
    SM1=1;      /* SM0=0 SM1=1,mode1,10bit          */
    SM2=0;      /* data int,无校验(TB8=bit_duble偶) */

    TR1=1;
    REN=1;
    RI=0;
    TI=0;
    ES=1;
	SBUF=0x00;

}

/*********************************
函数名:sio_int(sio interrupt)
功能:中断方式接收串口数据   把收到的一个字节放在z中
通讯有关参数初始化
作者:于振南
日期:06.02.25
*********************************/
void  sio_int() interrupt 4 using 2
{
	  i++;
      ES=0;
	  if(RI)
	  {
	  	a=SBUF;
		RI=0;
		flag=1;
	  }
     /* if(RI)        // RI==1 
      {  
     receivesbuf[i]=SBUF;
	 RI=0;
      }	 */
     // ES=1;
	/*if(i==4)
		{
			i=0;
			ES=0;
			flag=1;
		} */
}

/*void trans(unsigned char dat)
{
 SBUF=dat;
 while(!TI);
 TI=0;
}*/



void main()
{
	tran_init();
	while(1)
	{
		if(flag==1)
			{
				//if(receivesbuf[1]==0xf0&&receivesbuf[2]==0x0f)
				//	{
						
						if(a/*receivesbuf[3]*/==0x01)		//前进
							{
								left1=1;		//左轮
								left2=0;
								right1=1;		//右轮
								right2=0;
							}
						else if(a/*receivesbuf[3]*/==0x02)		//后退
							{
								left1=0;		//左轮
								left2=1;
								right1=0;		//右轮
								right2=1;
							}	
						else if(a/*receivesbuf[3]*/==0x04)		//左转
							{
								left1=1;		//左轮
								left2=0;
								right1=0;		//右轮
								right2=0;
							}
						else if(a/*receivesbuf[3]*/==0x08)		//右转
							{
								left1=0;		//左轮
								left2=0;
								right1=1;		//右轮
								right2=0;								
							}
						else
							{
								P0=0x00;
							}						
			
					}
				flag=0;
				ES=1;
		//	}
	}
}

⌨️ 快捷键说明

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