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

📄 main.c

📁 基于PIC单片机
💻 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 + -