Пример #1
0
/*********************************
*            主函数
**********************************/
void main()
{ 
    //uchar i;
	Init_IO();                                    //I/O口初始化,
	Init_MCU();                                   //主函数初始化,T0定时器工作在方式1初始化,显示"请稍等,初始化中",GATE=0,
	Init_RAM();                                   //位变量初始化
	Init_Para();                                  //参数初始化,初始化参数,从IIC读取阈值等信息赋予给参量
	Init_Buf();									//并口通讯数组初始化
//	Select_Mast();                                //判断主从机	
	Init_Time0();	                             //开启定时器0。定时器0初始化,工作在方式一,定时初值:H:0xDC,L:0x00;中断计数初始化?定时5ms,NumT0=0;
    Lcd_Clear();								//LCD清屏
	Lcd_Start();								//显示"清华大学/n核能与新能源技术研究院"
	EX0=1;                                        //只允许外部0中断,中断0为键盘
	IT0=1;                                        //外部中断0 
	while(1)
	{  	
//	   BackUp_Display();	
	   Select_Mast();                                //判断主从机,写入主从机标志Flag_Mast=1(主机)0(从机)
	   key_function(); 								//按键功能,在while循环中不断检测按键标志,按键标志由按键外部中断来更改
	   if(Flag_Tim0)	                         //8253计数定时结束时,读取探头的计数,刚开始Flag_Tim0=0,仅当Flag8253Counting计数定时标识为1,且计数器中断次数大于设定的中断次数时,Flag_timo才会等于1
	    {										//Flag_Tim0为计数器结束标志,初始为0,开机打开定时器中断后,定时器5ms中断一次,检查Flag_Tim0一次,为一表示计数器计时结束
			Flag_Tim0 = 0;		                 //定时标志清0
			Flag_Warn = 0;		                 //报警标志清0
			GetAndDisdata(); 	                 //从8253的锁存器得到测量计数器结果,存入至buf数组
			ShowData();                          //显示测量数据 
			shortdelay(1000);	          		//
	        Transfer();                          //并行传输数据
//			bakeup_conv_data();           
			Init_8253();   						//初始化8253
			                                      //定时结束时,立刻又开始初始化进行计数
	   }
	    if(Flag_Tim0 == 0)                        //开启8253计数过程中,处理报警中断,报警有中断吗?
       {
			if(Flag_Warn_Flash == 1)                   //主机LED指示灯闪烁间隔定时,Flag_Warn_Flash为LED灯闪烁标志
			{
				Flag_Warn_Flash = 0;
	            Led_Flash();
			}
			if((Flag_Warn_Led==1) && (PCOLSIG==0))      //屏幕上红灯闪烁间隔定时,程序中没有找到PCOLSIG=0的程序段
			{	
				Flag_Warn_Led = 0;
				RedLed_Flash();							//灯闪烁
			 } 
	    }
	}             
}
Пример #2
0
int TIM1_UP_IRQHandler(void)  
{
	static int SysTime = 0;
	if(TIM1->SR&0X0001)//5ms定时中断
	{   
		  TIM1->SR&=~(1<<0);                                       //===清除定时器1中断标志位		 
		  Flag_Target=!Flag_Target;
		  if(Flag_Target==1)                                       //5ms读取一次陀螺仪和加速度计的值,更高的采样频率可以改善卡尔曼滤波和互补滤波的效果
			{
			Get_Angle(Way_Angle);                                    //===更新姿态	
			return 0;	
			}                                                        //10ms控制一次,为了保证M法测速的时间基准,首先读取编码器数据
		//	Encoder_Left=Read_Encoder(2);                           //===读取编码器的值,
		//	Encoder_Right=Read_Encoder(3);                           //===读取编码器的值
	  	Get_Angle(Way_Angle);                                    //===更新姿态	
  		Led_Flash(100);                                          //===LED闪烁;指示单片机正常运行	
			Key();                                                   //===扫描按键状态 单击双击可以改变小车运行状态
 	//		Balance_Pwm =balance(Angle_Balance,Gyro_Balance);        //===平衡PID控制	
	//	  Velocity_Pwm=velocity(Encoder_Left,Encoder_Right);       //===速度环PID控制	 记住,速度反馈是正反馈,就是小车快的时候要慢下来就需要再跑快一点
 	//    Turn_Pwm    =turn(Encoder_Left,Encoder_Right,Gyro_Turn); //===转向环PID控制     
 	//	  Moto1=Balance_Pwm+Velocity_Pwm+Turn_Pwm;                 //===计算左轮电机最终PWM
 	//  	Moto2=Balance_Pwm+Velocity_Pwm-Turn_Pwm;                 //===计算右轮电机最终PWM
   		SysTime += 10;
		//	Moto1 = PWMOut(waveOut( 0.5, 1, 0,  0, SysTime) );
		//	Moto2 = PWMOut(waveOut( 0.5, 1, (30/180*PI),  0, SysTime));
			Moto1 = PWMOut(&motorCMD[0],SysTime);
			Moto2 = PWMOut(&motorCMD[1],SysTime);
			Moto3 = PWMOut(&motorCMD[2],SysTime);
			Moto4 = PWMOut(&motorCMD[3],SysTime);
		//	Xianfu_Pwm();                                            //===PWM限幅
  //    if(Turn_Off(Angle_Balance,Voltage)==0)   //===如果不存在异常
//printf("PWMOUT A : %d",Moto1 );	
//printf("PWMOUT B : %d",Moto2 );
		//	if(SysTime%1000==0)printf("PWMOUT A : %d",Moto1 );
 			Set_Pwm(Moto1,Moto2,Moto3,Moto4);                                    //===赋值给PWM寄存器  
	}       	
	 return 0;	  
}