9135|13

111

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

关于下降沿触发的的问题 [复制链接]

我现在想做这样一个单片机控制步进电机的程序,下面只是个程序的一部分 有思路但是具体语句实现上还有问题,具体如下:
我想让单片机的P0^0口(外部装置有个对准位置的红外接收管,每到一个特定的位置接收管电压变小,给P00口一个负跳变)做一个下跳沿触发,然后单片机开始发送脉冲控制步进电机转动,并且通过计数累计脉冲个数(比如说i个,顺便问一下如果i很大的话,单片机能存储下来吗?),等到转一周后又接收到负跳变,此时返回i的值(就是让我知道i是多少就行了,单片机上无显示器,可以寄存器放置吗,这里我也不太懂……),大概就是这样,我自己也在网上找这样类似的程序,但是太模糊了,找出来的都不太相关

如果哪位大神能发个链接地址啥的,我也很感谢啊,谢谢各位能看完这么多字!!





此帖出自51单片机论坛

最新回复

既然是毕设,那么应该有指导教师吧,请教一下指导老师吧。 你的问题其实不麻烦,但现在你对于单片机的基本概念有些不清楚,导致你感觉很吃力,其实让老师给你讲一下,估计一两个小时就能弄明白了。 如果全靠你这样自己一点点的抠,是事倍功半的。浪费很多时间。 找个明白人,把中断,定时器的概念和原理讲一下,然后在了解一下单片机程序的基本框架该怎么写,。那么你的毕设几天就能搞定。 另外10楼说的有道理,你弄个开发板,几天就能搞定,不费事。 或者你在网上找个单片机的视频讲座,看一下也能帮你做出来  详情 回复 发表于 2015-4-16 22:24
点赞 关注
 

回复
举报

2万

帖子

0

TA的资源

超级版主

沙发
 
老弟的汉语实在无法恭维。

看了几遍,大致上弄明白了楼主要什么。
1、“顺便问一下如果i很大的话,单片机能存储下来吗”?绝对没有问题。一个字节放不下用两个字节,两个放不下用四个。
2、“单片机上无显示器,可以寄存器放置吗”?本来就是放在寄存器里面,即使有显示,也是显示寄存器里面的值。
此帖出自51单片机论坛
 
 
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

板凳
 
楼主啥都不懂就能有这样的思路值得嘉奖啊。
首先检测下降沿可以用中断,比自己检测要及时一些,也比较方便,当然如果时间要求不是很严的话自己写代码用IO口监测也是可以的。
另外的问题楼上已经说了,一个自己不够用两个字节,两个不够用4个,总有够用的时候。存数也是本来就是要存到到内存中的(不能叫寄存器了),当然存放到寄存器中也是可以的。
此帖出自51单片机论坛
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

4
 
“这不是重点啦!!关键是这个程序的结构是怎样的,有点搞不清楚。。。”
所以我说“老弟的汉语实在无法恭维”,首帖你可曾提到程序结构么?
如果是像3楼所说,使用外部中断接收,当然这段加一、判断,也许还有显示的程序放到外部中断程序里面。
如果是定时巡检,那么放到定时中断程序里面,根据是否接收到下降沿转移。
此帖出自51单片机论坛
 
 
 

回复

6366

帖子

4914

TA的资源

版主

5
 
看得有些迷糊,不过感觉应该不是很复杂,你首先理清思路吧,只有思路清楚了,做起来才会容易下手
此帖出自51单片机论坛
 
 
 

回复

111

帖子

0

TA的资源

一粒金砂(中级)

6
 
#include


sbit P0_0=P0^0;
sbit P1_3=P1^3;        //假设从P1.3输出脉冲
unsigned int ijishu;    //每产生一个脉冲计数一次
unsigned int iCount;      //延时间隔时间变量
unsigned int iPulseCount;      //脉冲脉宽时间变量

void timer0() interrupt 1
{//定时器每1毫秒一次中断
  TH0=(65536-1000)/256;  //设1ms中断1次TH1初值
  TL0=(65536-1000)%256; //设1ms中断1次TL1初值

if(iCount)
    {//计数未到0,计数器-1
        iCount--;
    }
if(iPulseCount)
    {//计数未到0,计数器-1
        iPulseCount--;
    }
   
}


main()
{

    TMOD = 0X01;//方式1
    EA = 1;//总中断允许
    ET0 = 1;//定时器0中断允许
    TR0 = 1;//启动定时器0
   
   P1_3 = 0;    //脉冲输出端口,假设输出正脉冲,预置为低电平
           while(P0_0)                   //当P0^0口高电平时计数开始
    {
        iCount = 1000;//每间隔1000*1ms = 1秒一个脉冲,t值变化改此处
        while(iCount);//等待2秒中
        P1_3 = 1;    //置为高电平,输出正脉冲
        iPulseCount = 10;//每间隔10*10ms = 100ms一个脉冲,脉宽变化改此处
        while(iPulseCount);//高电平保持100ms
        P1_3 = 0;    //置为低电平,输出正脉冲结束
           ijishu=ijishu+1;
     }
}
此帖出自51单片机论坛
 
 
 

回复

111

帖子

0

TA的资源

一粒金砂(中级)

7
 
6楼是我自己写的程序,主要意思是当P0_0口高电平时,通过定时器T0产生脉冲,并从P1_3口发送出去;当P0_0跳变成低电平时,则不执行程序并完成脉冲计数
我有两个问题:不知道下跳沿触发(P00口)这么写可不可以,还有我的计数君应该保存到哪里,程序中应该怎么查看?
多谢大家了
此帖出自51单片机论坛
 
 
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

8
 
你的程序有这样的一个问题,不应该把条件加到主循环中。应该用个死循环去不断坚持P0.0,在while(1){}里面去判断P0.0的状态,是高的时候执行一种操作,低的时候执行一种操作,因为你要检测下降沿,所以要保存一下上次的状态,判断是低状态还是下降沿。
存储的部分你就不用再关心了,ijishu这个变量就是存储计数的。这个变量由编译器自动分配的地址,你知道这回事就行了,如果想自己分配地址也可以,等你熟练了再玩吧。现在知道已经分配内存了就行
此帖出自51单片机论坛
 
 
 

回复

111

帖子

0

TA的资源

一粒金砂(中级)

9
 
jishuaihu 发表于 2015-4-8 10:11
你的程序有这样的一个问题,不应该把条件加到主循环中。应该用个死循环去不断坚持P0.0,在while(1){}里面去判断P0.0的状态,是高的时候执行一种操作,低的时候执行一种操作,因为你要检测下降沿,所以要保存一下上次的状态,判断是低状态还是下降沿。
存储的部分你就不用再关心了,ijishu这个变量就是存储计数的。这个变量由编译器自动分配的地址,你知道这回事就行了,如果想自己分配地址也可以,等你熟练了再玩吧。现在知道已经分配内存了就行

您好,谢谢你那么认真的答复我
其实我就是不明白的就是这个下降沿的判断到底该怎么写

我觉得这么写肯定是错的:


if(P00=1){……} //这不就成了高电平触发了吗?



还有我不明白的是INT0和我的P00口是否有关系(因为我在书上看的是INT0是P3.2口),如果有,应该怎么联系啊?

外部中断我就只能写到这一步了:

void INT0() interrupt 0

{IE0=1;

IT0=1;

……

}



最后我想问的是我那个ijishu,我并关心它存在哪里了..我只想知道的是用什么方法能查看这个数?



恩。非常感谢
此帖出自51单片机论坛
 
 
 

回复

900

帖子

0

TA的资源

五彩晶圆(初级)

10
 
老兄,需不需要给你推荐一块开发板啊?我觉得你需要用开发板学习学习。
此帖出自51单片机论坛
 
个人签名别打我! 我说。
 
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

11
 
要想测边沿必须要知道上一次的状态,同时满足上一次为1这一次为0就是下降沿了,同时要注意保存这一次的状态,等下一次判断的时候用这个当做上一次的状态。
你查ijishu这个干吗啊?又无法显示。可以把这个数用串口发出来。
此帖出自51单片机论坛
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

12
 
检测某引脚负跳变的代码,和检测按键按下的很相似,拿检测按键的程序稍加修改即可。
此帖出自51单片机论坛
 
 
 

回复

6366

帖子

4914

TA的资源

版主

13
 
既然是毕设,那么应该有指导教师吧,请教一下指导老师吧。
你的问题其实不麻烦,但现在你对于单片机的基本概念有些不清楚,导致你感觉很吃力,其实让老师给你讲一下,估计一两个小时就能弄明白了。
如果全靠你这样自己一点点的抠,是事倍功半的。浪费很多时间。

找个明白人,把中断,定时器的概念和原理讲一下,然后在了解一下单片机程序的基本框架该怎么写,。那么你的毕设几天就能搞定。

另外10楼说的有道理,你弄个开发板,几天就能搞定,不费事。

或者你在网上找个单片机的视频讲座,看一下也能帮你做出来
此帖出自51单片机论坛
 
 
 

回复

111

帖子

0

TA的资源

一粒金砂(中级)

14
 
此楼,终结,已搞定
大致思路:看芯片手册
我的是C8051F320,其中有个用PCA0检测下跳沿的方法,多谢楼上各位!!!
非常感谢
此帖出自51单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表