📄 main.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 + -