找回密码
 立即注册
查看: 25|回复: 0

用定时器4当计数器用该怎么设置

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2026-03-15 18:48:24
已绑定手机

5

主题

19

回帖

67

积分

注册会员

积分
67
发表于 3 天前 | 显示全部楼层 |阅读模式
我想用定时器4当计数器用读取洗衣机水位传感器信号,该信号的频率是20-30khz,这样不占用主程序,现在不管怎么设置一直读不到脉冲数,返回的都是63840或其他固定值,我想知道该怎么设置相关寄存器,我排查了硬件电路用程序读引脚状态一个一个下降沿计数可以,就是那样太占用主程序时间了,,因为电路板已经做好在p0.6口了不能改到其他定时器了。下面是测试不成功的程序,主要是用的豆包和元宝该的程序,他们两个一直配置计数器好像都不对。
#include <STC8H.H>


void UART1_Init(void)
{
    P3M0 |= 0x03;
    P3M1 &= ~0x03;
    SCON = 0x50;
    AUXR &= 0xBF;
    AUXR &= 0xFE;
    TMOD &= 0x0F;
    TMOD |= 0x20;
    TH1 = 0xFD;
    TL1 = 0xFD;
    TR1 = 1;
    TI = 1;
}

void UART_Send(unsigned char dat)
{
    SBUF = dat;
    while(!TI);
    TI = 0;
}

void Send_Num(unsigned int num)
{
    char buf[6];
    unsigned char i = 0, j = 0;
    if(num == 0) { UART_Send('0'); return; }
    while(num > 0) { buf[i++] = num % 10 + '0'; num /= 10; }
    for(j = i; j > 0; j--) UART_Send(buf[j-1]);
}

//==============================
// ? 终极正确:STC8H4K32TL 定时器4 外部计数 P0.6
//==============================
void Timer4_Init(void)
{
    // 1. P0.6 高阻输入
    P0M0 |= 0x40;
    P0M1 |= 0x40;

    // 2. 官方标准:外部计数模式
    T4T3M = 0x88;   // <-- 这是唯一正确的启动方式
   
    // 3. 清零
    T4H = 0;
    T4L = 0;
}

//==============================
// 只读计数器
//==============================
unsigned int Read_Count(void)
{
    unsigned int val;
    val = T4H;
    val <<= 8;
    val |= T4L;
    return val;
}

//==============================
// 主函数(每秒输出差值)
//==============================
void main(void)
{
    unsigned int now, last=0, diff;

    UART1_Init();
    Timer4_Init();

    while(1)
    {
        // 1秒延时
        unsigned long i;
        for(i=0; i<400000L; i++);

        now = Read_Count();
        diff = now - last;  // 每秒真实脉冲数
        last = now;

        Send_Num(diff);   // 输出波动数值
        UART_Send('\r');
        UART_Send('\n');
    }
}

回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-3-17 05:33 , Processed in 0.096490 second(s), 42 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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