⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpwm.c

📁 8051单片机嵌入式操作系统small rtos编程及仿真
💻 C
字号:
	  PWM的产生使用c8051f022的PCA口,程序如下://///////直流电机驱动调试电路//////////////
/////////moto_PWM.c//////////////////////////
#include <C8051F020.h>
typedef unsigned int uint;
typedef unsigned char uchar;
typedef unsigned long ulong;
#define MOTO_BREAK DIR1A=DIR1B
#define MOTO_FORD DIR1A=0;DIR1B=1
#define MOTO_BACK DIR1A=1;DIR1B=0
sfr16 RCAP2=0xca;
sfr16 RCAP3=0xca;
sfr16 RCAP4=0xca;
sfr16 TMR4=0xcc;
sfr16 TMR3=0xcc;
sfr16 TMR2=0xcc;
sfr16 PCA0CP0=0xfb;
sfr16 PCA0CP1=0xfd;
sfr16 PCA0CP2=0xe9;
sfr16 PCA0CP3=0xeb;
sfr16 PCA0CP4=0xed;
sfr16 PCA0CP5=0xe1;
uchar temppage;
sbit  DIR1A=P3^0;//方向控制管脚
sbit  DIR1B=P3^1;
void pca0ini(){//CEX0为8bit PWM输出模式
 SFRPAGE = 0x00;
 PCA0CPM0=0X42;
}
void delay1ms(uint time){//延迟1ms
 uint i;
 uint j;
 for (i=0;i<time;i++){
  for(j=0;j<300;j++);
 }
} 
void PWM0_set(uchar val){//高电平占空比为val/256
 SFRPAGE = 0x00;
 PCA0CPH0=~val+1;
}
void pcaini(){
 SFRPAGE=0x00;
 PCA0MD=0x08;//PCA采用系统时钟,且PCA溢出中断禁止
 PCA0CN=0x40;//启动PCA计数器
}
void config(){
//看门狗禁止
 WDTCN = 0x07; 
    WDTCN = 0xDE;   
    WDTCN = 0xAD;
 SFRPAGE = 0x0F;
//交叉开关配置,CEX0-CEX5配置到P0.0-P0.5
 XBR0 = 0x30; 
 XBR1 = 0x00; 
 XBR2 = 0x40;
  XBR3 = 0x00;   
//管脚输出配置,P0口为开漏输出,其中P0.6接上拉电阻,P0为数字输入口
  SFRPAGE = 0x0F;
  P0MDOUT = 0x00; 
  P1MDIN = 0xFF;  
//晶振配置,采用内部晶振8分频
 SFRPAGE = 0x0F;
  CLKSEL = 0x00;  
 OSCXCN = 0x00; 
 OSCICN = 0x84; 
}
void main(void){
 config();
 pcaini();
 pca0ini();
 while(1){
  //慢速反向运行2秒
  MOTO_BACK;
  PWM0_set(10);
  delay1ms(2000);
  MOTO_BREAK;//急停
  //慢速正向运行2秒
  MOTO_FORD;
  PWM0_set(10);
  delay1ms(2000);
  MOTO_BREAK;//急停
  delay1ms(2000);
  //快速反向运行2秒
  MOTO_BACK;
  PWM0_set(200);
  delay1ms(2000);
  MOTO_BREAK;//急停
  delay1ms(500);
  //快速正向运行2秒
  MOTO_FORD;
  PWM0_set(200);
  delay1ms(2000);
  MOTO_BREAK;//急停
  delay1ms(2000);
  }
 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -