📄 main._c
字号:
#include "main.h"
VCI_CAN_OBJ msg[2],rece_data[3];
long id1,id2,id3,id4,id5;
unsigned char ID_nu,ID_net;
unsigned char Pass_Flag,Send_Flag,Temp_Flag,Time;
extern Uchar DI_Status[3],send_count;
extern Uchar PINA_temp,PINB_temp,PINE_temp,PINF_temp;
extern unsigned char DI_data_cur[12],DI_data[12],DI_data_pre[12];
unsigned int RUN;
extern unsigned long CANMOBID[15];
extern unsigned long CANMOBMD[15];
#pragma abs_address: 0x29B0
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0x39B0
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0x49B0
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0x59B0
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0x69B0
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0x79B0
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0x89B0
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0x99B0
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0xA9B0
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0xB9B0
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0xC9B0
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0xD9B0
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0xE9B0
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0xF9B0
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0x0004
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0x000C
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0x0014
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0x001C
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0x0024
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0x002C
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0x0034
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0x003C
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0x004C
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0x0054
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0x005C
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0x0064
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0x006C
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0x0074
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0x007C
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma abs_address: 0x0084
asm("nop");
asm("nop");
RESET;
#pragma end_abs_address
#pragma interrupt_handler timer0_ovf_isr:18
void timer0_ovf_isr(void) //定时1毫秒
{
TCNT0 = 0x83; //reload counter value
Time++;
RUN++;
if(Time>15)
{
Time = 0;
Temp_Flag = 0x5a;
RUN_LED();
}
if(RUN>50)
{
WDR();
RUN_LED();
RUN = 0;
Send_Flag = 0x5a;
}
}
void main(void)
{
unsigned char i;
long tempp;
CLI();
init_devices(); //器件初始化
init_data(); //数据初始化
ID_nu = get_id(); //读取拨码开关的值
ID_net = ID_nu; //计算网络ID号
Pass_Flag = 0x01;
tempp = ID_net*256;
Pass_Flag <<= 1;
id1 = BASE_ADDR+tempp;
id2 = BASE_ADDR+1+tempp;
id3 = BASE_ADDR/256+tempp*256;
Pass_Flag <<= 1;
id4 = BASE_ADDR/256+tempp*256+1;
id5 = BASE_ADDR/256+tempp*256+2;
Pass_Flag <<= 1;
CANMOBID[0] = id1;
CANMOBID[1] = id2;
CANMOBID[3] = id3;
CANMOBID[4] = id4;
CANMOBID[5] = id5;
if(Pass_Flag!=0x08)
RESET;
can_init ();
DI_handle(); //读取开关状态 去抖动处理
for(i=0;i<12;i++)
{
DI_data_pre[i] =DI_data_cur[i];
DI_data[i] =DI_data_cur[i];
}
SEI();
watchdog_init();
WDR();
WDR();
while(1)
{
WDR();
ID_nu = get_id(); //读取拨码开关的值
ID_net = ID_nu; //计算网络ID号
if(tempp!=ID_nu*256)
{
CLI();
tempp = ID_net*256;
Pass_Flag = 0x01;
id1 = BASE_ADDR+tempp;
id2 = BASE_ADDR+1+tempp;
Pass_Flag <<= 1;
WDR();
id3 = BASE_ADDR/256+tempp*256;
Pass_Flag <<= 1;
id4 = BASE_ADDR/256+tempp*256+1;
id5 = BASE_ADDR/256+tempp*256+2;
Pass_Flag <<= 1;
WDR();
CANMOBID[0] = id1;
CANMOBID[1] = id2;
CANMOBID[3] = id3;
CANMOBID[4] = id4;
CANMOBID[5] = id5;
if(Pass_Flag!=0x08)
RESET;
can_init ();
SEI();
}
if(send_count>25) //连续25次发送失败则复位
RESET;
if(Temp_Flag == 0x5a) //定时读去状态标志
{
CLI();
WDR();
TIMSK0 = 0x00;
if(LED)
{
PORTB &= 0X3F; //灭网络灯
}
else
PORTB |= 0Xc0;
DI_handle(); //读取开关状态
for(i=0;i<12;i++)
{
if(DI_data_pre[i] == DI_data_cur[i]) //去抖处理
{
DI_data[i] = DI_data_cur[i];
}
else if (DI_data_pre[i] != DI_data_cur[i])
{
DI_data[i] = DI_data_pre[i];
}
DI_data_pre[i] = DI_data_cur[i]; //新旧值更新
}
Temp_Flag = 0x00; //清除定时标志
Time = 0;
timer0_init();
TIMSK0 = 0x01; //timer interrupt sources
WDR();
SEI();
}
if(Send_Flag == 0x5a)
{
WDR();
msg[0].ID = id1; //前八个通道数据发送
for(i=0;i<8;i++)
{
msg[0].Data[i] = DI_data[i];
}
can_tx (msg[0]);
send_count++;
msg[1].ID = id2;
for(i=0;i<4;i++) //后四个通道数据发送
{
msg[1].Data[i] = DI_data[i+8];
}
for(i=4;i<8;i++)
{
msg[1].Data[i]=0x00;
}
can_tx (msg[1]);
send_count++;
Send_Flag = 0x00;
WDR();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -