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

📄 doorlock.c.contrib

📁 freescale最新的16位单片机
💻 CONTRIB
字号:
/******************************************************************************		
*                                                                                   
*       Copyright (C) 2006 Freescale Semiconductor, Inc.                            
*       All Rights Reserved								              				
*														              				
* Filename:     Door Lock ADC.h                										
*														              				
* Functions:    includes compiler predefines for the Master Node			      	
*												                            		
* Description:																		
*																					
* Notes:								
*																					
******************************************************************************/	

/*****************************************************************************/
#include    "DoorLock.h"
#include    "spi.h"

/*****************************************************************************/
/*                       Global Variables                                    */
/*****************************************************************************/
 Bool StateOfMEchanism = FALSE;
 extern Byte fm_task;			//actual fm window
 
/******************************************************************************
* Module            : void void DoorOverCurent (void);
* Description       : convert analog overcurent output from H-Bridge
* Global Data       : none
* Static Global Data: none
* Returns           : state
* Arguments         : none
* Special Issues    : none
******************************************************************************/
char DoorOverCurent (void){
unsigned int door1, door2;


//DoorLock nr. 1
ATD0CTL5 = ATD0CTL5_DJM_MASK | ATD0CTL5_CB_MASK | ATD0CTL5_CA_MASK;      // ATD03 , right justif., ch1 starts
while(!ATD0STAT0_SCF);                            // wait till conversion is completed + clear scf flag when set
door1 = ATD0DR0;                                  // read data => clear conversion complete flags                                 // read data => clear conversion complete flags


//DoorLock nr. 2
ATD1CTL5 = ATD1CTL5_DJM_MASK | ATD1CTL5_CA_MASK | ATD1CTL5_CB_MASK;      // ATD11 , right justif., ch1 starts
while(!ATD1STAT0_SCF);                            // wait till conversion is completed + clear scf flag when set
door2 = ATD1DR0;                                  // read data => clear conversion complete flags

if(((door1<CRITICALVALUE)&&(door1!=0)/**/)||((door2<CRITICALVALUE)&&(door2!=0)/**/)){	// if overcurrent value is lower than CRITICALVALUE
  DOORLock1_Input1 = DOORLock1_Input2 = CLOSE;
  DOORLock2_Input1 = DOORLock2_Input2 = CLOSE;
  return(0);
}
else return (2);

}
/******************************************************************************
* Module            : void doorOpen(void);
* Description       : Open relevant DoorLock mechanism
* Global Data       : none
* Static Global Data: none
* Returns           : state
* Arguments         : char OpenClose
* Special Issues    : none
******************************************************************************/
char DoorOpen(void){
SPI24              temp24;
char                state, i=0;

RESET_HBRIDGE();    // RESET_HBRIDGE;
DOOR1_OPEN();       //DoorLock nr. 1 CLOSE
DOOR2_OPEN();		    //DoorLock nr. 2 CLOSE
            
CSB_U404 = 0;									            /* find position of DoorLock, on MSDI */
temp24.comm = U404_SWITCH_STATUS;
temp24.data.w = U404_ZERO;
temp24 = ReadWriteSPI24bit(temp24);
CSB_U404 = 1;
            
if(temp24.comm & U404_TEST_SP3_SET){	 /*OPEN DoorLock*/
    //delaytime
      for(i=0;i<3;i++){
      
      asm {
                  LDD #0xFF00            ; 
          loop2:  DBNE D, loop2          ; 
          };
      }
  

DISABLE_OUPUTS();
  
  return (state = FALSE);
}else{
 return state = 2/*DoorOverCurent()*/;
 }  
}

/******************************************************************************
* Module            : void doorClose(void);
* Description       : Close relevant DoorLock mechanism
* Global Data       : none
* Static Global Data: none
* Returns           : state
* Arguments         : char OpenClose
* Special Issues    : none
******************************************************************************/
char DoorClose(void){
SPI24              temp24;
char                state, i=0;
																				
RESET_HBRIDGE();    // RESET_HBRIDGE;
DOOR1_CLOSE();      //DoorLock nr. 1 CLOSE
DOOR2_CLOSE();		  //DoorLock nr. 2 CLOSE

            
CSB_U404 = 0;									            /* find position of DoorLock, on MSDI */
temp24.comm = U404_SWITCH_STATUS;
temp24.data.w = U404_ZERO;
temp24 = ReadWriteSPI24bit(temp24);
CSB_U404 = 1;
            
if(temp24.comm & U404_TEST_SP2_SET){	 /*OPEN DoorLock*/

    //delaytime
      for(i=0;i<3;i++){
      
      asm {
                  LDD #0xFF00            ; 
          loop2:  DBNE D, loop2          ; 
          };
      }
  

DISABLE_OUPUTS();
  
  return (state = FALSE);
}else{
 return state = 2/*DoorOverCurent()*/;
 }  
}

/******************************************************************************
* Module            : void FollowMasterDoorLock();
* Description       : Open or Close slave DoorLock mechanism
* Global Data       : none
* Static Global Data: none
* Returns           : none
* Arguments         : none
* Special Issues    : not implemented into task control
******************************************************************************/
void FollowMasterDoorLock(void){
SPI24 temp24;
char temporary;

if (fm_task==DOOR_LOCK)return;						/*disabled if controlled from second source*/

CSB_U404 = 0;									            /* find position of DoorLock, on MSDI */
temp24.comm = U404_SWITCH_STATUS;
temp24.data.w = U404_ZERO;
temp24 = ReadWriteSPI24bit(temp24);
CSB_U404 = 1;
temporary = DoorOverCurent();

if((temp24.comm & U404_TEST_SP3_SET)&&(!StateOfMEchanism)){  /*opened DoorLock*/
  StateOfMEchanism = TRUE;  

  DOORLock1_Disable = DISABLE;							/*DoorLock nr. 2 OPEN or CLOSE*/
  DOORLock1_Enable = ENABLE;
  DOORLock1_Input1 = StateOfMEchanism;
  DOORLock1_Input2 =~ (Bool)StateOfMEchanism;
  //DoorOverCurent();
} else if((temp24.comm & U404_TEST_SP2_SET)&&(StateOfMEchanism)){  /*closed DoorLock*/
  StateOfMEchanism = FALSE;

  DOORLock1_Disable = DISABLE;							/*DoorLock nr. 2 OPEN or CLOSE*/
  DOORLock1_Enable = ENABLE;
  DOORLock1_Input1 = StateOfMEchanism;
  DOORLock1_Input2 =~ (Bool)StateOfMEchanism;
  //DoorOverCurent();
  } 
}




⌨️ 快捷键说明

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