利用定时方式0,测量外部脉冲宽度(5到250ms),74HC595输出显示

;有人提问:
;利用单片机的定时方式0,实现外部脉冲宽度(在5到250ms)的测量。要求画出电路图。在线等
;问题补充:写出程序,测量结果存储在R0中。
;=================================================
;做而论道对此题给出了答案:
;外部脉冲宽度(在5到250ms)之间,测量存放在R0。程序如下。

    ORG 0000H
    JMP START
    ORG 000BH
    JMP T0_INT
;------------;初始化
START:
    MOV SP, #60H
    MOV TMOD, #01H       ;/*T0定时方式1*/
    MOV TH0, #HIGH(65536 - 1000) ;1ms@12MHz
    MOV TL0, #LOW (65536 - 1000)
    SETB ET0
    SETB EA
    MOV R0, #0
;------------;电路:要把外部脉冲,接在P1.0
    JB   P1.0, $          ;等待高电平结束.
    JNB P1.0, $          ;等待低电平结束.
    SETB TR0              ;到了高电平,就启动T0开始计时.
    JB   P1.0, $          ;等待高电平结束.
    CLR TR0              ;到了低电平,结束T0计时.

    CALL DISPLAY         ;显示

    SJMP $                ;程序到此结束, R0中就是脉宽的毫秒数.
;-------------;1ms执行一次
T0_INT:        
    MOV TL0, #LOW (65536 - 993) ;重新写入初始值.
    MOV TH0, #HIGH(65536 - 993) ;1ms@12MHz
    INC R0        ;1ms加一次一.
    RETI
;---------------------------------

;原题目,并没有提出显示测量结果的要求,这就不便观察。
;为此,下面补充了显示电路(以三个74HC595来驱动数码管)和程序。

    SDAT_595 BIT   P3.0
    SCLK_595 BIT   P3.1
    S_UP_595 BIT   P3.2
;**************************************************
;595发送程序
;**************************************************
OUT_595:MOV   R2, #8
        CPL   A
O_1:    RLC   A
        NOP
        MOV   SDAT_595, C
        NOP
        CLR   SCLK_595
        NOP
        SETB SCLK_595
        NOP
        DJNZ R2, O_1
        RET
;**************************************************
;显示程序
;**************************************************
DISPLAY:
        MOV   A, R0       ;把脉宽数据,分解成
        MOV   B, #100     ;BCD码
        DIV   AB;
        MOV   30H, A      ;百位
        MOV   A, #10;
        XCH   A, B;
        DIV   AB;
        MOV   31H, A      ;十位
        MOV   32H, B      ;个位

        MOV   R0, #32H     ;把30H 31H 32H
        MOV   R7, #3       ;送出去显示
D_1:
        MOV   A, @R0
        MOV   DPTR, #TAB
        MOVC A, @A+DPTR
        CALL OUT_595
        NOP
        SETB S_UP_595
        DEC   R0
        CLR   S_UP_595
        DJNZ R7, D_1
        RET
;**************************************************
;七段码表
;**************************************************
TAB:
        DB 00111111B
        DB 00000110B
        DB 01011011B
        DB 01001111B
        DB 01100110B
        DB 01101101B
        DB 01111101B
        DB 00000111B
        DB 01111111B
        DB 01101111B
        DB 00000000B
END
;=================================================
;程序在PROTEUS中运行的图像如下:

利用定时方式0,测量外部脉冲宽度(5到250ms),74HC595输出显示 - 非著名博主 - 电子信息角落


;插图链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/9ec1211a435ca094ac6e75af.html
;原题网址:http://zhidao.baidu.com/question/164310712.html

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值