找回密码
 立即注册
查看: 1161|回复: 6

STC8H1K08 TIMER0的测试INT0脉宽问题

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:287
  • 最近打卡:2025-03-27 14:28:57

24

主题

79

回帖

243

积分

中级会员

积分
243
发表于 2023-5-9 19:25:51 | 显示全部楼层 |阅读模式
STC8H1K08 TIMER0的测试INT0脉宽问题-1.png

只能测量高脉宽吗?
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2023-5-9 20:13:02 | 显示全部楼层
用有PWM的管脚来测量
PWM1P, PWM2P, PWM3P, PWM4P
PWM5,  PWM6,   PWM7,  PWM8
1.png

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2023-5-9 20:15:30 | 显示全部楼层
1.png

2.png

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:287
  • 最近打卡:2025-03-27 14:28:57

24

主题

79

回帖

243

积分

中级会员

积分
243
发表于 2023-5-10 08:30:36 | 显示全部楼层
谢谢提供了另外的思路,如果需要测量高和低脉宽,PWM可以满足,但需要2路输入,IO口不够用了。
当然,我可以用其他办法去解决:配置信号输入在中断脚,在上升及下降中断的时候开启计时器。
下图中的INT0:
微信图片_20230510082900.png
看图是个或门,INT0为0或1都可开启。不知道这INT0是哪里设置?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2023-5-10 10:38:57 | 显示全部楼层
1.png


#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);
}


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2023-5-10 16:12:10 | 显示全部楼层
Timer0或Timer1的门控位,很合适测量高电平的宽度,而不是测周期,测周期用PCA捕捉或高级PWM捕捉是最好的方式。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:287
  • 最近打卡:2025-03-27 14:28:57

24

主题

79

回帖

243

积分

中级会员

积分
243
发表于 2023-5-11 13:50:52 | 显示全部楼层
梁*** 发表于 2023-5-10 16:12
Timer0或Timer1的门控位,很合适测量高电平的宽度,而不是测周期,测周期用PCA捕捉或高级PWM捕捉是最好的方 ...

好的,谢谢
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 18:09 , Processed in 0.131150 second(s), 91 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表