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

📄 machine_control.c

📁 此为一个单片机多机通信的程序 有两个从机一个主机 从机1负责采集温度并上传给主机 从机2控制电机转动
💻 C
字号:
  #include "reg52.h"
  #include "absacc.h"
  
  
  #define uchar unsigned char
  #define SLAVE 0x01 

 // sbit light_1=P1^O;
  //sbit light_2=P1^2;
  sbit key_1=P1^0;
  sbit key_2=P1^2;
  uchar code step1_abcd[4]={0x1f,0x2f,0x4f,0x8f};
  uchar code step2_abcd[4]={0x8f,0x4f,0x2f,0x1f};
  
  bit flag=1;
  int ptemp=500;
  uchar p=0;
  uchar q=1,ready;
  

 

 
  

  

	void step_control()
	{
	  if(q==0)
	  {
	  P0=step1_abcd[p];
	  if(p>=3)
	    p=0;
		else 
		   p++;
		   }
	   else  if(q==1)
	   {
	     P0=step2_abcd[p];
	     if(p>=3)
	      p=0;
	    	else 
		     p++;
			 }
       else  if(q==3);

	  
   	}



	void time_delay(int t)
 { 
   int i;
   while(t--)
     for(i=0;i<200;i++)
	        {;;;;;
			   }

 }


 void reachmassege()interrupt 4 using 1
 {  
    uchar a;
    while(RI!=1);RI=0;
	ES=0;
    if(flag)
    {
	a=SBUF;
	if(a!=0x01){key_1=~key_1;goto reti;}            //判断地址
    
    flag=0;
	SM2=0;
    SBUF=SLAVE;                        //回送地址
	while(TI!=1);TI=0;                 //等待发完
    while(RI!=1);RI=0;                 //等待接受命令
    }
	if(SBUF==0xff){key_2=~key_2;SM2=1;ES=1;flag=1;goto reti;} 
    a=SBUF;                             //若不是复位则接受命令
                                
	if(a==0x00)
	 {
	   if(ready==1)SBUF=0x01;
	   else SBUF=0x00;
	   while(TI!=1);TI=0;
       while(RI!=1);RI=0;                //命令控制
	   if(SBUF==0xff){SM2=1;ES=1;flag=1;goto reti;} 
	    else if(SBUF==0x01)
	       q=0;
		else if(SBUF==0x02)
	       q=1;
		else if(SBUF==0x03)
	       q=3;
	  }
	flag=0;   
   reti:
	ES=1;
    
}

    
   void main()
 { flag=1;
   TMOD=0x20;
   TL1=0xfa;
   TH1=0xfa;
   PCON=0x00;
   TR1=1;
   SCON=0xf0;
   ES=1;
   EA=1;
   key_1=1;
   key_2=0;
   ready=0x01;	
    while(1)
    {time_delay(30);
    step_control();
	//key_1=~key_1;
	 }
  }

⌨️ 快捷键说明

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