打印
[PIC®/AVR®/dsPIC®产品]

如何在一个IO口发射数百个脉冲

[复制链接]
2067|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
m1a1ha|  楼主 | 2014-9-11 17:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
脉冲有数百个  000011111111111111111111111000000000000000000000000000............

如何在dsPIC中定义一个二进制数组,让一个IO口发射这数百个脉冲
沙发
zydlyq| | 2014-9-11 17:28 | 只看该作者
每一个脉冲的时间没有定。。

使用特权

评论回复
板凳
yklstudent| | 2014-9-11 17:30 | 只看该作者
可以定二进制数组这东西??????

使用特权

评论回复
地板
m1a1ha|  楼主 | 2014-9-11 17:31 | 只看该作者
zydlyq 发表于 2014-9-11 17:28
每一个脉冲的时间没有定。。

1微妙

使用特权

评论回复
5
m1a1ha|  楼主 | 2014-9-11 17:32 | 只看该作者
yklstudent 发表于 2014-9-11 17:30
可以定二进制数组这东西??????

因为要用到16个IO口,所以用输出比较等方法不行

使用特权

评论回复
6
ZG11211| | 2014-9-11 20:49 | 只看该作者
定义成双字节常量,然后依次右移取出末位数并发送。

使用特权

评论回复
7
yklstudent| | 2014-9-11 21:50 | 只看该作者
空间没问题,就直接用单字节数组好了

使用特权

评论回复
8
m1a1ha|  楼主 | 2014-9-12 09:59 | 只看该作者
ZG11211 发表于 2014-9-11 20:49
定义成双字节常量,然后依次右移取出末位数并发送。

右移不行,脉冲有数百个,双字节的位数远远不够

使用特权

评论回复
9
m1a1ha|  楼主 | 2014-9-12 10:05 | 只看该作者
yklstudent 发表于 2014-9-11 21:50
空间没问题,就直接用单字节数组好了

单字节数组会不会导致赋值错误

使用特权

评论回复
10
lanmp| | 2014-9-12 11:07 | 只看该作者
m1a1ha 发表于 2014-9-12 09:59
右移不行,脉冲有数百个,双字节的位数远远不够

那就数组加移位,一个字节移完了在下一个。spi不就是这样的吗

使用特权

评论回复
11
yklstudent| | 2014-9-12 11:26 | 只看该作者
IO=(Array[i])?1:0;
排除人为出错可能,完全可以

使用特权

评论回复
12
mylsf| | 2014-9-12 13:41 | 只看该作者
这个数百脉冲是确定了的么

使用特权

评论回复
13
m1a1ha|  楼主 | 2014-9-12 13:42 | 只看该作者
mylsf 发表于 2014-9-12 13:41
这个数百脉冲是确定了的么

嗯,有600多

使用特权

评论回复
14
mylsf| | 2014-9-12 14:01 | 只看该作者
可不可以定义一个结构体
struct pu
{
bool num;//是0还是1
int length;//表示1或0的个数
};
如果你的脉冲有大量的连续1或者0,这样应该还行  

使用特权

评论回复
15
mylsf| | 2014-9-12 14:03 | 只看该作者
m1a1ha 发表于 2014-9-12 13:42
嗯,有600多

可不可以定义一个结构体
struct pu
{
bool num;//是0还是1
int length;//表示1或0的个数
};
如果你的脉冲有大量的连续1或者0,这样应该还行

然后就定义一个结构体的数组

使用特权

评论回复
16
mylsf| | 2014-9-12 14:13 | 只看该作者
m1a1ha 发表于 2014-9-12 13:42
嗯,有600多

或者只定义一个数组,和一个标志

比如数组是 int num[50]={2,3,21,5,。。。};

标志FLAG=DIYIGEWEILING

就表示脉冲为2个0,3个1,21个0,5个1。。。。。。。。

使用特权

评论回复
17
mylsf| | 2014-9-12 14:22 | 只看该作者
m1a1ha 发表于 2014-9-12 13:42
嗯,有600多

int num[9]={112,35,17,23,106,3,5,21,178};
int flag=DIYIWEISHI1;

main()
{
        int i=0;
        int j=0;

                for( i=0;i<9;i++)
                {
                        for( j=0;j<num;j++)
                        {
                                printf("%d",(i+flag)%2);
                       
                        }
                }
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

69

帖子

0

粉丝