找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1929|回复: 0
打印 上一主题 下一主题
收起左侧

PT2262 STC89C516单片机软件解码失败怎么回事?

[复制链接]
跳转到指定楼层
楼主
ID:141497 发表于 2018-4-29 00:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
12M晶振,反码方式解码,数据输入P3^2口,外部中断0。请各位帮忙看看是那里出了问题,我现在没有查到原因,本人先谢谢各位了!!!
我写的代码如下:
/*-----------------------------------------------------------------------------------------
说明:
1  反码方式解码4.7M 6.8K 1t147us 4t588us 12t1764us 124t18228us
2  编程思路:定时器测量脉冲宽度,长脉冲标记1,短脉冲标记0,共记24个脉冲保存于数组中与地址码对比.
-------------------------------------------------------------------------------------------*/
  1. #include <reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit din=P3^2;
  5. sbit d1=P1^0;
  6. sbit d2=P1^1;
  7. sbit d3=P1^2;
  8. sbit d4=P1^3;//4个解码成功指示灯
  9. uchar b,c;
  10. uint a;
  11. bit datend=0;
  12. uchar dateok[24];
  13. void init();
  14. void delayus(uchar c);
  15. void delay160ms();
  16. void timer();
  17. void outcode();//输出
  18. void main()
  19. {
  20.         init();
  21.         while(1)
  22.                 {
  23.                         outcode();
  24.                 }
  25. }
  26. void delayus(uchar c)//c=1 200us
  27. {
  28.     uchar a,b;
  29.     for(b=c;b>0;b--)
  30.         for(a=98;a>0;a--);
  31. }
  32. void delay160ms()
  33. {
  34.     uchar a,b,c;
  35.     for(c=193;c>0;c--)
  36.         for(b=118;b>0;b--)
  37.             for(a=2;a>0;a--);
  38. }

  39. void init()
  40. {
  41.         P1=0x00;
  42.         IT0=1;
  43.         EX0=1;
  44.         EA=1;
  45.         TMOD=0x09;
  46.         TH0=0;
  47.         TL0=0;
  48. }
  49. void int0() interrupt 0
  50. {
  51.         EX0=0;
  52.         timer();
  53.         if((a>17000)&&(a<19000))//同步码确认
  54.                 {
  55.                         TH0=0;
  56.                         TL0=0;
  57.                         for(b=0;b<24;b++)
  58.                                 {
  59.                                         timer();
  60.                                         if((a>550)&&(a<620))
  61.                                                 {
  62.                                                         c=0x00;//窄脉冲标记0
  63.                                                         TH0=0;
  64.                                                         TL0=0;
  65.                                                         delayus(8);
  66.                                                 }
  67.                                         else if((a>1600)&&(a<1900))
  68.                                                 {
  69.                                                         c=0x01;//宽脉冲标记1
  70.                                                         TH0=0;
  71.                                                         TL0=0;
  72.                                                         delayus(2);
  73.                                                 }
  74.                                         dateok[b]=c;
  75.                                 }
  76.                                 datend=1;//解码成功标志位
  77.                                 delay160ms();//150528us 等待第3第4组结束
  78.                                 EX0=1;        
  79.         }
  80.         else
  81.                 {
  82.                         TH0=0;
  83.                         TL0=0;
  84.                         EX0=1;
  85.                 }
  86. }
  87. void timer()//中断字函数
  88. {
  89.         while(din);
  90.         TR0=1;
  91.         while(!din);
  92.         TR0=0;
  93.         a=TH0*256+TL0;
  94. }
  95. void outcode()//输出
  96. {
  97.         if(datend==1)
  98.                                 {
  99.                                         datend=0;
  100.                                         if((dateok[0]==0)&&(dateok[1]==0)&&(dateok[2]==1)&&(dateok[3]==1)&&
  101.                                         (dateok[4]==1)&&(dateok[5]==0)&&(dateok[6]==0)&&(dateok[7]==0)&&
  102.                                         (dateok[8]==0)&&(dateok[9]==0)&&(dateok[10]==1)&&(dateok[11]==1)&&
  103.                                         (dateok[12]==1)&&(dateok[13]==1)&&(dateok[14]==0)&&(dateok[15]==0))//地址码确认10f11001
  104.                                                 {//解码后数据
  105.                                                         if((dateok[16]==0)&&(dateok[17]==0)&&(dateok[18]==1)&&(dateok[19]==1)&&
  106.                                                         (dateok[20]==1)&&(dateok[21]==1)&&(dateok[22]==1)&&(dateok[23]==1))//d0
  107.                                                                 {
  108.                                                                         d1=~d1;
  109.                                                                 }
  110.                                                         if((dateok[16]==1)&&(dateok[17]==1)&&(dateok[18]==0)&&(dateok[19]==0)&&
  111.                                                         (dateok[20]==1)&&(dateok[21]==1)&&(dateok[22]==1)&&(dateok[23]==1))//d1
  112.                                                                 {
  113.                                                                         d2=~d2;
  114.                                                                 }
  115.                                                         if((dateok[16]==1)&&(dateok[17]==1)&&(dateok[18]==1)&&(dateok[19]==1)&&
  116.                                                         (dateok[20]==0)&&(dateok[21]==0)&&(dateok[22]==1)&&(dateok[23]==1))//d2
  117.                                                                 {
  118.                                                                         d3=~d3;
  119.                                                                 }
  120.                                                         if((dateok[16]==1)&&(dateok[17]==1)&&(dateok[18]==1)&&(dateok[19]==1)&&
  121.                                                         (dateok[20]==1)&&(dateok[21]==1)&&(dateok[22]==0)&&(dateok[23]==0))//d3
  122.                                                                 {
  123.                                                                         d4=~d4;
  124.                                                                 }
  125.                                                         delayus(20);
  126.                                                 }
  127.                                 }
  128. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表