本次实验是利用SC92F8003的Pin20引脚输出占空比可变的PWM信号驱动LED工作,代码以官方DEMO为蓝本但没有采用中断方式。
一、实验环境
1、Keil MDK51 9.59
2、SC-LINK
3、SC92F8003的DEMO硬件板
4、8位LED模块
二、实验过程
1、PWM6初始化程序参考了官方的DEMO。
- void PWM_Init(void)
- {
- PWMCFG = 0x55; //135输出不反向,0246输出反向
- PWMCON0 = 0X83; //打开PWM、时钟16周期低2位为11
- PWMDTYB = 0XaA; //PWM456占空比低两位Duty
- PWMPRD = 0xff; //设置PWM周期高8位
- PWMCON1 = 0X7f; //独立模式,打开PWM模块0~6
- PWMDTY6 = 0X00; //设置PWM6占空比高8位
- }
2、主程序中忽略的低2位,只对占空比的高8位进行了配置。
- #include <SC92F8003_C.H>
- #include "delay.h"
- #include "pwm.h"
- unsigned char i=0;
- bit flag = 0;
-
-
- void main(void)
- {
- PWM_Init();
- while(1)
- {
- if(flag==0)
- {
- i++;
- PWMDTY6 = i;
- delayms(50);
- if(i==255)flag = 1;
- }
- if(flag)
- {
- i--;
- PWMDTY6 = i;
- delayms(50);
- if(i==0)flag = 0;
- }
- }
- }
3、系统时钟配置为16MHz
三、实验现象
接在Pin20的LED受PWM6的输出控制,LED按灭->渐亮->最亮->渐暗->灭进行循环。
四、总结
SC92F8003的PWM模块使用比较方便,配置也比较简单。另外其PWM还可以配置成3组“互补模式”,利用这种模式对电机进行控制也是比较方便的,后期准备搭一个电机模块,并利用“互补模式”的PWM信号对其进行控制实验。
|