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

📄 1.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;
sbit  forward=P3^4;
sbit  bankward=P3^5;
sbit  left=P3^6;
sbit  right=P3^7;

unsigned char i,flag;

unsigned int receivesbuf[]={0};
sbit  left1=P0^4;
sbit  left2=P0^5;
sbit  right1=P0^6;
sbit  right2=P0^7;


/*********************************
函数名:sel_bps(select bps)
功能:设置串口波特率
sel为选择通讯速率:
  0=1200,1=2400,2=4800,3=9600,4=19.2k
作者:于振南
日期:06.02.25
*********************************/

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


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;

}

/*********************************
函数名:sio_int(sio interrupt)
功能:中断方式接收串口数据   把收到的一个字节放在z中
通讯有关参数初始化
作者:于振南
日期:06.02.25
*********************************/
/*void  sio_int() interrupt 4 using 2
{
      ES=0;
      if(RI)        // RI==1 
      {  z=SBUF;
	 RI=0;
      }
      ES=1;
}*/
/*void  sio_int() interrupt 4 using 2
{
	  i++;
      ES=0;
      if(RI)        // RI==1 
      {  
     receivesbuf[i]=SBUF;
	 RI=0;
      }
      ES=1;
	if(i==4)
		{
			i=0;
			ES=0;
			flag=1;
		}
	if(flag==1)
			{
				if(receivesbuf[1]==0xf0&&receivesbuf[2]==0x0f)
					{
						
						if(receivesbuf[3]==0x01)		//前进
							{
								left1=1;		//左轮
								left2=0;
								right1=1;		//右轮
								right2=0;
							}
						if(receivesbuf[3]==0x02)		//后退
							{
								left1=0;		//左轮
								left2=1;
								right1=0;		//右轮
								right2=1;
							}	
						if(receivesbuf[3]==0x04)		//左转
							{
								left1=1;		//左轮
								left2=0;
								right1=0;		//右轮
								right2=0;
							}
						if(receivesbuf[3]==0x08)		//右转
							{
								left1=0;		//左轮
								left2=0;
								right1=1;		//右轮
								right2=0;								
							}						
			
					}
				flag=0;
				ES=1;
				}
}		 */

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



void main()
{
	tran_init();
	while(1)
	{
		P1=0xff;
		
	if(forward==0)
		{
			delay5ms();
			if(forward==0 )					//前进
			{
				P1=0x01;
     			/*trans(0x10);
				delay5ms();
				trans(0x0f);
				delay5ms();*/	
				trans(0x01);
				delay5ms();	
			}
		}
		if(bankward==0)
		{
			delay5ms();
			if(bankward==0)					//后退
			{
				P1=0x02;
			/*	trans(0xf0);
				delay5ms();
				trans(0x0f);
				delay5ms();	*/
				trans(0x02);
				delay5ms();
			}
		 }		
		if(left==0)
		{
			delay5ms();
			if(left==0)					//左转
			{
				P1=0x04;
			/*	trans(0xf0);
					delay5ms();
				trans(0x0f);
				delay5ms();	*/		
				trans(0x04);
				delay5ms();	
			}
		 }		 
		if(right==0)
		{
			delay5ms();
			if(right==0)					//右转
			{
				P1=0x08;
			/*	trans(0xf0);
					delay5ms();
				trans(0x0f);
				delay5ms();	*/		
				trans(0x08);
				delay5ms();
			}
		 }	
	}
}


⌨️ 快捷键说明

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