×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-08-27 发布时间:
|

;有人提问:
;利用单片机的定时方式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中运行的图像如下:




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32中断向量表的位置.重定向