8g1k08a 8pin pca高速脉冲 p54不输出
本帖最后由 DebugLab 于 2024-10-13 22:21 编辑#include "config.h"
#define PCA_T1US (MAIN_Fosc / 12 / 1000000)// 1us 12分频
#define PWM_DUTY (20000*PCA_T1US) // 20ms
u16 g_pwm_tmps[3];
u16 g_pwm_highs[3]={PCA_T1US*500, PCA_T1US*2500, PCA_T1US*500};
u16 g_pwm_lows[3]={PWM_DUTY-PCA_T1US*500, PWM_DUTY-PCA_T1US*2500, PWM_DUTY-PCA_T1US*500};
void PCA_Init(void)
{
CCON = 0x00;
CMOD = 0x00; //PCA时钟为系统时钟12分频
CL = 0x00;
CH = 0x00;
CCAPM0 = 0x4d; //PCA模块0为16位定时器模式并使能脉冲输出
g_pwm_tmps[0 = PCA_T1US*500;
CCAP0L = g_pwm_tmps[0];
CCAP0H = g_pwm_tmps[0 >> 8;
g_pwm_tmps[0 += PCA_T1US*500;
CCAPM1 = 0x4d; //PCA模块0为16位定时器模式并使能脉冲输出
g_pwm_tmps[1 = PCA_T1US*500;
CCAP1L = g_pwm_tmps[1];
CCAP1H = g_pwm_tmps[1 >> 8;
g_pwm_tmps[1 += PCA_T1US*500;
CCAPM2 = 0x4d;
g_pwm_tmps[2 = PCA_T1US*500;
CCAP2L = g_pwm_tmps[2];
CCAP2H = g_pwm_tmps[2 >> 8;
g_pwm_tmps[2 += PCA_T1US*500;
CR = 1; //启动PCA计时器
}
void PCA_Isr() interrupt 7
{
if(CCF0) {
CCF0 = 0;
if(P32) g_pwm_tmps[0 += g_pwm_highs[0];
else g_pwm_tmps[0 += g_pwm_lows[0];
CCAP0L = g_pwm_tmps[0];
CCAP0H = g_pwm_tmps[0 >> 8;
}
if(CCF1) {
CCF1 = 0;
if(P33) g_pwm_tmps[1 += g_pwm_highs[1];
else g_pwm_tmps[1 += g_pwm_lows[1];
CCAP1L = g_pwm_tmps[1];
CCAP1H = g_pwm_tmps[1 >> 8;
}
if(CCF2) {
CCF2 = 0;
if(P54) g_pwm_tmps[2 += g_pwm_highs[2];
else g_pwm_tmps[2 += g_pwm_lows[2];
CCAP2L = g_pwm_tmps[2];
CCAP2H = g_pwm_tmps[2 >> 8;
}
if(CF) CF = 0;
}
void delay_ms(unsigned char ms)
{
unsigned int i;
do{
i = MAIN_Fosc / 1000;
while(--i);
}while(--ms);
}
void main()
{
P3M0 = 0x00;
P3M1 = 0x00;
P5M0 &= ~0x10; P5M1 &= ~0x10;
delay_ms(100);
PCA_Init();
EA = 1;
// CR = 0;
// g_pwm_highs = 3000*PCA_T1US;
// g_pwm_lows = PWM_DUTY-g_pwm_highs;
// g_pwm_highs = 500*PCA_T1US;
// g_pwm_lows = PWM_DUTY-g_pwm_highs;
// g_pwm_highs = 4000*PCA_T1US;
// g_pwm_lows = PWM_DUTY-g_pwm_highs;
// CR = 1;
while (1);
}
P54是黄色信号吗?
将P54设置推挽输出,或者断开外围电路,直接测量脚位信号试试。 乘风飞扬 发表于 2024-10-14 09:47
P54是黄色信号吗?
将P54设置推挽输出,或者断开外围电路,直接测量脚位信号试试。 ...
是黄色信号, 设置过推挽输出也没用的, 现在没有外围电路, 仅用裸芯片量脚位信号的 P5M0 = 0x10; P5M1 = 0x00;
蜗牛 发表于 2024-10-14 10:26
P5M0 = 0x10; P5M1 = 0x00;
这个我也试过了, 不太行 注意EAXFR设置,最好初始化时候先打开 CyberHamster 发表于 2024-10-14 11:18
注意EAXFR设置,最好初始化时候先打开
请问这里我该怎么改呀? 感谢 CyberHamster 发表于 2024-10-14 11:18
注意EAXFR设置,最好初始化时候先打开
而且p32 p33都可以正常输出, 就p54不行 peitianyu 发表于 2024-10-14 11:34
而且p32 p33都可以正常输出, 就p54不行
是否可能是这个选项选择错了?将IO变成复位引脚了
peitianyu 发表于 2024-10-14 11:34
而且p32 p33都可以正常输出, 就p54不行
是否我需要配置这些
页:
[1]
2