📄 cpu_init.c
字号:
//函数声明
#include <c8051f020.h> // SFR 声明
void Port_IO_Init() //IO口以及存储器初始化
{
EMI0CF = 0x2C; //选择高端口模式,只用外部存储器,EMIF工作在
//地址/数据复用方式,/WR和/RD占用12个SYSCLK周期
EMI0TC = 0x3C; //地址建立/保持时间为0,ALE高/低脉宽占1个SYSCLK周期
P3MDOUT = 0x2D; //P3.5--> LCD_RES,P3.3--> LCD_REQ,P3.2--> OE574,
//P3.0--> OE574 四位设置为推拉输出方式;
//P3.4--> LCD_BUSY,P3.1-->PS2_DATA两位设置为开漏输出方式。
P74OUT = 0xFF; //将P4,P6,P5,P7口配置为推拉输出方式
P0MDOUT = 0x01; //将TX0,TX1设置为推拉输出方式
P1MDOUT = 0x01;
XBR0 = 0xDF; //按照配置表进行各个外设的配置
XBR1 = 0x1C;
XBR2 = 0x44;
/*额外的配置请在本行文字以下进行配置并请加详细注释*/
/*------------------------------------------------*/
}
void Oscillator_Init() //晶振初始化
{
int i = 0;
OSCXCN = 0x67;
for (i = 0; i < 3000; i++); // Wait 1ms for initialization
while ((OSCXCN & 0x80) == 0);
OSCICN = 0x88;//使用外部22.1184M晶振,使能时钟丢失检测
}
/**************************************************************************************************/
void Interrupts_Init() //中断初始化
{
IE = 0x10;//使能UART0中断
IP = 0x10;//设置UART0中断为高优先级
EIE2 |= 0x02;//使能ADC0中断
}
void Timer_Init()
{
CKCON = 0x10;//定时器1选择系统时钟为时钟源
TMOD = 0x20;//定时器1工作在8位自动重载方式
TH1 = 0xB8;//UART0波特率设为9600bps
TCON = 0x41;//使能定时器1并使外部中断0配置为边沿触发方式
TMR3 = 0x0FFF; //1.5ms启动一次转换
TMR3RLL= 0x0FFF;
TMR3CN = 0x02;//定时器3使用系统时钟
}
void UART0_Init(void)
{
SCON0=0xF0; //通信方式3允许多机通信方式,允许接收
SADDR0=0x01;//主机地址为0x01
SADEN0=0xFF;//全字节地址匹配
}
void ADC0_Init(void)
{
AMX0CF=0x00;//配置各通道为单端输入方式
AMX0SL=0x01;//起始通道为0
ADC0CF = 0x40;//AD时钟为2.5M,PGA增益为1
ADC0CN = 0x44;//关闭AD,使用转换前3SAR跟踪保持方式,使用定时器3溢出启动采集
REF0CN = 0x03;//使能带隙基准和缓冲放大器
}
void Init_Device(void)
{
Oscillator_Init();
Port_IO_Init();
Interrupts_Init();
Timer_Init();
UART0_Init();
ADC0_Init();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -