资讯详情

C8051F单片机PWM输出程序

olf2010-6-21 22:421# //PWM输出脚P0.3 //----------------------------------------------------------------------------- // Includes //----------------------------------------------------------------------------- #include // SFR declarations #include #include //----------------------------------------------------------------------------- // Function PROTOTYPES //----------------------------------------------------------------------------- void PORT_Init (void); void PCA_Init (void); void PCA_ISR (void); void SCLK_Init (void); //----------------------------------------------------------------------------- // MAIN Routine //----------------------------------------------------------------------------- void main (void) { unsigned long b; WDTCN = 0xde; // disable watchdog timer WDTCN = 0xad; SYSCLK_Init (); PORT_Init (); /*初始化I/O口*/ PCA_Init (); /*PCA初始化成8位脉宽调置方式*/ EIE1= 0x08; EA=1; PCA0CPH0=0x20; while (1) { } } //----------------------------------------------------------------------------- // Initialization Subroutines //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // PORT_Init //----------------------------------------------------------------------------- void PORT_Init (void) { XBR0 = 0x11; // XBAR0: Initial Reset Value XBR1 = 0x00; // XBAR1: Initial Reset Value XBR2 = 0x40; // XBAR2: Initial Reset Value // Port configuration (1 = Push Pull Output) PRT0CF = 0x08; // Output configuration for P0 PRT1CF = 0x00; // Output configuration for P1 PRT2CF = 0x00; // Output configuration for P2 PRT3CF = 0x00; // Output configuration for P3 } //----------------------------------------------------------------------------- // SYSCLK_Init //----------------------------------------------------------------------------- void SYSCLK_Init (void) { unsigned int i; // delaynms counter OSCN = 0x67; // start external oscillator with for (i=0; i < 256; i++) ; // XTLVLD blanking interval (>1ms) while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle OSCICN = 0x88; // select external oscillator as SYSCLK } //----------------------------------------------------------------------------- // PCA_Init //----------------------------------------------------------------------------- void PCA_Init (void) { // PCA0CPM0 = 0x42; // PCA Capture/Compare Register 0 PCA0CN = 0x40; PCA0CPM1 = 0x42; PCA0CPL0 = 0x00; PCA0CPH0 = 0x00; // PCA0MD &= 0x40; PCA0MD = 0x01; } //----------------------------------------------------------------------------- // PCA_ISR //----------------------------------------------------------------------------- void PCA_ISR (void) interrupt 9 { unsigned char a ; bit PWM_PAC; CF = 0; if(PWM_PAC==0) //占空比由0 >>0xfe { PCA0CPH1=a; a++; if(a==0xfe){PWM_PAC=1;} } else //占空比由0xfe >>0 { PCA0CPH1=a; a--; if(a==0){PWM_PAC=0;} } }

-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台