AT89S51单片机的定时器计数器
- 格式:ppt
- 大小:922.00 KB
- 文档页数:61
15.定时计数器T0作定时应用技术(一)1.实验任务用A T89S51单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1,秒计数到60时,自动从0开始。
硬件电路如下图所示2.电路原理图图4.15.13.系统板上硬件连线(1.把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。
(2.把“单片机系统”区域中的P2.0/A8-P2.7/A15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P2.0/A8对应着a,P2.1/A9对应着b,……,P2.7/A15对应着h。
4.程序设计内容A T89S51单片机的内部16位定时/计数器是一个可编程定时/计数器,它既可以工作在13位定时方式,也可以工作在16位定时方式和8位定时方式。
只要通过设置特殊功能寄存器TMOD,即可完成。
定时/计数器何时工作也是通过软件来设定TCON 特殊功能寄存器来完成的。
现在我们选择16位定时工作方式,对于T0来说,最大定时也只有65536us,即65.536ms,无法达到我们所需要的1秒的定时,因此,我们必须通过软件来处理这个问题,假设我们取T0的最大定时为50ms,即要定时1秒需要经过20次的50ms的定时。
对于这20次我们就可以采用软件的方法来统计了。
因此,我们设定TMOD=00000001B,即TMOD=01H下面我们要给T0定时/计数器的TH0,TL0装入预置初值,通过下面的公式可以计算出TH0=(216-50000)/256TL0=(216-50000)MOD256当T0在工作的时候,我们如何得知50ms的定时时间已到,这回我们通过检测TCON特殊功能寄存器中的TF0标志位,如果TF0=1表示定时时间已到。
第6章虚拟仿真设计案例本章的虚拟设计仿真案例的源程序清单及虚拟仿真运行文件见拓展资源。
必须在Proteus7.5版本环境下运行。
1. 秒定时器的设计利用片内定时器/计数器来进行定时,定时时间间隔为1秒。
原理电路如图5-6所示。
单片机P1.0脚控制发光二极管闪烁,时间间隔1秒。
图5-6 利用定时器控制发光二极管1秒闪亮1次定时器的初始化编程,主要是设置定时常数和有关特殊功能寄存器。
本例使用定时器模式,即定时中断,实现每1秒钟单片机的P1.0脚输出状态发生一次翻转,即发光二极管每1秒钟闪亮一次。
内部计数器用于定时器时,是对机器周期计数,可根据单片机的时钟频率算出机器周期,再计算出定时时间从而得出定时时间常数。
参考源程序清单及虚拟仿真运行文件见拓展资源。
在Proteus7.5版本环境下运行。
2. 计数器的应用如图5-8所示,定时器T1采用计数模式,方式1中断,计数输入引脚T1(P3.5)上外接按钮开关,作为计数信号输入。
按4次按钮开关后,P1口的8只LED闪烁不停。
对各相关的特殊功能寄存器的设置如下。
(1)设置TMOD寄存器定时器T1工作在方式1,应使TMOD寄存器的M1、M0=01;设置C/T =1,为计数器模式;对T0的运行控制仅由TR0来控制,应使GA TE0=0。
定时器T0不使用,各相关位均设为0。
所以,TMOD寄存器应初始化为0x50。
(2)T1的计数初值的设置由于每按1次按钮开关,计数器计数1次,按4次后,P1口8只LED闪烁不停。
因此计数器的初值为65 536−4=65 532,将其转换成十六进制后为0xfffc,所以,TH0=0xff,TL0=0xfc。
(3)IE寄存器的设置本例由于采用T1中断,需将IE寄存器中的EA、ET1位置1。
图5-8 由外部计数输入信号控制LED的闪烁(4)启动和停止定时器T1将定时器控制寄存器TCON中的TR1=1,则启动定时器T1计数;TR1=0,则停止T1计数。
单片机原理及应用_黄河科技学院中国大学mooc课后章节答案期末考试题库2023年1.AT89S51单片机的串行口,数据输出端为()。
参考答案:TXD2.AT89S51单片机定时器/计数器T1的中断向量号为()。
参考答案:33.Keil C51的unsigned int数据类型是()。
参考答案:无符号整型变量4.访问片外RAM数据,在C51中该数据的存储类型为()。
参考答案:xdata5.数字温度传感器DS18B20是()总线的器件参考答案:单6.AT89S51单片机有4 组位并行I/O口。
参考答案:87.AT89S51单片机片片外最多可扩展 KB的程序存储器。
参考答案:648.AT89S51有个可编程定时器/计数器参考答案:29.某RAM芯片有12条地址线,可寻址 KB个存储单元参考答案:410.波特率是指串行口每发送或接收的数据参考答案:秒钟11.AT89S51单片机采用并行总线方式外扩器件时,地址总线的高8位由()口提供参考答案:P212.C51中断函数的关键字是()参考答案:interrupt13.AT89S51单片机有( )组工作寄存器参考答案:414.ADC0809是( )位的数模转换器参考答案:815.如果单片机的晶振是6MHz,则其机器周期为()参考答案:2μS16.单片机的I/O端口做通用I/O时,若要读某个引脚,需要先对该端口位写()。
参考答案:117.C51提供了()存储类型类访问ROM。
参考答案:code18.如果需要用到AT89S51单片机的特殊功能寄存器以及一些存储定义,需要加载头文件()。
参考答案:reg51.h19.下面哪一种不属于C51扩展的数据类型参考答案:double20.单片机复位时,系统默认的当前工作寄存器为第()组。
参考答案:21.程序在运行时,当前PC的值是()。
参考答案:当前正在执行的指令的下一条指令的地址22.C51 中以字节形式对xdata区进行寻址,用()宏定义。
第6章 实验资源
实验 定时器实验
一、实验要求
利用片内定时器/计数器来进行定时,定时时间间隔为1秒。
单片机的P1.0脚接1个发光二极管,控制发光二极管闪烁,时间间隔1秒。
当按下某一I/O口线上的按键操作时,发光二极管按设定的时间1秒定时闪烁。
二、实验目的
掌握单片机定时器/计数器定时模式的使用及编程。
三、知识点
定时器的初始化编程,主要是设置定时常数和有关特殊功能寄存器。
本例使用的是定时器模式,即定时中断,实现每1秒钟单片机的P1.0脚输出状态发生一次翻转,即发光二极管每1秒钟亮一次。
内部计数器用于定时器时,是对机器周期计数,可根据单片机的时钟频率算出机器周期,再计算出定时时间从而得出定时时间常数。
定时器实验参考电路
实验电路图 定时器实验
实验 计数器实验
一、实验要求
利用单片机内定时器/计数器T0的计数器模式,对T0引脚(P3.4脚)上的按键开关按下的
次数进行计数。
按一下按键开关产生一个计数脉冲,将脉冲个数(10个以内)在P1口驱动的LED数码管上显示出来。
例如按第1下,LED数码管显示1;按第2下,显示2……按第10下显示0。
二、实验目的
掌握单片机定时器/计数器计数模式的使用及编程。
三、知识点
本实验涉及单片机片内定时器/计数器T0的两种工作模式和4种工作方式。
如何来对定时器/计数器进行初始化以及计数的与显示的编程。
T0引脚作为外部计数脉冲的输入。
计数器实验参考电路
实验电路图 计数器实验。
用AT89S51单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1,秒计数到60时,自动从0开始。
程序设计内容AT89S51单片机的内部16位定时/计数器是一个可编程定时/计数器,它既可以工作在13位定时方式,也可以工作在16位定时方式和8位定时方式。
只要通过设置特殊功能寄存器TMOD,即可完成。
定时/计数器何时工作也是通过软件来设定TCON特殊功能寄存器来完成的。
现在我们选择16位定时工作方式,对于T0来说,最大定时也只有65536us,即65.536ms,无法达到我们所需要的1秒的定时,因此,我们必须通过软件来处理这个问题,假设我们取T0的最大定时为50ms,即要定时1秒需要经过20次的50ms的定时。
对于这20次我们就可以采用软件的方法来统计了。
因此,我们设定TMOD=00000001B,即TMOD=01H下面我们要给T0定时/计数器的TH0,TL0装入预置初值,通过下面的公式可以计算出TH0=(216-50000) / 256TL0=(216-50000) MOD 256当T0在工作的时候,我们如何得知50ms的定时时间已到,这回我们通过检测TCON特殊功能寄存器中的TF0标志位,如果TF0=1表示定时时间已到。
程序框图C语言源程序(查询法)#include <AT89X51.H>unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; unsigned char second;unsigned char tcount;void main(void){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;tcount=0;second=0;P0=dispcode[second/10];P2=dispcode[second%10];while(1){if(TF0==1){tcount++;if(tcount==20){tcount=0;second++;if(second==60){second=0;}P0=dispcode[second/10];P2=dispcode[second%10];}TF0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;}}}C语言源程序(中断法)#include <AT89X51.H>unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; unsigned char second;unsigned char tcount;void main(void){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;ET0=1;EA=1;tcount=0;second=0;P0=dispcode[second/10];P2=dispcode[second%10];while(1);}void t0(void) interrupt 1 using 0{tcount++;if(tcount==20){tcount=0;second++;if(second==60){second=0;}P0=dispcode[second/10];P2=dispcode[second%10]; }TH0=(65536-50000)/256;TL0=(65536-50000)%256;}。