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

📄 main.c

📁 基于摩托罗拉(现在飞思卡尔)系列MC68HC908单片机开发车辆ECU系统!
💻 C
📖 第 1 页 / 共 3 页
字号:
#include <hidef.h> /* for EnableInterrupts macro */
#include <MC68HC908GR16.h> /* include peripheral declarations */
#include "SPI.h"
#include "type.h"
#include "mirror.h"
#include "VSCI.h" 
#include "seatmotor.h"
#include"fault_diagnose.h"

#define buzzer PTC_PTC6
#define red_led    PTA_PTA7				 //红灯亮,指示控制器处于工作状态;红灯灭,控制器处于休眠状态
#define green_led  PTA_PTA6         //故障指示灯

#define speed_signal PTB_PTB5

#define  slide_forward_begun                 1
#define	 slide_forward				               2
#define	 slide_backward_begun								 3
#define	 slide_backward											 4
#define	 slide_stopped											 5
#define	 back_counterclockwise_begun				 6
#define	 back_counterclockwise							 7
#define	 back_clockwise_begun								 8
#define	 back_clockwise											 9
#define	 back_stopped												 10
#define	 front_up_begun											 11
#define	 front_up														 12
#define	 front_down_begun										 13
#define	 front_down													 14
#define	 front_stopped											 15
#define	 rear_up_begun											 16
#define	 rear_up														 17
#define	 rear_down_begun										 18
#define	 rear_down													 19
#define	 rear_stopped												 20
#define	 recall1														 21
#define	 recall2														 22
#define	 recall3														 23
#define	 handed_recall1											 24
#define	 handed_recall2											 25
#define	 handed_recall3											 26
#define	 memory1_wait3S											 27
#define	 memory1_ready											 28
#define	 memory2_wait3S											 29
#define	 memory2_ready											 30
#define	 memory3_wait3S											 31
#define	 memory3_ready											 32
#define left_mirror_left_begun               33 
#define left_mirror_left										 34
#define left_mirror_right_begun							 35
#define left_mirror_right										 36
#define left_mirror_up_begun								 37
#define left_mirror_up											 38
#define left_mirror_down_begun							 39
#define left_mirror_down										 40
#define left_mirror_stopped									 41
#define right_mirror_left_begun							 42
#define right_mirror_left										 43
#define right_mirror_right_begun						 44
#define right_mirror_right									 45
#define right_mirror_up_begun								 46
#define right_mirror_up											 47
#define right_mirror_down_begun							 48
#define right_mirror_down										 49
#define right_mirror_stopped								 50
#define reverse_recall                       51
#define wait_for_show                        52
#define show_error                           53

 
                                                                              
#define themflag 0x80
#define intflag 0x40
#define slide_forward_flag 0x01
#define slide_backward_flag 0x02
#define front_up_flag 0x04
#define front_down_flag 0x08
#define rear_up_flag 0x10
#define rear_down_flag 0x20
#define back_clockwise_flag 0x40
#define back_counterclockwise_flag 0x80
#define set 0x01
#define key1 0x02
#define key2 0x04
#define key3 0x08
#define door 0x10
#define autoflag 0x20
#define reverse 0x20
#define park 0x40
#define ignition 0x40
#define mirror_right  0x02
#define mirror_left 0x01
#define mirror_up 0x04
#define mirror_down 0x08
#define left_right_flag 0x10


Bool door_closed;
Bool ignition_on;
Bool auto_on;
Bool set_on;
Bool key1_on;
Bool key2_on;
Bool key3_on;
Bool slide_forward_on;
Bool slide_backward_on;
Bool back_counterclockwise_on;
Bool back_clockwise_on;
Bool front_up_on;
Bool front_down_on;
Bool rear_up_on;
Bool rear_down_on;
Bool reverse_on;
Bool park_on;
Bool right_mirror;
Bool mirror_right_on; 
Bool mirror_left_on;
Bool mirror_up_on;
Bool mirror_down_on;
UINT8 switchstatus[6];

UINT8 seat_status=0;


UINT8 timer_counter;

UINT8 left_mirror_x;
UINT8 left_mirror_y;
UINT8 right_mirror_x;
UINT8 right_mirror_y;


