我在EasyArm2131上做了一个测速程序(如下),在p0.22和p0.28未接任何信号的情况下(只接一小段导线),显示屏上居然有转速显示。请问是什么原因,谢谢!<br /><br />/********************速度测量********************/<br /><br />//volatile uint32 engine=0;<br />//volatile uint32 cylinder=0;<br />//volatile uint32 zayu=0;<br />int engine=0;<br />int cylinder=0;<br />int zayu=0;<br /><br /><br />void __irq IRQ_timer0() <br />{<br /><br />if((T0IR&(0x01<<4))==(0x01<<4)) //发动机脉冲计数pat0.0,p0.22<br /> {<br /> T0IR=0x01<<4;<br /> engine++;<br /> //VICVectAddr=0x00;<br /> }<br /> <br /> if((T0IR&(0x01<<5))==(0x01<<5)) //滚筒速度脉冲计数pat0.1,p0.27<br /> {<br /> T0IR=0x01<<5;<br /> cylinder++;<br /> //VICVectAddr=0x00;<br /> }<br /> <br /> if((T0IR&(0x01<<6))==(0x01<<6)) //xingzou速度脉冲计数 pat0.2,p0.28<br /> {<br /> T0IR=0x01<<6;<br /> zayu++;<br /> //VICVectAddr=0x00;<br /> } <br /><br /> <br /><br />VICVectAddr=0x00;<br />} <br /><br /><br /><br /><br /> <br />/********************压力测量,速度控制********************/ <br /><br />void __irq IRQ_timer1() <br />{<br />uint32 V_engine,V_cylinder,V_zayu; <br /> char str1[4],str2[4],str3[4];<br /><br /><br /><br /><br />V_engine=engine*15;<br /><br />V_cylinder=cylinder*15;<br /><br />V_zayu=zayu*15;<br /><br /> <br /> sprintf(str1, "%4d",V_engine);//速度显示<br /> lcd_COM(0x85);<br /> lcd_seri(str1);<br /> <br /> sprintf(str2, "%4d",V_cylinder);<br /> lcd_COM(0x94);<br /> lcd_seri(str2);<br /> <br /> sprintf(str3, "%4d",V_zayu);<br /> lcd_COM(0x8d);<br /> lcd_seri(str3);<br /> <br />engine=0;<br />cylinder=0;<br /> zayu=0; <br />T1IR=0x01; <br /> <br /> <br />VICVectAddr=0x00;<br />} <br /> <br /><br />/******************************主程序*********************************************** <br />**<br />**<br />*************************************************************************************/<br /><br />int main (void)<br />{<br /><br />IO0CLR=rst;<br /> DelayNS(100);<br /> IO0SET=rst;<br /> DelayNS(100);<br />PINSEL0=(PINSEL0&(~0x0f))|(0x05);<br />PINSEL0=PINSEL0&(~0x0f<<12);<br />PINSEL2=PINSEL2&(~(0x08)); //设置lcd数据线p1.16-1.23<br /><br />IO1DIR=lcds8; //设置数据线输出方向<br />IO0DIR=IO0DIR|(0x0f<<12); <br /><br />PINSEL1=(PINSEL1&0xfffff000)|(0xfd5);/*设置键盘喂入量捕获定时期1*/<br />PINSEL1=(PINSEL1&(~(0x03<<12)))|(0x01<<13);/*设置p0.22位发动机速度捕获0*/<br />PINSEL1=(PINSEL1&(~(0x03<<22)))|(0x01<<23);/*设置p0.27滚筒速度捕获1*/<br />PINSEL1=(PINSEL1&(~(0x03<<24)))|(0x01<<25);/*设置p0.28.,行走于速度捕获2,*/<br />//PINSEL1=(PINSEL1&0xfff7ffff)|(0x08<<18);/*设置p0.25压力AD转换4*/<br />PINSEL1=(PINSEL1&(~(0x03<<28)))|(0x01<<28); //设置p0.30压力AD转换4 <br /> IO1SET=lcds8;/*置位p0.4~p0.12*/<br />IO1SET=lcds8;<br />short_delay (1);/*延时*/<br />lcd_Imim();/*初始化*/<br />lcd_clr();<br />Hanz1();<br />Hanz2();<br />Hanz3();<br /><br /><br /> <br /> <br />T0PR = 19;<br />T1PR = 1;<br /> T0CCR =(1<<0)| // 设置timer0 三路捕获,上升、下降沿,允许产生中断<br /> (1<<1)|<br /> (1<<2)|<br /> (1<<3)|<br /> (1<<4)|<br /> (1<<5)|<br /> (1<<6)|<br /> (1<<7)| <br /> (1<<8);<br /> <br /> <br /> <br /> <br /> T1MCR=(1<<0)|<br /> (1<<1);<br /> <br /> //timer1,1s 定时允许中断,算速度<br /> T1MR0=Fpclk;<br /> T0TC = 0;<br /> T0TCR = 0x03;<br /> T0TCR = 0x01; // 启动定时器<br /> <br /> T1TC = 0;<br /> T1TCR = 0x03; <br /> T1TCR = 0x01; <br /> IRQEnable(); // 使能IRQ中断<br /> // 设置Timer1中断 <br /> VICIntSelect = 0x00000000; // 设置所有的通道为IRQ中断<br /><br /> VICVectCntl1 = 0x20 | 5; // timer1分配到IRQ slot1,<br /> VICVectAddr1 = (uint32)IRQ_timer1;<br /> VICVectCntl0 = 0x20 | 4; // timer0分配到IRQ slot2,<br /> VICVectAddr0 = (uint32)IRQ_timer0;<br /> VICIntEnable = (1 << 4)|<br /> (1 << 5); <br /> <br /> <br /> <br /> while (1);<br /> <br /> return 0;<br />}<br />/*********************************************************************************************************<br />** End Of File<br />********************************************************************************************************/<br />
|