STCC5A60S内部PWM应用.doc

上传人:李司机 文档编号:1166057 上传时间:2022-07-12 格式:DOC 页数:6 大小:78KB
返回 下载 相关 举报
STCC5A60S内部PWM应用.doc_第1页
第1页 / 共6页
STCC5A60S内部PWM应用.doc_第2页
第2页 / 共6页
STCC5A60S内部PWM应用.doc_第3页
第3页 / 共6页
STCC5A60S内部PWM应用.doc_第4页
第4页 / 共6页
STCC5A60S内部PWM应用.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《STCC5A60S内部PWM应用.doc》由会员分享,可在线阅读,更多相关《STCC5A60S内部PWM应用.doc(6页珍藏版)》请在三一办公上搜索。

1、PWM.实例一:电路图如上,该程序的功能是利用按键S1对LED的亮度进行调节.程序如下:#includeSTC12C5A.h/注意这个头文件,用reg52是不行的,如果你没有的话,可以去百 / /度文档里搜索STC12C5A系列单片机头文件,有我共享的头文件.void delay unsigned char i; for0;t- fori=0;i;void mainCCON=0; /PCA初始化CL=0; /PCA的16位计数器低八位CH=0; /PCA的16位计数器高八位CMOD=0x00;/选择 系统时钟/12 为计数脉冲,则PWM的频率f=sysclk/256/12;CCAP0H=0x8

2、0; / 占空比控制CCAP0L=0x80; PCA_PWM0=0x00; /控制占空比的第九位为0CCAPM0=0x42; /允许P13作为PWM输出CR=1; /启动PCA计数器whileifdelay;while;CCAP0H+=10; /占空比调节CCAP0L+=10;实例二:两个文件main.c#include #include #define U8 unsigned char#define U16 unsigned intvoid DelayMs;void PWM_clock;void PWM_start;/ 延时子程序/void DelayMs /在11.0592M晶振下,stc

3、10f系列单周期指令的ms级延时 U16 i;while fori = 0; i ;/主函数入口/sfr CCON = 0xD8; /PCA控制寄存器sfr CMOD = 0xD9; /PCA模式寄存器sfr CCAPM0 = 0xDA; /PCA模块0模式寄存器 /模块0对应P1.3/CEX0/PCA0/PWM0 sfr CCAPM1 = 0xDB; /PCA模块1模式寄存器 /模块1对应P1.4/CEX1/PCA1/PWM1sfr CL = 0xE9; /PCA 定时寄存器 低位sfr CH = 0xF9; /PCA 定时寄存器 高位sfr CCAP0L = 0xEA; /PCA模块0的

4、捕获寄存器 低位sfr CCAP0H = 0xFA; /PCA模块0的 捕获寄存器 高位sfr CCAP1L = 0xEB; /PCA模块1的 捕获寄存器 低位sfr CCAP1H = 0xFB; /PCA模块1的 捕获寄存器 高位sfr PCA_PWM0 = 0xF2; /PCA PWM 模式辅助寄存器0sfr PCA_PWM1 = 0xF3; /PCA PWM 模式辅助寄存器1sbit CF = 0xDF; /PCA计数溢出标志位sbit CR = 0xDE; /PCA计数器 运行控制位sbit CCF1 = 0xD9; /PCA模块1中断标志sbit CCF0 = 0xD8; /PCA模

5、块0中断标志/* CCAPOH = CCAPOL = 0XC0; /模块0输出 占空因数为25%/* CCAPOH = CCAPOL = 0X80; /模块0输出 占空因数为50%/* CCAPOH = CCAPOL = 0X40; /模块0输出 占空因数为75%void PWM_clock;void PWM_start;void PWM_clock CMOD |= clock;CL = 0x00;CH = 0x00;void PWM_start CCAP0L = 0XC0;CCAP0H = 0XC0; /模块0初始输出 占空因数为25%CCAP1L = 0XC0;CCAP1H = 0XC0;

6、 /模块1初始输出 占空因数为25%if switch case 0: CCAPM0 = 0X42;break; /模块0设置为8位PWM输出,无中断 case 1: CCAPM0 = 0X53;break; /模块0设置为8位PWM输出,下降沿产生中断 case 2: CCAPM0 = 0X63;break; /模块0设置为8位PWM输出,上升沿产生中断 case 3: CCAPM0 = 0X73;break; /模块0设置为8位PWM 输出,跳变沿产生中断 default: break; else if switch case 0: CCAPM1 = 0X42;break; /模块1设置为

7、8位PWM输出,无中断 case 1: CCAPM1 = 0X53;break; /模块1设置为8位PWM输出,下降沿产生中断 case 2: CCAPM1 = 0X63;break; /模块1设置为8位PWM输出,上升沿产生中断 case 3: CCAPM1 = 0X73;break; /模块1设置为8位PWM输出,跳变沿产生中断 default: break; else if switch case 0: CCAPM0 = CCAPM1 = 0X42;break; /模块0和1设置为8位PWM输出,无中断 case 1: CCAPM0 = CCAPM1 = 0X53;break; /模块0

8、和1设置为8位PWM输出,下降沿产生中断 case 2: CCAPM0 = CCAPM1 = 0X63;break; /模块0和1设置为8位PWM输出,上升沿产生中断 case 3: CCAPM0 = CCAPM1 = 0X73;break; /模块0和1设置为8位PWM输出,跳变沿产生中断 default: break; CR=1; /PCA计数器开始计数void PCA_Intrrpt interrupt 7if CCF0=0;if CCF1=0; /软件清零 if CF=0; /软件清零 void mainTMOD|=0x02; /* timer 0 mode 2: 8-Bit relo

9、ad */ TH0=0xff;TR0=1; PWM_clock; / PCA/PWM时钟源为 定时器0的溢出PWM_start; / 模块0,设置为PWM输出,无中断,初始占空因素为25%while DelayMs; PwmDrive_12C5A.c#include #define U8 unsigned charsfr CCON = 0xD8; /PCA控制寄存器sfr CMOD = 0xD9; /PCA模式寄存器sfr CCAPM0 = 0xDA; /PCA模块0模式寄存器 /模块0对应P1.3/CEX0/PCA0/PWM0 sfr CCAPM1 = 0xDB; /PCA模块1模式寄存器

10、/模块1对应P1.4/CEX1/PCA1/PWM1sfr CL = 0xE9; /PCA 定时寄存器 低位sfr CH = 0xF9; /PCA 定时寄存器 高位sfr CCAP0L = 0xEA; /PCA模块0的 捕获寄存器 低位sfr CCAP0H = 0xFA; /PCA模块0的 捕获寄存器 高位sfr CCAP1L = 0xEB; /PCA模块1的 捕获寄存器 低位sfr CCAP1H = 0xFB; /PCA模块1的 捕获寄存器 高位sfr PCA_PWM0 = 0xF2; /PCA PWM 模式辅助寄存器0sfr PCA_PWM1 = 0xF3; /PCA PWM 模式辅助寄存器

11、1sbit CF = 0xDF; /PCA计数溢出标志位sbit CR = 0xDE; /PCA计数器 运行控制位sbit CCF1 = 0xD9; /PCA模块1中断标志sbit CCF0 = 0xD8; /PCA模块0中断标志/* CCAPOH = CCAPOL = 0XC0; /模块0输出 占空因数为25%/* CCAPOH = CCAPOL = 0X80; /模块0输出 占空因数为50%/* CCAPOH = CCAPOL = 0X40; /模块0输出 占空因数为75%void PWM_clock;void PWM_start;void PWM_clock CMOD |= clock;

12、CL = 0x00;CH = 0x00;void PWM_start CCAP0L = 0XC0;CCAP0H = 0XC0; /模块0初始输出 占空因数为25%CCAP1L = 0XC0;CCAP1H = 0XC0; /模块1初始输出 占空因数为25%if switch case 0: CCAPM0 = 0X42;break; /模块0设置为8位PWM输出,无中断 case 1: CCAPM0 = 0X53;break; /模块0设置为8位PWM输出,下降沿产生中断 case 2: CCAPM0 = 0X63;break; /模块0设置为8位PWM输出,上升沿产生中断 case 3: CCA

13、PM0 = 0X73;break; /模块0设置为8位PWM输出,跳变沿产生中断 default: break; else if switch case 0: CCAPM1 = 0X42;break; /模块1设置为8位PWM输出,无中断 case 1: CCAPM1 = 0X53;break; /模块1设置为8位PWM输出,下降沿产生中断 case 2: CCAPM1 = 0X63;break; /模块1设置为8位PWM输出,上升沿产生中断 case 3: CCAPM1 = 0X73;break; /模块1设置为8位PWM输出,跳变沿产生中断 default: break; else if

14、switch case 0: CCAPM0 = CCAPM1 = 0X42;break; /模块0和1设置为8位PWM输出,无中断 case 1: CCAPM0 = CCAPM1 = 0X53;break; /模块0和1设置为8位PWM输出,下降沿产生中断 case 2: CCAPM0 = CCAPM1 = 0X63;break; /模块0和1设置为8位PWM输出,上升沿产生中断 case 3: CCAPM0 = CCAPM1 = 0X73;break; /模块0和1设置为8位PWM输出,跳变沿产生中断 default: break; CR=1; /PCA计数器开始计数void PCA_Intrrpt interrupt 7if CCF0=0;if CCF1=0; /软件清零 if CF=0; /软件清零

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号