UINT8 left_mirror_recall1_x@0x0100=0x70;
UINT8 left_mirror_recall1_y@0x0101=0x70;
UINT8 right_mirror_recall1_x@0x0102=0x70;
UINT8 right_mirror_recall1_y@0x0103=0x70;
UINT8 left_mirror_recall2_x@0x0104=0x70;
UINT8 left_mirror_recall2_y@0x0105=0x70;
UINT8 right_mirror_recall2_x@0x0106=0x70;
UINT8 right_mirror_recall2_y@0x0107=0x70;
UINT8 left_mirror_recall3_x@0x0108=0x70;
UINT8 left_mirror_recall3_y@0x0109=0x70;
UINT8 right_mirror_recall3_x@0x010A=0x70;
UINT8 right_mirror_recall3_y@0x010B=0x70;
UINT8 left_mirror_reverse1_x@0x010C=0x70;
UINT8 left_mirror_reverse1_y@0x010D=0x70;
UINT8 right_mirror_reverse1_x@0x010E=0x70;
UINT8 right_mirror_reverse1_y@0x010F=0x70;
UINT8 left_mirror_reverse2_x@0x0110=0x70;
UINT8 left_mirror_reverse2_y@0x0111=0x70;
UINT8 right_mirror_reverse2_x@0x0112=0x70;
UINT8 right_mirror_reverse2_y@0x0113=0x70;
UINT8 left_mirror_reverse3_x@0x0114=0x70;
UINT8 left_mirror_reverse3_y@0x0115=0x70;
UINT8 right_mirror_reverse3_x@0x0116=0x70;
UINT8 right_mirror_reverse3_y@0x0117=0x70;
UINT8 mirror_position@0x0118=0;
UINT8 push_times@0x0119=0;


UINT8 tens_digit=0;
UINT8 number=0; 
UINT8 delay_time=0;
Bool inter_time_flag=0;
Bool tens_flag=0;						 																					




