STC_STC 发表于 2023-5-9 19:25:51

STC8H1K08 TIMER0的测试INT0脉宽问题



只能测量高脉宽吗?

神农鼎 发表于 2023-5-9 20:13:02

用有PWM的管脚来测量
PWM1P, PWM2P, PWM3P, PWM4P
PWM5,PWM6,   PWM7,PWM8


神农鼎 发表于 2023-5-9 20:15:30





STC_STC 发表于 2023-5-10 08:30:36

谢谢提供了另外的思路,如果需要测量高和低脉宽,PWM可以满足,但需要2路输入,IO口不够用了。
当然,我可以用其他办法去解决:配置信号输入在中断脚,在上升及下降中断的时候开启计时器。
下图中的INT0:

看图是个或门,INT0为0或1都可开启。不知道这INT0是哪里设置?

神农鼎 发表于 2023-5-10 10:38:57




#include "reg51.h"
#include "intrins.h"

sfr   AUXR    =   0x8e;

sfr   P0M1    =   0x93;
sfr   P0M0    =   0x94;
sfr   P1M1    =   0x91;
sfr   P1M0    =   0x92;
sfr   P2M1    =   0x95;
sfr   P2M0    =   0x96;
sfr   P3M1    =   0xb1;
sfr   P3M0    =   0xb2;
sfr   P4M1    =   0xb3;
sfr   P4M0    =   0xb4;
sfr   P5M1    =   0xc9;
sfr   P5M0    =   0xca;

sbit    P32   =   P3^2;
sbit    P33   =   P3^3;

void INT0_Isr() interrupt 0
{
    P0 = TL0;                                 //TL0为测量值低字节
    P1 = TH0;                                 //TH0为测量值高字节
}

void main()
{
    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;

    AUXR = 0x80;                              //1T模式
    TMOD = 0x08;                              //使能GATE,INT0为1时使能计时
    TL0 = 0x00;
    TH0 = 0x00;
    while (P32);                               //等待INT0为低
    TR0 = 1;                                    //启动定时器
    IT0 = 1;                                    //使能INT0下降沿中断
    EX0 = 1;
    EA = 1;

    while (1);
}


梁工 发表于 2023-5-10 16:12:10

Timer0或Timer1的门控位,很合适测量高电平的宽度,而不是测周期,测周期用PCA捕捉或高级PWM捕捉是最好的方式。

STC_STC 发表于 2023-5-11 13:50:52

梁工 发表于 2023-5-10 16:12
Timer0或Timer1的门控位,很合适测量高电平的宽度,而不是测周期,测周期用PCA捕捉或高级PWM捕捉是最好的方 ...

好的,谢谢
页: [1]
查看完整版本: STC8H1K08 TIMER0的测试INT0脉宽问题