STC8G2K64S4的增强型PWM中断疑问
官方手册 19.1.3PWM中断标志寄存器(PWMnIF)CiIF: PWMn 的第 i通道中断标志位。(n=0~5: =0~7)
可设置在各路 PWM 的 T1 和 T2。当所设置的点发生匹配事件时,硬件自动将此位置 1,并向 CPU提出中断请求,此标志位需要软件清零。
这种PWM中断发生处能否设置在周期值得固定处 而非T1,T2有关?
谢谢!
你具体说说想在哪里中断?
PWM除了T1与T2匹配中断,就是周期中断,没别的了。 梁工 发表于 2023-7-28 13:59
你具体说说想在哪里中断?
PWM除了T1与T2匹配中断,就是周期中断,没别的了。 ...
我是想在周期一半发生中断 Inver1688 发表于 2023-7-29 08:13
我是想在周期一半发生中断
如果PWM还有剩余,启动一路PWM,不输出,占空比50%,周期中间的跳变允许中断,就是对应周期的一半。 梁工 发表于 2023-7-29 09:25
如果PWM还有剩余,启动一路PWM,不输出,占空比50%,周期中间的跳变允许中断,就是对应周期的一半。 ...
好的 谢谢您的解答 本帖最后由 Inver1688 于 2023-8-1 10:35 编辑
梁工 发表于 2023-7-29 09:25
如果PWM还有剩余,启动一路PWM,不输出,占空比50%,周期中间的跳变允许中断,就是对应周期的一半。 ...
您好!还有个问题 在官方手册19.2.3 PWM实现渐变灯(呼吸灯)这个代码
void PWM0_Isr() interrupt 22
{
static bit dir = 1;
static int val = 0;
if (PWMCFG01 & 0x08)
{
PWMCFG01 &= ~0x08; //清中断标志
if (dir)
{
val++;
if (val >= CYCLE) dir = 0;
}
else
{
val--;
if (val <= 1) dir = 1;
}
_push_(P_SW2);
P_SW2 |= 0x80;
PWM00T2 = val;
_pop_(P_SW2);
}
}
是不是在中断中改变XFR寄存器的值都要先对P_SW2做入栈 赋值操作后再出栈?
如果在主程序的main函数开头P_SW2 |= 0x80; 整个代码并没有清零P_SW2 那么此时PWM0中断对P_SW2做入栈和出栈操作不?
谢谢!
Inver1688 发表于 2023-7-31 18:48
您好!还有个问题 在官方手册19.2.3 PWM实现渐变灯(呼吸灯)这个代码
void PWM0_Isr() interrupt 22
{
P_SW2 |= 0x80;之后不用清零,中断不需要对P_SW2操作。 梁工 发表于 2023-7-31 23:52
P_SW2 |= 0x80;之后不用清零,中断不需要对P_SW2操作。
但我看到官方例子中却对P_SW2做了,出入栈操作,请问什么情况下要对P_SW2做出入栈操作?谢谢! Inver1688 发表于 2023-8-1 10:33
但我看到官方例子中却对P_SW2做了,出入栈操作,请问什么情况下要对P_SW2做出入栈操作?谢谢! ...
最早是STC15W4K系列的6通道15位增强型PWM开始用XDATA区的SFR,刚开始要求入栈保护一下,后来到了STC8系列,就不需要了。一些例子是由于直接使用STC15系列的例子,所以没有更改。如果是新写的例子,就不会再入栈的。 梁工 发表于 2023-8-1 14:28
最早是STC15W4K系列的6通道15位增强型PWM开始用XDATA区的SFR,刚开始要求入栈保护一下,后来到了STC8系列 ...
好的 谢谢梁工
页:
[1]
2