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

📄 system_init.c

📁 电源检测系统 能够检测电源的过欠压,报警
💻 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 + -