|
输出4路高速PCA 分别位为 100KHz 82KHz 40KHz 和200Hz
问题:高速PCA无法调节PWM 宽窄 最好有试验程序
//========================================================================
// 函数: void PCA_config(void)
// 描述: PCA配置函数。
// 参数: none
// 返回: none.
// 版本: VER1.0
// 版本: V1.0, 2016-5-10
// 备注:
//========================================================================
void PCA_config(void)
{
CR = 0;
CH = 0;
CL = 0;
// AUXR1 = (AUXR1 & ~(3<<4)) | PCA_P12_P17_P16_P15_P14; //切换IO口 PCA_P12_P17_P16_P15_P14, PCA_P22_P23_P24_P25_P26, PCA_P74_P70_P71_P72_P73, PCA_P35_P33_P32_P31_P30
// P1n_push_pull(0xf0); //将PWM或高速输出设置为推挽输出
AUXR1 = (AUXR1 & ~(3<<4)) | PCA_P22_P23_P24_P25_P26; //切换IO口 PCA_P12_P17_P16_P15_P14, PCA_P22_P23_P24_P25_P26, PCA_P74_P70_P71_P72_P73, PCA_P35_P33_P32_P31_P30
P2n_push_pull(0x7c); //将PWM或高速输出设置为推挽输出
// AUXR1 = (AUXR1 & ~(3<<4)) | PCA_P35_P33_P32_P31_P30; //切换IO口 PCA_P12_P17_P16_P15_P14, PCA_P22_P23_P24_P25_P26, PCA_P74_P70_P71_P72_P73, PCA_P35_P33_P32_P31_P30
// P3n_push_pull(0x0f); //将PWM或高速输出设置为推挽输出
// AUXR1 = (AUXR1 & ~(3<<4)) | PCA_P74_P70_P71_P72_P73; //切换IO口 PCA_P12_P17_P16_P15_P14, PCA_P22_P23_P24_P25_P26, PCA_P74_P70_P71_P72_P73, PCA_P35_P33_P32_P31_P30
// P7n_push_pull(0x0f); //将PWM或高速输出设置为推挽输出
CMOD = (CMOD & ~0x0f) | PCA_Clock_1T | DISABLE; //选择时钟源 溢出中断 PCA_Clock_1T, PCA_Clock_2T, PCA_Clock_4T, PCA_Clock_6T, PCA_Clock_8T, PCA_Clock_12T, PCA_Clock_Timer0_OF, PCA_Clock_ECI
PPCA = 1; //高优先级中断
CCAPM0 = PCA_Mode_HighPulseOutput | ENABLE; //工作模式, 中断模式, (PCA_Rise_Active or PCA_Fall_Active) | (ENABLE or DISABLE)
CCAP0_tmp = 100; //按用户需要给一个初值
CCAP0L = (u8)CCAP0_tmp; //先写CCAP0L
CCAP0H = (u8)(CCAP0_tmp >> 8); //后写CCAP0H
CCAPM1 = PCA_Mode_HighPulseOutput | ENABLE; //工作模式, 中断模式, (PCA_Rise_Active or PCA_Fall_Active) | (ENABLE or DISABLE)
CCAP1_tmp = 200; //按用户需要给一个初值
CCAP1L = (u8)CCAP1_tmp; //先写CCAP1L
CCAP1H = (u8)(CCAP1_tmp >> 8); //后写CCAP1H
CCAPM2 = PCA_Mode_HighPulseOutput | ENABLE; //工作模式, 中断模式, (PCA_Rise_Active or PCA_Fall_Active) | (ENABLE or DISABLE)
CCAP2_tmp = 300; //按用户需要给一个初值
CCAP2L = (u8)CCAP2_tmp; //先写CCAP2L
CCAP2H = (u8)(CCAP2_tmp >> 8); //后写CCAP2H
CCAPM3 = PCA_Mode_HighPulseOutput | ENABLE; //工作模式, 中断模式, (PCA_Rise_Active or PCA_Fall_Active) | (ENABLE or DISABLE)
CCAP3_tmp = 400; //按用户需要给一个初值
CCAP3L = (u8)CCAP3_tmp; //先写CCAP3L
CCAP3H = (u8)(CCAP3_tmp >> 8); //后写CCAP3H
CR = 1;
}
//========================================================================
// 函数: void PCA_Handler (void) interrupt PCA_VECTOR
// 描述: PCA中断处理程序.
// 参数: None
// 返回: none.
// 版本: V1.0, 2016-5-10
//========================================================================
void PCA_Handler (void) interrupt PCA_VECTOR
{
if(CCF0) //PCA模块0中断
{
CCF0 = 0; //清PCA模块0中断标志
CCAP0_tmp += 1200;
CCAP0L = (u8)CCAP0_tmp; //先写CCAP0L
CCAP0H = (u8)(CCAP0_tmp >> 8); //后写CCAP0H
}
if(CCF1) //PCA模块1中断
{
CCF1 = 0; //清PCA模块1中断标志
CCAP1_tmp += 2400;
CCAP1L = (u8)CCAP1_tmp; //先写CCAP1L
CCAP1H = (u8)(CCAP1_tmp >> 8); //后写CCAP1H
}
if(CCF2) //PCA模块2中断
{
CCF2 = 0; //清PCA模块1中断标志
CCAP2_tmp += 4800;
CCAP2L = (u8)CCAP2_tmp; //先写CCAP2L
CCAP2H = (u8)(CCAP2_tmp >> 8); //后写CCAP2H
}
if(CCF3) //PCA模块3中断
{
CCF3 = 0; //清PCA模块1中断标志
CCAP3_tmp += 6000;
CCAP3L = (u8)CCAP3_tmp; //先写CCAP3L
CCAP3H = (u8)(CCAP3_tmp >> 8); //后写CCAP3H
}
if(CF) //PCA溢出中断
{
CF = 0; //清PCA溢出中断标志
}
}
|
|