定时/计数器应用1
本题要求:AT89C51单片机扩展16KB外部程序存储器,目代码存放于外部存储器中,P1.0口接一个发光二极管,编写程序,控制发光二极管闪烁,时间间隔1s,采用AT89C51内部定时器计时。
基础知识:关于内部计数器的编程,主要是定时常数的设置和有关控制寄存器的设置。内部计数器在单片机中主要有定时器和计数器两个功能。本题目使用的是定时器,定时1s。CPU运行定时中断方式,实现每1s输出状态发生一次反转,即发光管每隔1s亮一次。
定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。TMOD 用于设置定时器/计数器的工作方式0~3,并确定用于定时还是计数。TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。
内部计数器用作定时器时,是对机器周期计数。每个机器周期的长度是12个振荡器振荡周期。本题中单片机晶振采用12MHz,定时/计数器工作于方式2(8位自动重装方式)定时器,定时器100微妙中断一次,所以定时常数的设置可按以下方法计算:
机器周期=12/12MHz=1μs
(256?定时常数)×1μs=100μs
定时常数=156。然后对100微妙中断次数计数10000次,就是1s。
在本题的中断处理程序中,因为中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完成之后再打开相应的中断。
在Proteus ISIS编辑环境中按表1所列的元件清单添加元件,并在Proteus ISIS 的编辑区域中按图1所示的原理图连接硬件电路。
表1 元件清单
元件名称所属类所属子类
AT89C51 Microprocessor ICs 8051 Family
CAP Capacitors Generic
CAP-POL Capacitors Generic
CRYSTAL Miscellaneous
RES Resistors Generic
BUTTON Switches & Relays Switches
LED-YELLOW Optoelectronics LEDs
NOT Simulator Primitives Gates
图1 电路原理图
1、程序流程
主程序
定时器中断服务程序
2、源程序
定时/计数器应用2
本题要求:用AT89C51单片机的定时/计数器T0产生2s的定时时间,每当2s定时到来,更换指示灯闪亮,每个指示灯闪亮的时间为0.2s。即,开始D1指示灯闪亮0.2s,当2s定时到来之后,D2开始闪亮0.2s,如此循环,0.2s的闪亮时间也由定时/计数器T0来完成。扩展32KB外部程序存储器,目代码存放于外部存储器中。
基础知识:AT89C51单片机的内部16位定时/计数器是一个可编程定时/计数器,它既可以工作在13位定时方式,也可以工作在16位定时方式和8位定时方式。只要通过设置特殊功能寄存器TMOD,即可完成。定时/计数器的启动时间也是通过软件设定TCON寄存器来完成的。
本题目中选择16位定时工作方式,对于T0来说,最大定时65536μs,即65.536ms,无法达到所需的2s定时,须通过软件来处理这个问题。若取T0的最大定时为50ms,即要定时1s需经过40次的50ms的定时。对于这40次可以采用软件方法来统计。因此,设定TMOD=00000001B,即TMOD=01H。
要给T0定时/计数器的TH0,TL0装入预置初值,通过下面的公式可以计算
?
TH0=(2 ?50000)256
TL0=(2 ?50000) MOD 256
定时2s,采用16位定时50ms,共定时40次才可达到2s,每50ms产生一次中断,定时的40次数在中断服务程序中完成,同样,对于0.2s的定时,需要4次中断才可达到0.2s。由于每次2s定时完成时,D1~D4要交替闪亮。采用ID 号来识别,当ID=0时,D1闪亮;当ID=1时,D2在闪亮;当ID=2时,D3闪亮;当ID=3时,D4闪亮。
在Proteus ISIS编辑环境中按表1所列的元件清单添加元件,并在Proteus ISIS 的编辑区域中按图1所示的原理图连接硬件电路。
表1 元件清单
元件名称所属类所属子类
AT89C51 Microprocessor ICs 8051 Family
CAP Capacitors Generic
CAP-ELEC Capacitors Generic
CRYSTAL Miscellaneous
RES Resistors Generic LED-YELLOW Optoelectronics LEDs
图1 电路原理图
1、程序流程
2、源程序
定时/计数器应用3
本题要求:用AT89C51单片机的定时/计数器T0产生1s的定时时间,作为秒计数时间,当1s产生时,秒计数加1;秒计数到60时,自动从0开始。扩展32KB外部程序存储器,目代码存放于外部存储器中。
基础知识:AT89C51单片机的内部16位定时/计数器是一个可编程定时/计数器,它既可以工作在13位定时方式,也可以工作在16位定时方式和8位定时方式。只要通过设置特殊功能寄存器TMOD,即可完成。定时/计数器的启动时间也是通过软件设定TCON寄存器来完成的。
本题目中选择16位定时工作方式,对于T0来说,最大定时65536μs,即65.536ms,无法达到所需的1s定时,须通过软件来处理这个问题。若取T0的最大定时为50ms,即要定时1s需经过20次的50ms的定时。对于这20次可以采用软件方法来统计。因此,设定TMOD=00000001B,即TMOD=01H。
要给T0定时/计数器的TH0,TL0装入预置初值,通过下面的公式可以计算
?
TH0=(2 ?50000)256
TL0=(2 ?50000) MOD 256
一、硬件设计
在Proteus ISIS编辑环境中按表3所列的元件清单添加元件,并在Proteus ISIS 的编辑区域中按图3所示的原理图连接硬件电路。
表3 元件清单
元件名称所属类所属子类
AT89C51 Microprocessor ICs 8051 Family
CAP Capacitors Generic
CAP-ELEC Capacitors Generic
CRYSTAL Miscellaneous
RES Resistors Generic 7SEG-COM-CAT-GRN Optoelectronics 7-Segment Displays PULLUP Modelling Primitives Digital [Miscellaneous]
图3 电路原理图
二、程序设计
1、程序流程
2、源程序
PWM输出控制
本题要求:用电位器调节AT89C51的PWM输出占空比,将A/D转换后的数据作为延时常数。当电位器阻值发生变化时,ADC0808输出的值发生相应变化,进而调节单片机输出的PWM占空比。
基础知识:PWM是单片机上常用的模拟量输出方法,通过外接的转换电路,可以将脉冲的占空比变成电压。程序中通过调整占空比来调节输出模拟电压。占空比是指脉冲中高电平与低电平的宽度比。
一、硬件设计
在Proteus ISIS编辑环境,按表1所列的元件清单添加元件。按原理图连接硬件电路(包括晶振和复位电路)
表1 元件清单
元件名称所属类所属子类
AT89C51 Microprocessor ICs 8051 Family
CAP Capacitors Generic
CAP-ELEC Capacitors Generic
CRYSTAL Miscellaneous —
RES Resistors Generic
POT-HG Resistors Variable
ADC0808 Data Converters A/D Converters
二、程序设计 1、程序流程
2、源程序
1、单片机概述
1.1 8051单片机简介
1.2 8051引脚介绍
1.3 8051单片机定时/计数器
2、硬件设计
2.1 8051单片机振荡电路2.2 8051单片机复位电路
2.3 “题目要求的电路设计”
3、软件设计
3.1 程序流程图
3.2 源程序
4、设计结果
4.1 电路原理图
4.2 程序运行结果图
参考文献