兄弟正在开发一个产品,硬件已经差不多了,软件迟迟编写不成.
小弟迂拙,编写的软件总也调试不过.
现在希望各位老哥大侠能够出手帮帮忙,当然也不能让各位老哥白
忙活.
要求是用义隆单片机,也可以用PIC的汇编语言编写,再转化成义隆.
最麻烦的是2262解码,其次是自学习功能(带EEPROM),剩下的就
是一些简单功能和管脚定义.
那位老哥哥能够帮忙的话,我们QQ联系.287273298
有偿寻求熟悉2262软件解码的单片机高手(义隆或PIC)
全部回复(6)
正序查看
倒序查看
现在还没有回复呢,说说你的想法
(EM78P153SPJ)+(24C02)
软件解码程序(仿真PT2272) ;
晶体频率为11.0592Mhz ;
本程序中的时间定位关系只适用于接3.3M振荡电阻的PT2262解码 ;
使用其它阻值电阻时,应将定位时间按电阻比例缩放
下面的程序中
REM 为信号输入端 ;
RECEIVE 检测到有效信号标志位 ;
ENABLE_DETE 连续按键标志 ;
3AH,3BH用作定时器 ; ;
PT2262共12根地址线 ;
31H,32H:接收的前8 位地址编码 ;
33H,30H:接收的后4 位地址编码(若最后4位用作数据端,则只须读第33H单元的内容即可) ;
当用作数据端时,PT2262对应脚悬空被认为是低电平.
地址数据说明 ;
以31H.0 和32H.0 为例 ;
悬空 : 31H.0=0 32H.0=1 ;
1 : 31H.0=1 32H.0=1 ;
0 : 31H.0=0 32H.0=0 ;
出错 : 31H.0=1 32H.0=0 ; ; ;
说明:为了能可靠检测到有效信号,建议每次接收至少检测3次,然后比较3次检测值
3次值相同才认为收到了正确信号.可在主程序中如下处理:第1次检测时调用REMOTE
第2、3次检测时调用REMOTES,请注意必需连续调用,否则得不到正确的数据 ; ;
注意:将T1设定为16位定时器,允许中断,否则将导致接收数据错误
REMOTE: CLR RECEIVE ; ;检测50ms 内有没有编码接收 ;
MOV 3AH,#55 ;
REMOTEA: MOV 3BH,#250 ;
REMOTEB: JB REM,REMOTE0 ;有码发送则跳转
DJNZ 3BH,REMOTEB ;
DJNZ 3AH,REMOTEA ;
REMOTE_END_1: CLR ENABLE_DETE ;
REMOTE_END: CLR REMOTING ;清除探头检测标志
RET ;
REMOTE0: JB ENABLE_DETE,REMOTE_END_1;按键没有放开则返回
REMOTES: MOV 34H,#12 ;接收12位编码 ;解码 ; ;先找出接收码的开头即10ms左右的高电平 ;
MOV TH1,#00H ; ;设置高电平时间为8~12ms ; ;检测和等待8ms 的 低电平,70ms门限 ;
CLR T_OVER ;
MOV TL1,#00H ;
SETB TR1 ;
REMOTE1: MOV 3AH,#50 ;
REMOTE2: MOV 3BH,#25 ;
REMOTE3: JB REM,REMOTE1 ;
JB T_OVER,REMOTE_END ;
DJNZ 3BH,REMOTE3 ;
DJNZ 3AH,REMOTE2 ; ; ;等待在4ms 内接收到的高电平 ;
CLR T_OVER ;
MOV TH1,#0F1H ;
MOV TL1,#0F0H ;
SETB TR1 ;
REMOTE_4: JB T_OVER,REMOTE_5 ;
JNB REM,REMOTE_4 ;
CLR TR1 ;
AJMP REMOTE6 ; ;超出12ms 接收错误返回 ;
REMOTE_5: AJMP REMOTE_END ;
REMOTE6: MOV 3AH,#00 ; 等待550us 后采集接收信号 ;
DJNZ 3AH,$ ; ;采集接收信号并记录 ;
MOV C,REM ;
MOV A,33H ;
RLC A ;
MOV 33H,A ;
MOV A,31H ;
RLC A ;
MOV 31H,A ; ;等待第二个上升沿,限时1.5ms ;
CLR T_OVER ;
MOV TH1,#0FAH ;
MOV TL1,#099H ;
SETB TR1 ;
RM1: JB T_OVER,REMOTE_END ;
JB REM,RM1 ;
CLR TR1 ; ;
CLR T_OVER ;
MOV TH1,#0FAH ;
MOV TL1,#099H ;
SETB TR1 ;
RM2: JB T_OVER,REMOTE_END ;
JNB REM,RM2 ;
CLR TR1 ; ;等待550us 后采集接收信号 ;
MOV 3AH,#00 ;
DJNZ 3AH,$ ;
MOV C,REM ;
MOV A,30H ;
RLC A ;
MOV 30H,A ;
MOV A,32H ;
RLC A ;
MOV 32H,A ; ;等待第二个码值的上升沿 ;
CLR T_OVER ;
MOV TH1,#0FAH ;
MOV TL1,#099H ;
SETB TR1 ;
RM3: JB T_OVER,RM5 ;
JB REM,RM3 ;
CLR TR1 ; ;
CLR T_OVER ;
MOV TH1,#0FAH ;
MOV TL1,#099H ;
SETB TR1 ;
RM4: JB T_OVER,RM5 ;
JNB REM,RM4 ;
CLR TR1 ;
DJNZ 34H,REMOTE6 ; ;把接收的编码左移4 位将8 位密码放在同一字节上
MOV 34H,#4 ;
AJMP REMOTE7 ;
RM5: AJMP REMOTE_END ;
REMOTE7: CLR C ;
MOV A,33H ;
RLC A ;
MOV 33H,A ;
MOV A,31H ;
RLC A ;
MOV 31H,A ;
CLR C ;
MOV A,30H ;
RLC A ;
MOV 30H,A ;
MOV A,32H ;
RLC A ;
MOV 32H,A ;
DJNZ 34H,REMOTE7 ; ;把4 位数据编码由高4 位移到低4 位上 ;
MOV A,33H ;
SWAP A ;
MOV 33H,A ;
MOV A,30H ;
SWAP A ;
MOV 30H,A ;
SETB ENABLE_DETE ;
SETB RECEIVE ; ;
AJMP REMOTE_END_1 ;
END;
软件解码程序(仿真PT2272) ;
晶体频率为11.0592Mhz ;
本程序中的时间定位关系只适用于接3.3M振荡电阻的PT2262解码 ;
使用其它阻值电阻时,应将定位时间按电阻比例缩放
下面的程序中
REM 为信号输入端 ;
RECEIVE 检测到有效信号标志位 ;
ENABLE_DETE 连续按键标志 ;
3AH,3BH用作定时器 ; ;
PT2262共12根地址线 ;
31H,32H:接收的前8 位地址编码 ;
33H,30H:接收的后4 位地址编码(若最后4位用作数据端,则只须读第33H单元的内容即可) ;
当用作数据端时,PT2262对应脚悬空被认为是低电平.
地址数据说明 ;
以31H.0 和32H.0 为例 ;
悬空 : 31H.0=0 32H.0=1 ;
1 : 31H.0=1 32H.0=1 ;
0 : 31H.0=0 32H.0=0 ;
出错 : 31H.0=1 32H.0=0 ; ; ;
说明:为了能可靠检测到有效信号,建议每次接收至少检测3次,然后比较3次检测值
3次值相同才认为收到了正确信号.可在主程序中如下处理:第1次检测时调用REMOTE
第2、3次检测时调用REMOTES,请注意必需连续调用,否则得不到正确的数据 ; ;
注意:将T1设定为16位定时器,允许中断,否则将导致接收数据错误
REMOTE: CLR RECEIVE ; ;检测50ms 内有没有编码接收 ;
MOV 3AH,#55 ;
REMOTEA: MOV 3BH,#250 ;
REMOTEB: JB REM,REMOTE0 ;有码发送则跳转
DJNZ 3BH,REMOTEB ;
DJNZ 3AH,REMOTEA ;
REMOTE_END_1: CLR ENABLE_DETE ;
REMOTE_END: CLR REMOTING ;清除探头检测标志
RET ;
REMOTE0: JB ENABLE_DETE,REMOTE_END_1;按键没有放开则返回
REMOTES: MOV 34H,#12 ;接收12位编码 ;解码 ; ;先找出接收码的开头即10ms左右的高电平 ;
MOV TH1,#00H ; ;设置高电平时间为8~12ms ; ;检测和等待8ms 的 低电平,70ms门限 ;
CLR T_OVER ;
MOV TL1,#00H ;
SETB TR1 ;
REMOTE1: MOV 3AH,#50 ;
REMOTE2: MOV 3BH,#25 ;
REMOTE3: JB REM,REMOTE1 ;
JB T_OVER,REMOTE_END ;
DJNZ 3BH,REMOTE3 ;
DJNZ 3AH,REMOTE2 ; ; ;等待在4ms 内接收到的高电平 ;
CLR T_OVER ;
MOV TH1,#0F1H ;
MOV TL1,#0F0H ;
SETB TR1 ;
REMOTE_4: JB T_OVER,REMOTE_5 ;
JNB REM,REMOTE_4 ;
CLR TR1 ;
AJMP REMOTE6 ; ;超出12ms 接收错误返回 ;
REMOTE_5: AJMP REMOTE_END ;
REMOTE6: MOV 3AH,#00 ; 等待550us 后采集接收信号 ;
DJNZ 3AH,$ ; ;采集接收信号并记录 ;
MOV C,REM ;
MOV A,33H ;
RLC A ;
MOV 33H,A ;
MOV A,31H ;
RLC A ;
MOV 31H,A ; ;等待第二个上升沿,限时1.5ms ;
CLR T_OVER ;
MOV TH1,#0FAH ;
MOV TL1,#099H ;
SETB TR1 ;
RM1: JB T_OVER,REMOTE_END ;
JB REM,RM1 ;
CLR TR1 ; ;
CLR T_OVER ;
MOV TH1,#0FAH ;
MOV TL1,#099H ;
SETB TR1 ;
RM2: JB T_OVER,REMOTE_END ;
JNB REM,RM2 ;
CLR TR1 ; ;等待550us 后采集接收信号 ;
MOV 3AH,#00 ;
DJNZ 3AH,$ ;
MOV C,REM ;
MOV A,30H ;
RLC A ;
MOV 30H,A ;
MOV A,32H ;
RLC A ;
MOV 32H,A ; ;等待第二个码值的上升沿 ;
CLR T_OVER ;
MOV TH1,#0FAH ;
MOV TL1,#099H ;
SETB TR1 ;
RM3: JB T_OVER,RM5 ;
JB REM,RM3 ;
CLR TR1 ; ;
CLR T_OVER ;
MOV TH1,#0FAH ;
MOV TL1,#099H ;
SETB TR1 ;
RM4: JB T_OVER,RM5 ;
JNB REM,RM4 ;
CLR TR1 ;
DJNZ 34H,REMOTE6 ; ;把接收的编码左移4 位将8 位密码放在同一字节上
MOV 34H,#4 ;
AJMP REMOTE7 ;
RM5: AJMP REMOTE_END ;
REMOTE7: CLR C ;
MOV A,33H ;
RLC A ;
MOV 33H,A ;
MOV A,31H ;
RLC A ;
MOV 31H,A ;
CLR C ;
MOV A,30H ;
RLC A ;
MOV 30H,A ;
MOV A,32H ;
RLC A ;
MOV 32H,A ;
DJNZ 34H,REMOTE7 ; ;把4 位数据编码由高4 位移到低4 位上 ;
MOV A,33H ;
SWAP A ;
MOV 33H,A ;
MOV A,30H ;
SWAP A ;
MOV 30H,A ;
SETB ENABLE_DETE ;
SETB RECEIVE ; ;
AJMP REMOTE_END_1 ;
END;
0
回复
提示
@a2580782
(EM78P153SPJ)+(24C02)软件解码程序(仿真PT2272);晶体频率为11.0592Mhz;本程序中的时间定位关系只适用于接3.3M振荡电阻的PT2262解码;使用其它阻值电阻时,应将定位时间按电阻比例缩放下面的程序中REM为信号输入端;RECEIVE检测到有效信号标志位;ENABLE_DETE连续按键标志;3AH,3BH用作定时器;;PT2262共12根地址线;31H,32H:接收的前8位地址编码;33H,30H:接收的后4位地址编码(若最后4位用作数据端,则只须读第33H单元的内容即可);当用作数据端时,PT2262对应脚悬空被认为是低电平.地址数据说明;以31H.0和32H.0为例;悬空:31H.0=032H.0=1; 1 :31H.0=132H.0=1; 0 :31H.0=032H.0=0;出错:31H.0=132H.0=0;;;说明:为了能可靠检测到有效信号,建议每次接收至少检测3次,然后比较3次检测值3次值相同才认为收到了正确信号.可在主程序中如下处理:第1次检测时调用REMOTE第2、3次检测时调用REMOTES,请注意必需连续调用,否则得不到正确的数据;;注意:将T1设定为16位定时器,允许中断,否则将导致接收数据错误REMOTE: CLRRECEIVE;;检测50ms内有没有编码接收; MOV3AH,#55;REMOTEA: MOV3BH,#250;REMOTEB: JBREM,REMOTE0;有码发送则跳转 DJNZ3BH,REMOTEB; DJNZ3AH,REMOTEA;REMOTE_END_1:CLRENABLE_DETE;REMOTE_END: CLRREMOTING;清除探头检测标志 RET;REMOTE0: JBENABLE_DETE,REMOTE_END_1;按键没有放开则返回REMOTES: MOV34H,#12;接收12位编码;解码;;先找出接收码的开头即10ms左右的高电平; MOVTH1,#00H;;设置高电平时间为8~12ms;;检测和等待8ms的低电平,70ms门限; CLRT_OVER; MOVTL1,#00H; SETBTR1;REMOTE1: MOV3AH,#50;REMOTE2: MOV3BH,#25;REMOTE3: JBREM,REMOTE1; JBT_OVER,REMOTE_END; DJNZ3BH,REMOTE3; DJNZ3AH,REMOTE2;;;等待在4ms内接收到的高电平; CLRT_OVER; MOVTH1,#0F1H; MOVTL1,#0F0H; SETBTR1;REMOTE_4: JBT_OVER,REMOTE_5; JNBREM,REMOTE_4; CLRTR1; AJMPREMOTE6;;超出12ms接收错误返回;REMOTE_5: AJMPREMOTE_END;REMOTE6: MOV3AH,#00;等待550us后采集接收信号; DJNZ3AH,$;;采集接收信号并记录; MOVC,REM; MOVA,33H; RLCA; MOV33H,A; MOVA,31H; RLCA; MOV31H,A;;等待第二个上升沿,限时1.5ms; CLRT_OVER; MOVTH1,#0FAH; MOVTL1,#099H; SETBTR1;RM1: JBT_OVER,REMOTE_END; JBREM,RM1; CLRTR1;; CLRT_OVER; MOVTH1,#0FAH; MOVTL1,#099H; SETBTR1;RM2: JBT_OVER,REMOTE_END; JNBREM,RM2; CLRTR1;;等待550us后采集接收信号; MOV3AH,#00; DJNZ3AH,$; MOVC,REM; MOVA,30H; RLCA; MOV30H,A; MOVA,32H; RLCA; MOV32H,A;;等待第二个码值的上升沿; CLRT_OVER; MOVTH1,#0FAH; MOVTL1,#099H; SETBTR1;RM3: JBT_OVER,RM5; JBREM,RM3; CLRTR1;; CLRT_OVER; MOVTH1,#0FAH; MOVTL1,#099H; SETBTR1;RM4: JBT_OVER,RM5; JNBREM,RM4; CLRTR1; DJNZ34H,REMOTE6;;把接收的编码左移4位将8位密码放在同一字节上 MOV34H,#4; AJMPREMOTE7;RM5: AJMPREMOTE_END;REMOTE7: CLRC; MOVA,33H; RLCA; MOV33H,A; MOVA,31H; RLCA; MOV31H,A; CLRC; MOVA,30H; RLCA; MOV30H,A; MOVA,32H; RLCA; MOV32H,A; DJNZ34H,REMOTE7;;把4位数据编码由高4位移到低4位上; MOVA,33H; SWAPA; MOV33H,A; MOVA,30H; SWAPA; MOV30H,A; SETBENABLE_DETE; SETBRECEIVE;; AJMPREMOTE_END_1; END;
搞定了没有,我有全套方案.love20043@163.com
0
回复
提示