STC8H1K08 TIMER0的测试INT0脉宽问题
只能测量高脉宽吗?
用有PWM的管脚来测量
PWM1P, PWM2P, PWM3P, PWM4P
PWM5,PWM6, PWM7,PWM8
谢谢提供了另外的思路,如果需要测量高和低脉宽,PWM可以满足,但需要2路输入,IO口不够用了。
当然,我可以用其他办法去解决:配置信号输入在中断脚,在上升及下降中断的时候开启计时器。
下图中的INT0:
看图是个或门,INT0为0或1都可开启。不知道这INT0是哪里设置?
#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);
}
Timer0或Timer1的门控位,很合适测量高电平的宽度,而不是测周期,测周期用PCA捕捉或高级PWM捕捉是最好的方式。 梁工 发表于 2023-5-10 16:12
Timer0或Timer1的门控位,很合适测量高电平的宽度,而不是测周期,测周期用PCA捕捉或高级PWM捕捉是最好的方 ...
好的,谢谢
页:
[1]