如何基于51单片机利用定时器的实现PWM的方法详细概述

如何基于51单片机利用定时器的实现PWM的方法详细概述

如何基于51单片机利用定时器的实现PWM的方法详细概述51单片机是可以输出PWM的,比较的麻烦。此时需要用到内部定时器来实现,可用两个定时器实现,也可以用一个定时器实现。

用两个定时器的方法是用定时器T0来控制频率,定时器T1来控制占空比。大致的的编程思路是这样的:T0定时器中断让一个I0口输出高电平,在这个定时器T0的中断当中起动定时器T1,而这个T1是让IO口输出低电平,这样改变定时器T0的初值就可以改变频率,改变定时器T1的初值就可以改变占空比。

下面重点介绍用一个定时器的实现PWM的方法。以周期为1ms(1kHZ)为例,要产生其它频率的PWM波,程序中只需作简单修改即可。用一个定时器时(如定时器T0),首先要确定PWM的周期T和占空比D,确定了这些以后,就可以用定时器产生一个时间基准t,比如定时器溢出n次的时间是PWM的高电平的时间,则D*T=n*t,类似的可以求出PWM低电平时间需要多少个时间基准n。

因为这里我们是产生周期为1ms(1kHZ)的PWM,所以可设置中断的时间基准为0.01ms,,然后中断100次即为1ms。在中断子程序内,可设置一个变量如time,在中断子程序内,有三条重要的语句:

1、当time>=100时,time清零(此语句保证频率为1kHZ);

2、当time>n时(n应该在0-100之间变化开),让单片相应的I/O口输出低电平;

3、当time

#define uint unsigned int

#define uchar unsigned char

sbit PWM=P2

C51单片机定时器及数码管控制实验报告

理工大学信息工程与自动化学院学生实验报告 (201 — 201学年第1 学期) 课程名称:单片机技术

一、实验目的 1.掌握定时器T0、T1 的方式选择和编程方法,了解中断服务程序的设计方法,学会实时程序的调试技巧。 2.掌握LED 数码管动态显示程序设计方法。 二、实验原理 1.89C51 单片机有五个中断源(89C52 有六个),分别是外部中断请求0、外部中断请求1、定时器/计数器0 溢出中断请求、定时器/计数器0 溢出中断请求及串行口中断请求。每个中断源都对应一个中断请求位,它们设置在特殊功能寄存器TCON 和SCON 中。当中断源请求中断时,相应标志分别由TCON 和SCON 的相应位来锁寄。五个中断源有二个中断优先级,每个中断源可以编程为高优先级或低优先级中断,可以实现二级中断服务程序嵌套。在

同一优先级别中,靠部的查询逻辑来确定响应顺序。不同的中断源有不同的中断矢量地址。 中断的控制用四个特殊功能寄存器IE、IP、TCON (用六位)和SCON(用二位),分别用于控制中断的类型、中断的开/关和各种中断源的优先级别。中断程序由中断控制程序(主程序)和中断服务程序两部分组成: 1)中断控制程序用于实现对中断的控制; 2)中断服务程序用于完成中断源所要求的中断处理的各种操作。 C51 的中断函数必须通过interrupt m 进行修饰。在C51 程序设计中,当函数定义时用了interrupt m 修饰符,系统编译时把对应函数转化为中断函数,自动加上程序头段和尾段,并按MCS-51 系统中断的处理方式自动把它安排在程序存储器中的相应位置。 在该修饰符中,m 的取值为0~31,对应的中断情况如下: 0——外部中断0 1——定时/计数器T0 2——外部中断1 3——定时/计数器T1 4——串行口中断 5——定时/计数器T2 其它值预留。 89C51 单片机设置了两个可编程的16 位定时器T0 和T1,通过编程,可以设定为定时器和外部计数方式。T1 还可以作为其串行口的波特率发生器。

51单片机定时器的使用

1 51单片机定时器/计时器的使用 步骤: 1、 打开中断允许位: 对IE 寄存器进行控制,IE 寄存器各位的信息如下图所示: EA : 为0时关所有中断;为1时开所有中断 ET2:为0时关T2中断;为1时开T2中断,只有8032、8052、8752才有此中断 ES : 为0时关串口中断;为1时开串口中断 ET1:为0时关T1中断;为1时开T1中断 EX1:为0时关1时开 ET0:为0时关T0中断;为1时开T0中断 EX0:为0时关1时开 2、 选择定时器/计时器的工作方式: 定时器TMOD 格式 CPU 在每个机器周期内对T0/T1 检测一次,但只有在前一次检测为1和后一次检测为0时才会使计数器加1。因此,计数器不是由外部时钟负边沿触发,而是在两次检测到负跳变存在时才进行计数的。由于两次检测需要24个时钟脉冲,故T0/T1线上输入的0或1的持续时间不能少于一个机器周期。通常,T0或T1输入线上的计数脉冲频率总小于100kHz 。 方式0:定时器/计时器按13位加1计数,这13位由TH 中的高8位和TL 中的低5位组成,其中TL 中的高3位弃之不用(与MCS-48兼容)。 13位计数器按加1计数器计数,计满为0时能自动向CPU 发出溢出中断请求,但要它再次计数,CPU 必须在其中断服务程序中为它重装初值。 方式1:16位加1计数器,由TH 和TL 组成,在方式1的工作情况和方式0的相同,只是计数器值是方式0的8倍。

2 方式2:计数器被拆成一个8位寄存器TH 和一个8位计数器TL ,CPU 对它们初始化时必须送相同的定时初值。当计数器启动后,TL 按8位加1计数,当它计满回零时,一方面向CPU 发送溢出中断请求,另一方面从TH 中重新获得初值并启动计数。 方式3:T0和T1工作方式不同,TH0和TL0按两个独立的8位计数器工作,T1只能按不需要中断的方式2工作。 在方式3下的TH0和TL0是有区别的:TL0可以设定为定时器/计时器或计数器模式工作,仍由TR0控制,并采用TF0作为溢出中断标志;TH0只能按定时器/计时器模式工作,它借用TR1和TF1来控制并存放溢出中断标志。因此,T1就没有控制位可以用了,故TL1在计满回零时不会产生溢出中断请求的。 显然,T0和T1设定为方式3实际上就相当于设定了3个8位计数器同时工作,其中TH0和TL0为两个由软件重装的8位计数器,TH1和TL1为自动重装的8位计数器,但无溢出中断请求产生。由于TL1工作于无中断请求状态,故用它来作为串口可变波特 3、 为计数器赋值 计数器初值计算 TC =M ?C TC :计数器初值,M :计数器模值(2k ),C :把计数器计满的计数值 定时器初值计算 T =(M ?TC )T 计数 或 TC =M ?T/T 计数 M :模值,T 计数:单片机时钟周期T CLK (ΦCLK 的倒数)的12倍;TC 为定时器的定时初值,T 为欲定时的时间。 TC =M ?T ×ΦCLK /12 M :模值,ΦCLK :单片机时钟周期ΦCLK ;TC 为定时器的定时初值,T 为欲定时的时间。 例如:单片机主脉冲频率ΦCLK 为12MHz ,最大定时时间为: 方式0时 T MAX = 213×1us = 8.192ms 方式1时 T MAX = 216×1us = 65.536ms 方式2和方式3 T MAX = 28×1us = 0.256ms 4TR0:为0时,停T0计数;为1时,启T0计数

基于51单片机的多功能定时器

摘要 本设计要求以单片机为核心主体,完成最小系统板的设计与制作(通过Protel 软件,对电路进行设计,调试。生成PCB板,再对元器件进行排布,焊接。)之后要进行初调试,证实电路板无误后才能进行下面的内容。电路板完成后,在总程序基础上通过编程设计家用多路定时控制器。本课程设计目标:具有正常数字钟功能,包括时间校正,具有至少三路定时开关控制功能,每路定时时间可以任意设置。但重要的是要有一定的创新,因为此系统还有很多值得开发的功能,单纯的三路定时只是设计内容的基本要求。 关键词:Protel,单片机,MCS-51

目录 摘要........................................................................................................ - 1 - 引言........................................................................................................ - 2 - 1 绪论.................................................................................................... - 2 - 1.1系统背景 (1) 1.1.1单片机技术及其发展特点 (1) 1.1.2单片机在电子技术中的应用 (3) 1.1.3课程设计的内容与任务 (4) 2 系统电路设计 (5) 2.1 系统总体设计框架结构 (5) 2.2 系统硬件单元电路设计 (6) 2.2.1 时钟电路设计 (6) 2.2.2 复位电路设计 (6) 2. 2.3 按键电路设计 (7) 2.3数码管电路设计 (8) 2.3.1、数码管的分类 (8) 2.3.2、数码管的驱动方式 (8) 2.3 系统硬件总电路 (14) 3 系统软件设计 (10) 3.1 系统软件流程图 (10) 4 实验结果和分析 (11) 4.1 实验使用的仪器设备 (11) 4.2 测试结果分析 (11) 结论 (12) 参考文献 (13) 附录 (13) 系统程序设计 (15) Abstract (25) 致谢 (25)

MCS-51单片机计数器定时器

80C51单片机内部设有两个16位的可编程定时器/计数器。可编程的意思是指其功能(如工作方式、定时时间、量程、启动方式等)均可由指令来确定和改变。在定时器/计数器中除了有两个16位的计数器之外,还有两个特殊功能寄存器(控制寄存器和方式寄存器)。 : 从上面定时器/计数器的结构图中我们可以看出,16位的定时/计数器分别由两个8位专用寄存器组成,即:T0由TH0和TL0构成;T1由TH1和TL1构成。其访问地址依次为8AH-8DH。每个寄存器均可单独访问。这些寄存器是用于存放定时或计数初值的。此外,其内部还有一个8位的定时器方式寄存器TMOD和一个8位的定时控制寄存器TCON。这些寄存器之间是通过内部总线和控制逻辑电路连接起来的。TMOD主要是用于选定定时器的工作方式;TCON主要是用于控制定时器的启动停止,此外TCON还可以保存T0、T1的溢出和中断标志。当定时器工作在计数方式时,外部事件通过引脚T0(P3.4)和T1 (P3.5)输入。 定时计数器的原理: 16位的定时器/计数器实质上就是一个加1计数器,其控制电路受软件控制、切换。 当定时器/计数器为定时工作方式时,计数器的加1信号由振荡器的12分频信号产生,即每过一个机器周期,计数器加1,直至计满溢出为止。显然,定时器的定时时间与系统的振荡频率有关。因一个机器周期等于12个振荡周期,所以计数频率fcount=1/12osc。如果晶振为12MHz,则计数周期为: T=1/(12×106)Hz×1/12=1μs 这是最短的定时周期。若要延长定时时间,则需要改变定时器的初值,并要适当选择定时器的长 度(如8位、13位、16位等)。 当定时器/计数器为计数工作方式时,通过引脚T0和T1对外部信号计数,外部脉冲的下降沿将触发计数。计数器在每个机器周期的S5P2期间采样引脚输入电平。若一个机器周期采样值为1,下一个机器周期采样值为0,则计数器加1。此后的机器周期S3P1期间,新的计数值装入计数器。所以检测一个由1至0的跳变需要两个机器周期,故外部事年的最高计数频率为振荡频率的1/24。例如,如果选用12MHz 晶振,则最高计数频率为0.5MHz。虽然对外部输入信号的占空比无特殊要求,但为了确保某给定电平在变化前至少被采样一次,外部计数脉冲的高电平与低电平保持时间均需在一个机器周期以上。

基于单片机实现的定时器设计

第一章单片机的简介 一个8位的80c51微处理器,片内256字节数据存储器RAM/SFR,用以存放可以读写的数据,如运算的中间结果,最终结果以及欲显示的数据;片内4kb程序存储器Flash ROM,用以存放程序,一些原始数据和表格;4个8位并行I/O 口P0~P3,每个端口既可用作输入,也可用作输出;两个16位的定时器/计数器,每个定时器/计数器都可设置成计数方式,用以对外部事件进行计数,也可设置成定时方式,并可以根据计数或者定时的结果实现计算机控制;具有5个中断源,两个中断优先级的中断控制系统;一个全双工UART(通用异步接受发送器)的串行I/O口,用于实现单片机之间或者单片机与PC机之间的串行通信;片内振荡器和时钟产生电路,但石英晶体和微调电容需要外接,最高允许震荡频率为24MHz;89c51与80c51相比具有节电工作方式,即休闲方式及掉电方式。 1.1中央处理器(CPU): CPU是单片机内部的核心部件,是一个8位二进制数的中央处理单元,主要由运算器、控制器和寄存器阵列构成。 1.1.1 运算器: 运算器用来完成算术运算和逻辑运算功能,它是 89C51内部处理各种信息的主要部件。运算器主要由算术逻辑单元(ALU)、累加器(ACC)、暂存寄存器(TMP1、TMP2)和状态寄存器(PSW)组成。算术逻辑单元(ALU): 89C51中的ALU由加法器和一个布尔处理器组成。

累加器(ACC):用来存放参与算术运算和逻辑运算的一个操作数或运算的结果。暂存寄存器(TMP1、TMP2):用来存放参与算术运算和逻辑运算的另一个操作数,它对用户不开放。 状态寄存器(PSW):PSW是一个8位标志寄存器,用来存放ALU操作结果的有关状态。 1.1.2控制器: 控制器是单片机内部按一定时序协调工作的控制核心,是分析和执行指令的部件。控制器主要由程序计数器PC、指令寄存器IR、指令译码器ID和定时控制逻辑电路等构成。程序计数器PC是专门用于存放现行指令的16位地址的。CPU 就是根据PC中的地址到ROM中去读取程序指令码和数据,并送给指令寄存器IR 进行分析。指令寄存器IR用于存放CPU根据PC地址从ROM中读出的指令操作码。指令译码器ID是用于分析指令操作的部件,指令操作码经译码后产生相应于某一特定操作的信号。定时控制逻辑中定时部件用来产生脉冲序列和多种节拍脉冲。1.1.3寄存器阵列: 寄存器阵列是单片机内部的临时存储单元或固定用途单元,包括通用寄存器组和专用寄存器组。通用寄存器组用来存放过渡性的数据和地址,提高CPU的运行速度。 专用寄存器组主要用来指示当前要执行指令的内存地址,存放特定的操作数,指示指令运行的状态等。 1.1.4存储器: 89C51单片机内部有256个字节的RAM数据存储器和4KB的闪存程序存储器

51单片机定时器初值的计算

51单片机定时器初值的计算 一。10MS定时器初值的计算: 1.晶振12M 12MHz除12为1MHz,也就是说一秒=1000000次机器周期。10ms=10000次机器周期。 65536-10000=55536(d8f0) TH0=0xd8,TL0=0xf0 2.晶振11.0592M 11.0592MHz除12为921600Hz,就是一秒921600次机器周期,10ms=9216次机器周期。 65536-9216=56320(dc00) TH0=0xdc,TL0=0x00 二。50MS定时器初值的计算: 1.晶振12M 12MHz除12为1MHz,也就是说一秒=1000000次机器周期。50ms=50000次机器周期。 65536-50000=15536(3cb0) TH0=0x3c,TL0=0xb0 2.晶振11.0592M 11.0592MHz除12为921600Hz,就是一秒921600次机器周期,50ms=46080次机器周期。 65536-46080=19456(4c00) 三。使用说明 以12M晶振为例:每秒钟可以执行1000000次机器周期个机器周期。而T 每次溢出 最多65536 个机器周期。我们尽量应该让溢出中断的次数最少(如50ms),这样对主程序的干扰也就最小。开发的时候可能会根据需要更换不同频率的晶振(比如c51单片机,用11.0592M的晶振,很适合产生串口时钟,而12M晶振很方便计算定时器的时间),使用插接式比较方便。 对12MHz 1个机器周期 1us 12/fosc = 1us 方式0 13位定时器最大时间间隔 = 2^13 = 8.192ms 方式1 16位定时器最大时间间隔 = 2^16 = 65.536ms 方式2 8位定时器最大时间间隔 = 2^8 = 0.256ms =256 us 定时5ms, 计算计时器初值 M = 2^K-X*Fosc/12 12MHz 方式0 : K=13,X=5ms,Fosc=12MHz 则 M = 2^13 - 5*10^(-3)*12*10^6/12= 3192 = 0x0C78 THx = 0CH,TLx = 78H, 方式1: K=16,X=5ms,Fosc=12MHz 则 M = 2^16 - 5*10^(-3)*12*10^6/12= 60536 = 0xEC78

基于51单片机内部定时器的简易闹钟课程设计论文

基于51单片机内部定时器的简易闹钟 摘要 现代社会电子闹钟已广泛用于各种私人和公众场合,成为我们生活、工作和学习中不可缺少的好帮手,因此研究实用性更强的电子闹钟具有十分重要的意义。本设计是基于单片机的电子钟设计,不仅具有时分秒的显示功能,还具有双闹铃和倒计时的功能,实用性非常强。电子钟的计时部分采用AT89S52单片机内部定时器实现,而显示功能是采用液晶模块LCD1602来实现,该电子闹钟可以让使用者通过按键来轻松选择的功能菜单和调节时间,具有非常良好地人机界面。 关键词:电子闹钟;倒计时;AT89S52;液晶LCD1602;按键 Abstract In modern society, the electronic alarm clock has been widely used in various occasions and become indispensable to life.It is a good helper to our work and learning. So,there is very important significance to research more practical electronic alarm clock.This design is based on single chip microcomputer,It has display function of hours,minutes and seconds,dual alarm and countdown.The internal timer of AT89S52 achieve the part of time.The liquid crystal LCD1602 achieve the part of display.The users can use the push-buttons to choice the menu of functions and adjust the time.The man-machine interface is very good. Key words: electronic alarm; countdown; AT89S52; liquid crystal LCD1602; button

51单片机实现数码管99秒倒计时

51单片机实现数码管99秒倒计时,其实很简单,就是使用定时器中断来实现。 目的就是学习怎样用单片机实现倒计时,从而实现一些延时控制类的东西,99秒只是一个例子,你完全可以做出任意倒计时如10秒倒计时程序。 定时器定时时间计算公式:初值X=M(最大计时)-计数值。 初值,换算成十六进制,高位给TH0,低位给TL0,如果用定时器0的话。 M(最大计时)如果是16位的,就是2的16次方,最大定时,65535 微秒,实现1秒定时,可以通过定时10毫秒,然后100次改变一次秒值即可。10*100毫秒=1S 计数值:你要定时多长时间,如果定时1毫秒,就是1000微秒,(单位为微秒),如果定时10毫秒,就是10000(微秒),当然,最大定时被定时器本身位数限制了,最大2的16次方(16位定时计数器),只能定时65.535毫秒。定时1S当然不可能1S定时器中断。 下面为实现99秒倒计时C语言源程序 /*了解定时器,这样的话,就可以做一些基本的实验了,如定时炸弹~~,10秒后打开关闭继电器*/ /*数码管,12M晶振*/ #include #define uchar unsigned char sbit p11=P1^1; //连的是继电器。。 code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar shiwei; uchar gewei; void delay(unsigned int cnt) { while(--cnt); } void main() { TMOD|=0x01; /*定时器0 16位定时器X=65535-10000(10毫秒)=55535=D8F0(十六进制)定时10ms */ TH0=0xd8; TL0=0xf0; IE=0x82; //这里是中断优先级控制EA=1(开总中断),ET0=1(定时器0允许中断),这里用定时器0来定时

单片机定时器实验

