我给你来个试试
- //本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
- //若无特别说明,工作频率一般为11.0592MHz
- #include "reg51.h"
- #include "intrins.h"
- //测试工作频率为11.0592MHz
- sfr CCON = 0xd8; // //PCA控制寄存器
- sbit CF = CCON^7; // PCA计数器溢出(CH,CL由FFFFH变为0000H)标志。PCA计数器溢出后由硬件置位,必须由软件清0。
- sbit CR = CCON^6; // 1: 允许PCA计数器计数,必须由软件清0。
- sbit CCF3 = CCON^3; // PCA 模块3中断标志,由硬件置位,必须由软件清0。
- sbit CCF2 = CCON^2; // PCA 模块2中断标志,由硬件置位,必须由软件清0。
- sbit CCF1 = CCON^1; // PCA 模块1中断标志,由硬件置位,必须由软件清0。
- sbit CCF0 = CCON^0; // PCA 模块0中断标志,由硬件置位,必须由软件清0。
- sfr CMOD = 0xd9; // //PCA模式寄存器
- sfr CL = 0xe9; //PCA模块 16位寄存器 低字节
- sfr CH = 0xf9; //PCA模块 16位寄存器 高字节
- sfr CCAPM0 = 0xda; //PCA模块0的工作模式寄存器。 //PCA模块0模式控制寄存器
- sfr CCAP0L = 0xea; //PCA模块0的捕捉/比较寄存器低8位。
- sfr CCAP0H = 0xfa; //PCA模块0的捕捉/比较寄存器高8位。
- sfr PCA_PWM0 = 0xf2; //PCA模块0 PWM寄存器。
- sfr CCAPM1 = 0xdb; //PCA模块1的工作模式寄存器。
- sfr CCAP1L = 0xeb; //PCA模块1的捕捉/比较寄存器低8位。
- sfr CCAP1H = 0xfb; //PCA模块1的捕捉/比较寄存器高8位。
- sfr PCA_PWM1 = 0xf3; //PCA模块1 PWM寄存器。
- sfr CCAPM2 = 0xdc; //PCA模块2的工作模式寄存器。
- sfr CCAP2L = 0xec; //PCA模块2的捕捉/比较寄存器低8位。
- sfr CCAP2H = 0xfc; //PCA模块2的捕捉/比较寄存器高8位。
- sfr PCA_PWM2 = 0xf4; //PCA模块2 PWM寄存器。
- sfr CCAPM3 = 0xdd; //PCA模块3的工作模式寄存器。
- sfr CCAP3L = 0xed; //PCA模块3的捕捉/比较寄存器低8位。
- sfr CCAP3H = 0xfd; //PCA模块3的捕捉/比较寄存器高8位。
- sfr PCA_PWM3 = 0xf5; //PCA模块3 PWM寄存器。
- sfr AUXR = 0x8E; //辅助寄存器
- sfr INTCLKO = 0x8f; //中断与时钟输出控制寄存器
- void main()
- {
- AUXR &= 0x7F; //定时器时钟12T模式
- TMOD &= 0xF0; //设置定时器模式
- TMOD = 0x00; //定时器T0 模式0 16位自动重装载模式
- TL0 = 0x66; //65536-11.0592M/12/1000
- TH0 = 0xfc; //1000微秒@11.0592MHz
- TF0 = 0; //清除TF0标志
- TR0 = 1; //启动定时器
- INTCLKO = 0x01; //使能时钟输出
-
- CCON = 0x00;
- // CMOD = 0x08; //PCA时钟为系统时钟
- CMOD = 0x04; //PCA时钟为定时器T0的溢出脉冲
- CL = 0x00;
- CH = 0x00;
- CCAPM0 = 0x42; //PCA模块0为PWM工作模式
- PCA_PWM0 = 0x80; //PCA模块0输出6位PWM P1.7
- CCAP0L = 0x20; //PWM占空比为50%[(40H-20H)/40H]
- CCAP0H = 0x20;
- CCAPM1 = 0x42; //PCA模块1为PWM工作模式
- PCA_PWM1 = 0x40; //PCA模块1输出7位PWM P1.6
- CCAP1L = 0x20; //PWM占空比为75%[(80H-20H)/80H]
- CCAP1H = 0x20;
- CCAPM2 = 0x42; //PCA模块2为PWM工作模式
- PCA_PWM2 = 0x00; //PCA模块2输出8位PWM P1.5
- CCAP2L = 0x20; //PWM占空比为87.5%[(100H-20H)/100H]
- CCAP2H = 0x20;
- CCAPM3 = 0x42; //PCA模块3为PWM工作模式
- PCA_PWM3 = 0xc0; //PCA模块3输出10位PWM P1.4
- CCAP3L = 0x20; //PWM占空比为96.875%[(400H-20H)/400H]
- CCAP3H = 0x20;
- CR = 1; //启动PCA计时器
-
- while (1);
- }
复制代码 |