當前位置:編程學習大全網 - 編程語言 - 求大神給寫壹個單片機的pwm程序,,,

求大神給寫壹個單片機的pwm程序,,,

#include "reg51.h" // 官網例程,可以參考壹下。

#include "intrins.h"

#define FOSC 11059200L

typedef unsigned char BYTE;

typedef unsigned int WORD;

sfr P1M1 = 0x91;

sfr P1M0 = 0x92;

sfr P3M1 = 0xb1;

sfr P3M0 = 0xb2;

sfr P5M1 = 0xC9;

sfr P5M0 = 0xCA;

sfr P_SW1 = 0xA2; //外設功能切換寄存器1

#define CCP_S0 0x10 //P_SW1.4

#define CCP_S1 0x20 //P_SW1.5

sfr CCON = 0xD8; //PCA控制寄存器

sbit CCF0 = CCON^0; //PCA模塊0中斷標誌

sbit CCF1 = CCON^1; //PCA模塊1中斷標誌

sbit CR = CCON^6; //PCA定時器運行控制位

sbit CF = CCON^7; //PCA定時器溢出標誌

sfr CMOD = 0xD9; //PCA模式寄存器

sfr CL = 0xE9; //PCA定時器低字節

sfr CH = 0xF9; //PCA定時器高字節

sfr CCAPM0 = 0xDA; //PCA模塊0模式寄存器

sfr CCAP0L = 0xEA; //PCA模塊0捕獲寄存器 LOW

sfr CCAP0H = 0xFA; //PCA模塊0捕獲寄存器 HIGH

sfr CCAPM1 = 0xDB; //PCA模塊1模式寄存器

sfr CCAP1L = 0xEB; //PCA模塊1捕獲寄存器 LOW

sfr CCAP1H = 0xFB; //PCA模塊1捕獲寄存器 HIGH

sfr CCAPM2 = 0xDC; //PCA模塊2模式寄存器

sfr CCAP2L = 0xEC; //PCA模塊2捕獲寄存器 LOW

sfr CCAP2H = 0xFC; //PCA模塊2捕獲寄存器 HIGH

sfr PCA_PWM0 = 0xf2; //PCA模塊0的PWM寄存器

sfr PCA_PWM1 = 0xf3; //PCA模塊1的PWM寄存器

sfr PCA_PWM2 = 0xf4; //PCA模塊2的PWM寄存器

void main()

{

P1M0 = 0x00;

P1M1 = 0x00;

P3M0 = 0x00;

P3M1 = 0x00;

P5M0 = 0x00;

P5M1 = 0x00;

ACC = P_SW1;

ACC &= ~(CCP_S0 | CCP_S1); //CCP_S0=0 CCP_S1=0

P_SW1 = ACC; //(P1.2/ECI, P1.1/CCP0, P1.0/CCP1, P3.7/CCP2)

CCON = 0; //初始化PCA控制寄存器

//PCA定時器停止

//清除CF標誌

//清除模塊中斷標誌

CL = 0; //復位PCA寄存器

CH = 0;

CMOD = 0x02; //設置PCA時鐘源

//禁止PCA定時器溢出中斷

PCA_PWM0 = 0x00; //PCA模塊0工作於8位PWM

CCAP0H = CCAP0L = 0x20; //PWM0的占空比為87.5% ((100H-20H)/100H)

CCAPM0 = 0x42; //PCA模塊0為8位PWM模式

PCA_PWM1 = 0x40; //PCA模塊1工作於7位PWM

CCAP1H = CCAP1L = 0x20; //PWM1的占空比為75% ((80H-20H)/80H)

CCAPM1 = 0x42; //PCA模塊1為7位PWM模式

PCA_PWM2 = 0x80; //PCA模塊2工作於6位PWM

CCAP2H = CCAP2L = 0x20; //PWM2的占空比為50% ((40H-20H)/40H)

CCAPM2 = 0x42; //PCA模塊2為6位PWM模式

CR = 1; //PCA定時器開始工作

while (1);

}

  • 上一篇:1M等於多少字節?
  • 下一篇:普通車床加工螺紋 要教程 謝謝
  • copyright 2024編程學習大全網