血饮战士 发表于 2015-3-4 14:27:50

请教一个STC单片机做DMX512接收的问题

最近我在用STC单片机做DMX512解码的时候遇到个问题,我的解码程序在STC12C5A60S2上DMX512能正常解码,   可是换在STC11F02E上就不能正常解码。不知道问题出在哪??   请问有高人遇到过类似的问题吗?是如何解决的?谢谢!

血饮战士 发表于 2015-3-4 14:42:35

没人知道么?{:sad:}

大米饭 发表于 2015-3-4 16:01:43

用过89C52和15W408AS解码,11F02E的没用过

weiwei4 发表于 2015-3-4 16:04:58

看看Datasheet是否寄存器有不同,再看看你烧录时配置是否有不同,这个得靠你自己找,光这么一说谁帮得了你

xintao 发表于 2015-3-4 16:17:42

正好遇到这个问题的人不一定很多,不正常的情况有很多种,问的有点笼统,别人也不好回答。建议你把问题描述详细一点,或者把你的思路给大家说一下,大家帮你分析分析。
对于不涉密的源码,你也可以贴出来,大家帮你看看,方便别人帮你解决问题的同时,也方便后人查阅。
根据你的描述,即然能在某一种单片机上正常运行了,说明你的程序应该基本正确,没有太大到问题,而移植后不能正常工作了,问题很可能出在移植的过程中,这时你不妨看看你的晶振频率、时钟选择、以及定时器的配置是否正确。
另外调试512信号,跟调试串口方法一样,你也可以先用个串口调试助手调一下,看看基本的通信是否正常。
还有就是示波器看一下波形,检查一下你的硬件连接是不是正常。

小李非刀 发表于 2015-3-4 16:22:33

STC11F02E没有xdata,这个要注意。

饭桶 发表于 2015-3-4 16:29:33

定时器缺少,不一样的。

小李非刀 发表于 2015-3-4 16:32:35

饭桶 发表于 2015-3-4 16:29
定时器缺少,不一样的。

STC12C5A60S2 与 STC11F02E 定时器都有T0和T1

血饮战士 发表于 2015-3-4 17:04:00

xintao 发表于 2015-3-4 16:17
正好遇到这个问题的人不一定很多,不正常的情况有很多种,问的有点笼统,别人也不好回答。建议你把问题描述 ...

stc11f02e 定时器有T0和 T1的,经检查我发现串口是能接受数据的,   所以我猜测可能就是PWM那一块出了问题。在STC11F02E上可能不能用循环方式产生PWM,具体代码如下
void RGB(void)
{
uchar x;
for(x=255;x!=0;x--)
   for(PWM=0;PWM!=255;PWM++)
                   {
                  if(dmx>PWM) {R=ON;}
                        else                  {R=OFF;}      
                  if(dmx>PWM) {G=ON;}
                        else                  {G=OFF;}
                  if(dmx>PWM) {Y=ON;}
                        else                  {Y=OFF;}
                }                  
}

血饮战士 发表于 2015-3-4 17:10:02

大米饭 发表于 2015-3-4 16:01
用过89C52和15W408AS解码,11F02E的没用过

请问下你做的时候用的是循环产生PWM还是定时器产生PWM

weiwei4 发表于 2015-3-4 17:18:48

太猛了吧,用循环产生PWM,这样的PWM周期你怎么保证的?

血饮战士 发表于 2015-3-4 17:22:30

weiwei4 发表于 2015-3-4 17:18
太猛了吧,用循环产生PWM,这样的PWM周期你怎么保证的?

可是我循环产生PWM 在STC12C5A60S2上好用啊

小李非刀 发表于 2015-3-4 17:39:28

如果是IO口操作,就应该是一样的,你修改了IO口偶定义了不?

血饮战士 发表于 2015-3-4 17:56:52

小李非刀 发表于 2015-3-4 17:39
如果是IO口操作,就应该是一样的,你修改了IO口偶定义了不?

P1M1=0X00;                  
P1M0=0XFF;

P3M1=0X00;                  
P3M0=0XFE;

强推娩输出应该没问题的吧

血饮战士 发表于 2015-3-4 17:57:30

血饮战士 发表于 2015-3-4 17:56
P1M1=0X00;                  
P1M0=0XFF;



定义没修改用的还是 1.01.11.2 端口

bbs2009 发表于 2015-3-4 18:14:18

xintao 发表于 2015-3-4 18:22:41

血饮战士 发表于 2015-3-4 17:04
stc11f02e 定时器有T0和 T1的,经检查我发现串口是能接受数据的,   所以我猜测可能就是PWM那一块出了 ...

没看出来PWM这个变量是在哪儿定义的,如果其它地方不需要修改这个变量,这个变量应该也定义在这个函数内吧;
另外,如果你怀疑是这一块的问题,而不是你没有收到512信号,那么你可以在软件里先给你的dmx[]付个初值,屏蔽掉其它修改dmx[]值的地方,看看什么结果……

血饮战士 发表于 2015-3-5 09:57:36

xintao 发表于 2015-3-4 18:22
没看出来PWM这个变量是在哪儿定义的,如果其它地方不需要修改这个变量,这个变量应该也定义在这个函数内 ...

PWM定义成全局变量没啥问题吧!    另外RGB()函数这一块该怎么写最好, 前辈能给个例子吗?

xintao 发表于 2015-3-5 18:19:22

血饮战士 发表于 2015-3-5 09:57
PWM定义成全局变量没啥问题吧!    另外RGB()函数这一块该怎么写最好, 前辈能给个例子吗? ...

不好意思,我没有这方面的例子,

大米饭 发表于 2015-3-9 08:26:23

血饮战士 发表于 2015-3-4 17:10
请问下你做的时候用的是循环产生PWM还是定时器产生PWM

15W的是硬件的PWM,89的使用定时器

freshuman 发表于 2015-3-19 16:24:13

一个有硬件PWM,一个没有,就不能互用了。
页: [1]
查看完整版本: 请教一个STC单片机做DMX512接收的问题