📄 main.c
字号:
/************************************* (C) 2005 485表项目 ****************************************
项 目: 河南485表程序 (部规约:DLT/645)
编译环境 : IARAVR 编译器 4.12A
模块名称 : Main.c
版 本 : V 1.4A
建立时间 : 2008-5-3 22:06
修改时间 : 2008-5-3 9:14
公 司 : 松鹤仪表
作 者 : 郝瑜云
项目简介 :
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
功能描述 : 主程序
编译字节数: ROM: 6214 BYTE 优化等级:最高
RAM: 366 BYTE
---------------------------------------------------------------------------------------------------
主 芯 片 : ATMEL MEGA88V-10AI 特性 : FLASH:8K RAM:1K
烧写配置 : 振荡源 :外部晶振3~8MHz,16/14CLK+65ms CLSEL :1101 SUT:11
看门狗 :使能 WDTON :0
E2P擦除阻止:使能 EESAVE :0
BOD电平 :2.7V,BOD使能 BODLEVEL:101
配置位值 : 高位:FD; 低位:C5; 扩展:FD
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
修改 : 郑州程序
**************************************************************************************************/
#include "Include.h"
#include "Variable.h"
#include "function.c"
#include "low_level_init.c"
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
void SafeInitialize(void);
void Initialize(void);
void TimeEvent(void);
void PowerOnReadParameter(void);
void CheckDisplayKey(void);
/*
*******************************************************************************
函 数 : void main(void)
功 能 : 执行系统初始化任务
注 释 :
*******************************************************************************
*/
void main(void)
{
//-------------------------------------------------------------------------
WDTCSR = _WDTCSR_START; // 初始化 WDT
WDTCSR = _WDTCSR_INIT; // 设置复位时间2秒
_WDR();
//-------------------------------------------------------------------------
Initialize();
while(1)
{
SafeInitialize(); // 安全性初始化
Display(); // 显示处理
PowerAddProg(); // 电量处理
Protlcol_New(); // 通讯规约处理
TimeEvent(); // 时间事件处理
_WDR(); // 喂狗
}
}
//*****************************************************************************
// 函 数 : void Initialize(void) *
// *
// 功 能 : 执行系统初始化任务 *
// 注 释 : *
// *
//*****************************************************************************
void Initialize(void)
{
//-------------------------------------------------------------------------
// 初始化IO口
DDRB = _DDRB_INIT; // 初始化PORTB
DDRC = _DDRC_INIT; // 初始化PORTC
DDRD = _DDRD_INIT; // 初始化PORTD
//-------------------------------------------------------------------------
// 特殊功能口初始化
_PULSE_LED_OFF(); // 关闭脉冲LED
//_STATUS_LED_OFF(); // 关闭状态LED
_CLR_IO_TXD2(); // 关闭红外LED
_LCDPOWER_ON(); // 打开LCD电源
SETBIT(PORTD,IO_TXD1); // TXD1置高
//-------------------------------------------------------------------------
RamFill(ComVar.LastCmd,0,7); // 初始化 ComVar
RamFill(&DispVar.DispCode,0,7); // 初始化 DispVar
RamFill(PowerVar.ActInPow,0,12); // 初始化 PowerVar
RamFill(&TimeVar.SecTimer,0,14); // 初始化 TimeVar
ComVar.AdjustEn=0x55;
ComVar.ProgEn = 0x55;
//-------------------------------------------------------------------------
// 允许INT0中断
SETBIT(EIFR,INTF0); // 清除INT0中断标志
SETBIT(EIFR,INTF1); // 清除INT1中断标志
SETBIT(TIFR0,TOV0); // 清除T0溢出中断标志
TCNT0=_TCNT0_LOAD; // T0赋初值
//-------------------------------------------------------------------------
CLRBIT(ADCSRB,ACME); // 比较器初始化// 由AN1输入负端
CLRBIT(ACSR,ACD); // 使能比较器
// 使用片内基准;比较器输出上升沿中断;下降沿为10;清除比较器中断标志
ACSR = (1<<ACBG)|(1<<ACIS1)|(1<<ACIS0)|(1<<ACI);
SETBIT(ACSR,ACIE);
PowerVar.PowerChange = 0xAA; // 置位电量改变标志
//-------------------------------------------------------------------------
PowerBits = 0; // 清除电能标志
PulseBits = 0; // 脉冲标志清零
ComBits = 0; // 通讯标志清零
Com1Bits = 0; // 清除串口1通讯标志
Com2Bits = 0; // 清除串口1通讯标志
TimeBits = 0; // 清除时间标志
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
Com1Reset(); // 复位串口1
Com2Reset(); // 复位串口2
InitLcd();
PowerOnReadPower(); // 上电读入电能
PowerOnReadParameter(); // Power-on read parameters
AdjustVar.CurrtConst_A = AdjustVar.AdjustConst_A;
AdjustVar.CurrtConst_B = AdjustVar.AdjustConst_B;
AdjustVar.CurrtConst_C = AdjustVar.AdjustConst_C;
AdjustVar.CurrtSumConst = 0;
// CopyEEPToRam(ADDRESS_STATUS,&StatusBits,1); // 取出状态字
// SETBIT(StatusBits,HavePower);
// SETBIT(StatusBits,SwitchOn);
// StatusBits&=0x07;
//-------------------------------------------------------------------------
_WDR(); // 清除看门狗
SREG|= 0x80; // 全局中断允许
}
//*****************************************************************************
// 函 数 : void SafeInitialize(void) *
// *
// 功 能 : 执行系统安全性初始化任务 *
// 注 释 : *
// *
//*****************************************************************************
void SafeInitialize(void)
{
if(++TimeVar.SafeCounter==0x01)
{
EEPVar.WriteProtectAA = 0x55; // EEPROM 写保护
//-----------------------------------------------------------------------------------------
PCICR = 0;//_PCICR_INIT; // 禁止电平变化中断
PCMSK2 = 0;
PCMSK1 = 0;
PCMSK0 = 0;
EEAR = 0;
EEDR = 0;
EECR = 0;
TWAMR = 0; // 硬件I2C
TWBR = 0;
TWCR = 0;
TWSR = 0;
TWAR = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -