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

AT89C51单片机定时器终端模式和查询设置

发布时间:2020-09-03 发布时间:
|


T1为定时模式,定时65.536ms,P2.0对应的LED等闪烁一次,T0计数模式,计数脉冲从P3.4脚用按键输入,按一次,记一次,所以计数初值为0FFFFh,没按一次,产生一个溢出,P2.5对应的LED闪烁,同时数码管加1显示。
一、定时/计数器终端模式
        org 0000h
        ljmp bb               ;跳转到主程序入口bb处
        org 000bh             ;定时器0中断响应从这里开始执行
        cjne r2,#9d,xx       
        mov r2,#00h
        ljmp xx11
        org 001bh             ;定时器1中断响应从这里开始执行
         ljmp xxx

bb:     mov p1,#3fh           ;主程序入口处
        mov tmod,#05h     ;05h=0000 0101B设置T1定时T0计数模式,0定时,1计数
                                      ;00是13位二进制计数模式0,高4位控制T1
                                      ;01是16位二进制计数模式1,低4位控制T0
        mov dptr,#0300h       ;查表入口地址存放
        mov r2,#00h                 
        setb et0              ;和setb 0afh效果相同 
        setb ea               ;和setb 0abh相同
        setb et1              ;和setb 0a9h相同
        setb tr0
        setb tr1
       
        mov th0,#0ffh         ;计数器0的计数初值的高8位
        mov tl0,#0fdh         ;计数器0的计数初值的低8位(第一次开始计数初值)
        sjmp $                   ;程序执行时,原地踏步等待语句,在没有中断请求时,
                                      ;在此位置原地踏步计数定时计数,有请求时跳到中断入口执行中断
xx:        inc r2
xx11:    mov th0,#0ffh      ;计数器0的计数初值的高8位
           mov tl0,#0fdh      ;计数器0的计数初值的低8位(第二次以后开始计数初值)  
           mov a,r2
           movc a,@a+dptr
           cpl p2.5
           mov p1,a           
           reti
xxx:       mov th1,#00h      ;计数器1的计数初值的高8位
            mov tl1,#00h     ;计数器1的计数初值的低8位
            cpl p2.0
            reti
           org 0300h         ;七段显示吗表格入口
           db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
          end
二、定时/计数器查询模式
          org 0000h
          ljmp bb                  ;跳转到主程序入口bb处
bb:     mov tmod,#15h     ;主程序入口处
                                        ;设置T1定时模式,工作在计数方式0,设置T0计数模  
                                        ;式工作在计数方式1
        mov dptr,#0300h       ;查表入口地址存放        
                             
        clr et0                 ;关定时/计数器0中断
        setb ea               ;和setb 0abh相同,开总中断开关
        setb et1              ;和setb 0a9h相同,开定时/计数器1中断   
        setb tr0
        setb tr1       
        mov th0,#0ffh        ;计数器0的计数初值的高8位
        mov tl0,#0ffh         ;计数器0的计数初值的低8位(第一次开始计数初值)
  CX: JBC  TF0, xx        ;查询定时/计数器0溢出标志位,有溢出跳转xx执行
         JBC  TF1, xxx      ;查询定时/计数器1溢出标志位,有溢出跳转xxx执行
         sjmp CX               ;无溢出,跳CX继续查询
   ;溢出是在THi和TLi计数满,超过FFFFH时,TFi被自动置1,中断和查询都是根
   ;据这个标志是否为1来响应的。                         
xx:       mov th0,#0ffh      ;计数器0的计数初值的高8位
           mov tl0,#0ffh ;计数器0的计数初值的低8位(第二次以后开始计数初值)  
           cjne r2,#10d,xx11      
           mov r2,#00h
xx11:      mov a,r2
           movc a,@a+dptr   ;查表,用七段码显示计数数字
           cpl p2.5                 ;并让P2.5上的LED有闪烁效果
           mov p1,a               ;显示数字效果从P1口输出
           inc r2                     ;加1计数  
           ret
xxx:       mov th1,#00h      ;计数器1的计数初值的高8位
           mov tl1,#00h     ;计数器1的计数初值的低8位
           cpl p2.0             ;t0定时模式,定时到让P2.0取反,LED达到闪烁效果
           ret
           org 0300h         ;七段显示吗表格入口
    db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
          end  
关键字:AT89C51  单片机  定时器  终端模式  查询设置

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

热门文章 更多
AVR单片机为何要写1作为清0中断标志位