📄 init.c
字号:
#include "REG931.H"
#include "memory.h"
#include "system.h"
#include "key.h"
#include "vfd.h"
#include "display.h"
#include "uart.h"
#include "iic.h"
/*****************************
;看门狗初始化子程序
;注意初始化后启动看门狗
*****************************/
void Init_WDT(void) {
#ifdef INCLUDE_WATCHDOG
ACC = WDCON; //读取WDT 控制寄存器
ACC = ACC | 0x04; //置位ACC.2 准备启动WDT
// ACC = 0xE5;
WDL = 0x80; //设置8 位倒计时器初值// 0xff
WDCON = ACC; //启动WDT
WFEED1 = 0xA5; //清零第一部分
WFEED2 = 0x5A; //清零第二部分
#endif
}
/*****************************
;喂狗子程序
;注意程序中开启中断
*****************************/
void ClrWDT(void) { // clear watch dog timer
#ifdef INCLUDE_WATCHDOG
EA = 0; //关闭中断
WFEED1 = 0xA5; //执行清零第一部分
WFEED2 = 0x5A; //执行清零第二部分
EA = 1; //开中断
#endif
}
//************************************************************************************
// PxM1.y,PxM2.y: 00---准双向;01---推挽; 02---输入(高阻抗); 03---开漏
void InitMcuPort(void){
#if PLCC_PACKAGE_IO
// P0
P0M1=0x00; P0M2=0x04; // p0.2 is 推挽
// P1
P1M1=0x0c; P1M2=0x4c; // p1.6 is 推挽// p1.2; p1.3 is 开漏
// P2: P27,P26,P21,P20=key,
P2M1=0x0; P2M2=0x0;
P2 |= 0xC3; // set keyboard high level
#elif TSSOP_PACKAGE_IO
// P0
P0M1=0x00; P0M2=0x00;
P0 |= 0x0F; // set keyboard high level
// P1
P1M1=0x0c; P1M2=0x4c; // p1.6 is 推挽// p1.2; p1.3 for i2c is 开漏
// P2:
P2M1=0x00; P2M2=0x01; // p2.0 is 推挽
#elif TSSOP_PACKAGE_IO_SECOND
// P0
P0M1=0x00; P0M2=0x00;
P0 |= 0x4e; // set keyboard high level
// P1
P1M1=0x0c; P1M2=0x4c; // p1.6 is 推挽// p1.2; p1.3 for i2c is 开漏
// P2:
P2M1=0x00; P2M2=0x01; // p2.0 is 推挽
#endif
// P3:
P3M1=0; P3M2=0;
}
void Enable_Timer0(){
ET0=1;
TAMOD=0x0;
TMOD |= 0x1;
TH0=0xD4; // xx=0xFFFF-(us*Fosc/2)
TL0=0xCD;
TR0=1;
#if 1
ET1=1;
// TAMOD=0x0;
TMOD |= 0x10;
TH1=0xD4; // xx=0xFFFF-(us*Fosc/2)
TL1=0xCD;
TR1=1;
#endif
}
void Init_Var(void){
// uchar i;
// for(i=1;i<37;i++) // initial diaplay buffer
// DispBuff[i]=0;
bGrid=1;
KeyData=0;
KeyEvent=IDLE;
Mode=SYS_WORK_PRE;
Timer64ms=T64ms_384ms;
bRxDProcessEnd=1;
}
void Init_MCU(void){
BLANK=0;
TRIM &= 0xbf; // disenable clock interrupt
DIVM=0;
// set SPI & T1 is the highest prioty
IP0 = 0x08; IP0H = 0x08; // set timer 1
IP1= 0x08; IP1H = 0x08; // set SPI 0x08
DelayMs(10);
Init_Var( );
FreshAllBuff(ALL_OFF);
InitMcuPort();
SPI_Init( );
DelayMs(100);
KeyScan( );
if(KeyData>K_4)
bDBKeyHoldEn=1;
else
bDBKeyHoldEn=0;
Enable_Timer0();
InitRTC( );
bUartFuncSelectEn=MCU_SEL_HAND_PIN;
#if PLCC_PACKAGE_IO // for debug
bUartFuncSelectEn=1;
#endif
bUartFuncSelectEn=0;
if(bUartFuncSelectEn)
InitUart( );
else
Init_iic( );
Init_WDT( );
EA=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -