📄 system_init.c
字号:
#include <C8051F000.h> //寄存器定义
#define uint unsigned int
/*
//外部时钟设置
void Sysclk_Init(void)
{
uint i = 0;
WDTCN = 0xDE; //关闭看门狗
WDTCN = 0xAD;
//WDTCN = 0x05; //开启看门狗
//WDTCN = 0xA5;
OSCXCN = 0x67; //使用内部时钟16MHz使能时钟丢失检测
for(i=0;i<256;i++);
while(!(OSCXCN&0x80));//等待时钟稳定
OSCICN = 0x88; //开启外部时钟使能时钟丢失检测0x88
}
*/
//内部时钟设置
void Sysclk_Init(void)
{
uint i = 0;
WDTCN = 0xDE; //关闭看门狗
WDTCN = 0xAD;
//WDTCN = 0x05; //开启看门狗
//WDTCN = 0xA5;
OSCICN = 0x97; //使用内部时钟16MHz使能时钟丢失检测
for(i=0;i<=500;i++);
while(OSCXCN&0x80); //等待时钟稳定
OSCXCN = 0x00;
}
//端口设置初始化
void Port_Init(void)
{
XBR0 = 0x01; //SDA和SCL连到P0.0 P0.1
XBR1 = 0x00; //INT0和INT1连到引脚
XBR2 = 0x40; //交叉开关使能端口I/O弱上拉使能
PRT0CF = 0xFF; //P0输出方式为推挽
PRT1CF = 0xFF; //P1输出方式为推挽
PRT2CF = 0x00; //P2输出方式为推挽
PRT3CF = 0x00; //P3输出方式为推挽
}
//ADC初始化
void Adc_Init(void)
{
AMX0CF = 0x00; //均为单独输入
AMX0SL = 0x00; //00-->AN0 01-->AN1
ADC0CF = 0x80; //(16M/16)/8转换时钟为8个系统时钟,内部放大增益=1;
ADC0LTH = 0xFF; //ADC上限数据高位
ADC0LTL = 0xFF; //ADC上限数据高位
ADC0GTH = 0x00; //ADC下限数据高位
ADC0GTL = 0x00; //ADC下限数据低位
ADC0CN = 0xC0; //AD使能,C0向ADCBUSY位写1时启动AD转换 CC定时器2溢出启动AD转换
}
//串口初始化
void Uart_Init(void)
{
SCON = 0x50; //方式1和8位UART允许RX
TMOD |= 0x20; //定时器1方式2和8位重装载
TH1 = 0x64; //0xF3为115.2kbps; //0x9C重载值9.6kbps@24MHz
TR1 = 1; //启动定时器1
CKCON|= 0x18; //定时器1使用sysclk作为时其
PCON |= 0x80; //SMOD = 1 ((2^SMOD)/32)*SYSCLK/(12^T1M-1)(256-TH1)
ES = 1; //串口中断允许
TI = 0; //发送中断标志
TR1 = 1; //定时器1允许运行
}
//DAC初始化
void Dac_Init(void)
{
DAC0CN = 0x80; //DA0使能
DAC1CN = 0x80; //DA1使能
REF0CN = 0x07; //内部温度传感器使能ADC和DAC偏压使能
//系统基准电压为内部电压
}
//TIME0中断初始化
void Time0_Init(void)
{
TL0 = 0x00;//0xD7;
TH0 = 0x80;//0xFE;
TMOD |= 0x01; //定时器0允许采用十六位定时器计数
TCON |= 0x10; //TR0 = 1定时器0允许
ET0 = 1; //使能定时器0
}
//TIME3中断初始化
void Time3_Init(void)
{
TMR3RLL=0x00;
TMR3RLH=0x40;
TMR3L=0xFF;
TMR3H=0xFF;
EIE2 |= 0x01; //0x01允许定时器3中断 0x00禁止
TMR3CN|=0x04; //0x04定时器3运行允许 0x00禁止
TMR3CN|=0x02; //0x02定时器3使用系统时钟
}
void I2c_Init(void)
{
SMB0CN = 0x44; // 允许SMBus在应答周期发送ACK
SMB0CR = -80; // SMBus时钟频率 = 100kHz.
EIE1 |= 0x02; // SMBus中断允许
}
/*
//外部中断0初始化
void Int_Init(void)
{
IE = 0x15; //外部中断0和1允许
IP = 0x00; //串口为高优先级
TCON|= 0x0F; //INT1和INT0允许采用边沿触发
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -