📄 main._c
字号:
//ICC-AVR application builder : 2006-11-29 10:30:50
// Target : M128
// Crystal: 11.0592.0000Mhz
/******************************main file*********************************/
#include "allhead.h"
extern uchar biaozhi; //触摸屏接收中断用
extern uchar RXC_BUFF[15]; //触摸屏发送的数据
extern uchar key; //键值
extern uchar jiemian; //界面标志
extern uchar time[22]; //初始时间设置 (未处理)
extern uchar gas_type; //气体类型
extern uchar unit_chroma; //浓度单位
extern uchar denglu ; // 登录界面标志
extern uchar pass[6]; //存放E2中读出的密码
//TWI 相关全局变量
extern uchar i2c_rd_buff[32]; //i2c读出的数最初存放的地方
extern uchar i2c_wt_buff[35]; //写
extern uchar fhz;
extern uchar flag_can;
//开关机记录显示用
extern uint addre2; //外部E2的当前地址
extern uchar addre2hi; //地址高址
extern uchar addre2lo; //地址低址
extern uchar m;
extern uint realaddr; //外部RAM中存放实时界面信息地址
uint realaddr2=0x3000; //存RAM错误信息用
uchar cn2=0;
uchar first_alarm=0;
uchar shoubao[9]; //首报
uchar kk1=0; //等待接收32帧数用
uchar yong=0; //判断CAN出错标志
//uchar yy1=0;
//故障,报警显示用实时地址
uint guzhangaddr=0x6800; //故障地址 0x6800-0x7bff
uint baojingaddr=0x0400; //报警地址 0x0400-0x67ff
//存储用
uint guzhangaddr2=0x6800; //故障地址 0x6800-0x7bff
uint baojingaddr2=0x0400; //报警地址 0x0400-0x5b7f
uint onaddr2=0; //开关机用,
uchar jj=0; //判断第一次开机用 取外部E2故障,报警地址必须在存了开机记录之后!
volatile uchar keyc=0;
uchar firstuse1=0; //判断电源故障是不是第一次进入用
uchar firstuse2=0;
uchar firstuse3=0;
uchar firstuse4=0; //亏电
uchar hibao[32][4]; //高报
uchar lobao[32][4]; //低报
uchar detector[32][4]; //传感器
uchar communicate[32][4]; //通讯
uchar xuanbit[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar cannum=0;
uint cuo1=0; //记录当前故障总数用
uint cuo2=0; //记录当前报警总数用
uint cuo3=0; // 实时界面用 实时报警,故障数
uint cuo4=0; //实时界面用,基数
uchar wunai=0; //自动搜索后第一次轮埙的数不要
uchar wunai2=0; //节点投用
uchar idnum;
uchar can_cuo_flag[32]; //转换器故障 用
uchar yure_flag=1; //预热标志
struct
{
uchar bei; //备电
uchar shi; //市电
uchar cong; //从电
}error;
struct
{
uchar di[32][4]; //低报
uchar tan[32][4]; //探测器
uchar tong[32][4]; //通讯
uchar gao[32][4]; //高报
}rxerror;
//CAN相关全局变量
uchar canuse[4]={0xff,0xff,0xff,0xff}; //转换器的投用情况 按位
uchar detuse[33][4]; //所有485节点的投用情况,0,1按位起作用
uchar det_link[33] ; //探测器或联动模块选择字节段,按位起作用
uchar trans_complete=0; //一个转换器下所有数据上传结束标志 //去掉了volatile
uchar rx_buff[13]; //接收转换器上传的数据
uchar zhongbuff[33][10]; // 一次接收的转换器的数 zhongbuff[33][n]接收错误总数
//时间设置相关变量
uchar time_set[7]; //存已处理的设置时间,日期
uchar realtimebuff[7]; //存中断INT6中读取的实时时间
uchar minute=0; //分钟,实时关机记录函数用
uchar minute2=0;
uchar minute3=0;
uchar second=0; //秒
//GAL门相关全局变量
uchar gal1data=0x00 ;
uchar gal2data=0x7f ; //继电器控制信号1,联动模块故障1,联动输出都为1
uchar gal3data=0x77 ; //指示灯为共阳极的
uchar gal4data=0x6a ; //默认正常
uchar gal5data=0xff ;
/****************端口的初始化**未用的引脚使用内部上拉*************/
void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0xe1; //PB0MCP2510片选信号0xe1
DDRB = 0x17; //CAN相关的控制信号0x17
PORTC = 0x00; //m103 output only
DDRC = 0x00; //C口作为外部寻址地址的高八位
PORTD = 0x50; //20
DDRD = 0x00; //打印机BUSY PD7,消音键输入PD6,液晶忙 PD5输入
PORTE = 0x84;
DDRE = 0x3C;
PORTF = 0x00;
DDRF = 0x00; //PF0-PF3输入输出通道关联用
PORTG = 0x00; //控制看门狗中断的引脚PG4未开启呢
DDRG = 0x00; //00是没有加入看门 狗0x10加入
//DDRG = 0x10;
}
//UART1 initialize, desired baud rate: 19200
// actual: baud rate:19200 (0.2%)
// char size: 8 bit parity: Disabled
void uart1_init(void)
{
UCSR1B = 0x00; //disable while setting baud rate
UCSR1A = 0x00;
UCSR1C =(1<<UCSZ11)|(1<<UCSZ10);
UBRR1L=35;//25;//(fosc/16/(baud-1))%256;
UBRR1H=0;//(fosc/16/(baud-1))/256;
UCSR1B =(1<<RXEN1)|(1<<TXEN1)|(1<<RXCIE1);
}
// desired baud rate:4800 ,9 bit
void uart0_init(void)
{
UCSR0B = 0x00; //disable while setting baud rate
UCSR0A = 0x00;
UCSR0C = 0x06;
UBRR0L = 0x8F; //set baud rate lo
UBRR0H = 0x00; //set baud rate hi
UCSR0B = 0x1c;
}
//SPI initialize
void spi_init(void)
{
SPCR = 0x50; //setup SPI
SPSR = 0x00; //setup SPI
}
//TIMER1 initialize - prescale:Stop
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 1Hz// actual value: Out of range
void timer1_init(void)
{
TCCR1B = 0x00; //stop
TCNT1H = 0xFF /*INVALID SETTING*/; //setup
TCNT1L = 0xFE /*INVALID SETTING*/;
OCR1AH = 0x00 /*INVALID SETTING*/;
OCR1AL = 0x00 /*INVALID SETTING*/;
OCR1BH = 0x00 /*INVALID SETTING*/;
OCR1BL = 0x00 /*INVALID SETTING*/;
OCR1CH = 0x00 /*INVALID SETTING*/;
OCR1CL = 0x00 /*INVALID SETTING*/;
ICR1H = 0x00 /*INVALID SETTING*/;
ICR1L = 0x00 /*INVALID SETTING*/;
TCCR1A = 0x00;
TCCR1B = 0x06; //start Timer
}
//MCP2510初始化
void init_can(void)
{
write_MCP (CANCTRL, 0x80); //0x80, 配置模式
/*
//每发一贞转换器要延时2ms
write_MCP (CNF1, 0x03); // Set CAN-Baudrate 125 kBaud
//同步跳转宽度SJW=1*TQ、
write_MCP (CNF2, 0x90); // 8MHz
//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -