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

📄 machine_austop.c

📁 基于H83664的智能小车控制系统 machine_austop.c、iodefine.h、intprg.c
💻 C
字号:
/***********************************************************************/
/*                                                                     */
/*  FILE        :machine_ctl2.c                                        */
/*  DATE        :Wed, May 10, 2006                                     */
/*  DESCRIPTION :Main Program                                          */
/*  CPU TYPE    :H8/3664F                                              */
/*                                                                     */
/*  This file is generated by Renesas Project Generator (Ver.3.1).     */
/*                                                                     */
/***********************************************************************/
                  
    // p80,p81------left wheel,  p82,p83------right wheel  
    //p14--front stop,p15--back stop, p16--left stop, p17--right stop             
    // p54----p57: wireless receive, P51为wkp1中断(wireless)输入
	//pb0----pb3: sensor
	//B--left,C--right,D--stop;A--back;AC--line;
#include <machine.h>
#include <header3664.h>
void control();
void delay();
void IRQ0SUB();
void IRQ1SUB();
void IRQ2SUB();
void IRQ3SUB();
void WKP1INT();
void TIMEINT();
unsigned char a,b,d=0,s1,s2,l=20,r=20,il=1,ir=1;
unsigned int i=1;
unsigned char ml[5]={0,1,3,2,0};
unsigned char mr[5]={0,4,12,8,0};
void main ( void )
{
	set_imask_ccr(1);
	IO.PMR5.BYTE=0x00;
	IO.PCR5=0x00;
	IO.PCR8=0xFF;
	a=IO.PDR5.BYTE&0xF0;
	b=a>>4;
	s1=IO.PDRB.BYTE&0XF0;
	s1=~(s1>>4);
	s1=s1&0X0F;
	s2=s1;

	IO.PMR5.BIT.WKP1=1;         //P51为wkp1(wireless)输入
	IEGR2.BIT.WPEG1=0;           //WKP1 down沿触发
	IWPR.BIT.IWPF1=0;            //清WKP1中断标志

	IO.PMR1.BYTE=0XF0;			//P14--P17为irq输入
	IEGR1.BYTE=0X00;			//irq down沿触发
	IRR1.BYTE=IRR1.BYTE&0XF0;		//清irq中断标志

	TA.TMA.BYTE=0X3B;           //0.03125 a interrupt
 	IRR1.BIT.IRRTA=0;			//清time A中断标志
 
	IENR1.BYTE=0XFF;			//允许所有中断
	set_imask_ccr(0);       	//允许外部中断
	for (;;)
	{
	 delay();
	 control(l,r);
	 i++;
	 if(i>(l*r))   i=1;
	 else ;

	}
}
void TIMEINT()
{
 IRR1.BIT.IRRTA=0;
 s1=IO.PDRB.BYTE&0XF0;
 s1=~(s1>>4);
 s1=s1&0X0F;
 if(s2==s1)   return ;
 else if(s1==4)  			{l=19;r=18;i=0;}
 else if(s1==12) 			{l=25;r=18;i=0;}
 else if(s1==8)  			{l=34;r=18;i=0;}
 else if(s1==2)  			{l=18;r=19;i=0;}
 else if(s1==3)  			{l=18;r=25;i=0;}
 else if(s1==1)  			{l=18;r=34;i=0;}
 else if((s1==0)&&(s2>=8))  		{l=40;r=18;i=0;}
 else if((s1==0)&&(s2<=2))  		{l=18;r=40;i=0;}
 else 						;
 s2=s1;
}
void WKP1INT()
{
 	 IWPR.BIT.IWPF1=0;       //清WKP1中断标志
	 a=IO.PDR5.BYTE&0xF0;
	 b=a>>4;
	 i=0;	
	 if(b==2)        		//left
	    {if(l<33) l++;
		 r=16;d=0;
		}
	 else if(b==8)       //right
	 	{if(r<33) r++;
		 l=16;d=0;
		}
	 else if(b==1)		  //stop
	    {d=2;}
     else if(b==4)		  //back
	    {l=20;r=20;d=1;}
	 else     			  //forth
	    {l=16;r=16;d=0;}
}
void IRQ0SUB()
{
 IRR1.BIT.IRRI0=0;          //clear flag
 d=2;                       //stop
}
void IRQ1SUB()
{
 IRR1.BIT.IRRI0=0;          //clear flag
 d=2;                       //stop
}
void IRQ2SUB()
{
 IRR1.BIT.IRRI0=0;          //clear flag
 d=2;                       //stop
}
void IRQ3SUB()
{
 IRR1.BIT.IRRI0=0;          //clear flag
 d=2;                       //stop
}

void control(int cl,int cr)
{	
	 if(d==0)					//forth
	 {if(i%cl==0)                //left wheel
	  {il++;
	   if(il==5) il=1;
	  }
	  if(i%cr==0)               //right wheel    
	  {ir++;
	   if(ir==5) ir=1;
	  }
	 }
	 else if(d==1)				//back
	 {if(i%cl==0)                //left wheel
	  {il--;
	   if(il==0) il=4;
	  }
	  if(i%cr==0)               //right wheel    
	  {ir--;
	   if(ir==0) ir=4;
	  }
	 }
	 else ;                     //stop
	 IO.PDR8.BYTE=ml[il]+mr[ir];
}
void delay()
{	long int t;
	for (t=0;  t<0x100;  t++);
}

⌨️ 快捷键说明

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