void main(void) {
Bool flag1=0;
Bool flag2=0;
Bool flag3=0;
Bool flag4=0;
Bool flag5=0;
Bool flag6=0;
Bool flag7=0;
Bool flag8=0;
Bool flag9=0;
Bool flag10=0;
Bool flag11=0;
Bool flag12=0;
Bool flag13=0;
Bool flag14=0;
Bool flag15=0;
Bool flag16=0;
Bool flag17=0;
Bool flag18=0;
Bool previous_state;
UINT16 slide_recall1_position;
UINT16 back_recall1_position;
UINT16 front_recall1_position;
UINT16 rear_recall1_position; 
UINT16 slide_recall2_position;
UINT16 back_recall2_position;
UINT16 front_recall2_position;
UINT16 rear_recall2_position;
UINT16 slide_recall3_position;
UINT16 back_recall3_position;
UINT16 front_recall3_position;
UINT16 rear_recall3_position;
  CONFIG1=0x03;
  CONFIG2=0x03;
  PCTL_PLLON=0;
  PBWC_AUTO=1;
  PCTL_VPR0=0;
  PCTL_VPR1=1;
  PMSH=0x02;
  PMSL=0x58;
  PMRS=0x80;
  PMDS=0x01;
  PCTL_PLLON=1;
  PCTL_BCS=1;
   
  TBCR_TBR0=0;
  TBCR_TBR1=0;
  TBCR_TBR2=0;
  TBCR_TBIE=1;
  
  ADCLK=0x54;
  ADR=0x00;
  ADSCR=0x43;
  
  
  T2SC_TRST=1;	
  T2SC0=0x4C;
  T2MODH=0x02;
  T2MODL=0x00;
 
 red_led=0;
 green_led=0;
 DDRA_DDRA7=1;
 DDRA_DDRA6=1;
 PTC=0;
 DDRC=0xff;
 
 VTX=1;
 DDRB_DDRB6=1;
 
 DDRE_DDRE2=1;
 DDRE_DDRE3=1;
 DDRE_DDRE4=1;
 
SPIinit();

SPI33689(0x1F);

red_led=1;

  
 
SPI33972(0x09,0x00,0x00,0x09,0x00,0x00);
SPI33972(0x0A,0x00,0x00,0x0A,0x00,0x00);
SPI33972(0x04,0x00,0x00,0x04,0x00,0x00);
SPI33972(0x05,0x00,0x00,0x05,0x00,0x00);
SPI33972(0x01,0x00,0xfe,0x01,0x00,0xff);

  
INTKBSCR_MODEK=1;
INTSCR_IMASK=1;
INTKBIER_KBIE2=1;
INTKBSCR_ACKK=1;
INTSCR_IMASK=0; 



EnableInterrupts;

LIN_Init();
//初始化开始

slide_motor_move_forward();
while(!margin_position_reached()){												//等待滑动电机滑到最前端边缘位置
 if(motor_circuit_fault()){														
  slide_motor_fault=1;                               //滑动电机电路发生故障
  break;
}
}
slide_motor_stop();

if(!slide_motor_fault){
slide_current_position=0xff;                   //标定滑动方向最前端边缘位置
slide_motor_move_backward();
while(!margin_position_reached()){												//等待滑动电机滑到最后端边缘位置
 if(motor_circuit_fault()){														
  slide_motor_fault=1;                               //滑动电机电路出现故障
  break;
} else {
  slide_sensor_check();
}
 if(slide_sensor_fault) break;													//滑动电机的传感器电路发生故障
}
slide_motor_stop();
if((!slide_motor_fault)&&(!slide_sensor_fault)){  
slide_backward_margin_position=slide_current_position;			//标定滑动方向最后端边缘位置
}

}

  
  

back_motor_move_clockwise();
while(!margin_position_reached()){												//等待后背电机顺时针移动到边缘位置
 if(motor_circuit_fault()){														
  back_motor_fault=1;                               //后背电机电路出现故障
  break;
}		
}
back_motor_stop(); 
if(!back_motor_fault){
back_current_position=0xff;                   //标定座椅顺时针方向的最边缘位置
back_motor_move_counterclockwise();
while(!margin_position_reached()){												//等待后背电机逆时针移动到最边缘位置
if(motor_circuit_fault()){														
  back_motor_fault=1;                               //后背电机电路出现故障
  break;
} else {
  back_sensor_check();		
}
 if(back_sensor_fault) break;													//后背电机的传感器电路发生故障
}
back_motor_stop();
if((!back_motor_fault)&&(!back_sensor_fault)){  
back_counterclockwise_margin_position=back_current_position;			//标定座椅后背逆时针方向的最边缘位置
}
}




front_motor_move_down();
while(!margin_position_reached()){												//等待座椅前部电机移动到最上端边缘位置
 if(motor_circuit_fault()){														
  front_motor_fault=1;                               //前部电机电路出现故障
  break;
}
}
front_motor_stop();

if(!front_motor_fault){
front_current_position=0x00ff;                     //标定座椅前部最下端边缘位置
front_motor_move_up();
while(!margin_position_reached()){												//等待座椅前部电机移动到最下端边缘位置
 if(motor_circuit_fault()){														
  front_motor_fault=1;                               //前部电机电路出现故障
  break;
} else {
 front_sensor_check();	
}	 
 if(front_sensor_fault) break;													//前部电机的传感器电路发生故障
}
front_motor_stop();
if((!front_motor_fault)&&(!front_sensor_fault)){  
front_up_margin_position=front_current_position;			//标定座椅前部最上端边缘位置
}

}




rear_motor_move_down();
while(!margin_position_reached()){												//等待座椅后端电机滑到最上端边缘位置
if(motor_circuit_fault()){														
  rear_motor_fault=1;                               //座椅后端电机电路出现故障
  break;
} 
}
rear_motor_stop();
if(!rear_motor_fault){
rear_current_position=0x00ff;                   //标定座椅后部的最下端边缘位置
rear_motor_move_up();
while(!margin_position_reached()){												//等待后部电机移动到最下端边缘位置
if(motor_circuit_fault()){														
  rear_motor_fault=1;//后部电机电路出现故障
  break;                               
} else {
  rear_sensor_check();		 
} 
 if(rear_sensor_fault) break;													//后部电机的传感器电路发生故障
}

rear_motor_stop();
if((!rear_motor_fault)&&(!rear_sensor_fault)){  
rear_up_margin_position=rear_current_position;			//标定后部最上端边缘位置
}
}
				 




recall(slide_backward_margin_position*1/2,back_counterclockwise_margin_position*3/4,front_up_margin_position*1/2,rear_up_margin_position*1/2,0x70,0x70,0x70,0x70);
//设置记忆位置的缺省值

slide_recall1_position=slide_backward_margin_position*1/2;
back_recall1_position=back_counterclockwise_margin_position*3/4;
front_recall1_position=front_up_margin_position*1/2;
rear_recall1_position=rear_up_margin_position*1/2; 
slide_recall2_position=slide_backward_margin_position*1/2;
back_recall2_position=back_counterclockwise_margin_position*3/4;
front_recall2_position=front_up_margin_position*1/2;
rear_recall2_position=rear_up_margin_position*1/2;
slide_recall3_position=slide_backward_margin_position*1/2;
back_recall3_position=back_counterclockwise_margin_position*3/4;
front_recall3_position=front_up_margin_position*1/2;
rear_recall3_position=rear_up_margin_position*1/2;	 


    
for(;;){ 

switch(seat_status)
{
  

case slide_forward_begun:
red_led=1; 
slide_motor_move_forward(); 
seat_status=slide_forward;
break;

case slide_forward:

if(margin_position_reached()||(slide_motor_fault=motor_circuit_fault())){
seat_status=slide_stopped; break;
}
if(!slide_forward_on){
if(!auto_on||speed_signal==1){
flag1=0;
flag2=0;
seat_status=slide_stopped;
}else if(flag2){
flag2=0;
seat_status=slide_stopped;
}else{
flag1=1;
}
}else if(flag1){
flag1=0;
flag2=1;
}
break;




case slide_backward_begun:
red_led=1; 
slide_motor_move_backward(); 
seat_status=slide_backward;
break;

case slide_backward:
if(margin_position_reached()||(slide_motor_fault=motor_circuit_fault())){
seat_status=slide_stopped; break;
}
if(!slide_backward_on){
if(!auto_on||speed_signal==1){
flag3=0;
flag4=0;
seat_status=slide_stopped;
}else if(flag4){
flag4=0;
seat_status=slide_stopped;
}else{
flag3=1;
}
}else if(flag3){
flag3=0;
flag4=1;
}
break;

case slide_stopped:
slide_motor_stop();
seat_status=none;
break;






case back_counterclockwise_begun:
red_led=1; 
back_motor_move_counterclockwise();
seat_status=back_counterclockwise;
break;

case back_counterclockwise:
if(margin_position_reached()||(back_motor_fault=motor_circuit_fault())){
seat_status=back_stopped; break;
}
if(!back_counterclockwise_on){
if(!auto_on||speed_signal==1){
flag5=0;
flag6=0;
seat_status=back_stopped;
}else if(flag6){
flag6=0;
seat_status=back_stopped;
}else{
flag5=1;
}
}else if(flag5){
flag5=0;
flag6=1;
}
break;




case back_clockwise_begun:
red_led=1; 
back_motor_move_clockwise();
seat_status=back_clockwise;
break;

case back_clockwise:
if(margin_position_reached()||(back_motor_fault=motor_circuit_fault())){
seat_status=back_stopped; break;
}
if(!back_clockwise_on){
if(!auto_on||speed_signal==1){
flag7=0;
flag8=0;
seat_status=back_stopped;
}else if(flag8){
flag8=0;
seat_status=back_stopped;
}else{
flag7=1;
}
}else if(flag7){
flag7=0;
flag8=1;
}
break;

case back_stopped:
back_motor_stop();
seat_status=none;
break;






case front_up_begun:
red_led=1; 
front_motor_move_up();
seat_status=front_up;
break;

case front_up:
if(margin_position_reached()||(front_motor_fault=motor_circuit_fault())){
seat_status=front_stopped; break;
}
if(!front_up_on){
if(!auto_on||speed_signal==1){
flag9=0;
flag10=0;
seat_status=front_stopped;
}else if(flag10){

⌨️ 快捷键说明

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