?? 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 + -