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

📄 main.c

📁 基于摩托罗拉(现在飞思卡尔)MC68HC908AZ60A系列单片机
💻 C
📖 第 1 页 / 共 2 页
字号:
/*******************************************/

/**file name:  center node program        **/

/**Author :Xiaoming Li                    **/

/**date/time: 13.3.2004                   **/

/**company: Tongji university             **/

/*******************************************/


#include <MC68HC908AZ60A.H>

#include <hidef.h>

#include <signal_group.h>


unsigned int CAN_timer_count=0;          

unsigned int count=0;                   

unsigned int SPI_count=0;

unsigned long int lf_up_count=0;              
unsigned long int lf_dn_count=0;
unsigned long int rf_up_count=0;
unsigned long int rf_dn_count=0;
unsigned long int lr_up_count=0;
unsigned long int lr_dn_count=0;
unsigned long int rr_up_count=0;
unsigned long int rr_dn_count=0;             



/************************* CAN接收中断子程序****************************/
void interrupt CAN_Receive(void)

{
volatile unsigned char idr0test;

idr0test = REC_IDR0;


if(idr0test == 0x48)    //接受左前门数据
{
lf_sta0=REC_DSR0;
lf_sta1=REC_DSR1;
lf_sta2=REC_DSR2;
}


else if(idr0test == 0x44)     //接受右前门数据
{
rf_sta0=REC_DSR0;
rf_sta1=REC_DSR1;
}

else if(idr0test == 0x42)     //接受左后门数据
{
lr_sta0=REC_DSR0;
lr_sta1=REC_DSR1;
}

else if(idr0test == 0x41)     //接受右后门数据
{
rr_sta0=REC_DSR0;
rr_sta1=REC_DSR1;
}



CRFLG = 0x01;          //清中断标志位

}





/**************************** CAN发送子程序第一帧***************************/

void CAN_TransmitF1(void){

unsigned char emptytest;
unsigned char emptytest0;
unsigned char emptytest1;
unsigned char emptytest2;

emptytest = CTFLG;

emptytest0 = emptytest&0x01;        //判断接受区为空
emptytest1 = emptytest&0x02;
emptytest2 = emptytest&0x04;

if(emptytest0 !=0)
{
DLR0   =  0x04;

DSR00  =  cent_sta0;
DSR10  =  cent_sta1;
DSR20  =  cent_sta2;
DSR30  =  cent_sta3;


IDR00  =  0x50;        // id 附值
IDR10  =  0x00;
IDR20  =  0x00;  
IDR30  =  0x00;

TBPR0  =  0x01;

CTFLG  =  0x01;        //启动发送
}



else if(emptytest1 !=0)
{
DLR1   =  0x04;

DSR01  =  cent_sta0;
DSR11  =  cent_sta1;
DSR21  =  cent_sta2;
DSR31  =  cent_sta3;


IDR01  =  0x50;  
IDR11  =  0x00;
IDR21  =  0x00;  
IDR31  =  0x00;

TBPR1  =  0x01;

CTFLG  =  0x02;        //启动发送
}




else if(emptytest2 !=0)
{
DLR2   =  0x04;

DSR02  =  cent_sta0;
DSR12  =  cent_sta1;
DSR22  =  cent_sta2;
DSR32  =  cent_sta3;


IDR02  =  0x50;  
IDR12  =  0x00;
IDR22  =  0x00;  
IDR32  =  0x00;

TBPR2  =  0x01;

CTFLG     =  0x04;      //启动发送
}


}



void time_delay(int n)
 {
  count=0;
  while(count<n){;}
 }                       
  


void transmit_SPI  (unsigned char SPI_data)
{
  PTD_PTD0=0x0;
  PTD_PTD0=0x0;
  PTD_PTD0=0x0;
  
   while(SPSCR_SPTE==0) {; }  
       SPDR=SPI_data;
  
   PTD_PTD0=0x0;PTD_PTD0=0x0;PTD_PTD0=0x0;
   PTD_PTD0=0x0;PTD_PTD0=0x0;PTD_PTD0=0x0;
  
   PTD_PTD0=0x1;
   PTD_PTD0=0x1; 
}



