📄 lpc935init.c
字号:
#include"reg935.h"
#include"UserDef.h"
/****************************************/
/* CPU 初始化子程序 */
/****************************************/
void Lpc935Init(void)
{
AUXR1 = 0x00;
//时钟的设置
TRIM |= 0x3F;
DIVM = 0x00; //CCLK = Fosc
//端口设置
P0M1=0xDF; //P0.5 设置为推挽输出状态,其余为输入状态
P0M2=0x20;
P1M1=0xBC; //P1.0/P1.1 设置为准双向状态,P1.2/P1.3/P1.6 设置为开漏输出,
P1M2=0x4C; //其余为输入状态
P2M1=0xFF; //P2.0 设置为开漏输出,其余为输入状态
P2M2=0x01;
//------------------------
// ADINS=0xF7; //1111 0111, 选择除AD03 外所有channel
ADMODA=0x01; //0000 0001, 选择转换工作模式,单次转换模式
ADMODB=0x60; //500Khz < ADC CLK < 3.3Mh,二分频,6M/2 =3M, 0010 0000 = 0x20 12M/4 = 3M 0110 0000 = 0x60
ADCON0=0x00; //选择转换触发模式,立即启动,不中断,0000 0101
ADCON1=0x00;
EADEE=0; //ADC/EEPROM中断不使能
// RTC 设置
IEN0 = 0xC0; //使能RTC中断,使能EA中断 *为什么在IEN0中已经将EWDRT = 1,下面还要重复什么意思?*
EWDRT = 1; //允许看门狗/时钟中断 (WDT用作看门狗定时器,作用?为何又没有WDL) 因为看门狗中断和RTC共用一个中断向量,
//所以要将看门狗定时功能开启,但不需要看门狗功能,将看们狗停止运行。
WDCON = 0xE0; //关闭看门狗中断
RTCH = RTC_RELOAD_H;
RTCL = RTC_RELOAD_L; //CCLK=6MHz , 1s 中断1次时,RTC的定时值
RTCCON = 0x63; //开启RTC模块
//------------------------
PCONA = 0x25; // 将不用的模块内部始终禁止
//------------------------
TMOD = 0x11; //设定T0为方式1,T1为方式1,定时器状态,由TR0和TR1起停
TH0 = TIME_10ms_H; //设定定时时间为10ms
TL0 = TIME_10ms_L;
//UART 设置
//TH1 = 0xf3;
//TL1 = 0xf3; //波特率为4800
//PCON = 0x80; //波特率倍增
SSTAT = 0x00; //双缓冲器禁止
SCON = 0x40; //串行口方式1
BRGCON = 0x00; //还是BRGCON = 0X02???难道是为了下面BRGR可以写时间常数?因为当BRGEN=1是,不可以写时间常数。
BRGR1 = 0x13; //波特率为2400, 6MHz/2400 = x + 16 --> x = 0x09B4 12MHz/2400-16 = 0x1378
BRGR0 = 0x78;
BRGCON = 0x03; //启动波特率发生器
REN = 1; //启动接收
//IT0 = 0; //外部中断0为电平触发
IT1 = 1; //外部中断1为下降沿触发
//ES = 1;
EX1 = 1;
ET0 = 1; //T0中断使能
TR0 = 1;
EA=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -