STC12C5A60S2内部PWM应用_第1页
STC12C5A60S2内部PWM应用_第2页
STC12C5A60S2内部PWM应用_第3页
STC12C5A60S2内部PWM应用_第4页
已阅读5页,还剩7页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、【PWM 】.精选文库-2精选文库-3精选文库-4精选文库-5精选文库实例一 :电路图如上,该程序的功能是利用按键S1 对 LED 的亮度进行调节。程序如下:#include"STC12C5A.h"/ 注意这个头文件,用reg52 是不行的,如果你没有的话,可以去百/ 度文档里搜索“STC12C5A系列单片机头文件” ,有我共享的头文件。void delay(unsigned int cnt)unsigned char i;for(;cnt>0;cnt-)for(i=0;i<250;i+);void main()CCON=0;/PCA 初始化CL=0;/PCA

2、的 16 位计数器低八位CH=0;/PCA 的 16 位计数器高八位CMOD=0x00; / 选择系统时钟 /12 为计数脉冲 ,则 PWM 的频率 f=sysclk/256/12;CCAP0H=0x80;/占空比控制CCAP0L=0x80;PCA_PWM0=0x00; / 控制占空比的第九位为0CCAPM0=0x42;/ 允许 P13 作为 PWM 输出CR=1;/ 启动 PCA 计数器while(1)if(P10=0)delay(200);while(P10=0);CCAP0H+=10;/ 占空比调节CCAP0L+=10;-6精选文库实例二:两个文件main.c#include <R

3、EG51.H>#include <intrins.h>#define U8 unsigned char#define U16 unsigned intvoid DelayMs(U8 ms);void PWM_clock(U8 clock);void PWM_start(U8 module,U8 mode);/延时子程序 /void DelayMs(U8 ms) / 在 11.0592M 晶振下, stc10f 系列(单周期指令)的ms 级延时U16 i;while(ms-)for(i = 0; i < 850; i+);/ 主函数入口 /sfr CCON= 0xD8;

4、/PCA控制寄存器sfr CMOD= 0xD9; /PCA模式寄存器sfr CCAPM0=0xDA;/PCA模 块0模式寄存器/模块0对 应P1.3/CEX0/PCA0/PWM0(STC12C5A60S2系列 )sfr CCAPM1=0xDB;/PCA模 块1模式寄存器/模块1对 应P1.4/CEX1/PCA1/PWM1(STC12C5A60S2系列 )sfr CL= 0xE9;/PCA 定时寄存器 低位sfr CH= 0xF9; /PCA定时寄存器高位sfr CCAP0L= 0xEA; /PCA模块 0 的 捕获寄存器低位sfr CCAP0H= 0xFA;/PCA 模块 0 的 捕获寄存器高

5、位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 中断标志-7精选文库sbit CCF0 = 0xD8;/PCA 模块 0 中断标志/* CCAPOH = CCAPOL = 0XC0; /模块

6、0 输出 占空因数为 25%/* CCAPOH = CCAPOL = 0X80; /模块 0 输出 占空因数为 50%/* CCAPOH = CCAPOL = 0X40; /模块 0 输出 占空因数为 75%void PWM_clock(U8 clock);void PWM_start(U8 module,U8 mode);void PWM_clock(U8 clock)CMOD |= (clock<<1);CL = 0x00;CH = 0x00;void PWM_start(U8 module,U8 mode)CCAP0L = 0XC0;CCAP0H = 0XC0;/模块 0 初

7、始输出占空因数为25%CCAP1L = 0XC0;CCAP1H = 0XC0;/模块 1 初始输出占空因数为25%if(module=0)switch(mode)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输出

8、,跳变沿产生中断default: break;elseif(module=1)switch(mode)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;-8精选文库

9、elseif(module=2)switch(mode)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 输出,

10、跳变沿产生中断default: break;CR=1; /PCA 计数器开始计数void PCA_Intrrpt(void) interrupt 7if(CCF0) CCF0=0;if(CCF1) CCF1=0;/软件清零if(CF)CF=0;/ 软件清零void main()TMOD|=0x02; /* timer 0 mode 2: 8-Bit reload */TH0=0xff;TR0=1;PWM_clock(2);/ PCA/PWM时钟源为定时器 0 的溢出PWM_start(0,0); /模块 0,设置为 PWM 输出 ,无中断 ,初始占空因素为25%while(1)DelayMs(

11、250);PwmDrive_12C5A.c-9精选文库#include <intrins.h>#define U8 unsigned charsfr CCON= 0xD8; /PCA控制寄存器sfr CMOD= 0xD9; /PCA 模式寄存器sfr CCAPM0=0xDA;/PCA模 块0模式寄存器/模块0对 应P1.3/CEX0/PCA0/PWM0(STC12C5A60S2系列 )sfr CCAPM1=0xDB;/PCA模 块1模式寄存器/模块1对 应P1.4/CEX1/PCA1/PWM1(STC12C5A60S2系列 )sfr CL= 0xE9;/PCA定时寄存器 低位sfr

12、 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模式辅助寄存器1sbit CF= 0xDF;/PCA 计数溢出标志位sbit CR= 0xDE;/PCA 计数器 运行控制位sbit

13、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(U8 clock);void PWM_start(U8 module,U8 mode);void PWM_clock(U8 clock)CMOD |= (clock<<1);

14、CL = 0x00;CH = 0x00;void PWM_start(U8 module,U8 mode)CCAP0L = 0XC0;CCAP0H = 0XC0;/模块 0 初始输出占空因数为25%CCAP1L = 0XC0;CCAP1H = 0XC0;/模块 1 初始输出占空因数为25%-10精选文库if(module=0)switch(mode)case 0: CCAPM0 = 0X42;break; / 模块 0 设置为 8 位 PWM 输出,无中断case 1: CCAPM0 = 0X53;break; / 模块 0 设置为 8 位 PWM 输出,下降沿产生中断case 2: CCAP

15、M0 = 0X63;break; / 模块 0 设置为 8 位 PWM 输出,上升沿产生中断case 3: CCAPM0 = 0X73;break; / 模块 0 设置为 8 位 PWM 输出,跳变沿产生中断default: break;elseif(module=1)switch(mode)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;elseif(module=2)switch(mode)case 0: CCAPM0 = CCAPM1 = 0X42;break; /模块 0 和 1 设置为 8 位 PWM 输出,无中断case 1: CCAPM0 = CCAPM1 = 0X53;break; / 模块 0 和 1 设置为 8 位 PWM 输出,下降沿产生中断case 2: CCAPM0 = CCAPM

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论