IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 51单片机 笔记(四)定时计数器和程序设计 -> 正文阅读

[嵌入式]51单片机 笔记(四)定时计数器和程序设计

定时/计数器

5.1 结构和工作原理

8051单片机内部有2个16位可编程定时/计数器:

  • 定时计数器0
  • 定时计数器1。

定时/计数器的实质是加1计数器,每经过一个机器周期,计数器自加1

  • 定时器是对内部晶振的脉冲进行计数
  • 计数器是对外部1信号脉冲进行计数

最短周期:

  • 作为定时器时:最短定时周期为1个机器周期。
  • 作为计数器时:每个机器周期采样一次引脚电平,一次为“1”,下次为“0”时,计数器加1,为确保计数正确,高、低电平至少保持一个机器周期以上。

5.2 方式寄存器和控制寄存器

5.2.1 方式寄存器TMOD(89H)

TMOD用于控制定时/计数器的功能和工作模式。不能进行位寻址,只能通过整个字节值设定。

T 1 T_1 T1? T 0 T_0 T0?
GATEC/TM1M0GATEC/TM1M0
  • GATE门控位
    • 可以用于测量TNTO(1)出现的正脉冲宽度
    • GATE=1时,INT0(1)=1(保持)且TR0(1)=1,T0(1)计数
    • GATE=0时,仅由TR0(1)启动T0(1)。
    • 就可以用外部电平控制计数开始
  • C/T 功能选择位
    • C/T=0时:定时器模式,每个机器周期计数器加1,至溢出
    • C/T=1时:计数器模式,对T0, T1的外部输入信号计数
  • M1, M0 工作方式选择位
    • M1M0工作方式功能
      00方式013位计数器
      01方式116位计数器
      10方式28位自动重装载计数器,TH自动送TL
      11方式3T0分成2个8位计数器

当为定时/计数器设置完工作方式,并启动运行后,就不用CPU继续干预,直至计数器计满溢出。所以定时/计数可与CPU同时进行

5.2.2 控制寄存器TCON(88H)

TCON用于控制定时/计数器的启动和停止(TR1, TR0),同时表明了定时/计数器的状态(TF1, TF0)。

T 1 T_1 T1? T 0 T_0 T0?中断相关 T 1 T_1 T1?中断相关 T 0 T_0 T0?
TF1TR1TF0TR0IE1IT1IE0IT0
  • TF1: T1溢出标志。T1溢出时,TF1=1,申请中断(001BH)。进入中断服务程序后,由硬件自动清除。
  • TR1: T1运行控制位。1时开始及计数

5.3 计时器的设置

首先,计数的工作方式是终点唯一但是开始值由人设置

起点时间的计算
t = T c × ( 2 L - T 初 ) t=T_c×( 2^{L}-T_{初}) t=Tc?×(2LT?)

  • t t t是定时时间
  • T c T_c Tc?机器周期,有 T c = 12 f o s c T_c=\frac{12}{fosc} Tc?=fosc12?
  • L L L是计数器位数,一般是16位
  • T 初 T_初 T?定时器初值

工作的设置流程

  1. 对TMOD赋值,设置定时计数方式
  2. 向TH0、TL0写入初始值
  3. 开放中断(用于中断方式),如不开放则不触发中断
  4. 通过TR0启动定时/计数器
  5. 通过TF0判别定时计数是否结束

16位计时器12MHZ最大最小计时
t m i n = 1 μ s t_{min}=1 \mu s tmin?=1μs
t m a x = 65.536 m s t_{max}=65.536 ms tmax?=65.536ms

汇编程序

方法并不唯一,仅供参考~

6.1 把单片机片内的30H~7FH 单元清零

        ORG 0000H
CLEAR:  MOV R0,#30H     ;30H 送R0寄存器
        MOV R6,#50H     ;50H 送R6寄存器(用作计数器)
CLR1:   MOV A,#18H  ;18 送累加器A
        MOV @R0,A       ;00 送到30H-7FH 单元
        INC R0          ;R0 加1
        DJNZ R6,CLR1    ;不到50H个字节,继续
WAIT:   LJMP WAIT
        END

6.2 片外RAM中1000H~100FH单元中的数传送到片外RAM中2000H~200FH单元

         ORG 0000H
         MOV DPTR,#1000H
         MOV R0,#40H
MOVE1:   MOVX A,@DPTR
         MOV @R0,A
         INC R0
         INC DPTR
         CJNE R0,#50H,MOVE1
         MOV DPTR,#2000H
         MOV R0,#40H
MOVE2:   MOV A,@R0
         MOVX @DPTR,A
         INC R0
         INC DPTR
         CJNE R0,#50H,MOVE2
         END

6.3 以PC为基址寄存器,查表求30H单元中BCD码的平方,结果存入31H单元

		org 0000h  
		mov a,30h
		add a,#05h
		movc a,@a+pc
		mov 31H,a
		wait: ljmp wait
		tab:db 0,1,4,9,16,25,36,49,64,81
		end

6.4 2字节无符号数转换成BCD码

        ORG 0000H       ;get 2bit into BCD 30H,31H,6->40H,41H,42H,43H,44H,45H
        MOV R1,#40H
CLR1:   MOV @R1,#00H
        INC R1
        CJNE R1,#46H,CLR1
        MOV R6,30H      ;count
        MOV A,31H       ;A=F7H
        MOV B,#100      ;B=100
        DIV AB          ;A/B A=2,B=47
        MOV 42H,A       ;42H=2
        MOV A,B         ;A=47
        MOV B,#10       ;B=10
        DIV AB          ;A/B A=4,B=7
        MOV 41H,A       ;41H=4
        MOV 40H,B       ;40H=7
ADDEE:  MOV A,#06H      ;A=6
        ADD A,40H       ;A=A+40H=13
        MOV B,#10       ;B=10
        DIV AB          ;A/B,A=1,B=3
        MOV 40H,B       ;40H=B=3
        MOV 50H,A       ;50H=1
        MOV A,#05H      ;A=5
        ADD A,41H       ;A=A+41H=5+4=9
        ADD A,50H       ;A=A+50H=9+1=10
        MOV B,#10       ;B=10
        DIV AB          ;A/B,A=1,B=0
        MOV 41H,B       ;41H=0
        MOV 50H,A
        MOV A,#02H      ;A=2
        MOV B,#10       ;B=10
        ADD A,42H       ;A=A+42H=2+2=4
        ADD A,50H       ;A=A+50H=4+1=5
        MOV B,#10
        DIV AB          ;A=0,B=5
        MOV 50H,A       ;50H=0
        MOV 42H,B       ;42H=5
        MOV R1,#43H     ;R1=43H
HADD:   MOV A,@R1       ;A=(43H)
        ADD A,50H       ;A=A+50H
        MOV B,#10       ;B=10
        DIV AB          ;A/B
        MOV @R1,B
        MOV 50H,A
        INC R1
        CJNE R1,#46H,HADD
        DJNZ R6,ADDEE
WAIT:   LJMP    WAIT
        END

6.5 将一个字节中的各位逆序排列

        org 0000h       ;
        mov 30h,#82h    ;82h=10000010b 0100 0001b=41h
        mov a,30h
        mov 31h,#00h
        mov r3,#08h     ;count=8
push1:
        mov c,acc.0     ;
        rr a
        mov 30h,a
        mov a,31h
        rlc a           ;
        mov 31h,a
        mov a,30h
        djnz r3,push1
wait:   ljmp wait       ;
        end

6.6 实现秒表功能

最大定时时间为99.99秒,时间分辨率为0.01秒

        sec equ 30h
        minsec equ 31h
        count equ 33h

        org 0000h    ;利用定时/计数器T0,实现秒表功能。最大定时时间为99.99秒,时间分辨率为0.01秒
        mov sec,#0
        mov minsec,#0
        mov tmod,#10h    ;10minsecond d8f0
        mov th1,#0d8h
        mov tl1,#0f0h
        mov sec,#0
        mov minsec,#0
        mov count,#100
        setb tr1
lp1:    jnb tf1,lp1
        clr tf1
        mov th1,#0d8h
        mov tl1,#0f0h
        mov a,minsec
        add a,#1
        da a
        mov minsec,a
        djnz count,lp1
        mov minsec,#0
        mov count,#100

        mov a,sec
        add a,#1
        da a
        mov sec,a
        cjne a,#99h,lp1

        mov th1,#0d8h
        mov tl1,#0f0h
        mov count,#99
lp2:    jnb tf1,lp2
        clr tf1
        mov th1,#0d8h
        mov tl1,#0f0h
        mov a,minsec
        add a,#1
        da a
        mov minsec,a
        djnz count,lp2
        mov 36h,#45
wait:   ljmp wait
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-18 12:52:01  更:2021-08-18 12:52:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:13:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码