电机转速信号的单片机测量程序

本文介绍了一种使用8253定时器配合单片机实现电机转速信号测量的方法。通过定时器0每2秒产生中断信号,控制8253计数器进行计数,进而获取电机转速数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

电机转速信号的单片机测量程序

 

#include <reg52.h>

#include <absacc.h>

#include <stdio.h>

#define uchar unsigned char

#define uint unsigned int

// 定义8253的寄存器地址

#define     COM XBYTE[0x6000]   // 定义8253的控制字寄存器地址

#define     C0 XBYTE[0x0000]    // 定义8253的计数器0寄存器地址

#define     C0I XBYTE[0x1000]

sbit P1_7=P1^7;

uint BUF810;

uchar h,l,a,b,c,sendflag,FREQ;

 

//主函数,初始化定时器和片外寄存器

void main(void)

{

    EA=1; PT0=1;

    ET0=1;

    IT0=1;IT1=1;

    EX0=1;EX1=1;ET2=1;

    T2CON=0x08;

    TMOD=0x21;  //用定时器0产生2s的中断信号,为8253计数提供门控。

    TH0=-1000/256; 

    TL0=-1000%256;

   

   

// 8253R中的控制字寄存器中选择计数器0,并对其幅初值0

COM=0x30;

    C0=0;C0=0;

TR0=1;

    sendflag=1;

    while(1){}

}

 

/* 定时计数器0的中断服务子程序 */

void timer0(void)  interrupt 1 using 1

{

TH0=-1000/256;                          // 定时器T0的高四位赋值

TL0=-1000%256;

FREQ=FREQ+1;                        // 定时器T0的低四位赋值

if (FREQ==1000)                    // 1秒判断

    {

FREQ=0;

P1_7=!P1_7;                     // 信号输出端口取反

COM=0x00;                       //计数器0闩锁操作

l=C0;                           //分别读取高、低8位的数据

h=C0;

BUF810=-(h*256+l);

COM=0x30;

C0=0;C0I=0;

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值