我給你來個試試
- //本示例在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);
- }
復制代碼 |