📄 inition.c
字号:
#include "C8051F020.h"
#include "Global.h"
bit SM_BUSY; // This bit is set when a send or receive
// is started. It is cleared by the
// ISR when the operation is finished.
unsigned char Count1ms;
void SYSCLK_Init(void);
void Inition(void);
void Init_adc(void);
void PORT_Init(void);
void SPI0_Init(void);
void UART0_Init(void);
void UART1_Init(void);
void Timer0_Init(void);
void Timer2_Init(void);
void Init_Max706(void);
void Init_DS1032(void);
void main (void)
{
Inition();
while(1)
{
}
}
/***********************************************
函数名称:Inition();
***********************************************/
void Inition(void)
{
WDTCN = 0xDE; // Disable watchdog timer
WDTCN = 0xAD;
XBR2 |=0x44;
EMI0CF =0x27; // p0~p3;multiplex;share low 4K XRAM 0x24
P74OUT=0X03; //P4-P7为推挽输出,如果需要漏极开路相应为写入0即可
SYSCLK_Init (); // initialize oscillator
//DAC1CN=0X87;
Init_adc();
PORT_Init (); // initialize crossbar and GPIO
SPI0_Init (); //初始化SPI0
UART0_Init (); // initialize UART0
Timer0_Init(); //初始化定时器0
Timer2_Init();//初始化定时器1
UART1_Init();
//Timer4_Init();
/* EA = 1; // Enable global interrupts
ET0=1;//by hongyf
ES0=1;
ET2=1;//by hongyf
*/
EA = 1; // Enable global interrupts
ES0=1;
ET0=1;//by hongyf
ET2=1;//by hongyf
P5=0X00;
P6=0XFF;
}
/***********************************************
函数名称:SYSCLK_Init();
***********************************************/
void SYSCLK_Init(void)
{
int i; // 延时计数器
OSCXCN = 0x67; // 开启外部振荡器 22.1184MHz晶体
for (i=0; i < 4096; i++) ; // 等待振荡器启振
while (!(OSCXCN & 0x80)) ; // 等待晶体振荡器稳定
OSCICN = 0x88; // 选择外部振荡器为系统时钟源并允许丢失时钟检测器
}
/***********************************************
函数名称:Init_adc();
***********************************************/
void Init_adc(void)
{
ADC0CN = 0x81; // ADC0 enabled; normal tracking
// mode; ADC0 conversions are initiated
// on write to AD0BUSY; ADC0 data is
// left-justified
REF0CN = 0x07; // disable temp sensor, on-chip VREF,
// and VREF output buffer
AMX0SL = 0x07;
//AMX0CF=0x00;
ADC0CF = (SYSCLK/2500000) << 3; // ADC conversion clock = 2.5MHz
// ADC0CF |= 0x01; // PGA gain = 2
EIE2 &= ~0x02; // disable ADC0 EOC interrupt
EIE1 &= ~0x04; // disable ADC0 window compare interrupt
}
/***********************************************
函数名称:PORT_Init();
***********************************************/
void PORT_Init(void)
{
XBR0 = 0x04; // Enable UART0 0x04
XBR1 = 0x00;
XBR2 = 0x44; // Enable crossbar and weak pull-ups;Enable UART1
P0MDOUT|=0xff; //Enable weak pull-up
P1MDOUT|=0xff;
P74OUT=0xf8;
//P4=0xff;
//P5=0x01;
}
/***********************************************
函数名称:SPI0_Init();
***********************************************/
void SPI0_Init(void)
{
SPI0CFG = 0x07; // data sampled on 1st SCK rising edge
// 8-bit data words
SPI0CFG|=0xC0; //CKPOL =1;
SPI0CN = 0x03; // Master mode; SPI enabled; flags
// cleared
SPI0CKR = SYSCLK/2/8000000-1; // SPI clock <= 8MHz (limited by
// EEPROM spec.)
SMB0CN = 0x44; // Enable SMBus with ACKs on acknowledge cycle
SMB0CR = -80; // SMBus clock rate = 100kHz.
EA = 1; // Global interrupt enable
SM_BUSY = 0;
}
/***********************************************
函数名称:UART0_Init();
***********************************************/
void UART0_Init(void)
{
CLR485CS; //接收模式
SADDR0=0x00; //0X01; //设置本机地址
SADEN0=0x00; //设置本机地址屏蔽位
SCON0 = 0x50; // SCON0: mode 3, 9-bit UART, enable RX
SCON1 = 0XC0;
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit reload
T2CON = 0x00; // TMOD: timer 2, mode 2, 8-bit reload
TH1 = 0Xfa; //FA-115200 ,0XE8-28800 //-(SYSCLK/BAUDRATE/16); // set Timer1 reload value for baudrate
CKCON = 0x00; // Timer1 uses SYSCLK/12 as time base
PCON |= 0x80; // SMOD00 = 1
TR1 = 1; // start Timer1
SADDR0=0x00; //0X01; //设置本机地址
SADEN0=0X00; //设置本机地址屏蔽位 //设置本机地址屏蔽位
}
/***********************************************
函数名称:UART1_Init();
***********************************************/
void UART1_Init(void)
{
SET485CS1; //接收模式
SADDR0=0x00; //0X01; //设置本机地址
SADEN0=0x00; //设置本机地址屏蔽位
SCON0 = 0x50; // SCON0: mode 3, 9-bit UART, enable RX
SCON1 = 0XC0;
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit reload
T2CON = 0x00; // TMOD: timer 2, mode 2, 8-bit reload
TH1 = 0Xfa; //FA-115200 ,0XE8-28800 //-(SYSCLK/BAUDRATE/16); // set Timer1 reload value for baudrate
CKCON = 0x00; // Timer1 uses SYSCLK/12 as time base
PCON |= 0x80; // SMOD00 = 1
TR1 = 1; // start Timer1
SADDR0=0x00; //0X01; //设置本机地址
SADEN0=0X00; //设置本机地址屏蔽位
}
/***********************************************
函数名称:Timer0_Init();
***********************************************/
void Timer0_Init(void)
{
CKCON |= 0x08;
TMOD |= 0X01; //16Bit
Count1ms=10;
TR0 = 0; // STOP Timer0
TH0 = 0xFD; // set Timer0 to overflow in 1ms
TL0 = 0xDA;
IE|= 0x02;
}
/***********************************************
函数名称:Timer2_Init();
***********************************************/
void Timer2_Init(void)
{
TR2=0;
CKCON |= 0x10;
T2CON = 0x34; // Timer 2 Control Register
RCAP2H = 0xff; // Timer 2 Capture Register High Byte
RCAP2L = 0xff; // Timer 2 Capture Register Low Byte
TH2=0x00;
TL2=0x00;
TR2=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -