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

📄 main.c

📁 本代码以AVR单片机为主控制器
💻 C
📖 第 1 页 / 共 2 页
字号:
/************************************* (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 + -