菜鸟请教,求各位大神帮我看一下这个程序(飞思卡尔mc9s12g128)
时间:10-02
整理:3721RD
点击:
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#define uint Vc //车速
#define n 1 /*初始档位为低档位*/
#define SB01_1 PORTB_PB0
#define SB01_2 PORTB_PB1
#define SB03_1 PORTB_PB2
#define SB03_2 PORTB_PB3
#define SB04 PORTB_PB4
#define SB03 PORTB_PB5
#define SB02 PORTB_PB6
#define SB01_1_dir DDRB_DDRB0
#define SB01_2_dir DDRB_DDRB1
#define SB03_1_dir DDRB_DDRB2
#define SB03_2_dir DDRB_DDRB3
#define SB04_dir DDRB_DDRB4
#define SB03_dir DDRB_DDRB5
#define SB02_dir DDRB_DDRB6
#define DT1 PORTA_PA0
#define DT2 PORTA_PA1
#define DT3 PORTA_PA2
#define DT4 PORTA_PA3
#define DT5 PORTA_PA4
#define DT1_dir DDRA_DDRA0
#define DT2_dir DDRA_DDRA1
#define DT3_dir DDRA_DDRA2
#define DT4_dir DDRA_DDRA3
#define DT5_dir DDRA_DDRA4
//***************************初始化按钮和电磁阀****************************//
void init_dt_sb(void)
{
SB01_1_dir=0;
SB01_2_dir=0;
SB03_dir=0;
SB03_1_dir=0;
SB03_2_dir=0;
SB04_dir=0;
SB02_dir=0;
DT1_dir=1;
DT2_dir=1;
DT3_dir=1;
DT4_dir=1;
DT5_dir=1;
}
/****************************延时程序*******************************/
void delay(uint k)
{
uint i,j;
for(i=k;i>0;i--)
for(j=16000;j>0;j--)
;
}
/*定时器溢出中断模块*/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt void overflow(void)
{
DT1=0;
DT2=0;
DT3=0;
}
#pragma CODE_SEG DEFAULT
/*主程序*/
void main(void)
{
DisableInterrupts;
init_dt_sb();
EnableInterrupts;
while(1)
{
if((Vc<5)&n)
{
if(SB02==0)
DT4=1;
}
if(SB02==0)
{
T=0;
while(T++)
{
if(SB02==0)
if(T>1000)
break;
}
}
/*变速箱取力*/
if(SB01_2==0)
{
delay(3000);
if(SB01_2==0)
{
if(SB02==0)
{
DT1=1;
DT3=1;
delay(30);
DT1=0;
DT3=0;
}
}
}
/*前平推(顶盖关闭)*/
if(SB01_1==0)
{
delay(3000);
if(SB01_1==0)
{
if(SB02==0)
{
DT1=1;
DT2=1;
delay(30);
DT1=0;
DT2=0;
}
}
}
/*后平推(顶盖打开)*/
if((SB03_1==10||SB03==0)&&(SB02==0))
{
DT1=1;
DT7=1;
}
if(SB03_1==0)
{
delay(6);
DT1=0;
DT7=0;
}
/*尾门开启*/
if(SB03_2==0)
if(SB02==0)
DT1=1;
DT8=1;
if(SB03_2==0)
{
delay(6);
DT1=0;
DT8=0;
}
/*尾门关闭*/
if(SB04==0)
DT5=1;
T=0;
while(T++)
{
SB02=0;
if(T>1000)
break;
}
if(SB04==0)
DT5=0;
/*尾门充气*/
}
}
#include "derivative.h" /* derivative-specific definitions */
#define uint Vc //车速
#define n 1 /*初始档位为低档位*/
#define SB01_1 PORTB_PB0
#define SB01_2 PORTB_PB1
#define SB03_1 PORTB_PB2
#define SB03_2 PORTB_PB3
#define SB04 PORTB_PB4
#define SB03 PORTB_PB5
#define SB02 PORTB_PB6
#define SB01_1_dir DDRB_DDRB0
#define SB01_2_dir DDRB_DDRB1
#define SB03_1_dir DDRB_DDRB2
#define SB03_2_dir DDRB_DDRB3
#define SB04_dir DDRB_DDRB4
#define SB03_dir DDRB_DDRB5
#define SB02_dir DDRB_DDRB6
#define DT1 PORTA_PA0
#define DT2 PORTA_PA1
#define DT3 PORTA_PA2
#define DT4 PORTA_PA3
#define DT5 PORTA_PA4
#define DT1_dir DDRA_DDRA0
#define DT2_dir DDRA_DDRA1
#define DT3_dir DDRA_DDRA2
#define DT4_dir DDRA_DDRA3
#define DT5_dir DDRA_DDRA4
//***************************初始化按钮和电磁阀****************************//
void init_dt_sb(void)
{
SB01_1_dir=0;
SB01_2_dir=0;
SB03_dir=0;
SB03_1_dir=0;
SB03_2_dir=0;
SB04_dir=0;
SB02_dir=0;
DT1_dir=1;
DT2_dir=1;
DT3_dir=1;
DT4_dir=1;
DT5_dir=1;
}
/****************************延时程序*******************************/
void delay(uint k)
{
uint i,j;
for(i=k;i>0;i--)
for(j=16000;j>0;j--)
;
}
/*定时器溢出中断模块*/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt void overflow(void)
{
DT1=0;
DT2=0;
DT3=0;
}
#pragma CODE_SEG DEFAULT
/*主程序*/
void main(void)
{
DisableInterrupts;
init_dt_sb();
EnableInterrupts;
while(1)
{
if((Vc<5)&n)
{
if(SB02==0)
DT4=1;
}
if(SB02==0)
{
T=0;
while(T++)
{
if(SB02==0)
if(T>1000)
break;
}
}
/*变速箱取力*/
if(SB01_2==0)
{
delay(3000);
if(SB01_2==0)
{
if(SB02==0)
{
DT1=1;
DT3=1;
delay(30);
DT1=0;
DT3=0;
}
}
}
/*前平推(顶盖关闭)*/
if(SB01_1==0)
{
delay(3000);
if(SB01_1==0)
{
if(SB02==0)
{
DT1=1;
DT2=1;
delay(30);
DT1=0;
DT2=0;
}
}
}
/*后平推(顶盖打开)*/
if((SB03_1==10||SB03==0)&&(SB02==0))
{
DT1=1;
DT7=1;
}
if(SB03_1==0)
{
delay(6);
DT1=0;
DT7=0;
}
/*尾门开启*/
if(SB03_2==0)
if(SB02==0)
DT1=1;
DT8=1;
if(SB03_2==0)
{
delay(6);
DT1=0;
DT8=0;
}
/*尾门关闭*/
if(SB04==0)
DT5=1;
T=0;
while(T++)
{
SB02=0;
if(T>1000)
break;
}
if(SB04==0)
DT5=0;
/*尾门充气*/
}
}
已退回4积分
