?? 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 + -