单片机论文.docx
《单片机论文.docx》由会员分享,可在线阅读,更多相关《单片机论文.docx(10页珍藏版)》请在冰豆网上搜索。
![单片机论文.docx](https://file1.bdocx.com/fileroot1/2022-10/29/e0a1ae7f-b384-49b9-a290-2ea57e0c2e0e/e0a1ae7f-b384-49b9-a290-2ea57e0c2e0e1.gif)
单片机论文
单片机定时器/计数器在流水灯中的应用
班级:
学号:
姓名:
专业:
摘要:
自计算机问世以来,单片机技术在社会各领域中得到了广泛的应用。
在流水灯控制系统中,单片机更是取代了由齿轮调节延迟时间的旧式市发展速度,成为日后此系统中的核心部分。
由于单片机具有一些突出的优点:
体积小、重量轻、电源单一、功耗低;功能强、价格低;数据大都在单片机内部传送,运行速度快、抗干扰能力强、可靠性高,所以单片机被广泛的应用于测控系统、数据采集、智能仪器仪表、机电一体化产品、智能接口、计算机通信以及单片机的多级系统等领域。
1、基本内容
利用80C51单片机芯片控制8个发光二极管和一个按钮。
要求上电后,系统按照依次亮一个灯的次序进行循环,当按下按钮一次时,8个发光二极管依次递增点亮,全亮后灭,10次后回到单灯循环点亮,每盏灯点亮时间为50ms,系统晶振设为12MHz。
1.硬件电路原理图
基于单片机定时中断的流水灯控制系统硬件原理图(如下图所示),输入按钮通过INT0与单片机相连,输出发光二极管经晶体管驱动和单片机的P1.0相连。
单片机的第31引脚EA=1,电源外接+5V。
2.程序分配
按键采用INT0中断方式工作,下降沿触发,高优先级,TCON=11H,IP=01H,灯亮后的持续时间采用定时器T0工作来实现,设置T0工作在16位计数器方式。
TMOD=01H,定时时间为50ms,中断10次为500ms,TH0=TH0H,TL0=TL0H,用伪指令来实现,便于调节时间长短。
从原理图中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1。
因此,要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。
在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则就看不到“流水”效果了。
流水灯控制系统硬件原理图
3.程序设计
TH0HEQU6CH;定义TH0H定时器初值高位数
TH0LEQU8BH;定义TH0L定时初值的低位数
ORG0000H
LJMPMAIN;转主程序
ORG0003H
SJMPAINT0;转外部中断0入口
ORG000BH
SJMPAT0;转T0中断入口
ORG0030H
AT0:
PUSHPSW;T0中断程序
PUSHACC
INCR7
MOVTH0,#TH0H
MOVTL0,#TH0L
SETBTR0;重新启动T0D定时
POPACC
POPPSW
AINT0:
PUSHPSW;INT0中断程序
PUSHACC
SETB20H.0;置标志位20H.0
POPACC
POPPSW
RETI
MAIN:
MOVP1,#00H;初始化
MOVP3,#0FFH;
MOVSP,#60H;堆栈指针
MOV20H,#00H;
MOVIP,#01H;设置INT0为高优先级
MOVTMOD,#01H;设置T0为16位定时器方式
MOVTH0,#TH0H;送定时器初值高8位
MOVTL0,#THOL;送定时器初值低8位
MOVTCON,#11H;INT0下降沿触发,启动T0定时
MOVIE,#10000011B;开EA,T0和INT0中断
NEXT:
MOVA,#01H
MOVP1,A;点亮第一个LED
MOVR5,#10;循环流水十次计数器
MOVR7,#00;0.5s计数器
NEXT:
JNB20H.0,NEXT2;有键按下则NEXT2
CJNER7,#10,NEXT1
MOVR7,#00H
RLA
MOVP1,A
SJMPNEXT1
NEXT2:
MOVR7,#00
MOVR6,#08
MOVA,#01H
MOVP1,A
NEXT3:
CJNER7,#10,NEXT3
MOVR7,#00
MOVA,P1
RLA
ORLA,#01H
MOVP1,A
DJNER6,NEXT3
DJNER5,NEXT2;循环10次未满则转NEXT2
MOV20H,#00H
SJMPNEXT
END
2、工作原理
定时器/计数器T0和T1的实质是加1计数器,即每输入一个脉冲,计数器加1,当加到计数器全为1时,再输入一个脉冲,就使计数器归0,且计数器的溢出是TCON中的标志位TF0或TF1置1,向CPU发出中断请求。
只是输入的技术脉冲来源不同,把他们分成定时与计数两种功能。
作定时器时脉冲来自于内部时钟振荡器,作计数器时脉冲来自于外部引脚。
在作定时器使用时,输入脉冲是由内部振荡器的输出位12分频后送来的,所以定时器可看作是对机器周期的计数器。
若晶振频率为12MHz,则机器周期是1微秒,定时器每接收一个输入脉冲的时间为1微秒;若晶振频率为6MHz,则机器周期是1微秒,定时器每接收一个输入脉冲的时间为2微秒。
因此,要定时时间的长短,只需计算一下脉冲个数即可。
在作计数器使用时,输入脉冲是由外部引脚P3.4(T0)或P3.5(T1)输入到计数器的。
在每个机器周期的S5P2期间采样T0、T1引脚电平。
当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1.由于检测一个从1到0的下降沿需要两个机器周期,因此要求被采样的电平至少要维持一个机器周期,以保证在给定的电平再次变化之前至少被采样一次,否则会出现漏计数现象,所以最高计数频率为晶振频率的1/24.当晶振频率为12MHz时,最高计数频率不超过500kHz,即计数脉冲的周期要大于2微秒;当晶振频率为6MHz时,最高计数频率不超过250kHz,即计数脉冲的周期要大于4微秒。
加1计数器实际上是由2个8位的特殊功能寄存器TH0、TL0或TH1、TL1构成的。
这些寄存器用于存放定时器或计数器的初值。
可以用MOV指令给计数器赋初值,即给TH0、TL0和TH1、TL1赋值。
一般情况下,当计数器工作时,这些寄存器中的值随计数器脉冲做加1变化。
3、结构
基本结构是两个16位寄存器T0和T1,每个都是由两个独立的8位寄存器(TH0、TL0和TH1、TL1)组成,用于存放定时器/计数器的初值。
TMOD是定时器/计数器工作方式寄存器,由它确定定时器/计数器的工作方式和功能。
TCON是定时器/计数器的控制寄存器,用于控制T0、T1的启动和停止以及设置溢出标志。
80C51单片机定时器/计数器结构原理图
四、控制与实现
80C51单片机定时器/计数器控制与实现由两个特殊功能寄存器TMOD和TCON完成。
TMOD用于设置定时器/计数器的工作方式,TCON用于控制定时器/计数器的启动和中断申请。
1.工作方式寄存器TMOD
TMOD是一个特殊的寄存器,用于设定T0和T1的工作方式。
只能对其进行字节操作,不能位寻址。
其格式如下:
(1)GATE:
门控位。
GATE=0时,只要软件使TR0或TR1置1就可启动定时器,与INT0或INT1引脚的电平状态没有关系。
GATE=1时,只有INT0或INT1引脚为高电平且TR0或TR1由软件置1后,才能启动定时器。
(2):
定时或计数功能选择位。
=0时,用于定时;=1时,用于计数。
(3)M1和M0位:
T1和T0工作方式选择位。
定时器/计数器有4种工作方式,由M1、M0进行设置,如下表所示:
M1M0
工作方式
功能选择
00
方式0
13位定时/计数器(TH高8位加上TL低5位)
01
方式1
16位定时/计数器
10
方式2
8位自动重装初值定时器/计数器
11
方式3
模式3只针对T0,T0分成两个独立的8位定时/计数器,T1无模式3
系统复位时,TMOD所有为清零,定时器/计数器工作在非门控方式0状态。
2.控制寄存器TCON
TCON既参与中断控制,又参与定时控制。
其低4位用于外部中断,高4位用于控制定时器/计数器的启动和中断申请。
其格式如下:
(1)TF1和TF0:
T1和T0的溢出标志位。
当定时器/计数器产生计数溢出时,由硬件置1,向CPU发出中断申请。
中断响应后,由硬件自动清零。
在查询方式下,这两位作为程序的查询标志位;中断方式下,作为中断请求标志位。
(2)TR1和TR0:
定时器/计数器控制运行位。
TR1(TR0)=0时,定时器/计数器停止工作;TR1(TR0)=1时,启动定时器/计数器工作。
TR1和TR0根据需要,由用户通过软件将其清零或置1。
3.下面对上述提到的工作方式作详细说明:
80C51单片机定时器/定时器T0有4种工作方式(方式0、1、2、3),T1有3种工作方式(方式0、1、2)。
另外,T1还可作为串行通信接口的波特率发生器,以T0为例。
(1)方式0
在方式0下,T0的方式0逻辑结构图如下:
在此工作方式下,定时器中的计数器是一个13位的计数器,由TH0的8位和TL0的低5位组成,TL0高3位未用,最大计数值为。
定时器/计数器初值的计算及其赋值:
用作定时器时,定时时间T=(-T0的初值)时钟周期12,则
T0的初值=-T/(时钟周期12)
将T0初值的十进制形式的数转换成二进制数,低5位TL0,TL0的高3位为任意值,一般取0,高8位送TH0,即实现了给定时器赋初值的要求。
用作计数器时,计数次数值N=-T0的初值,则T0的初值=-计数初值N
将T0初值的十进制形式的数转换成二进制数,低5位TL0,TL0的高3位为任意值,一般取0,高8位送TH0,即实现了给计数器赋初值的要求。
(2)方式1
在此方式下,T0构成16位定时/计数器,其中TH0作为高8位,TL0作为低8位,最大计数值位,其余同方式0类似。
定时器/计数器初值的计算及其赋值:
用作定时器时,定时时间T=(-T0的初值)时钟周期12,则T0的初值=-T/(时钟周期12),并将T0初值的十进制形式的数转换成二进制数,低8位送TL0,高8位送TL1。
用作计数器时,计数次数值N=-T0的初值,则T0的初值=-计数初值,将T0初值的十进制形式的数转换成二进制数,低8位送TL0,高8位送TL1。
(3)方式2
在方式2下,TH0和TL0被当作两个8位计数器,计数过程中,TH0寄存器8位初值并保持不变,由TL0进行加1计数,当TL0计数溢出时,除了可产生中断申请外,还将TH0中保存的内容向TL0重新装入,以便于从预定计数初值开始重新计数,而TH0中的初值仍然保留,以便下轮计数时再对TL0进行重装初值。
方式2的最大计数值只有,T0方式2逻辑结构如图所示:
定时器/计数器初值的计算及其赋值:
用作定时器时,定时时间T=(-T0的初值)时钟周期12,则T0的初值=-T/(时钟周期12),并将T0初值的十进制形式的数转换成二进制数,分别送TL0和TH0。
用作计数器时,计数次数值N=-T0的初值,则T0的初值=-计数初值,将T0初值的十进制形式的数转换成二进制数,分别送TL0和TH0。
(4)方式3
只有定时器T0有此工作方式。
在方式3下,T0被拆成两个独立工作的8位计数器TL0和TH0。
其中TL0用原T0的控制位、引脚和中断源,T0的方式3逻辑结构图如下所示:
可见,方式3增加了一个8位定