II码存放》,该字符串以$<其值为24H>结束,试统计该字符串的长度,其结果存于LON单元。 求平方子程序计算X=a^2+b^2 25、(8分)片内RAM30H开始的单元中有10B的二进制数,请编程求它们之和(和<256
第5章 80C51单片机的中断与定时
考试知识点:
1、中断源和中断请求标志位 中断名称 外部中断0 T0中断 外部中断1 T1中断 串行发送中断 串行接收中断 2、和中断相关的寄存器的设置 (1)定时器控制寄存器TCON 格式如下: 位 TCON 位地址 D7 TF1 8F D6 TR1 8E D5 TF0 8D D4 TR0 8C D3 IE1 8B D2 IT1 8A D1 IE0 89 D0 IT0 88 中断请求标志 IE0 TF0 IE1 TF1 TI RI 中断向量 0003H 000BH 0013H 001BH 0023H 0023H
IT0=0,为电平触发方式。 INT 0 低电平有效。 IT0=1,为边沿触发方式。 INT 0 输入脚上电平由高到低的负跳变有效。 IE0=1,说明有中断请求,否则IE0=0。 (2)中断允许控制寄存器IE 其各位的定义如下: 位 代号 D7 EA D6 — D5 — D4 ES D3 ET1 D2 EX1 D1 ET0 D0 EX0 EA: 开放或禁止所有中断。ES:开放或禁止串行通道中断。ET1:开放或禁止定时/计数器T1溢出中断。EX1:开放或禁止外部中断源1。ET0:开放或禁止定时/计数器T0溢出中断。EX0:开放或禁止外部中断源0。
(3)中断优先级控制寄存器IP 各位的定义如下: 位 代号 D7 — D6 — D5 — D4 PS D3 PT1 D2 PX1 D1 PT0 D0 PX0 1为高优先级、0为低优先级。如果同级的多个中断请求同时出现,则按CPU查询次序
17
确定哪个中断请求被响应。查询次序为:外部中断0、T0中断、外部中断1、T1中断、串行中断。
3、响应中断的必要条件
(1)有中断源发出中断请求。
(2)中断允许寄存器IE相应位置“1”,CPU中断开放(EA=1)。 (3)无同级或高级中断正在服务。
(4)现行指令执行到最后一个机器周期且已结束。若现行指令为RETI或需访问特殊功能寄存器IE或IP的指令时,执行完该指令且其紧接着的指令也已执行完。
中断响应的主要内容是由硬件自动生成一条长调用指令,指令格式为“LCALL addr16”。这里的addr16就是程序存储器中断区中相应中断的入口地址。 4、中断程序设计
(1)在0000H处存放一条无条件转移指令转到主程序。
(2)在入口地址处存放一条无条件转移指令转到中断服务子程序。 (3)设置触发方式(IT0/IT1) (4)设置IE和IP。 (5)设置SP。 (6)原地踏步。
(7)中断服务子程序。最后RETI。 5、定时计数的基本原理
(1)定时功能:每个机器周期计数器加1。
(2)计数功能:T0(P3.4)和T1(P3.5)输入计数脉冲,每一来一个脉冲计数器加1。 6、用于定时计数的寄存器的设置
(1)定时器控制寄存器TCON 格式如下: 位 TCON 位地址 D7 TF1 8F D6 TR1 8E D5 TF0 8D D4 TR0 8C D3 IE1 8B D2 IT1 8A D1 IE0 89 D0 IT0 88 TF1、TF0——计数溢出标志位。当计数器产生计数溢出时,由硬件置1。采用查询方式,它是供查询的状态位。采用中断方式,作为中断请求信号。
TR1、TR0——计数运行控制位。为1时,启动定时器/计数器工作;为0时,停止定时器/计数器工作。
(2)工作方式控制寄存器TMOD
其格式如下:
GATE:门控位。当GATE=1时,同时INTx为高电平,且TRx置位时,启动定时器,外部启动。当GATE=0时,每当TRx置位时,就启动定时器,是内部启动方式。
18
C/T:选择定时器功能还是计数器功能。该位置位时选择计数器功能;该位清零时选择定时器功能。
M1M0:这两位指定定时/计数器的工作方式,可形成四种编码,对应四种工作方式: M1 M0 方式 说明 0 0 0 TLx低5位与THx中8位构成13位计数器 0 1 1 TLx与THx构成16位计数器 1 0 2 可自动再装入的8位计数器,当TLx计数溢出时,THx内容自动装入TLx。 1 1 3 对定时器0,分成两个8位的计数器;对定时器1,停止计数。 7、各种工作方式计数初值计算公式
方式0:
定时时间T=(8192-计数初值)×机器周期 计数次数C=8192-X 方式1:
定时时间T=(65536-计数初值)×机器周期 计数次数C=65536-X 方式2:
定时时间T=(256-计数初值)×机器周期 计数次数C=256-X 8、定时器程序设计
查询方式:
(1)在0000H处存放一条无条件转移指令,转到主程序。 (2)设置工作方式TMOD。 (3)设置计数初值。 (4)启动定时计数。
(5)等待时间到或计数计满。
LOOP:JBC TF0/TF1,LOOP1 SJMP LOOP LOOP1:??
(6)重新设置计数初值(除方式2),再转第5步。 中断方式:
(1)在0000H处存放一条无条件转移指令,转到主程序。
(2)在入口地址处存放一条无条件转移指令转到中断服务子程序。 (3)设置工作方式TMOD。 (4)设置计数初值。 (5)启动定时计数。 (6)设置IE和IP。 (7)设置SP。 (8)原地踏步。
(9)中断服务子程序。重新设置计数初值(除方式2),最后RETI。
19
例 选用定时器/计数器T1工作方式0产生500μS定时,在P1.1输出周期为1ms的方波,设晶振频率=6MHZ。
(1)根据定时器/计数器1的工作方式,对TMOD进行初始化。
C 按题意可设:GATE=0(用TR1位控制定时的启动和停止), T =0(置定时功能),M1M0=00(置方式0),因定时器/计数器T0不用,可将其置为方式0(不能置为工作方式3),这样可将TMOD的低4位置0,所以(TMOD)=00H。
(2)计算定时初值
( 13 - X)×2=500 2X=7942D=1111100000110B
将低5位送TL1,高8位送TH1得:(TH1)=F8H,(TL1)=06H (3) 编制程序(查询方式) ORG 0000H LJMP MAIN ORG 0300H
MAIN: MOV TMOD,#00H ;TMOD初始化 MOV TH1,#0F8H ;设置计数初值 MOV TL1,#06H
SETB TR1 ;启动定时 LOOP: JBC TF1,LOOP1 ;查询计数溢出 AJMP LOOP
LOOP1:CPL P1.1 ;输出取反
MOV TL1,#06H ;重新置计数初值
MOV TH1,#0F8H
AJMP LOOP ;重复循环 END
例 用定时器/计数器T1以工作方式2计数,要求每计满100次进行累加器加1操作。 (1)TMOD初始化
C M1M0=10(方式2), =1(计数功能),GATE=0(TR1启动和停止),因此(TMOD)
T=60H。
(2)计算计数初值
8 2 -100=156D=9CH 所以 TH1=9CH
(3)编制程序(中断方式) ORG 0000H
AJMP MAIN ;跳转到主程序
ORG 001BH ;定时/计数器1中断服务程序入口地址
20