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

📄 main.c

📁 PIC18F452 PWM程序,CCP1 CCP2模拟程序
💻 C
字号:
#include<p18f452.h>
/////////////////////////////////////////
//--------------端口定义---------------//
/////////////////////////////////////////
#define   PWM1      RC2 
#define   PWM2      RC1 
///////////////////////////////////////
//-------------数据定义--------------//
///////////////////////////////////////
static char CCP1_NUMBER,CCP2_NUMBER;
///////////////////////////////////////
//--------------函数定义-------------//
///////////////////////////////////////

void initccp();     //PWM初始值设置
void initvar();     //数据初试值初试化
void initt1();      //T1初试化
void delay1();

/*****************************************
---------------------中断函数-------------
*****************************************/
void interrupt(void)
{
     if(PIR1bits.TMR1IF && PIR1bits.TMR1IE)
      {      
           TMR1IF=0X00;
           CCP1_NUMBER=CCP1_NUMBER+1;
           switch(CCP1_NUMBER)     
            {
             case 1:  CCPR1L=0x29;   //占空比15% 00
                         break;
                      case 2:  CCPR1L=0x6f;   //30% 01
                         break;
                      case 3:  CCPR1L=0x83;   //45% 01
                         break;
                      case 4:  CCPR1L=0x97;   //58% 00
                         break;
                      case 5:  CCPR1L=0xb5;   //71% 11
                         break;
                      case 6:  CCPR1L=0xcf;   //80% 01
                         break;
                      case 7:  CCPR1L=0xe6;   //89% 00
                         break;
                      case 8:  CCPR1L=0xf4;   //95% 01
                         break;
                      case 9:  CCPR1L=0xfb;   //98% 00
                         break;         
                      case 10: CCPR1L=0xff;   //100% 11
                         break; 
                      case 11:  CCPR1L=0xfb;
                         break;
                      case 12:  CCPR1L=0xf4;
                         break;
                      case 13:  CCPR1L=0xe6;          
                         break;
                      case 14:  CCPR1L=0xcf;          
                         break;
                      case 15:  CCPR1L=0xb5;                
                         break;
                      case 16:  CCPR1L=0x97;                
                         break;
                      case 17:  CCPR1L=0x83;                
                         break;
                      case 18:  CCPR1L=0x6f;                
                         break;
                      case 19:  CCPR1L=0x29;                
                         break;     
                   }
                   if(CCP1_NUMBER==19)
                   {
                      CCP1_NUMBER=0;
                      }
             }
}           
/*****************************************
//函数名称:void initvar()
//函数功能:PWM初始值设置
//函数调用:主函数调用
*****************************************/           
void initccp(void)
{
         PR2=0xa3;      //
         CCPR1L=0x29;   //占空比15%
         CCP1CON=0x1C;  //PWM模式 低2位为01
         
         T2CON=0X7e;   //0111 1100 16分频,打开T2
         TMR1IE=0X01;
         
}
/*****************************************
//函数名称:void initvar()
//函数功能:为系统调用值赋初值
//函数调用:主函数调用
*****************************************/
void initvar(void)
{
         CCP1_NUMBER=1;
         CCP2_NUMBER=0;
}
/*****************************************
//函数名称:void initt1()
//函数功能:T1初试化
//函数调用:主函数调用
*****************************************/ 
void initt1(void)
{
    INTCON=0xC0;   //打开总中断和外围中断
    PIE1=0x01;
    T1CON=0x80;    //0000 0001做内部定时器
    TMR1IF=0;
    TMR1H=0xFd;//初试值为560us,方波周期
    TMR1L+=0x17;
    }
void delay1(void)
{
         int i;
         for(i=30000;i>10;i--);
} 
///////////////////////////////////////////////////////////////

/******************************************
//-------------------主函数----------------
******************************************/
void main()
{ 
   TRISC=0X00;   //CCP端口输出
   initvar();     //数据初试值初试化
   initt1();      //T1初试化
   initccp();
   TMR1ON=1;
   while(1)
   {
           PORTCbits.RC5=0;   //RC5=0;
           delay1();
           PORTCbits.RC5=1;   //RC5=1;
           delay1();
    }

}

⌨️ 快捷键说明

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