📄 machine_austop.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 + -