硬件:STC12C5A60S2
功能:实现PWM波生成。该程序周期为256ms,输出端口为P1.3。
代码:
#include 'reg51.h'
#include 'intrins.h'
#define FOSC 11059260L
#define T1MS (65536-FOSC/12/1000)
//定时器产生的脉冲大约为1MS,PWM经过256分频后的时间是256ms
//通过调T1MS的数值,PWM的最大周期时间是16s。
typedef unsigned char BYTE;
typedef unsigned int WORD;
/*Declare SFR associated with the PCA */
sfr CCON = 0xD8; //PCA control register
sbit CCF0 = CCON^0; //PCA module-0 interrupt flag
sbit CCF1 = CCON^1; //PCA module-1 interrupt flag
sbit CR = CCON^6; //PCA timer run control bit
sbit CF = CCON^7; //PCA timer overflow flag
sfr CMOD = 0xD9; //PCA mode register
sfr CL = 0xE9; //PCA base timer LOW
sfr CH = 0xF9; //PCA base timer HIGH
sfr CCAPM0 = 0xDA; //PCA module-0 mode register
sfr CCAP0L = 0xEA; //PCA module-0 capture register LOW
sfr CCAP0H = 0xFA; //PCA module-0 capture register HIGH
sfr CCAPM1 = 0xDB; //PCA module-1 mode register
sfr CCAP1L = 0xEB; //PCA module-1 capture register LOW
sfr CCAP1H = 0xFB; //PCA module-1 capture register HIGH
sfr PCAPWM0 = 0xf2;
sfr PCAPWM1 = 0xf3;
void Delay_xms(unsigned int z){
unsigned char i, j;
unsigned int k;
for(k=0;k _nop_(); _nop_(); i = 12; j = 84; do{while (--j);} while (--i); } } //定时器0初始化 void Time0Init() { TMOD = 0x01; TL0=T1MS; TH0=T1MS>>8; TR0=1; ET0=1; EA=1; } void PWMInit() { CCON = 0; //Initial PCA control register //PCA timer stop running //Clear CF flag //Clear all module interrupt flag CL = 0; //Reset PCA base timer CH = 0; // CMOD = 0x00; //Set PCA timer clock source as Fosc/2 CMOD = 0x04; //Disable PCA timer overflow interrupt CCAP0H = CCAP0L = 0x80; //PWM0 port output 50% duty cycle square wave CCAPM0 = 0x42; //设备为定时器0溢出脉冲 CCAP1H = CCAP1L = 0xff; //PWM1 port output 0% duty cycle square wave PCAPWM1 = 0x03; CCAPM1 = 0x42; //PCA module-1 work in 8-bit PWM mode //and no PCA interrupt CR = 1; //PCA timer start run } void PWMSet(float a) //输入a表示占空比 { CCAP0H =CCAP0L =(BYTE)((1-a)*256); } void main() { Time0Init(); PWMInit(); PWMSet(0.1); while(1) { PWMSet(0.5); //占空比为百分之50 Delay_xms(2000); } } //定时器0中断 void tm0_isr() interrupt 1 using 1 { TL0=T1MS; TH0=T1MS>>8; }
上一篇:51学习笔记之以硬件spi与max6675通信实现K型热电偶测温
下一篇:51学习笔记之关键词data、bdata、idata、pdata、xdata、code的含义
推荐阅读最新更新时间:2026-03-20 12:17
- 使用 ON Semiconductor 的 FAN2518S 的参考设计
- LTC1530S8、3.3V/3A 稳压器
- 使用 ON Semiconductor 的 ADP3167 的参考设计
- 使用 Analog Devices 的 LT3420EDD 的参考设计
- 基于Kinetis® M的低成本单相电表参考设计
- LTC3708、具有上升/下降轨跟踪功能的 2.5V/15A 和 1.2V/15A 稳压器
- NXQ1TXH5插件板
- 应变仪仪表放大器
- WRL-13287,基于 ESP8266 802.11 无线局域网的 SparkFun Wi-Fi Shield
- 4.1W、3-LED 通用 LED 照明驱动器

电力电子技术基础第三版(Fundamentals of Power Electronics )
源码_电子表
基于ICL8038的正弦波、方波和三角波发生器protues仿真设计(仿真图、论文)
单片机学习—C51源代码和Proteus仿真文件
非常经典的关于LLC的杨波博士论文
XC6406PP60DL






京公网安备 11010802033920号