📄 initial.#1
字号:
void Sys_Init(void)
{
unsigned char delay; // 用于测试目的
WDTCN = 0xde; // 禁止看门狗定时器
WDTCN = 0xad;
// #if OSCEN //使用内部晶振
// {
// OSCICN |= 0x03; // 设置内部振荡器为最高频率(16 MHz)
// }
// #else //外部晶振
// {
OSCXCN = 0x66; // Enable external crystal
delay=256; // Delay >1 ms before polling XTLVLD.
while(delay--);
while (!(OSCXCN & 0x80)); // Wait until external crystal has
// started.
OSCICN = 0x0C; // Switch to external oscillator
OSCICN = 0x88; // Disable internal oscillator; enable
// missing clock detector.
while (!(OSCXCN & 0x80)); // Wait until external crystal has
// started.
OSCICN = 0x08; // Switch to external oscillator
// }
// #endif
XBR0 = 0x07; // 通过交叉开关将SMBus/SPI/UART连到通用I/O引脚
//UART P0.6,P0.7
XBR1 = 0x00;
XBR2 = 0x40; // 允许交叉开关和弱上拉
SPI0CN=0x01; //允许SPI;
SMB0CN = 0x44; // 允许SMBus在应答周期发送ACK
SMB0CR = -80; // SMBus时钟频率 = 100kHz.
EIE1 |= 2; // SMBus中断允许
PRT1CF |= 0x44; // enable P1.6 (LED) as a push-pull output
PRT0CF |= 0x04;
PRT2CF |= 0x01;
//PRT1CF |= 0x40;
// set up Timer3 for auto-reload to generate interrupts at 100ms intervals
TMR3CN = 0x00; // stop Timer3
TMR3RLH = ((-TC_100ms >> 8) & 0xff); // init Timer3 reload value
TMR3RLL = (-TC_100ms & 0xff);
TMR3H = 0xff; // init Timer3 to reload immediately
TMR3L = 0xff;
EIE2 = EIE2 | 0x01; // enable Timer3 OVR interrupt
//TMR3CN = 0x04; // start Timer3
EA = 1; // 全局中断允许
SM_BUSY = 0; // 为第一次传输释放SMBus
MODECON =1; //充放电模式控制(0为放电,1为充电)
CH=1;
RT=0;
}
void UART0_Init (void)
{
SCON = 0x50; // SCON: mode 1, 8-bit UART, enable RX
TMOD = 0x22; // TMOD: timer 1,TIMER0, mode 2, 8-bit reload
TH1 = 0xFA;//-(SYSCLK/BAUDRATE/16); // set Timer1 reload value for baudrate
TL1=TH1;
TH0=DAH;
TL0=DAL;
CKCON |= 0x18; // Timer1,TIMER0 uses SYSCLK as time base
PCON |= 0x80; // SMOD = 1
ES0=1;
ET0=1;
ET2=1;
TR0=1;
TR1 = 1; // start Timer1
T2CON =0x00; //用定时器1的溢出脉冲做串口发送/接收时钟,定时器、
RCAP2H =0xfe; //TR2=0,停计数器、,具有重装载功能
RCAP2L =0xfb; //1个字节10位占用174个机器周期,
TH2 =0xfe; //等待10个字节时须在16位模式下设置为0xf933
TL2 =0xfb;
}
void DAC_Init(void)
{
REF0CN=1; //使能基准参考电压
DAC0CN=0x80;//DAC0DF=000;
REF0CN=0x03;//
}
void Var_Init(void)
{
unsigned char i;
for ( i=0; i<10; i++)
RECVCHARS[i]=0;
RECVCHARS[9]=0;
for ( i=0; i<RBUFSIZE; i++)
RData[i]=0; //串口接收数据缓冲区定义为30字节
for ( i=0; i<SBUFSIZE; i++)
SData[i]=0; //串口接收数据缓冲区定义为30字节
Pos = 0;
DataNo = 0;
RECVTIMES=0;
DataSended=0;
TestVar=0;
Head=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -