标题: 51单片机对外部脉冲技术 求帮助 [打印本页]

作者: 千千鸟飞绝    时间: 2018-6-6 10:12
标题: 51单片机对外部脉冲技术 求帮助
51单片机对外部脉冲进行计数,外部脉冲为一方波,计数到二十,LED=0。最好使用INT0
要完整程序,时间比较急

作者: wulin    时间: 2018-6-6 13:19
#include<reg52.h>
sbit led=P2^7;//LED显示低电平亮
//外部计数脉冲输入端T0 P3.4低电平有效

/*****定时器0初始化****/
void Timer0Init()
{
        TMOD= 0x06;//设置定时器0计数/自动重载模式
        TL0 = 0xec;//设置定时初值
        TH0 = 0xec;//设置定时重载值
        TF0 = 0;//清除TF0标志
        TR0 = 1;//定时器0开始计数
        EA=1;//开总中断
        ET0=1;//开定时器0中断        
}
/********主函数**********/
void main()
{
        Timer0Init();
        while(1);
}
/******定时器0中断服务*******/
void timer0() interrupt 1
{
        led=~led;
}




作者: 千千鸟飞绝    时间: 2018-6-6 14:16
wulin 发表于 2018-6-6 13:19
#include
sbit led=P2^7;//LED显示低电平亮
//外部计数脉冲输入端T0 P3.4低电平有效

你好,程序编译没有错误。但是,我用的外部脉冲产生源是 光电对射传感器,这个传感器被遮住产生高电平,在感光部分来回晃动以此产生脉冲。但是实际在晃动过程中,没有记到二十就亮了,请问这是为什么
作者: dzbj    时间: 2018-6-6 15:13
随手写的 没编译没测试 你试试看行不行

#include<reg52.h>

#define uchar unsigned char
#define uint unsigned int

sbit led=P?^?;                //led端口设置(不知道你的led在哪个端口)

uchar Rate_num=0;        //声明 频率计数器变量

void Init_EXT()                //外部中断0初始化
{
        IT0=1;                                //设定外部中断0触发方式 1:下降沿 0:低电平
        EX0=1;                                //打开外部中断0
        EA=1;                                //打开 总中断控制
}

void Server_Int1() interrupt 0        //服务 外部中断0
{
        Rate_num++;                //频率计数器自加
}

void main()                //主程序入口
{
        Init_EXT();                //外部中断0初始化
        led=1;                        //置位 led端口
       
        while(1)
        {
                if(Rate_num==20)        //如果 频率计数器变化值达到设定值
                {
                        led=0;                                //清零 led端口
                }
        }
}
作者: dzbj    时间: 2018-6-6 15:14
wulin 发表于 2018-6-6 13:19
#include
sbit led=P2^7;//LED显示低电平亮
//外部计数脉冲输入端T0 P3.4低电平有效

大哥 他是马嘴 您是驴唇 不搭调啊




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1