| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2782 人关注过本帖
标题:新手,老师们!利用外部脉冲,能在外部中断中
只看楼主 加入收藏
wuzijun9060
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2017-2-12
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
新手,老师们!利用外部脉冲,能在外部中断中
新手,利用外部脉冲,能在外部中断中实现计数吗?
如果能,请教如何实现
搜索更多相关主题的帖子: 如何 
2017-02-15 08:13
qdcs
Rank: 6Rank: 6
等 级:侠之大者
威 望:5
帖 子:171
专家分:458
注 册:2016-12-22
收藏
得分:14 
中断来源是哪里?


我是硬件工程师
2017-02-15 17:27
wuzijun9060
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2017-2-12
收藏
得分:0 
中断来源是20ms的方波
2017-02-15 19:33
qdcs
Rank: 6Rank: 6
等 级:侠之大者
威 望:5
帖 子:171
专家分:458
注 册:2016-12-22
收藏
得分:0 
能实现,等会上代码


我是硬件工程师
2017-02-15 19:42
qdcs
Rank: 6Rank: 6
等 级:侠之大者
威 望:5
帖 子:171
专家分:458
注 册:2016-12-22
收藏
得分:0 
程序代码:
//盛杰瑞办公设备实验室



#include <AT89X52.h>       //调用51单片机的头文件


void INIT0(void) interrupt 0

{
  P3_2 =!P3_2;
    P3_0=1;  //接到p3.4脚

}

void INIT1(void)interrupt 3
{
P3_2=!P3_2;
   


}

//---------------------------------------

void main(void)            //主函数,单片机开机后就是从这个函数开始运行
{

    //***定时器Timer0初始化***
    TMOD=0x22;         

              //设置定时器0为方式1
    TL0=256-20 ;           //设置定时器0初值低8位
    TH0=256-20  ;            //设置定时器0初值高8位
    TR0=1;                 //启动定时器0
    ET0=1;                 //Timer0中断允许
    TL1=256-5 ;           //设置定时器0初值低8位
    TH1=256-5  ;            //设置定时器0初值高8位
    TR1=1;                 //启动定时器0
    ET1=1; 

    //**********************

    //***外部中断INT0初始化***
    IT0=1;                 //下降沿触发方式
    EX0=1;                 //外部INT0中断允许
    //**********************

    //***开全局中断设置****
    //外部中断INT0设置了中断允许,此处要开全局中断
    EA=1;                  //开全局中断
    //*********************

    while(1)               //死循环,单片机初始化后,将一直运行这个死循环
    {

    }
}

我是硬件工程师
2017-02-15 20:10
qdcs
Rank: 6Rank: 6
等 级:侠之大者
威 望:5
帖 子:171
专家分:458
注 册:2016-12-22
收藏
得分:0 
代码仅供参考,我还没测试,调试需要很多次,你懂得。这个思路是用两个定时,分别计数,第二个计数的输入用p3.4脚。接受p3.0的输出。你的电路图要更改。

我是硬件工程师
2017-02-15 20:14
qdcs
Rank: 6Rank: 6
等 级:侠之大者
威 望:5
帖 子:171
专家分:458
注 册:2016-12-22
收藏
得分:0 
请问,电源的频率稳定性还不如单片机自身的晶振,你为什么要用工频。误差在+ -0.2Hz

我是硬件工程师
2017-02-15 20:19
wuzijun9060
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2017-2-12
收藏
得分:0 
qdcs老师:这是原理图
要求:1每个LED灯泡由一个MCU控制;100ms开,400ms关
       2、多个灯泡接在同一个交流输入线AC 90--110V上,灯泡的闪烁要同步;
我选择的MCU是STC15F104W;
我想用计数方式实现同步我开关时间
图片附件: 游客没有浏览图片的权限,请 登录注册
2017-02-16 12:11
qdcs
Rank: 6Rank: 6
等 级:侠之大者
威 望:5
帖 子:171
专家分:458
注 册:2016-12-22
收藏
得分:0 
我现在想想从根上就有问题。虽然你没详细说,我猜你做的是独立的灯每个灯由一个stc15f控制,通过电源频率同步。这样一来,每个单片机的开机复位时间不同导致第一个方波信号的时基不同。还是会各自亮各自的,只是频率相同。估计是满天繁星的效果。那就没必要用单片机了。用过ne555时基集成电路加个可控硅很容易搞定。


我是硬件工程师
2017-02-16 13:35
qdcs
Rank: 6Rank: 6
等 级:侠之大者
威 望:5
帖 子:171
专家分:458
注 册:2016-12-22
收藏
得分:0 
我这里没有stc15f104w的芯片和开发平台。给你个51的代码你烧录试试。看资料代码应该通用,不过必须根据你的硬件作调整
程序代码:
#include <AT89X52.h>      


unsigned char k;
void INIT0(void) interrupt 0

{

    //***此处用户自行添加外部INT0中断处理程序***
   

    P3_2=1;          //p3.2输出高电平。用来点亮灯
    for(k=0;k<1000;k++);   //亮灯时长 ,调整k的值
    P3_2=0;                  //
    for(k=0;k<10000;k++);  //灭灯时长
   

   

   

    //******************************************

}

void main(void)       
{

    IT0=1;                 //下降沿触发方式
    EX0=1;                

    //**********************

    EA=1;            
     
    while(1)              

    {
     
    }
}



[此贴子已经被作者于2017-2-16 17:00编辑过]


我是硬件工程师
2017-02-16 14:13
快速回复:新手,老师们!利用外部脉冲,能在外部中断中
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031630 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved