本帖最后由 芯圣电子官方QQ 于 2023-7-25 10:28 编辑
先说一下邮寄 HC89S003P DEMO 问题(ISP下载不稳定问题)
将供电上的电容由 47uf 改10uf ,就ISP下载就稳定了(见图片)
实验项目: LED调光灯 锂电池供电
MCU: HC89S001P
输出引脚: P21(按键) P00(指示灯) P03(冷光) P04(暖光)
PWM的周期大于50HZ,选择100HZ 则为10ms(便于100整除)或10.24ms(便于256整除)
PWM的占空比 习惯性100等份 或 三色时256色的等份。
备注: 16Mhz 12位的PWM(0~4096)
如果周期10ms-- 1ms(pwm 时钟/1000)*10 < 4096
因为 1分频16Mhz 8分频2Mhz 32分频500Khz 128分频 125Khz
所以 128分频 125Khz 满足要求
---PWM0C = 0x03;/PWM0高有效,PWM01高有效,时钟128分频
//---主函数-----
void main()
{
/************************************系统初始化****************************************/
WDTCCR = 0x00; //关闭看门狗
//本例程为方便测试关闭看门狗,实际使用中,建议客户打开看门狗,详见WDT复位例程
CLKSWR = 0x51; //选择内部高频RC为系统时钟,内部高频RC 2分频,Fosc=16MHz
CLKDIV = 0x01; //Fosc 1分频得到Fcpu,Fcpu=16MHz
ConfigGPIO(); //IO配置
ConfigTimer0(1); //定时器T0配置
ConfigPwm0(); //pwm配置
WDTC = 0x57; //允许WDT复位,允许掉电/空闲模式下运行,1024分频
//WDT使用的是RC44K时钟,WDT_CLOCK_1024是1024分频,初值为0xFF
//定时时间 = 1024 * 0xFF / 44000
// = 5.93s
WDTCCR = 0xFF; //写入00时,将关闭WDT功能(但不关闭内部低频RC)
while(1)
{
WDTC |= 0x10; //置寄存器 WDTC 的 第4位,清看门狗
KeyTask1();
}
}
其它具体见附件 原理方框图和流程图 -原理图-源代码 -
|