- 外围电路简单,晶振及复位电路非必要,如果使用外部有源或无源晶振。需要系统启动时先进行切换
void set_clock(void)//切换外部有源晶振
{
P_SW2=0X80;// 访问寄存器位于扩展SFR,需最高位置1
XOSCCR=0X80;//启动外部时钟,有源晶振
while(!(XOSCCR&1));//等待时钟稳定
CLKDIV=0x00;//时钟不分频
CKSEL=0X02;//选择外部晶振
P_SW2=0X00;// 关闭外部寄存器访问
}
- ADC是12位的,精密ad外部基准电压接2.5v基准,一般需求连接vcc。16通道,最后一个通道是内部基准电压,出厂写入外部ram内
int *BGV ;//内部16通道ad模拟量值,单位mv
BGV=(int idata *)0xef;//指针赋值
vcc=(unsigned int)(4095L* *BGV/current);//根据内部基准电压,算外部电压
从BGV读取的值是1282,表示16通道的内部基准电压是1282mv。
- 增强型PWM输出,8路PWM输出计数器PWMC是公用的,因此输出频率一样的
void pwm_init(void)
{
P_SW2=0X80;// 访问寄存器位于扩展SFR,需最高位置1
P2M0=0X00;
P2M1=0X00;
PWMCKS = 0x09; // PWM时钟为系统时钟,10分频
// PWMC = 0x0; //设置PWM周期为1000H个PWM时钟
// PWM0T1= 0x0; //在计数值为100H地方输出低电平
// PWM0T2= 0; //在计数值为500H地方输出高电平
// PWM0CR= 0x80; //使能PWM0输出
P_SW2 = 0x00;
PWMCR = 0x80; //启动PWM模块
}
void set_pwm(void)
{
P_SW2=0X80;
pwm_c=(uart1rx_buffer[15]<<8)|uart1rx_buffer[16];//获取频率设定值
if(pwm_c==0)//获取频率设定值=0,低电平
{
PWMC=0;//周期计数值
PWM0T1=0;
PWM1T1=0;
PWM2T1=0;
}
.....
- 输入捕获,4路的计数器的计数器是公用的,因此同时只能计算一路的脉冲输入。
- 4个串口,在同波特率的情况下,可共用一个定时器。
2022.3.11因为STC8A8K32S4停产,需要更换为STC8A8K32D4
利用读取ROM指定地址,获取ID,前两位可区分两种芯片