请教一个STC单片机做DMX512接收的问题
最近我在用STC单片机做DMX512解码的时候遇到个问题,我的解码程序在STC12C5A60S2上DMX512能正常解码, 可是换在STC11F02E上就不能正常解码。不知道问题出在哪?? 请问有高人遇到过类似的问题吗?是如何解决的?谢谢! 没人知道么?{:sad:} 用过89C52和15W408AS解码,11F02E的没用过 看看Datasheet是否寄存器有不同,再看看你烧录时配置是否有不同,这个得靠你自己找,光这么一说谁帮得了你 正好遇到这个问题的人不一定很多,不正常的情况有很多种,问的有点笼统,别人也不好回答。建议你把问题描述详细一点,或者把你的思路给大家说一下,大家帮你分析分析。对于不涉密的源码,你也可以贴出来,大家帮你看看,方便别人帮你解决问题的同时,也方便后人查阅。
根据你的描述,即然能在某一种单片机上正常运行了,说明你的程序应该基本正确,没有太大到问题,而移植后不能正常工作了,问题很可能出在移植的过程中,这时你不妨看看你的晶振频率、时钟选择、以及定时器的配置是否正确。
另外调试512信号,跟调试串口方法一样,你也可以先用个串口调试助手调一下,看看基本的通信是否正常。
还有就是示波器看一下波形,检查一下你的硬件连接是不是正常。 STC11F02E没有xdata,这个要注意。 定时器缺少,不一样的。 饭桶 发表于 2015-3-4 16:29
定时器缺少,不一样的。
STC12C5A60S2 与 STC11F02E 定时器都有T0和T1 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 16:01
用过89C52和15W408AS解码,11F02E的没用过
请问下你做的时候用的是循环产生PWM还是定时器产生PWM 太猛了吧,用循环产生PWM,这样的PWM周期你怎么保证的? weiwei4 发表于 2015-3-4 17:18
太猛了吧,用循环产生PWM,这样的PWM周期你怎么保证的?
可是我循环产生PWM 在STC12C5A60S2上好用啊 如果是IO口操作,就应该是一样的,你修改了IO口偶定义了不? 小李非刀 发表于 2015-3-4 17:39
如果是IO口操作,就应该是一样的,你修改了IO口偶定义了不?
P1M1=0X00;
P1M0=0XFF;
P3M1=0X00;
P3M0=0XFE;
强推娩输出应该没问题的吧 血饮战士 发表于 2015-3-4 17:56
P1M1=0X00;
P1M0=0XFF;
定义没修改用的还是 1.01.11.2 端口 血饮战士 发表于 2015-3-4 17:04
stc11f02e 定时器有T0和 T1的,经检查我发现串口是能接受数据的, 所以我猜测可能就是PWM那一块出了 ...
没看出来PWM这个变量是在哪儿定义的,如果其它地方不需要修改这个变量,这个变量应该也定义在这个函数内吧;
另外,如果你怀疑是这一块的问题,而不是你没有收到512信号,那么你可以在软件里先给你的dmx[]付个初值,屏蔽掉其它修改dmx[]值的地方,看看什么结果……
xintao 发表于 2015-3-4 18:22
没看出来PWM这个变量是在哪儿定义的,如果其它地方不需要修改这个变量,这个变量应该也定义在这个函数内 ...
PWM定义成全局变量没啥问题吧! 另外RGB()函数这一块该怎么写最好, 前辈能给个例子吗? 血饮战士 发表于 2015-3-5 09:57
PWM定义成全局变量没啥问题吧! 另外RGB()函数这一块该怎么写最好, 前辈能给个例子吗? ...
不好意思,我没有这方面的例子,
血饮战士 发表于 2015-3-4 17:10
请问下你做的时候用的是循环产生PWM还是定时器产生PWM
15W的是硬件的PWM,89的使用定时器 一个有硬件PWM,一个没有,就不能互用了。
页:
[1]