本帖最后由 xxkj2010 于 2024-1-4 18:25 编辑
昨晚下载了《STC32G12K128-DSO-USB-CDC-PC-480x320-V2-opencode-20220819》下来学习,感觉大佬太厉害了!
几乎把STC32G12K128的资源都榨干了:定时器0、1、3、4,ADC,PWMA、PWMB,外部中断1,内部比较器,USB-CDC。
测频率的基本流程是这样的:
用定时器1进行计数,从0计数到0xffff,产生中断,中断时freq_H加1;
- void timer1_ISR (void) interrupt TMR1_VECTOR
- {
- freq_H++;
- }
复制代码
由PWM进行计时,1秒产生一个闸门开关,让外部中断1(P33)产生中断;
INT1(P33)中断时算定时器1的计数总量,这个总量就是频率。
- /********************* INT0中断函数 *************************/
- void INT1_ISR(void) interrupt INT1_VECTOR
- {
- frequency = ((u32)freq_H << 16) + ((u32)TH1 << 8) + (u32)TL1;
- freq_H = 0; TH1 = 0; TL1 = 0;
- B_FrequencyOk = 1;
- }
复制代码
现在还没有明白的就是:是PWMA对INT1进行控制,还是PWMB对INT1进行控制?
它是在芯片内部对INT1端口的P33进行控制,还是PWM计时1秒时间到了,通过某个引脚给P33产生下拉(或上拉)引发INT1中断?
感谢梁工在百忙中抽出时间给予答复,谢谢!
|