实验三单片机内部定时器应用 实验目的 1、理解单片机内部定时器的工作原理及使用方法 2、了解单片机定时中断程序的编写和调试方法 3、掌握定时器的基本使用方法 实验仪器 单片机开发板、万利仿真机、稳压电源、计算机 实验原理 1、单片机定时器的工原理 MCS-51 单片机内部有两个16 位可编程的定时器/计数器T0 和T1。它们即可用作定时器方式,又可用作计数器方式。其中T0 由TH0 和TL0 计数器构成;T1 由TH1 和TL1 计数器构成。 工作于定时器方式时,通过对机器周期(新型51单片机可以对振荡周期计数)的计数,即每一个机器周期定时器加1,来实现定时。故系统晶振频率直接影响定时时间。如果晶振频率为12MHZ,则定时器每隔(1/12MHZ)×12=1us 加1。 工作于计数器方式时,对或管脚的负跳变(1→0)计数。它在每个机器周期的S5P2 时采样外部输入,当采样值在这个机器周期为高,在下一个机器周期为低时,计数器加1。因此需要两个机器周期来识别一个有效跳变,故最高计数频率为晶振频率的1/24。 特殊功能寄存器TMOD 用于定时器/计数器的方式控制。高4 位用于设置T1,低4 位用于设置T0。如图4-7所示。 图4-7 定时器模式控制字格式

TCON 寄存器用于定时器的计数控制和中断标志。如图4-8所示。 图4-8 定时控制寄存器数据格式 编写程序控制这两个寄存器就可以控制定时器的运行方式。 单片机内部定时器/计数器的使用,简而概之:(1)如需用中断,则将EA 和相关中断控制位置1;(2)根据需要设置工作方式,即对TMOD 设置;(3)然后启动计数,即对TR0或TR1置1。(4)如使用中断,则计数溢出后硬件会自动转入中断入口地址;如使用查询,则必须对溢出中断标志位TF0或TF1进行判断。 2、 用定时器编写一个秒计时器 假设系统使用的晶振频率为12MH Z ,即每个机器周期为1us 。如使用方式1,则定时时间最长是216 ×1us=65536us=,小于1s 。故必须设置一个软件计数单元,即假设定时器定时中断时间为50ms ,则必须定时中断20次才达到1s 并对秒计时单元加1,20即为软件计数次数。最后再把秒计时单元的值转成显示数码送显示缓冲区。 图4-9 定时器应用程序流程图

51单片机定时器使用

51单片机定时器使用——小灯闪烁一、定时器工作方式设置TMOD=0x01 GATE =0 由TR=1控制开始计时; C/ T=0 作为定时时器使用; M1=0\M0=1 用作16位定时器 二、计数寄存器TH0\TL0初始值计算如定时0.02秒 普通51单片机12T模式: (一)手工计算例如晶振为10.6850MHZ 定时20毫秒 X/10.6850*1000000*12=20毫秒 X=17808 原始值T0=Y Y+17808=65536 Y=47728 利用科学计算器进行16进制转换为0Xb800 TH0=0x80 TL0=0x00 (二)单片机公式计算 TL0=T1MS;//初始化定时的计数初值(第8位),高8位丢失 (三)启动定时器(TR0=1),判断是否溢出(If(TF0==1){//}),时间到。 (四)闪烁的小灯代码 #include //P1 0脚接LED小灯 sbit led=P1^0;

//定义延时函数,循环cs次,时间长为20*cs毫秒 void delay20(unsigned int cs) { unsigned int shuL=0; TMOD=0x01; //初始值根据单片机时钟频率计算 TH0=0xB8; TL0=0x00; //启动定时器 TR0=1; while(shuL<=cs) { if(TF0==1) //查询是否溢出,溢出后复位溢出标志,赋初始值,循环计数加。{TF0=0; TH0=0xBA; TL0=0x70; shuL=shuL+1; } } } void main()

{ delay20(500); //小灯取反,亮500*20毫秒,即10秒; led=~led; delay20(500); }

基于单片机家用定时器设计

吉首大学 《单片机技术》课程设计报告项目名称:家用多功能定时器设计与制作专业年级:物理机电工程工程2012级 学号: 20124052023 学生姓名:刘锐 指导教师:陈善荣 报告完成日期2015 年7 月 1 日 评阅结果评阅教师

第一章绪论 (1) 1.1 系统背景 (1) 1.1.1 单片机的电子技术 (1) 1.1.2 定时器介绍 (1) 1.2 设计要求 (2) 第二章系统电路设计 (2) 2.1 设计框架介绍 (2) 2.2 系统硬件单元电路设计 (2) 2.2.1 复位电路设计 (2) 2.2.2 时钟电路设计 (3) 2.2.3 按键电路设计 (4) 2.3 系统硬件总电路 (4) 第三章系统软件设计 (5) 3.1 系统软件流程图 (5) 3.2 系统程序设计 (5) 3.2.1 主程序 (5) 3.2.2 中断程序 (12) 第四章实验结果和分析 (13) 4.1 实验使用的仪器设备 (13) 4.2测试结果分析 (13) 结束语 (13) 参考文献 (14)

第一章绪论 1.1 系统背景 1.1.1 单片机的电子技术 单片机是将CPU、RAM\ROM\定时器/计数器以及输入输出(I/O)接口等计算机的主要部件集成在一块的集成电路芯片,作为微机系统它还可以实现模/数转换、脉宽调制、计数器捕获/比较逻辑、高速I/O口和WDT各种控制功能。 通过在MCS-51系列的单片机中增设了全双工串行口I/O、片内数据存储器采用寻址范围为256kb的8位地址、均有四种工作方式的2个16位的定时/计数器、增加了中断系统、增设了颇具特色的布尔处理机、让单片机具有较强的指令寻址和运算功能这些技术,使单片机拥有了完善的外部并行总线(AB、DB、CB)具有多机识别功能的串行通信接口,规范了功能单元的特殊功能寄存器控制模式及适应控制器特点的布尔处理系统和指令系统,位发展具有良好兼容性的新一代单片机奠定了良好的基础。 单片机被广泛地应用在各种领域。例如用来作家用电器中如洗衣机、电冰箱、微波炉、电饭煲、电视机、录像机以及其他视频音像设备的控制器;在办公室中用作大量通信、信息的承载体,比如磁盘驱动、打印机、复印机、电话等;它还可以来构成电子秤、收款机、仓储安全检测系统、空气调节系统等冷冻保鲜系统等的专用系统;在工业中,像工业过程控制、过程监制以及机电一体化控制等系统都是以单片机为核心火多网络系统;它还可以构成一些智能仪表与集成智能传感器传统的控制电路,实现一些像存储、数据处理、查找、判断、联网和语音功能等智能化功能,还可以构成一些电子系统中的集中显示系统、动力检测控制系统、自动驾驶系统、通信系统以及运行监视器等的冗余网络系统。 1.1.2 定时器介绍 人类最早使用的定时工具是沙漏或水漏,但在钟表诞生发展成熟之后,人们开始尝试使用这种全新的计时工具来改进定时器,达到准确控制时间的目的。 1876年,英国外科医生索加取得一项定时装置的专利,用来控制煤气街灯的开关。它利用机械钟带动开关来控制煤气阀门。

AT89C51单片机定时器中断模式和查询设置

AT89C51单片机定时器终端模式和查询设置 T1为定时模式,定时65.536ms,P2.0对应的LED等闪烁一次,T0计数模式,计数脉冲从P3.4脚用按键输入,按一次,记一次,所以计数初值为0FFFFh,没按一次,产生一个溢出,P2.5对应的LED闪烁,同时数码管加1显示。 一、定时/计数器终端模式 org 0000h ljmp bb ;跳转到主程序入口bb处 org 000bh ;定时器0中断响应从这里开始执行 cjne r2,#9d,xx mov r2,#00h ljmp xx11 org 001bh ;定时器1中断响应从这里开始执行 ljmp xxx bb: mov p1,#3fh ;主程序入口处 mov tmod,#05h ;05h=0000 0101B设置T1定时T0计数模式,0定时,1计数 ;00是13位二进制计数模式0,高4位控制T1 ;01是16位二进制计数模式1,低4位控制T0 mov dptr,#0300h ;查表入口地址存放 mov r2,#00h

setb et0 ;和setb 0afh效果相同 setb ea ;和setb 0abh相同 setb et1 ;和setb 0a9h相同 setb tr0 setb tr1 mov th0,#0ffh ;计数器0的计数初值的高8位 mov tl0,#0fdh ;计数器0的计数初值的低8位(第一次开始计数初值) sjmp $ ;程序执行时,原地踏步等待语句,在没有中断请求时, ;在此位置原地踏步计数定时计数,有请求时跳到中断入口执行中断xx: inc r2 xx11: mov th0,#0ffh ;计数器0的计数初值的高8位 mov tl0,#0fdh ;计数器0的计数初值的低8位(第二次以后开始计数初值) mov a,r2 movc a,@a+dptr cpl p2.5 mov p1,a reti xxx: mov th1,#00h ;计数器1的计数初值的高8位 mov tl1,#00h ;计数器1的计数初值的低8位 cpl p2.0 reti org 0300h ;七段显示吗表格入口 db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh end 二、定时/计数器查询模式 org 0000h ljmp bb ;跳转到主程序入口bb处 bb: mov tmod,#15h ;主程序入口处 ;设置T1定时模式,工作在计数方式0,设置T0计数模 ;式工作在计数方式1 mov dptr,#0300h ;查表入口地址存放 clr et0 ;关定时/计数器0中断 setb ea ;和setb 0abh相同,开总中断开关 setb et1 ;和setb 0a9h相同,开定时/计数器1中断 setb tr0 setb tr1 mov th0,#0ffh ;计数器0的计数初值的高8位 mov tl0,#0ffh ;计数器0的计数初值的低8位(第一次开始计数初值) CX: JBC TF0, xx ;查询定时/计数器0溢出标志位,有溢出跳转xx执行 JBC TF1, xxx ;查询定时/计数器1溢出标志位,有溢出跳转xxx执行 sjmp CX ;无溢出,跳CX继续查询 ;溢出是在THi和TLi计数满,超过FFFFH时,TFi被自动置1,中断和查询都是根 ;据这个标志是否为1来响应的。 xx: mov th0,#0ffh ;计数器0的计数初值的高8位 mov tl0,#0ffh ;计数器0的计数初值的低8位(第二次以后开始计数初值) cjne r2,#10d,xx11 mov r2,#00h

51单片机定时器设置

51单片机定时器设置入门(STC89C52RC) STC单片机定时器设置 STC单片机定时器的使用可以说非常简单,只要掌握原理,有一点的C语言基础就行了。要点有以下几个: 1. 一定要知道英文缩写的原形,这样寄存器的名字就不用记了。 理解是最好的记忆方法。好的教材一定会给出所有英文缩写的原形。 2. 尽量用形像的方法记忆 比如TCON和TMOD两个寄存器各位上的功能,教程一般有个图表,你就在学习中不断回忆那个图表的形像 TMOD:定时器/计数器模式控制寄存器(TIMER/COUNTER MODE CONTROL REGISTER) 定时器/计数器模式控制寄存器TMOD是一个逐位定义的8位寄存器,但只能使用字节寻址,其字节地址为89H。 其格式为: 其中低四位定义定时器/计数器C/T0,高四位定义定时器/计数器C/T1,各位的说明: GA TE——门控制。 GA TE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。 当INT0引脚为高电平时TR0置位,启动定时器T0; 当INT1引脚为高电平时TR1置位,启动定时器T1。 GA TE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。 C/T——功能选择位 C/T=0时为定时功能,C/T=1时为计数功能。 置位时选择计数功能,清零时选择定时功能。

M0、M1——方式选择功能 由于有2位,因此有4种工作方式: M1M0 工作方式计数器模式TMOD(设置定时器模式) 0 0 方式0 13位计数器TMOD=0x00 0 1 方式1 16位计数器TMOD=0x01 1 0 方式 2 自动重装8位计数器TMOD=0x02 1 1 方式3 T0分为2个8位独立计数器,T1为无中断重装8位计数器TMOD=0x03 单片机定时器0设置为工作方式1为TMOD=0x01 这里我们一定要知道,TMOD的T是TIMER/COUNTER的意思,MOD是MODE的意思。至于每位上的功能,你只要记住图表,并知道每个英文缩写的原型就可以了。 在程序中用到TMOD时,先立即回忆图表,并根据缩写的单词原形理出每位的意义,如果意义不是很清楚,就查下手册,几次下来,TMOD的图表就已经在脑子里了。 8位GA TE位,本身是门的意思。 7位C/T Counter/Timer 6位M1 Mode 1 5位M0 Mode 0 TCON: 定时器/计数器控制寄存器(TIMER/COUNTER CONTROL REGISTER) TMOD分成2段,TCON控制更加精细,分成四段,在本文中只要用到高四段。 TF0(TF1)——计数溢出标志位,当计数器计数溢出时,该位置1。 TR0(TR1)——定时器运行控制位 当TR0(TR1)=0 停止定时器/计数器工作 当TR0(TR1)=1 启动定时器/计数器工作 IE0(IE1)——外中断请求标志位 当CPU采样到P3.2(P3.3)出现有效中断请求时,此位由硬件置1。在中断响应完成后转向中断服务时,再由硬件自动清0。 IT0(IT1)——外中断请求信号方式控制位 当IT0(IT1)=1 脉冲方式(后沿负跳有效) 当IT0(IT1)=0 电平方式(低电平有效)此位由软件置1或清0。 TF0(TF1)——计数溢出标志位

基于单片机的定时器设计说明

电气信息学院 课程设计任务书 课题名称基于单片机的定时器设计 姓名Front 专业班级学号 校指导老师企业指导老师 课程设计时间2017年3月6日-2017年3月17日(3、4周) 教研室意见意见:审核人: 一、设计任务及要求 1、设计任务: 以单片机为核心设计一个音乐提示定时器,具备倒数计时、时间修改、音乐演奏等功能。可作为微电脑倒数计数器,做一小段时间计时,放在家中使用,例如煮泡面、煮开水或小睡片刻等;用于全自动洗衣机洗涤完毕音乐提示定时器。设计4个按键设置现在想要倒数的时间:K1--可调整倒数时间为1-60分钟;K2—设置倒数计时时间为5分钟,显示为“05”;K3—设置倒数计时时间为20分钟,显示为“20”;K4—设置倒数计时时间为60分钟,显示为“60”;一旦按键后则开始倒计时,当计时为0则演奏一曲音乐;定倒数计时时间为5分钟,显示为05。 2、设计要求: 1)设计方案要合理、正确; 2)系统硬件设计; 3)系统软件设计及调试; 4)系统联调; 5)写出设计报告。 二、进度安排 第一周: 周一:集中布置课程设计任务和相关事宜,查资料确定系统总体方案。

周二~周三:完成硬件设计和电路连接 周四~周日:完成软件设计 第二周: 周一~周三:程序调试 周四~周五:设计报告撰写。周五进行答辩和设计结果检查。 三、参考文献 1)《微型计算机原理及应用》许立梓编机械工业 2002 2)《微型计算机接口技术及应用》乐善编华中理工大学 2000 3)《计算机硬件技术基础试验教程》邹逢兴编高等教育 2000 4)《16位微型计算机原理接口及其应用》周佩玲编中国科学技术大学2000 5)《微型计算机原理与接口技术》吴秀清编中国科学技术 2001 6)《微型计算机接口技术》邓亚平编清华大学 2001 7)《单片机原理及及应用》王迎旭编机械工业 2001 8)《单片机应用程序设计技术》周航慈著北京航空航天大学 2002 9)《单片机实用技术问答》谢宜仁主编人民邮电 2002

基于51单片机控制的简易时钟(内部定时器)

若需要仿真图+程序(Q:409975690)附程序:#include #define uint unsigned int #define uchar unsigned char uchar n,fen,miao,shi,ri ,yue; uint a; sbit lcden=P2^1; sbit lcdrs=P2^0; sbit k1=P1^0; sbit k2=P1^2; sbit k3=P1^5; sbit k4=P1^6; sbit k5=P1^7; void keyscan(); void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void write_comd(uchar com) { lcdrs=0; P0=com; delay(5); lcden=1; delay(5); lcden=0;

void write_date (uchar date) { lcdrs=1; P0=date; delay(5); lcden=1; delay(5); lcden=0; } void start() { write_comd(0x38); write_comd(0x0c); write_comd(0x06); write_comd(0x01); } void write_sfm() { write_comd(0x80+0x44); write_date(0x30+shi/10); write_comd(0x80+0x45); write_date(0x30+shi%10); write_comd(0x80+0x46); write_date(0x3A); write_comd(0x80+0x47); write_date(0x30+fen/10); write_comd(0x80+0x48); write_date(0x30+fen%10); write_comd(0x80+0x49); write_date(0x3A); write_comd(0x80+0x4a); write_date(0x30+miao/10); write_comd(0x80+0x4b); write_date(0x30+miao%10); } void write_nyr() { write_comd(0x80); write_date('M'); write_comd(0x80+0x01); write_date('T'); write_comd(0x80+0x02); write_date('Z');

基于单片机的9h定时器课程设计

沈阳工业大学 课程设计 课程:单片机原理及应用 题目:基于单片机的长定时器设计(0-9h)专业班级: 通信工程1003班 学号: 100404315 学生姓名: 吴开来 指导教师: 唐云雷 完成时间: 2013年6月25日

目录 第1章绪论 (2) 第2章设计内容 (3) 第3章 MCS-51单片机系统简介 (4) 第4章课程设计原理 (6) 第5章课程设计代码 (8) 第6章仿真与编译 (16) 第7章设计总结 (18) 参考文献: (20) 附录: (20)

基于LED的数字时钟设计 摘要:近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。 关键字:单片机时钟设计 MC51 第1章绪论 单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快、单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性

的一种。这次课程设计通过对它的学习、应用,以AT89C51芯片为核心,加以辅助电路,设计了一个简易的长定时器,它是在设计数字时钟的基础上,由直流电源供电,通过数码管能够准确显示时间。 数字时钟是现代社会应用广泛的计时工具,在航天、电子等科研单位,工厂、医院、学校等企事业单位,各种体育赛事及我们每个人的日常生活中都发挥着重要的作用。本系统是基于AT89C51单片机设计的一个具有四位数码管显示的数字时实时钟,该系统同时具有硬件设计简单、工作稳定性高、价格低廉等优点。数字单片机的技术进步反映在内部结构、功率消耗、外部电压等级以及制造工艺上。在这几方面,较为典型地说明了数字单片机的水平。在目前,用户对单片机的需要越来越多,但是,要求也越来越高。下面分别就这几个方面说明单片机的技术进步状况。 第2章设计内容 利用单片机的定时/计数器,中断系统,以及键盘和LED显示器进行设计。在数码管显示器上实现电子时钟,显示格式为00-00-00,实现从0-9h的长时

基于定时器的51单片机时钟程序

基于定时器的51单片机时钟程序51单片机时钟程序,基于定时器写出,同时还有定时、日历、键盘调节功能#include #include sbit dula=P2^6; sbit wela=P2^7; sbit key1=P3^4; sbit key2=P3^5; sbit luis=P3^6; sbit key4=P3^7; #define uint unsigned int #define uchar unsigned char uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar code table2[]={ 0xbf,0x86,0xdb,0xcf, 0xe6,0xed,0xfd,0x87, 0xff,0xef}; uchar a,b,d,shis,ges, shif,gef,shim,gem,shi, fen,miao,shiy,gey,shir, ger,yue,ri; void display1(uchar,uchar, uchar,uchar,uchar,uchar); void display2(uchar,uchar, uchar,uchar); void init(); void keyscan1(); void keyscan2(); void delay(uint z) { uint x,y; for(x=z;x>0;x--)

for(y=110;y>0;y--); } void main() { init(); a=0; miao=0; shi=0; fen=0; yue=1; ri=1; while(1) { if(luis==1) { display1(shis,ges,shif,gef,shim,gem); keyscan1(); } else { display2(shiy,gey,shir,ger); keyscan2(); } } }

相关文档
最新文档