艾克姆-8A单片机
大佬们问下,在学习艾克姆-8A单片机视屏第2-15-2讲中,PWM6CR这个寄存器,用用控制P2.6输出PWM波,高5位能看明白,但是低3位不明白,ENI=0,不是关闭通道6的中断吗? ENT2I=0,不是关闭通道6的第二个触发点中断吗? ENT1I =0,不是关闭通道6的第二个触发点中断吗?为什么都设制为0呢?而不是将这三位都设为1呢,是1才使能中断和触发点中断PWM6CR=0xC0,即1100 0000
低3位:
B2=0:EC6I为0,关闭PWM的6通道的PWM中断
B1=0:EC6T2SI为0,关闭PWM的6通道在第2个触发点中断
B0=0:EC6T1SI为0,关闭PWM的6通道在第1个触发点中断
仅输出PWM波形不需要打开中断,如需要在特定位置执行某些功能,打开中断并编写相应的中断函数即可
DebugLab 发表于 2025-11-2 20:43
PWM6CR=0xC0,即1100 0000
低3位:
B2=0:EC6I为0,关闭PWM的6通道的PWM中断
程序里面是使用了中断的呢
void pwm_isr() interrupt 22 using 1
{
static bit dir = 1;
static u16 t2_val = 0;
if(PWMCFG & 0x08)
{
PWMCFG &= ~0x08; //清归零中断标志
if (dir) //第 2 触发点的值以步进值 2 递增
{
t2_val += DUTY_CYCLE_STEP;
if (t2_val >= CYCLE_VALUE) dir = 0;
}
else //第 2 触发点的值以步进值 2 递减
{
t2_val -= DUTY_CYCLE_STEP;
if (t2_val <= DUTY_CYCLE_STEP) dir = 1;
}
P_SW2 |= 0x80; //将 EAXSFR 位置 1,以访问 PWM 在扩展 RAM 区的特殊功能寄存器
PWM6T2 = t2_val; //更新 PWM 通道 6 第 2 触发点的值
PWM7T2 = t2_val; //更新 PWM 通道 7 第 2 触发点的值
P_SW2 &= 0x7F; //将 EAXSFR 位置 0,恢复访问 XRAM
}
} 欢迎哈哈哈3 发表于 2025-11-3 09:44
程序里面是使用了中断的呢
void pwm_isr() interrupt 22 using 1
那就打开中断 如果不需要用到中断,就不要允许中断,如果用到才允许中断,一旦允许,必须要有中断处理函数。清除中断标志。 梁工 发表于 2025-11-3 10:57
如果不需要用到中断,就不要允许中断,如果用到才允许中断,一旦允许,必须要有中断处理函数。清除中断标志 ...
对的,不然单片机就会出现不可预期的bug 梁工 发表于 2025-11-3 10:57
如果不需要用到中断,就不要允许中断,如果用到才允许中断,一旦允许,必须要有中断处理函数。清除中断标志 ...
好的,谢谢了 猫虎的 发表于 2025-11-3 11:20
对的,不然单片机就会出现不可预期的bug
是的呢,谢谢了
页:
[1]