老古开发网首页
导航:老古开发网首页文章索引索引第2526页文章分类综合电子第469页→[ASK信号解码接收程序]
| -文章搜索 - 最新文章 - |

第3099篇:ASK信号解码接收程序

发布时间:2006年10月15日 点击次数:1154
来源:   作者:
 

作者FREE

;/*=============================================================================
;                通用ASK信号解码接收程序
;
;1. 接收数据位数最多为40(5*8)位.
;2. 由定时器对time进行渐增,在TCC中断程序中加入"INC TIME".
;3. 宽脉冲最大允许时间和最小允许时间的计算方式:
;
;   脉冲允许时间=TCC 中断时间(us)*设定数据
;
;4. 在接收到完整的数据后建立rx_data_ok标志.
;5. 该子程序由主程序调用.
;6. 数据格式:rx_data5.7为最高位,rx_data1.0为最低位.
;7. 主程序在收到完整的数据后应清空接收数据缓冲区后,才能调用再次接收.
;/============================================================================*/

 

;//mcu == emc
bit_counter   == 0x10
rx_data5      == 0x11
rx_data4      == 0x12
rx_data3      == 0x12
rx_data2      == 0x12
rx_data1      == 0x12
Rx_status     == 0x13
time          == 0x14
port6         == 6


#define max_time_h       50      ;//宽脉冲最大允许时间 data*TCC_time
#define min_time_h       40      ;//宽脉冲最小允许时间
#define max_time_l       20      ;//窄脉冲最大允许时间
#define min_time_l       10      ;//窄脉冲最小允许时间
#define rx_bit_counter   12      ;//设定接收的位数

#define inport       port6.0

#define in_bit       Rx_status.0
#define time_bit     Rx_status.1
#define rx_start     RX_STATUS.2
#define h_time       RX_STATUS.3
#define l_time       RX_STATUS.4
#define rx_bit       RX_STATUS.5
#define rx_data_ok   RX_STATUS.6


RX()
                                  ;//程序开始
      if in_bit==inport
         goto RX_EXIT;            ;//输入无变化则退出
      endif

      in_bit=inport;              ;//有变化则记录输入电平

      if time<MIN_TIME_L          ;//检查输入脉冲宽度,50us产生一次中断
        goto RX_ERROR;
      endif

      if time>MAX_TIME_H          ;//低于MIN_TIME_L则退出,高于MAX_TIME_H则退出
         goto RX_ERROR
      endif

      if time<=MAX_TIME_L         ;//如果输入脉冲宽度>=MIN_TIME_L,并且<=MAX_TIME_L
           time_bit=0;            ;//则认为输入电平为0
      else
           if time>=MIN_TIME_H
              time_bit=1;         ;//如果输入脉冲宽度>=MIN_TIME_H,并且<=MAX_TIME_H
           else                   ;//则认为输入电平为1
              goto RX_ERROR;      ;//否则认为数据出错
           endif
      endif

;//check_in:
      if rx_start==0              ;//检查有没有收到启动位
            if time_bit==0        ;//如果输入电平为窄脉冲高电平
               if in_bit==1       ;//则认为收到启动位
                  rx_start=1
               endif
            endif
            goto RX_EXIT1         ;//否则退出,等待重新接收
      endif

      if in_bit==1                ;//记录低电平时间
          l_time=time_bit;
          goto RX_EXIT1;
      else
          h_time=time_bit;        ;//记录高电平时间
      endif
           
        if l_time==0              ;//如果输入电平及时间为1 0,则为逻辑0
          if h_time==1
             rx_bit=0;
          else
             goto RX_ERROR;
          endif
        else
          if h_time==0
             rx_bit=1;            ;//如果输入电平及时间为0 1则为逻辑1
          else
             goto RX_ERROR;       ;//否则接收出错
          endif
        endif

;//save_bit:
      bc 0x3,0
      rlc rx_data1
      rlc rx_data2
      rlc rx_data3
      rlc rx_data4
      rlc rx_data5
      if  rx_bit==1
          rx_data1=rx_data1 1
      endif

      if --bit_counter!=0
         goto RX_EXIT1;               ;//未接收完数据位则继续
      else                            ;//检查接收到的数据
         rx_data_ok=1
         goto RX_EXIT
      endif

RX_ERROR:
      rx_start=0;                    ;//清除启动标志位
      rx_data_ok=0
      bit_counter=rx_bit_counter     ;//重置接收位
      rx_data1=0;                    ;//清空接收数据缓冲区
      rx_data2=0
      rx_data3=0
      rx_data4=0
      rx_data5=0
RX_EXIT1:
      time=0;                        ;//计时器清0
RX_EXIT:
        return;                      ;//返回


欢迎进入老古论坛进行讨论
[综合电子] 相关文章:
高精度电流导引型ADC电流源偏置电路设计
简介:
作者:中国科学院半导体研究所 耿学阳 于云华 石寅 摘 要:设计了一种为高精度数模转换器提供偏置的参考电流源。经过流片测试结果表明,该偏置电路能够很好的工作于所设计的高精度数模转换器。 关键词:带隙;偏置;数模转换器 概述 电流源矩阵型数模转换器采用数字信号来控制电流模式的开关电路,从而实现数字到模拟信号的转换。在CMOS工艺中,很容易实现开关电流源,并且具有突出的优点:速度快、占用芯片面积小、不需要无源器件......

安捷伦携手行业领袖 推进全面数字技术测试解决方案
云母矿资源供需形势
友达光电厦门一期工程封顶
Displaytech发布白色LED和RGB背光照明产品
 
下一个:[单片机]AT89C51\52的编程原理
简介:
AT89C51\52 的编程原理 AT89C51 和 AT89C52 的编程原理完全相同 , 内部都有一个可重复编程的 Flash ROM,AT89C51 的 ROM 容量为 4KB, 而 AT89C52 的容量为 8KB. 我们以 AT89C52 为例来说明其编程原理 : A: 由其 ROM 的容量可知其地址线需要 13 条 , ......

上一个:[CPLD/FPGA]I2C在CPLD上的模拟实现源程序

老古开发网版权所有 2006年9月 asp.Net V2.0 设计:老古
页面缓存:30分钟 执行时间:47毫秒