📄 config.#2
字号:
// Config Routine
void config (void)
{ unsigned int n = 0; //用于等待振荡器稳定计数
EA = 0;
// WDTCN = 0x07; //位2-0,最大时间间隔,本系统中约56ms
// WDTCN = 0xA5; //写入0xA5 将使能并复位WDT。
//写入0xFF 将锁定禁止功
WDTCN = 0xDE;
WDTCN = 0xAD;
// Configure the XBRn Registers
EMI0CF=0x00; //外部存储器接口配置,此处忽略,
//以下对于XB0,XB1,0表示不连到引脚
XBR0 = 0x04; //CP0=0; ECI0=0; PCA0=001; UART0=1; SPI0=1; SMB0=1;
XBR1 = 0x00;//18; //SYSout=0; T2EX=0; T2=0; /INT1=1; T1=1; /INT0=0; T0=0; CP1=0
XBR2 = 0x40; //弱上拉禁止=0;XBARE=1; NOP; T4EXE=0;T4E=0; UART1=1;EMIF=0; CNVSTR=0
//端口配置,默认为开漏输出数字输入(1 = Push Pull Output and digital input)
P0MDOUT = 0xFC; //P0.7:RTCCK; P0.6:RTCDA; P0.[5:2]:SPI; P0.1:RX0; P0.0:TX0 0011 1100
P1MDOUT = 0xFF; //P1.[7:6]:NOP; P1.5:INT1; P1.4:T1; P1.3:CEX1; P1.2:PLSOut/CEX0; P1.1RX1; P1.0:TX1 1100 1001
P2MDOUT = 0xFF; //P2.[7:4]:NOP; P2.3:485TE;P2.2:485RE; P2.1:NOP; P2.0:232SHDN 1111 1111
P3MDOUT = 0xFF; //P3.7:NOP; P3.6:PlugIn,P3.5:NOP; P3.4:Marksqu; P3.[3:0]:LCD 1010 1111
P74OUT = 0xFF; //P7:RAM数据口;P[6:5]:RAM地址口; P4:NOP
P1MDIN = 0xFF; //全部数字输入
EMI0CF = 0;//0x38; //NOP2;EMIF选择高端1;非复用1;带块选择10;//ALE脉宽2个系统时钟周期:01
CPT0CN = 0x00; //禁用
CPT1CN = 0x00; //禁用
// Oscillator Configuration
OSCXCN = 0x67; //外部振荡器控制字,不分频
for (n = 0; n < 255; n++) ; //等待振荡器起振 while ( (OSCXCN & 0x80) == 0 ); //等待振荡器稳定 OSCICN = 0x08; //时钟丢失检测使能=0;NOP=00;内部振荡频率准备好标志=0;
//系统时钟=外部振荡器(1);内振使能=0;内频率00
// Reference Control Register Configuration
REF0CN = 0x03; //NOP=000;AD0VREF=VREF0(0);AD1VREF=VREF1(0);
//内部温度传感器使能=0;BIASE=1;内电压基准缓冲器=1
// ADC Configuration
AMX0CF = 0x00; //NOP=0000,AIN67,45,23,01不作差分输入配对
AMX0SL = 0x00; //通道选择,高字节忽略,低字节选择AIN0-7(0000-0111)或温度传感器(1xxx)
ADC0CF = 0x38; //*.7-3:转换速率控制位,取4,18M/5=2.2M;*.2-0:PGA G=1(000) 00111 000
ADC0CN = 0xC1; //AD0EN=1;AD0TM=1;AD0INT=0,标志,软清;ADC0BUSY=0;
//ADC0CM=00,置ADC0BUSY启动跟踪;窗口比较匹配标志=0;AD0LJST=1,左对齐
ADC0H = 0x00;
ADC0L = 0x00;
//窗口比较寄存器
ADC0LTH = 0x00; // ADC0 Less-Than High Byte Register
ADC0LTL = 0x00; // ADC0 Less-Than Low Byte Register
ADC0GTH = 0xFF; // ADC0 Greater-Than High Byte Register
ADC0GTL = 0xFF; // ADC0 Greater-Than Low Byte Register
AMX1SL = 0x00; // AMUX1 Channel Select Register
ADC1CF = 0x00; // ADC1 Configuration Register
ADC1CN = 0x00; // ADC1 Control Register
// DAC Configuration
DAC0CN = 0x00;//0x84;// //10000 100
DAC0L = 0x00; // DAC0 Low Byte Register
DAC0H = 0x00; // DAC0 High Byte Register
DAC1CN = 0x00;//0x84;// // DAC1 Control Register
DAC1L = 0x00; // DAC1 Low Byte Register
DAC1H = 0x00; // DAC1 High Byte Register
// SPI Configuration
SPI0CN = 0x00; // SPI Control Register
SPI0CFG = 0x00; // SPI Configuration Register
SPI0CKR = 0x00; // SPI Clock Rate Register
// UART Configuration------暂不设置
SCON0 = 0x50; //方式1,8位可变波特率
SADEN0 = 0x00; // Serial 0 Slave Address Enable
SADDR0 = 0x00; // Serial 0 Slave Address Register
PCON = 0x00; //使能波特率除2功能
SCON1 = 0xD0; //方式3,9位可变波特率
SADEN1 = 0x00; // Serial 1 Slave Address Enable
SADDR1 = 0x00; // Serial 1 Slave Address Register
// SMBus Configuration
SMB0CN = 0x47; //忙标志0;使能位1;起始标志0;停止标志0;中断标志0;确认标志1;空闲定时器使能1;超时使能1;
SMB0ADR = 0x0; // SMBus Address Register
SMB0CR = -160; // SMBus Clock Rate Register
// PCA Configuration
PCA0MD = 0x00; //PCA一直工作=0;NOP=000;系统时钟12分频000,ECF=0,禁止CF中断
PCA0H = 0x00; // PCA Counter/Timer High Byte
PCA0L = 0x00; // PCA Counter/Timer Low Byte
PCA0CN = 0x40; //CF=0;CR=1;NOP=0;CCF4-0=0;各种标志只能软件清;另:写完初值再配置PCA0CN顺便启动
//Module 0
PCA0CPM0 = 0x31; //升降边沿触发捕捉,允许中断
PCA0CPL0 = 0x00; //PCA初值0x03E8=1000
PCA0CPH0 = 0x00; //一定要先写低字节后写高字节
//Module 1
PCA0CPM1 = 0x00; //
PCA0CPL1 = 0x00; // PCA Counter/Timer Low Byte
PCA0CPH1 = 0x00; // PCA Counter/Timer High Byte
//Module 2
PCA0CPM2 = 0x00; // PCA Capture/Compare Register 2
PCA0CPL2 = 0x00; // PCA Counter/Timer Low Byte
PCA0CPH2 = 0x00; // PCA Counter/Timer High Byte
//Module 3
PCA0CPM3 = 0x00; // PCA Capture/Compare Register 3
PCA0CPL3 = 0x00; // PCA Counter/Timer Low Byte
PCA0CPH3 = 0x00; // PCA Counter/Timer High Byte
//Module 4
PCA0CPM4 = 0x00; // PCA Capture/Compare Register 4
PCA0CPL4 = 0x00; // PCA Counter/Timer Low Byte
PCA0CPH4 = 0x00; // PCA Counter/Timer High Byte
// Timer Configuration----unused
CKCON = 0x00; //T0,T1,T2,T4使用系统时钟12分频 18.432/12=1536KHz
TH0 = -192; // Timer 0 High Byte
TL0 = -192; // Timer 0 Low Byte
TH1 = (65536 - 1536)/256; // Timer 1 High Byte,定时10ms
TL1 = (65536 - 1536)%256; // Timer 1 Low Byte
TMOD = 0x12; //T1模式1定时10ms,T0模式2定时125us
TCON = 0x00; //TF1=0;TR1=1;TF0=0;TR0=1;IE1=0;IT1=0;IE0=0;IT0=1外部中断0配置下降沿有效
RCAP2H = (65536 - BAUD_RATE_57600)/256; //重装初值
RCAP2L = (65536 - BAUD_RATE_57600)%256; //
TH2 = (65536 - BAUD_RATE_57600)/256; //初值
TL2 = (65536 - BAUD_RATE_57600)%256; //
T2CON = 0x34; //T2作为UART0的接收发送时钟,
TMR3RLL = 0x00; //定时25ms = (0x10000-0x6A00)/(18432/12)
TMR3RLH = 0x00; //
TMR3L = 0x00; //
TMR3H = 0x00; //用作SM低电平超时检测
TMR3CN = 0x00; //溢出标志0;NOP:0000;TR3:1;使用SYS/12:0;选择时钟来SYS:0
RCAP4H = 0x00; //Baudrate = 9600
RCAP4L = 0x00; //
TH4 = 0x00; //
TL4 = 0x00; //
T4CON = 0x00; //T4作为UART1的接收发送时钟,
// Reset Source Configuration
//
// Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0
//------------------------------------------------------------------
// R | R/W | R/W | R/W | R | R | R/W | R
//------------------------------------------------------------------
// JTAG |Convert | Comp.0 | S/W | WDT | Miss. | POR | HW
// Reset |Start | Reset/ | Reset | Reset | Clock | Force | Pin
// Flag |Reset/ | Enable | Force | Flag | Detect| & | Reset
// |Enable | Flag | & | | Flag | Flag | Flag
// |Flag | | Flag | | | |
RSTSRC = 0x00; // Reset Source Register
// Interrupt Configuration
IE = 0x10; //EA=0; IEGF0=0; ET2=0; ESUART0=1; ET1=0; EX1=0; ET0=1; EX0=0
IP = 0x02; //NOP=00; PT2=0; PUART0=0; PT1=0; PX1=0; PT0=1; PX0=0
EIE1 = 0x00; //ECP1R=0; ECP1F=0; ECP0R=0; ECP0F=0; EPCA0=0; EWADC0=0; ESMB0=1; ESPI0=0;
EIE2 = 0x00; //EXVLD=0; EES1=1; EEX7=0; EX6=0; EADC1=0; ET4=0; EADC0=0; ET3=1
EIP1 = 0x00; //PCP1R=0;.000..PPCA0=0,..000
EIP2 = 0x00; //Extended Interrupt Priority 2
EA=1;
EA=1; //冗余指令
// other initialization code here...
} //End of config
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -