关于下降沿触发的的问题

2019-03-24 18:02发布

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

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





此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
maychang
1楼-- · 2019-03-25 03:24
老弟的汉语实在无法恭维。

看了几遍,大致上弄明白了楼主要什么。
1、“顺便问一下如果i很大的话,单片机能存储下来吗”?绝对没有问题。一个字节放不下用两个字节,两个放不下用四个。
2、“单片机上无显示器,可以寄存器放置吗”?本来就是放在寄存器里面,即使有显示,也是显示寄存器里面的值。
jishuaihu
2楼-- · 2019-03-25 08:00
楼主啥都不懂就能有这样的思路值得嘉奖啊。
首先检测下降沿可以用中断,比自己检测要及时一些,也比较方便,当然如果时间要求不是很严的话自己写代码用IO口监测也是可以的。
另外的问题楼上已经说了,一个自己不够用两个字节,两个不够用4个,总有够用的时候。存数也是本来就是要存到到内存中的(不能叫寄存器了),当然存放到寄存器中也是可以的。
maychang
3楼-- · 2019-03-25 11:40
 精彩回答 2  元偷偷看……
tiankai001
4楼-- · 2019-03-25 13:14
看得有些迷糊,不过感觉应该不是很复杂,你首先理清思路吧,只有思路清楚了,做起来才会容易下手
ZNF
5楼-- · 2019-03-25 14:38
#include <reg51.h>


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;
     }
}
ZNF
6楼-- · 2019-03-25 17:04
 精彩回答 2  元偷偷看……

一周热门 更多>