单片机复习提纲
24. 定时器工作方式设置及特点,及各工作方式下最大定时时间与最大计数个数的计算。
P111 7.1 7.2 TMOD
(1)51系列单片机片内有2个16位定时/计数器:定时器0(T0)和定时器1(T1)。
(2)两种工作方式:定时方式或计数方式;
(3)定时器0(T0)的初值寄存器为TH0、TL0;定时器1的初值寄存器为TH1、TL1;
(4)定时/计数器是16位加1计数器,计数为0时溢出,计数初值为负数或0;
1、定时工作方式
1)定时器计数的脉冲是由51单片机片内振荡器经12分频后产生的。
2)每经过一个机器周期定时器(T0或T1)的数值加1直至计数满产生溢出。
3)两种启动方式:自启动方式:GATE = 0,TR0 = 1;外启动方式:GATE = 1,/INT0 = 1,TR0 = 1;利用门控这一特征,可以测量外信号的脉冲宽度。
2、计数工作方式
1)通过引脚T0(P3.4)和T1(P3.5)对外部脉冲信号计数。
2)当输入脉冲信号产生由1至0的下降沿时,定时器的值加1, 在每个机器周期CPU采样T0和T1的输入电平。
若前一个机器周期采样值为高,下一个机器周期采样值为低,则计数器加1。
3)由于检测一个1至0的跳变需要二个机器周期,故最高计数频率为fosc/24。
4)启动方式同定时工作方式
2个控制寄存器:定时器工作模式寄存器TMOD(89H);定时器控制TCON(88H)
4个初值寄存器:定时器T0初值寄存器:TH0、TL0;
定时器T1初值寄存器:TH1、TL1;
TMOD用于控制T0和T1的操作模式,只能进行字节寻址,不能位寻址。
25. 定时器计数初值的计算P114 7.4.1
定时/计数器的计数初值C的计算与装入
由于采用加1计数,因此计数初值应为负值,计算机中用有符号数采用补码表示。
(1)计数方式
计数初值C=模-X(其中X为要计的脉冲个数)
(2)定时方式
计数初值C=模-t / MC
其中t为欲定时时间,MC为8xx51的机器周MC=12/fosc
例:试计算100个脉冲的计数初值。
(与P113 7.3相关)
方式0(13位方式)
C=(-64H)补= 213-64H = 2000H-64H = 1F9CH
1F9CH=0001 1111 1001 1100B
高八位1111 1100B → TH0,
低五位xxx1 1100B →TL0。
MOV TH0,#0FCH;MOV TL0,#1CH;(xxx用“0”填入)
方式1(16位方式)
C=(-64H)补= 216-64H = 10000H-64H = FF9CH
MOV TH0,#0FFH;MOV TL0,#9CH
方式2(8位自动再装入方式)
C =(-64H)补= 100H-64H = 9CH
MOV TH0,#9CH;MOV TL0,#9CH
26. 定时器初始化编程。
P115 7.4.2
初始化步骤:
(1)设置工作方式,TMOD;
(2)计算并设置计数初值,THX、TLX;
(3)若采用中断方式,需置位EA(中断总开关)及ETX(允许定时/计数器中断),并编中断服务程序。
(4)启动定时(或计数),将TRX置位(TCON);
例1:定时/计数器T0工作于计数方式,计数值x=1,允许中断,分别使用工作方式0、工作方式1和工作方式2。
进行初始化编程。
方式0 MOV TMOD, #04H
●TMOD = XXXX0100B;MOV TH0, #0FFH
●计数初值:Count = 213-1 = 1FFFH,MOV TL0, #1FH
(TH0) = 0FFH,(TL0) = XXX11111B;SETB ET0
●开中断:ET0 = 1, EA = 1;SETB EA
●启动记数:TR0=1;SETB TR0
方式1 #include <reg51.h>
●TMOD = XXXX0101B;sbit ET0 = IE^1; sbit EA = IE^7;
●计数初值:Count = 216-1 = FFFFH,sbit TR0 = TCON^4;
(TH0) = 0FFH,(TL0) = 0FFH;TMOD = 0x05; TH0 = 0xff;
●开中断:ET0 = 1, EA = 1;TL0 = 0xff;
●启动记数:TR0=1;ET0 = 1; EA = 1; TR0 = 1;
方式2 #include <reg51.h>
●TMOD = XXXX0110B;sbit ET0 = IE^1; sbit EA = IE^7;
●计数初值:Count = 28-1 = FFH,sbit TR0 = TCON^4;
(TH0) = 0FFH,(TL0) = 0FFH;TMOD = 0x06;
●开中断:ET0 = 1, EA = 1;TH0 = 0xff; TL0 = 0xff;
●启动记数:TR0=1;ET0 = 1; EA = 1; TR0 = 1;
例2:T1工作于定时方式2,定时时间Td=500us,系统主频fosc = 6MHz,不允许中断。
对T1进行初始化编程。
●TMOD = 0010xxxxB;
●计数初值(1)机器周期= 12*1/fosc = 2us,
(2)计数初值= 28 - 500us/2us = 06H
TH1=06H,TL1=06H
●关中断:ET1 = 0;
●启动记数:TR1=1;
#include <reg51.h>
sbit ET1= IE^3; sbit TR1=TCON^6;
TMOD=0x20; TL1=0x06;TH1=0x06;
ET1=0;TR1=1;
27. 定时器中断编程。
P115 7.4.3 例7-1 例7-2
28. 串行通信中波特率的概念及计算。
P128 8.1.4 8.1.5
波特率BR的概念:指单位时间内传输的数据位数,单位是bps(bit per second),即1 bps = 1 bit/s。
例如:100字符/秒,1个字符11位,串行传输波特率为:100×11=1100(波特)
29. 串口各工作方式下数据格式特点,串口工作方式设置。
P135 8.4
根据串行通信数据格式和波特率的不同, 51系列单片机的串行通信有4种工作方式,通过SM1和SM0两位进行选择。
1、方式0(移位寄存器方式)用于并行I/O扩展。
●数据格式:8位,低位在前,高位在后。
RXD:串行数据的发送端或接收端,;TXD:输出频率为fosc/12的时钟脉冲。
●波特率:固定为fosc/12 (fosc为单片机晶振频率)。
2、方式1(波特率可变,10位异步通信方式)
●数据格式:为10位异步通信方式, 每帧数据由1个起始位“0”、8个数据
位和1个停止位“1”,共10位构成。
其中起始位和停止位在发送时是自动插入的。
●波特率:以TXD为串行数据的发送端,RXD为数据的接收端,由T1提供
移位时钟,是波特率可变方式。
波特率=(2SMOD/32)×(TI的溢出率) =(2SMOD/32)×(fosc/12(256-x) )
根据给定的波特率,可以计算T1的计数初值X。
3、方式2(波特率固定,11位异步通信方式)
●数据格式:每帧数据由一个起始位“0”,9个数据位和1个停止位“1”组
成。
发送时第9位,由TB8位提供,接收到的第9位数据存放在RB8位。
第九位数据可作为检验位,也可用于多机通信中识别传送的是地址还是数据的特征位。
波特率:波特率固定为(2SMOD/64)×fosc.
4、方式3(波特率可变,11位异步通信方式)
数据格式同方式2,波特率可变,计算方法同方式1。
例:在内部数据存贮器20H~3FH单元中共有32个数据,要求采用方式1 串行发送出去,传送速率为1200波特,设fosc=12MHZ。
分析:T1工作于方式2 作波特率发生器,取SMOD=0,T1的时间常数计算如下:
波特率=
1200=(1/32)×12×10 /12(256-x) x=230=
中断方式C 语言发送程序
void Trs() interrupt 4
{ TI=0;i++; p++; SBUF=*p; }
void main( )
{TMOD=0x20;TH1=0xe6;TL1=0xe6;TR1=1;EA=1; ES=1;SCON=0x40;p=0x20;SBUF=*p for (i=0;i<31;);
中断方式C 语言接收程序
#include<reg51.h>
void Trs() interrupt 4
{ RI=0;i++; *p =SBUF;p++;}
void main( )
{ TMOD=0x20;TH1=0xe6;TL1=0xe;
for (i=0;i<32;);
30. ADC0809芯片功能P181 图10-8
DAC0832芯片功能P177 图10-1到图10-4;ADC0809查询方式编程P182 图10-9以及下面的程序。