📄 main.c
字号:
/*******************************************/
/**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 + -