利用51单片机统计脉冲个数,即时输出显示

;利用51单片机设计一个计数显示系统,要求8个数码管显示T1输入脉冲的个数。
;最好用汇编语言,加注释,尽量别太复杂。尽量快些哈!
;悬赏分:30 | 解决时间:2011-7-20 19:15 |
;=====================================================
;最佳答案:
;题目要求在T1端输入脉冲,统计脉冲个数,并即时输出显示,使用8个LED数码管,显示:0000 0000~9999 9999。
;计数、显示,很简单的。虽然要求的位数较多,但是循环一下,也就可以了。
;程序用汇编汇编语言编写好了,指令不超过50行,太简单了。
;题目只是要求在T1端输入脉冲,并没有指出显示电路,那么就设计一个仿真实验电路如下:

利用51单片机统计脉冲个数,即时输出显示_第1张图片
;图片链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/fcef1a2510f701644d088dd2.html#

;仿真图中使用了两种虚拟仪器:“信号发生器”和“计数器”,通过按键即可输入单次脉冲和连续脉冲。

;全部程序如下:

NUM_B  EQU  30H        ;计数、显示单元起始地址
NUM_N  EQU  8          ;计数、显示单元的字节数

    ORG  0000H
    JMP  START
    ORG  001BH
    JMP  T1_INT
;------------------------
START:
    MOV  TMOD, #60H    ;T1计数方式2
    MOV  TH1, #255     ;初始值为FF
    MOV  TL1, #255     ;当收到一个输入,立刻引起中断
    SETB TR1           ;启动T1
    MOV  IE, #10001000B;允许中断
    MOV  SP, #40H      ;设置堆栈
;------------------------
M_LOOP:
    CALL DISP
    SJMP M_LOOP
;------------------------
DISP:
    MOV  R0, #NUM_B    ;30H
    MOV  R2, #1        ;先显示最低位
D_LOOP:
    MOV  A,  @R0
    ADD  A,  #(D_TAB - $ - 3)
    MOVC A,  @A + PC
    MOV  P2, #0        ;关闭显示,消隐
    MOV  P0, A         ;输出段码
    MOV  P2, R2        ;输出位码
    CALL DL1MS
    MOV  A,  R2        ;修改位码
    RL   A
    MOV  R2, A
    INC  R0            ;修改显示指针
    CJNE R0, #NUM_B + NUM_N, D_LOOP
    RET
;------------------------
D_TAB:                 ;共阳极段码
    DB  0C0H,0F9H,0A4H,0B0H, 99H, 92H, 82H,0F8H
    DB   80H, 90H, 88H, 83H,0C6H,0A1H, 86H, 8EH,0FFH;FF是空白的代码
;------------------------
DL1MS:                 ;延时
    MOV  R7, #242
    DJNZ R7, $
    DJNZ R7, $
    RET
;------------------------
T1_INT:                ;T1中断程序
    PUSH PSW           ;保护现场
    SETB RS0           ;换用工作区
    MOV  R0, #NUM_B
T1_LOOP:
    INC  @R0           ;数字加一
    CJNE @R0, #10, T1_END ;不到10就退出
    MOV  @R0, #0       ;到10就清零
    INC  R0            ;转去下一位
    CJNE R0, #NUM_B + NUM_N, T1_LOOP
T1_END:
    POP  PSW           ;恢复现场
    RETI
;------------------------
END
;=====================================================
回答时间:2011-7-18 07:56
回答者: 做而论道 | 十五级  采纳率:43%
提问者对于答案的评价:非常感谢!
原题网址:http://zhidao.baidu.com/question/293572049.html
;=====================================================
后记:
仿真时,信号发生器有个控制框,可以选择信号的输出频率、幅度等,屏幕截图如下:

利用51单片机统计脉冲个数,即时输出显示_第2张图片
图片链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/1bc67519aff072d14bedbcb6.html#

在仿真时,计数器是上升沿计数,而单片机是下降沿计数,所以,两者显示的数字,有一个时间差。
另外,刚刚启动时,计数器总要先计一个数,不知如何控制才好。

你可能感兴趣的:(非同一般)