1. 配置字
1.OSC1 12M,
2.OSC1为32768.OSC2为内部12M
3.OSC1为32768 OSC2 外部晶振400K--12M
2. OSC时钟
开启OSC2的时候需要等待片刻。配置OSC2作为SYSCLK
PLLCON开启锁相环,只有48M的二分频。
3.开启校准功能
实际测试发现时钟不准确,需要校准。
4.PWM配置
PWM1PH = 2000>>8;
PWM1PL = 2000%256;
PWM1DH = 1500>>8;
PWM1DL = 1500%256;
PWM1CON = 0x81;
配置周期寄存器,占空比寄存器,开启PWM,配置占空比是高电平还是低电平。
5.串口配置
// bref: ´®¿Ú³õʼ»¯
// para:
// note:
static void uart_init(void)
{
SCON = 0x50;
/*???????,???9600*/
/* ????:(int)X=FSY/(16*???) ; SBRT=32768-X ; SFINE=(FSY/???)-16*X FSY=24M*/
SBRTH=0xFF;
SBRTL=0xF3;
SFINE=0x04;
}
x = FSY/(16*波特率) SBRT = 32768-x. SPINE = (FSY/波特率)-16*x
SBRTH 最高位是使能位。
测试波特率正常
使用printf 需要实现
char putchar(char c)
{
SBUF = c;
while(!TI);
TI=0;
}
和arm的不一样,这个可以在stdio.h中看到接口。
6 ADC(20位)
搞了半天发现还需要开启ADC的参考电压。
static void adc_init(void)
{
ADCON = 0x00; //ADON, VDD as vref, no trigger
/***************************************************************************************
24M SYSCLK, 100ksps
****************************************************************************************/
ADT = 136;
// ADREF Ñ¡ÔñÍⲿ²Î¿¼
//ADCON |= 1<<4;
// ÅäÖÃP1.1 -- P1.2 ΪAIN0+ AIN0-
ADCH |= 0x01;
//
ADCDS |= 0x01;
// PGA 64±¶·Å´ó
PGAM = 0xC0|(1<<2);
// ¿ªÆôPGA
}
使能P1.1--P1.2差分输入。
开启PGA功能。