void interrupt TimerInterrupt(void)
{

PSC_POF = 0x0; 
PSC_PRST = 0x1;            
PSC_PSTOP = 0x1;

__RESET_WATCHDOG();                  

count++;
CAN_timer_count++;
SPI_count++;

if(CAN_timer_count==2)
{
CAN_TransmitF1();               
CAN_timer_count=0;            
}

if(SPI_count==10)             
{
transmit_SPI(0xB3);
SPI_count =0;
}

if(lfwin_up_300_enable==1) {lf_up_count++;}

if(lfwin_dn_300_enable==1) {lf_dn_count++;}

if(rfwin_up_300_enable==1) {rf_up_count++;}

if(rfwin_dn_300_enable==1) {rf_dn_count++;}

if(lrwin_up_300_enable==1) {lr_up_count++;}

if(lrwin_dn_300_enable==1) {lr_dn_count++;}

if(rrwin_up_300_enable==1) {rr_up_count++;}

if(rrwin_dn_300_enable==1) {rr_dn_count++;}

PSC_PSTOP = 0x0;

}



/******************************MSCAN初始化子程序 ******************************/

static void Init_MSCAN08(void){

CMCR0  = 0x01;   //CAN模块为软复位状态
CMCR1  = 0x00;
CBTR0  = 0x43;   
CBTR1  = 0xA3;   //波特率为62.5K


CIDAC   = 0x00;   //接收滤波为32位滤波

CIDAR0  = 0x00;   //滤波使它接收一帧
CIDAR1  = 0x00;    //standard identifiers


CIDMR0  = 0xFF;
CIDMR1  = 0xFF;     //standard identifers

                             
CMCR0  = 0x00;   //把CAN模块设置为数据输入输出状态

CRIER  = 0x01;   //CAN接收中断使能 
}



static void Init_AZ60(void)
{
CONFIG1 = 0x70;     
CONFIG2 = 0x09;    

PSC   = 0x40;     

PSC_PPS   = 0x0;    
PSC_POIE = 0x1;    

PMODH = 0x27;
PMODL = 0x10;  

Init_MSCAN08();    

EnableInterrupts;   
}



void main(void)
{
unsigned char  cent_button_sta[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};
unsigned char  cent_butt_sta1[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};
unsigned char  cent_butt_sta2[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};     


Init_AZ60();  


 cent_sta0=0x14;
 cent_sta1=0x05;
 cent_sta2=0x00;
 cent_sta3=0x00;
 
 lf_sta0=0x08;
 lf_sta1=0x40;
 lf_sta2=0x00;
    
 rf_sta0=0x08;
 rf_sta1=0x42;  
             
 lr_sta0=0x08;
 lr_sta1=0x40; 
              
 rr_sta0=0x08;
 rr_sta1=0x40;                                
	  

 win_moto_sta0=0x00;
 win_moto_sta1=0x00;


DDRA_DDRA1=1;          
DDRA_DDRA2=1;
DDRA_DDRA3=1;
DDRA_DDRA4=1;
DDRA_DDRA5=1;
DDRA_DDRA6=1;           


PTA_PTA1=0x0;
PTA_PTA2=0x0;
PTA_PTA3=0x0;
PTA_PTA4=0x0;
PTA_PTA5=0x0;
PTA_PTA6=0x0;         


DDRB_DDRB0=0;
DDRB_DDRB1=0;
DDRB_DDRB2=0;
DDRB_DDRB3=0;           

PTB_PTB0=0x0;
PTB_PTB1=0x0;
PTB_PTB2=0x0;
PTB_PTB3=0x0;         


DDRD_DDRD0=1;

PTD_PTD0=0x1;

  
SPCR_SPE =0x1;  

SPSCR_SPR0=0x0;  
SPSCR_SPR1=0x0;         

PTD_PTD0=0x1;

transmit_SPI(0xB3);      
transmit_SPI(0x11);     
transmit_SPI(0x53);      
transmit_SPI(0x31);     
transmit_SPI(0x90);     


 
while(1)  
{
PTA_PTA1=0x0 ;
PTA_PTA2=0x0 ;
PTA_PTA3=0x0 ;       
cent_butt_sta1[0]=PTB&0x01;           
if(cent_butt_sta1[0]!=0) time_delay(2);                 
cent_butt_sta2[0]=PTB&0x01;         
if(cent_butt_sta1[0]==cent_butt_sta2[0]) 
  {  cent_button_sta[0]=cent_butt_sta1[0];
       if(cent_button_sta[0]!=0)
         rfwin_dn_300_enable=1;          
       else  rfwin_dn_300_enable=0;        
   }

if(rf_dn_count>=30) { rfwin_dn_300_reach=1; rfwin_dn_300_enable=0;}
else rfwin_dn_300_reach=0;

⌨️ 快捷键说明

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