用C51单片机统计脉冲次数

用C51单片机统计脉冲次数,第1张

举例解答如下:

利用定时器空孝T1,对外部脉冲(P3.5引脚输入)计数,

每输入200次脉冲产生一次中断,累加器+1,

选用T1,计数器模式,方式2(自动重装初值8位计数器),

TMOD

=0110

0000B

=60H

计数初值

=2^8

-200

=256

-200

=56d

=38H,

汇编程序如下:

主程序:

MAIN:

CLR

A

累加器清零

MOV

TMOD,

#60H

置T1计数模式、方式2

MOV

TL1,

#38H

写入计数初值

MOV

TH1,

#38H

写入留待自动重装的初值

SETB

TR1

启动T1计数

SETB

ET1

允许迟亏清T1中断码前

SETB

EB

CPU开中断

SJMP

$

等待一轮对外部脉冲计数溢出中断

以下是T1中断处理子程序:

T1_INT:

INC

A

累加器加1

RETI

中断返回

1、使用T0和T1外部脉冲计数,控薯孝前制两个电机,到1700个脉冲电机停止,

--统计脉冲个数,用外部中断更好。

--T0和T1,留着定时用。

用四个按键控制,按键1控制电机正转,按键2控制电机反转,按键3控制电机1正转,按键4控制电机2正转。

2、例程:

#include<reg51.h> 

sbit k1 = ? //自己定义

sbit k2 = ?

sbit k3 = ?

sbit k4 = ?

sbit DIAN1 = ?

sbit DIAN2 = ?

sbit DIAN3 = ?

sbit DIAN4 = ?

sbit SEN1 = ? 

sbit SEN2 = ?

void delay(unsigned int x)

{

 unsigned int m, n 

 for(m = x m > 0 m--) for(n = 115 n > 0 n--)

}

void main(void)

 TMOD = 0x55

 IE = 0x8a

 while(1) {

 慎颂if (!k1) {

 delay(10)

 if (!k1) {

 while(!k1)

 TH0 = (65536 - 1700) / 256

 TL0 = (65536 - 1700) % 256

 SEN1 = 0

 DIAN1 = 0 DIAN2 = 1

 SEN1 = 1 

 TR0 = 1

 }

 }

 if (!k2) {

 数清delay(10)

 if (!k2) {

 while(!k2)

 TH0 = (65536 - 1700) / 256

 TL0 = (65536 - 1700) % 256

 SEN1 = 0

 DIAN1 = 1 DIAN2 = 0

 SEN1 = 1 

 TR0 = 1

 }

 }

 if (!k3) {

 delay(10)

 if (!k3) {

 while(!k3)

 TH1 = (65536 - 1700) / 256

 TL1 = (65536 - 1700) % 256

 SEN2 = 0

 DIAN3 = 0 DIAN4 = 1

 SEN2 = 1 

 TR1 = 1

 }

 }

 if (!k4) {

 delay(10)

 if (!k4) {

 while(!k4)

 TH1 = (65536 - 1700) / 256

 TL1 = (65536 - 1700) % 256

 SEN2 = 0

 DIAN3 = 1 DIAN4 = 0

 SEN2 = 1 

 TR1 = 1

 }

 }

 }

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8285024.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存