实验三定时器实验
实验目的
学习对无规律事件的处理方法,掌握查表指令的使用
掌握用定时器进行定时的方法;
重点掌握内容
实验任务
要求P1口控制8个发光二极管按下列规律发光
L0L2 → L1L3→ L4L6 → L5L7 → L0L2L4L6 → L1L3L5L7→全亮→全灭
每个状态持续1s, 用定时器T1定时
实验接线
-------L7
点亮
0
L0L2
0
0
1
1
1
1
1
1
0
0
0
0
0
0
0
L1L3
L4L6
L5L7
L0L2L4L6
L1L3L5L7
全亮
全灭
1
1
0
0
1
1
1
1
1
1
1
1
0
1
0
1
1
1
1
1
1
0
1
0
0
0
1
1
0
1
0
1
1
1
0
0
1
0
1
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
0H
0FAH
0F5H
0AFH
05FH
0AAH
55H
0H
0FFH
用软件延时实现
MOV A, #0FAH
MOV P1, A //LOL2亮
ACALL DELAY_1s //延时1s
MOV A, #0F5H
MOV P1, A //L1L3亮
ACALL DELAY_1s //延时1s
MOV A, #0FFH
MOV P1, A
ACALL DELAY_1s //全灭,延时1s
AJMP LOOP //循环
LOOP:
……………
1,延时程序占用CUP时间
降低了CUP利用率
2,程序繁琐
DELAY_1s: …………..
长时间定时或定时精度要求较高的场合,通常选用定时器实现定时(硬件定时);
用查表指令处理无规律事件
问题
问题的解决
定时器定时
设置工作模式
计算定时初值
开中断
开定时器
定时器初始化
01
主程序
中断子程序
定时程序结构框架
02
定时器结构
THX(8位)
TLX (8位)
16位定时器/计数器
计数最大值为216
设置定时器工作方式
T0
T1
M0
M1
C/T
GATE
M0
M1
C/T
GATE
D0
D1
D2
D3
D4
D5
D6
D7
工作方式控制寄存器TMOD(8位,字节地址89H)
2种工作模式
定时
计数
4种工作方式
方式0
方式1
方式2
方式3
1
计数
定时
0
工作模式
4种工作方式
M1M0
方式
计数器配置
0 0
0
TLx低5位与THx的8位构成13位计数器
0 1
1
TLx与THx构成16位计数器
1 0
2
自动重装初值(THx)的8位(TLx溢出时)计数器
1 1
3
仅用于T0,分成两个8位计数器,T1停止计数
T0
T1
M0
M1
C/T
GATE
M0
M1
C/T
GATE
D0
D1
D2
D3
D4
D5
D6
D7
TMOD
THX(8位)
TLX (8位)
定时器/计数器
方式0:213*=
方式1: 216*=
方式2: 28*=
方式3: 28*=
在实验过程中,我们统一选择方式一定时/计数。
TMOD
T0定时
工作方式
T1定时
T0计数
T1计数
01H
10H
05H
51H
0
0
1
1
思考:
设置定时器工作方式
设置工作方式程序:
MOV TMOD, #10H
计算定时初值
计算延时时间为1s的定时初值:
(216-X)*T=t
X=216-t/T=65536-50/=19453=4BFDH
方式一最大计数值为216 <1s
一个机器周期为T=
0
216
X
定时器
令定时初值为X, 定时时间为t
先用定时器定时50ms, 定时20次即为1s
MOV TH1, #4BH
MOV TL1, #0FDH
用计算器进行运算
程序
实验思路:
主程序中:
1,定时器初始化
2,其他初始化
中断服务子程序中:
1,等待延时时间1s到了吗?
2,时间到后,向P1口写入数据
开中断
SETB ET1 // 允许T1溢出中断
SETB EA // 开总中断
启动定时器
SETB TR1
实验三 定时器实验 来自淘豆网m.daumloan.com转载请标明出处.