Clinging 发表于 2010-5-16 18:03:39

菜鸟做的无线开关(PT2262遥控器,315M超再生模块,软解码)

http://cache.amobbs.com/bbs_upload782111/files_29/ourdev_554695.jpg
(原文件名:0001.jpg)

http://cache.amobbs.com/bbs_upload782111/files_29/ourdev_554696.jpg
(原文件名:0002.jpg)

http://cache.amobbs.com/bbs_upload782111/files_29/ourdev_554697.jpg
(原文件名:0003.jpg)

http://cache.amobbs.com/bbs_upload782111/files_29/ourdev_554698.jpg
(原文件名:0004.jpg)


#include "TYPEDEF.H"
#include "STC89C5X.H"
#include "INTRINS.H"

sfr P1M1 = 0x92;

#define ONSwitch()   P1M1 |= 0x10; P1_4 = 1
#define OFFSwitch()    P1M1 &= 0xEF; P1_4 = 0

INT8U RFLevel0;
INT8U RFLevel1;
INT8U RFStep;
INT8U RFBuf;
//
INT8U KeyAge;
INT8U KeyFlag;
INT8U SwitchState;
INT16U TimeOut;

//void Soft_Rst(void);
void SystemInit(void);
//INT8URead_Flash_Byte(INT16U addr);
//void Write_Flash_Byte(INT8U byte, INT16U addr);
//void Erase_Flash_Sector(INT16U addr);

/*
* Main function
*/
int main(void)
{
        SystemInit();
        while(1) {
                if(TF1) {
                        TF1 = 0;

                        RFLevel1 = RFLevel0;
                        RFLevel0 = P3 & 0x80;

                        if(RFStep == 0) {
                                if(RFLevel0 == 0) {
                                        RFBuf++;
                                } else {
                                        if(RFBuf >= 60) {
                                                RFBuf[++RFStep] = 1;
                                        } else {
                                                RFBuf = 0;
                                        }
                                }
                        } else {
                                if(RFLevel0 != 0) {
                                        if(++RFBuf == 0) {
                                                RFStep   = 0;
                                                RFBuf = 0;
                                        }
                                } else if(RFLevel1 != 0) {
                                        if(++RFStep > 24) {
                                                RFLevel0 = RFBuf / 15;
                                                RFLevel1 = 0;
                                                if(RFBuf< RFLevel0) RFLevel1++;
                                                if(RFBuf> RFLevel0) RFLevel1++;
                                                if(RFBuf< RFLevel0) RFLevel1++;
                                                if(RFBuf> RFLevel0) RFLevel1++;
                                                if(RFBuf< RFLevel0) RFLevel1++;
                                                if(RFBuf> RFLevel0) RFLevel1++;
                                                if(RFBuf< RFLevel0) RFLevel1++;
                                                if(RFBuf> RFLevel0) RFLevel1++;
                                                if(RFBuf< RFLevel0) RFLevel1++;
                                                if(RFBuf > RFLevel0) RFLevel1++;
                                                if(RFBuf < RFLevel0) RFLevel1++;
                                                if(RFBuf > RFLevel0) RFLevel1++;
                                                if(RFBuf < RFLevel0) RFLevel1++;
                                                if(RFBuf > RFLevel0) RFLevel1++;
                                                if(RFBuf < RFLevel0) RFLevel1++;
                                                if(RFBuf > RFLevel0) RFLevel1++;
                                                if(RFBuf < RFLevel0) RFLevel1++;
                                                if(RFBuf < RFLevel0) RFLevel1++;
                                                if(RFBuf < RFLevel0) RFLevel1++;
                                                if(RFBuf < RFLevel0) RFLevel1++;
                                                if(RFBuf < RFLevel0) RFLevel1++;
                                                if(RFBuf < RFLevel0) RFLevel1++;
                                                if(RFBuf > RFLevel0) RFLevel1++;
                                                if(RFBuf > RFLevel0) RFLevel1++;
                                                if(RFLevel1 >= 24) {
                                                        KeyAge++;
                                                        TimeOut= 0;
                                                        RFStep   = 0;
                                                        RFBuf = 0;
                                                        if((KeyFlag == 0) && (KeyAge >= 1)) {
                                                                KeyFlag = 1;
                                                                if(SwitchState == 0) {
                                                                        SwitchState = 1;
                                                                        ONSwitch();
                                                                } else {
                                                                        SwitchState = 0;
                                                                        OFFSwitch();
                                                                }
                                                        }
                                                }
                                        } else {
                                                RFBuf = 0;
                                        }
                                }
                        }
               
                        if(++TimeOut > 6000) {
                                TimeOut = 0;
                                KeyAge= 0;
                                KeyFlag = 0;
                        }
                }
        }
}

/*
* Initializtion System
*/
void SystemInit(void)
{
        IE = 0x00;
        TMOD = 0x21;
        TH1= 0xEC;
        TR1= 1;
}

Clinging 发表于 2010-5-16 18:13:30

发现了STC 11和12系列中断有BUG,如果中断间隔很小,频繁中断时容易死机,不知道大家有没碰到

cmyldd 发表于 2010-5-16 21:06:20

我一直在用啊,没有发现问题啊

Jason022 发表于 2010-5-16 21:16:44

mark,请教下楼主定时中断多长时间比较合适?以前试过好像不能同时兼容多种遥控

Clinging 发表于 2010-5-16 23:45:38

回复【3楼】Jason022
-----------------------------------------------------------------------

我用中断,结果上电工作几分钟就死机了,后来只好放在main函数了,你说的多种遥控应该是指数据速率不一样的吧?要兼容,采集速率要做成动态的,根据同步头的长度动态调整采集速率。我用的是内部时钟,精度很差,1L的代码就是动态决定采集速率的

Clinging 发表于 2010-5-16 23:54:56

回复【2楼】cmyldd
-----------------------------------------------------------------------

有个产品,串口中断很频繁(最快时大概1MS中断一次),用89C54,从未发现过问题,换成11F16,非常容易死机,原因至今没找到,晶体用的是32.768M的

xnliuxiwen 发表于 2010-5-17 00:45:25

1MS中断一次?BAUD是多少?9600的话那基本上一直在处理串口中断?CPU还有时间做其它事情?

Clinging 发表于 2010-5-17 10:24:09

回复【6楼】xnliuxiwen
-----------------------------------------------------------------------

是9600,每接收一个字节中断一次,当然有时间做其它事。Fosc = 32.768M,双倍速

HNXTXX 发表于 2010-8-12 14:34:32

1楼,发现了STC 11和12系列中断有BUG,如果中断间隔很小,频繁中断时容易死机,不知道大家有没碰到
-------------------------------------------

我用STC12C5204做上电唤醒,发现有程序跑飞,或换不醒。。

STC有没有技术支持论坛啊??他们那个姚永平普通话不行。

wt19891211 发表于 2010-8-30 15:17:18

MARK

number007cool 发表于 2010-9-21 16:04:03

mark!

SkyGz 发表于 2010-9-21 17:38:09

你那模块什么样的(来个高清图看看), 好像我也有一块,上面主要就LM358, 一处接天线, 输出也是三脚..

wt19891211 发表于 2010-9-22 18:11:47

我想学习。。。无线开关(PT2262遥控器,315M超再生模块,软解码   楼主 可以提供点PDF 资料吗

axe1 发表于 2010-9-22 18:25:37

怎样对码的?没看懂,请楼主指教一二。

poet_lee 发表于 2010-9-24 22:59:29

mark~不错

tom919 发表于 2010-9-28 23:11:34

mark

xzm8469105 发表于 2010-9-30 10:06:20

楼主,接收电路怎么做呢,新手想学学

yulri 发表于 2010-9-30 15:01:53

mark!

Jonathan2011 发表于 2010-10-22 22:37:54

回复【楼主位】Clinging 哆拉C梦
-----------------------------------------------------------------------

楼主 无线开关(PT2262遥控器,315M超再生模块,软解码   楼主 可以提供点 资料吗

skay_mcu 发表于 2010-10-30 10:44:02

楼主,请问如何提高接收距离啊?
我也做了个无线软解码的,可是距离只有12m左右吧!
有什么办法可以提高距离的么?

lidejian 发表于 2010-10-30 16:56:27

学习学习

fang316 发表于 2010-11-2 10:52:53

记得无限开关纯数字就可以的,以前做过,用2262和2272加继电器

predominant 发表于 2010-12-28 11:27:57

回复【19楼】skay_mcu
-----------------------------------------------------------------------

加入信号放大电路

xiaobendan 发表于 2010-12-28 13:21:52

楼主用那么高的晶振啊!

Clinging 发表于 2010-12-28 23:16:38

回复【23楼】xiaobendan仲跻东
-----------------------------------------------------------------------

内部RC

gongnn 发表于 2010-12-28 23:36:30

不错

muzheyun 发表于 2011-1-1 10:46:17

回复【24楼】Clinging 哆拉C梦
-----------------------------------------------------------------------

内部RC没那么高吧??我用的12C5620内部RC一般是5-6M左右,你的怎么能达到32.768M????32.768K??
另外楼主能否讲解一下原理呀?最近也在研究这玩意.

Clinging 发表于 2011-1-5 16:15:29

回复【26楼】muzheyun
-----------------------------------------------------------------------

不好意思,是我没说清楚,32.768M是别的东西(请看5、6L),这个开关用的是内部RC

原理不知道怎么说,知道了PT2262的编码方式难道还不会解码么

LBQ691477940 发表于 2011-3-3 22:25:14

#include "TYPEDEF.H"
楼主能否把头文件也给出来?谢谢!

danceman_uk 发表于 2011-3-3 23:52:37

mark.慢慢看!

pkjapan 发表于 2011-8-10 23:02:41

你的电源电路好危险哦

kten 发表于 2011-9-11 16:29:08

mark

bianc 发表于 2011-9-11 18:23:17

我也比照做一个无线软解码试试

l09046162 发表于 2011-9-17 14:56:32

mark

rsbook 发表于 2011-12-6 17:18:55

mark

A787585529 发表于 2011-12-10 00:00:28

菜鸟……

Green_Grass 发表于 2012-2-7 17:06:10

MARK

jjj2012 发表于 2012-2-8 22:28:38

mark

nmcfzhf1 发表于 2012-2-12 18:49:02

这东西越简单越好

feeson 发表于 2012-2-24 14:04:56

红外线要简单很多。

xue_pic 发表于 2012-3-6 17:24:01

最近正在学习无线解码,记号一下。

LXM_0922 发表于 2012-3-6 22:43:40

有点像贼的工具

lijinen 发表于 2012-5-7 22:46:36

学习学习了!

xyr 发表于 2012-5-12 15:50:10

skay_mcu 发表于 2010-10-30 10:44 楼主,请问如何提高接收距离啊? 我也做了个无线软解码的,可是距离只有12m左右吧! 有什么办法可以提高距离 ...

降低单片机频率试试,一般4M。

snwuzhisheng 发表于 2012-6-16 16:57:58

{:3_42:}好干净 一点注释都没有

gerpayt 发表于 2013-2-17 11:01:30

mark
mark

草芥风中散 发表于 2013-2-27 14:06:22

楼主模块的距离可以到多少????

yoyobbs 发表于 2013-2-27 15:02:39

你的RC降压上是不是少了个电阻?

zjk 发表于 2013-3-17 20:03:51

遥控距离多远哈?

elc-liangzai 发表于 2013-3-28 16:23:02

回帖。。楼主不错的程序。、、

dyzhenhuai 发表于 2013-3-29 12:02:54

学习,学习,再学习,可否详细点!!!!!

leahcim89 发表于 2013-4-23 14:49:07

{:time:}{:time:}{:time:}{:time:}{:time:}

leahcim89 发表于 2013-4-23 15:07:08

程序存下了

feng3322110 发表于 2013-4-23 15:57:40

xiaobendan 发表于 2010-12-28 13:21 static/image/common/back.gif
楼主用那么高的晶振啊!

315M晶振是发射无线信号用的晶振,还有433M的呢

bbssilverkey 发表于 2013-4-23 16:13:42

本帖最后由 bbssilverkey 于 2013-4-23 16:15 编辑

我很喜欢楼主这种图,超帅,顺便说下:边缘距离会产生问题,处理一下可以更好

工程师030 发表于 2013-6-24 21:18:34

谢谢楼主!做的不错!

Johnwoo 发表于 2013-6-24 23:53:48

Clinging 发表于 2010-5-16 18:13 static/image/common/back.gif
发现了STC 11和12系列中断有BUG,如果中断间隔很小,频繁中断时容易死机,不知道大家有没碰到 ...

STC12C5A60,频繁INT0外部中断也遇到死机问题,不过只有实验会发生这个现象,其他时候因为中断频率很低,没有遇到过。

jacky82512 发表于 2013-6-26 13:44:08

这个不错的贴

xiedeyong2008 发表于 2014-12-27 19:41:59

#include "TYPEDEF.H"
楼主能否把头文件也给出来?谢谢!

TCMCU 发表于 2015-2-2 18:30:48

学习一下

wszyjsw2 发表于 2015-2-3 22:53:44

markPT2262遥控器
页: [1]
查看完整版本: 菜鸟做的无线开关(PT2262遥控器,315M超再生模块,软解码)