脉冲序列的检测

要求:通过检测一个脉冲信号的间隔时间(例如300秒)来给电路做一个通断的电子信号。
如脉冲为0101010101.......时,电路处于通路状态;
当脉冲为0000000000...或者111111111...时,程序给出一个中断信号实现电路断开。

问题补充:单片机使用C51,脉冲周期240/分

悬赏分:20 - 解决时间:2009-11-16 18:15
;--------------------------------------------------------
最佳答案:

通过“百度Hi”与提问者进行交流,了解到一些细节如下:

    1. 脉冲信号是大约每隔 200ms 来一个,基本上是方波。
    2. 信号0、1、0、1不停的变化,说明是“通”,一旦不变,就是“断”。
    3.“断”持续了约300秒,再输出“断”的信号。
    4. 一旦检测到脉冲的变化,就立即取反“断”的信号。

设计思路:

    1. 每隔200ms检测一次,每秒约5次,如果持续1500次没有发现脉冲信号的变化,就应该输出“断”的信号。
    2. 1500次的计数,可以使用DPTR。
    3. 一旦收到脉冲信号,立即输出“通”的信号,并将计数清零。
;----------------------
程序如下:

    ORG  0000H
    SJMP START
    ORG  0050H
START:
    SETB P1.0          ;准备输入脉冲
    SETB P1.1          ;1: 代表关断
    MOV  DPTR, #0      ;用DPTR 统计, 是否1500次
    CLR  PSW.5         ;上次输入暂时存放值
    MOV  20H, #0       ;20H.0, 上次输入的脉冲值
LOOP:
    CALL DELAY100MS    ;延时200ms
    CALL DELAY100MS
    MOV  C, PSW.5      ;把上次的脉冲值
    MOV  20H.0, C      ;送到20H
    CLR  A
    MOV  C, P1.0       ;输入新脉冲
    MOV  PSW.5, C      ;暂存
    MOV  ACC.0, C      ;并送到A
    XRL  A,  20H       ;和上次数据相 异或
    JNZ  TONG          ;非0, 即两者不同, 转移到"通"
DUAN:
    INC  DPTR          ;发现了一次"断",计数值加一
    CLR  C
    MOV  A, #0DBH      ;用1499去减次数
    SUBB A, DPL
    MOV  A, #05H
    SUBB A, DPH
    JNC  TONG_2        ;无借位, 就是不到1500次
    SETB P1.1          ;否则输出"断"的信号
    MOV  DPTR, #1500   ;并令DPTR定格为1500
    SJMP LOOP          ;继续去检测
TONG:
    MOV  DPTR, #0      ;从0开始统计
TONG_2:
    CLR  P1.1          ;输出"通"的信号
    SJMP LOOP          ;继续去检测
;----------------------
DELAY100MS:            ;延时100605T, 约为
    MOV  R7, #200      ;1T
    MOV  R6, #250      ;1T
    DJNZ R6, $         ;2T, 原地转移250遍, 共用500T
    DJNZ R7, $ - 4     ;2T, (1+500+2)*200=100600T
    RET                ;2T, 1+100600+2=100603T

END
;--------------------------------------------------------
回答者:  做而论道 - 十级   2009-11-16 18:13
原文网址:http://zhidao.baidu.com/question/125766059.html
;--------------------------------------------------------
后记:

后来通过“百度Hi”与提问者进行交流,对方又提出了一些改进意见。
经过修改,本博文现在发表的程序可以正常使用。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值