用定时器,数码管倒计数30-00秒循环计数数码管,晶振频率6MHz,定时器T1工作方式1

基于单片机的数字频率计的方案
基于单片机的数字频率计的方案
刘竹琴,白泽生
点击上方“蓝色字”可关注我们!限时干货下载:关注我们“单片机”,回复“教程”获取单片机电子书,回复“仿真”获取Proteus仿真资料。持续更新中。。。概述:设计一种以单片机AT89C51为核心的数字频率计,介绍了单片机、数字译码和显示单元的组成及工作原理。测量时,将被测输入信号送给单片机,通过程序控制计数,结果送译码器74- LS145与移位寄存器74LS164,驱动LED数码管显示频率值。通过测量结果对比,分析了测量误差的来源,提出了减小误差应采取的措施。频率计具有电路结构简单、成本低、测量方便、精度较高等特点,适合测量低频信号。关注我们的公众号“单片机”,回复“2003”获取“基于单片机的数字频率计的设计.doc”
在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率计在教学、科研、测量仪器、工业控制等方面都有较广泛的应用。测量频率的方法有多种,其中电子计数测量频率具有精度高、使用方便、测量迅速,以及便于实现测量自动化等优点,是频率测量的重要手段之一。本设计就是用计数的方法,以单片机AT89C51为控制核心,充分利用其软硬件资源,设计并制作了频率计的计数、显示部分。1 测频设计原理
频率计测频原理方框图如图1所示。被测输入信号通过脉冲形成电路进行放大与整形(可由放大器与门电路组成),然后送到单片机入口,单片机计数脉冲的输入个数。计数结果经LED数码管显示,从而得到被测信号频率。2 元器件选择与使用2.1 单片机
选择单片机AT89C51是因为有编程灵活、易调试的特点,而且AT89C51的引脚较多,利于电路的展。它集成了CPU,RAM,ROM,定时器/计数器和多功能I/0口等一台计算机所需的基本功能部件,有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含两个外中断口,两个16位可编程定时计数器,两个全双工串行通信口。其片内集成了4 KB的FLASHPEROM用来存放应用程序,这个FLASH程序存储器除允许一般的编程器离线编程外,还允许在应用系统中实现在线编程,并且还提供了对程序进行三级加密保护的功能。AT89C51的另一个特点是工作速度更高,晶振频率可高达24 MHz,一个机器周期仅为500 ms,比MCS-51系列单片机快了一倍。
其具体使用方法如下:
P1.0口与寄存器74LS164的A,B端口连接,串行输出待显示的数据。
P1.1口接移位寄存器74LS164的CLK(第8引脚),输出时钟信号。
P1.5,P1.6,P1.7口分别与译码器74LS145的A,B,C端口连接,输出位控制信号。
P3.5口(即T1)输入脉冲信号。
XTAL1与XTAL2管脚接两个30 pF电容和12 MHz晶振构成时钟电路。
RST管脚接1 kΩ,10 kΩ电阻,20 μF电容及复位开关构成开关复位电路。2.2 显示译码单元
显示部分采用译码器74LS145与移位寄存器74LS164,主要是考虑了性价比的原因。比如,此处可以采用HARRIS公司推出的ICM7218B共阴极数码管驱动芯片,它集BCD译码器、多路扫描器、段驱动和位驱动于一体。用此驱动可使电路相对简单,显示部分的软件设计也比较简单,但由于其价位相对较高,故采用译码器74LS145与移位寄存器74LS164。2.3 数字显示单元
LED显示器采用动态显示方式。显示时将所有位的段选线相应的并联在一起,由一个8位I/O口控制,形成段选线的多路复用。译码器74LS145是位选部分,移位寄存器74LS164是段选部分。由于各位的段选线并联,段选码的输出对各位来说都是相同的。同一时刻,如果各位选线都处于选通状态的话,六位的LED将显示相同的字符。要各位LDE能够显示出与本位相应的显示字符,就须采用扫描显示方式。
即在同一时刻,只让某一位的位选线处于选通状态,而其他各位的位选线处于关闭状态,同时,段选线上输出相应位要显示字型码,这样同一时刻,六位LED中只有选通的那一位显示出字符,而其他五位则是熄灭的。而在下一刻,只让下一位的位选线处于选通状态,而其他各位的位选线处于关闭状态,在段选线上输出相应位将要显示字符的字符码。
这样循环下去,就可以使各位显示出将要显示的字符,虽然这些字符是在不同时刻出现的,而且同一时刻,只有一位显示,其他各位熄灭,但由于人眼有视觉残留现象,只要每位显示间隔足够短,则可造成多位同时亮的效果。3 硬件设计
电路原理图如图2所示。以单片机AT89C51为核心,由译码器74LS145与移位寄存器74LS164实现串行输出显示,其中74LS164输出段选信号,74LS145输出位选信号。
具体连接方法是将P1.0口与寄存器74LS164的A,B端口连接,P1.1口与移位寄存器74LS164的CLK连接,P1.5,P1.6,P1.7口分别与译码器74LS145的A,B,C端口连接,在P3.5口(即T1)输入脉冲信号。
电路实现的关键是设法取得准确的一秒定时,并让计数器只计数一秒,这样计数结果则为频率值。实现的方法是利用单片机内的16位定时/计数器,用定时器/计数器0作为定时器,实现一秒定时;用定时器/计数器1作为计数器,对输入的脉冲进行计数。当按动开关时,开始定时及计数,时间到停止计数,计数值通过LED显示,得到频率值。再次按动开关又进行定时计数4 软件设计4.1 实现一秒定时
采用12 MHz的晶体振荡器的情况下,一秒的定时已超过了定时器可提供的最大定时值。为了实现一秒的定时,采用定时和计数相结合的方法实现。选用定时/计数器TO作定时器,工作于方式1产生50 ms的定时,再用软件计数方式对它计数20次,就可得到一秒的定时。4.2 计数部分
将定时器/计数器的方式寄存器TMOD,用软件赋初值51H,即B。这时定时器/计数器1采用工作方式1,方式选择位C/T设为1,即设T1为16位计数器。定时器/计数器O采用工作方式1,C/T设为0,即设TO为16位定时器。
计算计数初值:设计数初值为X,本设计采用12 MHz的晶振。机器周期=12×(1/晶振频率)=12×(1/12×10。)一1×10一。,(2M—X)×1×10—0—50×10_。,X一15 536。
所以计数初值为15 536,用十六进制表示为3CBOH。
当定时器/计数器T1设定为计数方式时,其计数脉冲是来源T1端口的外部事件。当T1端口上出现由“1”(高电平)到“0”(低电平)的负跳变脉冲时,计数器则加1计数。计算机是在每个机器周期的S5P2状态时采样T1端口,当前一个机器周期采样为1且后一个机器周期采样为0时,计数器加1计数。计算机需用两个机器周期来识别1次计数,因而最大计数速率为振荡频率的1/24。在采用12 MHz晶振的情况下,单片机最大计数速度为0.5 MHz即500 kHz。
另外,此处对外部事件计数脉冲的占空比(即脉冲的持续宽度)无特殊要求,但必须保证所给出的高电平在其改变之前至少被采样1次,即至少保持1个完整的机器周期。由此可见,从T1口输入脉冲信号,T1可实现对脉冲个数的计数。4.3 程序流程图
计时采用定时T0中断完成,其余状态循环调用显示子程序。主程序流程如图3所示。5 测量结果及误差分析5.1 测量结果
给电路加+5 V电压,输入信号,按动开关,即可得到频率值。将所测频率值与示波器测量结果比较,如表1所示。5.2 误差来源分析
(1)单片机计数速率的限制引起误差。从表l测量数据可以看出被测信号频率越高,测量误差越大,且所测信号频率不能超过480 kHz。这是因为采用的是12 MHz的晶振,单片机最大计数速度为500 kHz,所以当被测信号越接近500 kHz时,测量结果与实际频率的误差就越大。而当被测信号大于500 kHz时,频率计将测不出信号频率。
(2)原理上存在±1误差。由于该设计是在计数门限时间一秒内的频率信号脉冲数,所以定时开始时的第一个脉冲和定时时间到时的最后一个脉冲信号是否被记录,存在随机性。这种误差对测量频率低的信号影响较大。其误差原理示意图如图4所示。
(3)晶振的准确度会影响一秒定时的准确度,从而引起测量结果误差。5.3 减小误差措施
(1)选用频率较高和稳定性好的晶振。如选24 kHz的晶振可使测量范围扩大,稳定性好的晶振可以减小误差。
(2)测量频率低的信号时,可适当调整程序,延长门限时间,减少原理上±1的相对误差。
(3)测量频率较高的信号时,可先对信号进行分频,再进行测量。6 结 语
基于单片机设计的数字频率计具有原理简单、易于调试和测量方便等优点,主要用来测量低频信号的频率。由于其测量范围会受单片机计数速率的限制,其测量量程较小,所以可以从原理上进行改进以提高其测频范围,比如通过增加分频电路,就可实现对高频信号的测量。限时干货下载:关注我们“单片机”,回复“教程”获取单片机电子书,回复“仿真”获取Proteus仿真资料。& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &如何分享到朋友圈点击右上角“...” 三个点,在弹出菜单选择“分享到朋友圈”单片机订阅号微信名:单片机每天更新单片机各种知识,电子制作DIY,及电子行业最新资讯,关注我们,棒棒哒!热门文章推荐回复下面数字或直接点击,获取相关文章:001:《》002:《》003:《》004:《》005:《》006:《》007:《》008:《》009:《》010:《》
刘竹琴,白泽生
微信扫一扫使用小程序
即将打开""小程序您当前的位置:&>&&>&&>&
MCS-51单片机定时器/计数器常见习题解答
1、根据定时器/计数器0方式1逻辑结构图,分析门控位GATE取不同值时,启动定时器的工作过程。
答:当GATE=0:软件启动定时器,即用指令使TCON中的TR0置1即可启动定时器0。
GATE=1:软件和硬件共同启动定时器,即用指令使TCON中的TR0置1时,只有外部中断INT0引脚输入高电平时才能启动定时器0。
2、当定时器/计数器的加1计数器计满溢出时,
溢出标志位TF1由硬件自动置1,简述对该标志位的两种处理方法。
答:一种是以中断方式工作,即TF1置1并申请中断,响应中断后,执行中断服务程序,并由硬件自动使TF1清0;另一种以查询方式工作,即通过查询该位是否为1来判断是否溢出,TF1置1后必须用软件使TF1清0。
3、设fosc=12MHz,要求T0定时150&s,分别计算采用定时方式0、方式1和方式2时的定时初值。
答:方式0的定时初值:IF6AH
方式1的定时初值:FF6AH
方式2的定时初值:6AH
4、&设MCS-51单片机fosc=6MHz,问单片机处于不同的工作方式时,最大定时范围是多少?
答:方式0的最大定时范围:131,072&s
方式1的最大定时范围:16,384&s
方式2的最大定时范围:512&s
5、设MCS-51的单片机晶振为6MHZ,使用T1对外部事件进行计数,每计数200次后,T1转为定时工作方式,定时5ms后,又转为计数方式,如此反复的工作,试编程实现。
bit& F0=0;
void& main()
& TMOD=0x60;&&&&
& TL1=56;&&&&&&&&
& TH1=56;&&&&&&&&&
& TR1=1;&&&&&&&&&
& ET1=1;&&&&&&&&&
=1;&&&&&&&&&
& While(1);
serve() interrupt 3
& if (!F0)
{ & TMOD=0x10;&&&
&& &&& TL1=63036%16;&&&&&&
&&& &&& TH1=63036/16;&&&&&&&&
& & &&& F0=~F0;
TMOD=0x60;&&&&
& & &&& TL1=56;&&&&&&&&
& & &&& TH1=56;&&&&&&&&&
6、 &用方式0设计两个不同频率的方波,P1.0输出频率为200Hz,P1.1输出频率为
100Hz,晶振频率12MHz。
&at89x52.h&
void& main()
TMOD=0x00;&&&&
TL0=0x1c;&&&&&&&&
TH0=0xb1;&&&&&&&&&
F0=0;&&&&&&&
ET0=1;&&&&&&&&&
EA =1;&&&&&&&&&
serve() interrupt 1
TL0=0x1c;&&&&&&&&
TH0=0xb1;&&&&&&&&&
P1_0=~P1_0;
&&& if(F0==0)
P1_1=~P1_1;
7、定时器T0已预置为156,且选定用于方式2的计数方式,现在T0输入周期为1ms的脉冲,问此时T0的实际用途是什么?在什么情况下计数器0溢出?
答:T0的实际用途是定时1s,每隔1s计数器0溢出一次。
8、P1.0输出脉冲宽度调制(PWM)信号,即脉冲频率为2kHz、占空比为7:10的矩形波,晶振频率12MHz。
&at89x52.h&
void& main()
TMOD=0x02;&&&&
TL0=206;&&&&&&&&
TH0=206;&&&&&&&&&
ET0=1;&&&&&&&&&
serve() interrupt 1
if(count&=7)
&&& P1_0=0;
if(count==10)
9、两只开关分别接入P3.0、P3.1,在开关信号4种不同的组合逻辑状态,使P1.0分别输出频率0.5kHz、1kHz、2kHz、4kHz的方波,晶振频率为12MHz。
&at89x52.h&
void& main()
TMOD=0x02;&&&&
TL0=131;&&&&&&&&
TH0=131;&&&&&&&&&
ET0=1;&&&&&&&&&
serve() interrupt 1
if(temp!=sta)
if(sta=0x00)
&&& mag=7;
if(sta=0x01)
&&& mag=3;
if(sta=0x10)
&&& mag=1;
if(sta=0x11)
&&& mag=0;
if(cou==mag)
P1_0=~P1_0;
&&& cou++;
10、MCS-51单片机P1端口上,经驱动器连接有8只发光二极管,若fosc=6MHz,试编写程序,使这8只发光二极管每隔2s循环发光一次(要求T0定时)。
&at89x52.h&
void& main()
TMOD=0x02;&&&&
TL0=16;&&&&&&&&
ET0=1;&&&&&&&&&
serve() interrupt 1
&&& tim++;
&&& if(tim==500)
if(cou==8)
&&& cou=0;
15.设fosc=12MHz。试编写一段程序,对定时器T1初始化,使之工作在模式2,产生200&s定时,并用查询T1溢出标志的方法,控制P1.1输出周期为2ms的方波。
&at89x52.h&
void& main()
TMOD=0x20;&&&&
TL1=56;&&&&&&&&
TH1=56;&&&&&&&&&
while(TF1=1)
P1_1=~P1_1;
11、使用一个定时器,如何通过软、硬件结合的方法,实现较长时间的定时?
答:先使用硬件实现单位时间的定时,通过软件设置计数来实现较长时间的定时。您现在的位置: >> 延好定时器实验报告 >> 定时器实验报告
定时器实验报告
来源: 时间:
【定时器实验报告】定时器实验报告㈠ 实验目的1. 掌握单片机内部计数器的使用和编程方法; 2. 掌握中断处理程序的编程方法。㈡ 实验器材1. 2. 3. 4. 5. G6W 仿真器 MCS―51 实验板 PC 机 电源 示波器 一台 一台 一台 一台 一台㈢ 实验内容及要求1.在使用 12MHz 晶振的条件下,由 8051 内部定时器 1 按方式 1 工作,即 作为 16 位定时器使用, 每 0.05 秒钟 T1 溢出中断一次。P1 口的 P1.0~P1.7 分别接发光二极管的 L1~L8。(用连线连接 J2、J3) 。要求:编写程序模拟一循环彩灯。彩灯变化花样为:①L1、L2、…L8 依 次点亮;②L1、L2、…L8 依次熄灭;③L1、L2、…L8 全亮、全灭。各 时序间隔为 0.5 秒。让发光二极管按以上规律循环显示下去。2.编写一个救护车警笛声程序, 要求高低两种音调交替出现, 交替周期 1~ 1.5S。 ㈣ 实验框图开 始INT_T1 入口置 T1 的工作方式 置初始常数保护现场置定时常数 开中断 是否到 0.5 秒 Y 查 表 主程序框图 显示 N等 待调整表格指针恢复现场中断返回INT_T1 中断程序框图循环彩灯代码ORG 0000H LJMP MAIN ORG 000BH MAINMOV SP,#60H MOV TMOD,#01H MOV 20H,#0AH MOV TL0,#0B0H MOV TH0,#3CH SETB TR1 SETB ET1 SETB EA SJMP $;T0 的中断入口地址;设置 T1 工作于方式一 ;装入中断次数 ;装入计数值低 8 位 ;装入计数值高 8 位 ;启动定时器 T1 ;允许 T1 中断 ;允许 CPU 中断 ;等待中断CAIDENGPUSH PSW PUSH ACC MOV TL0,#0B0H MOV TH0,#3CH JUDGEDJNZ 20H,RETUNT MOV 20H,#0AH HUAYANG1MOV R0,#08H MOV P1,#00H MOV A,#01H LOOP:MOV P1,A LCALL DELAY LCALL DELAY LCALL DELAY RL A DJNZ R0,LOOP;保护现场 ;装入计数值低 8 位 ;装入计数值高 8 位 ;0.5 秒未到,返回 ;重置中断次数 ;花样一 ;设置花样一循环次数NEXT1MOV TL0,#0B0H MOV TH0,#3CH JUDGE1DJNZ 20H,NEXT1 MOV 20H,0AH;装入计数值低 8 位 ;装入计数值高 8 位 ;0.5 秒未到,返回 HUAYANG2MOV R0,#08H MOV P1,#0FFH MOV A,#0FEH LOOP1:MOV P1,A LCALL DELAY LCALL DELAY LCALL DELAY RL A DJNZ R0,LOOP1 NEXT2MOV TL0,#0B0H MOV TH0,#3CH JUDGE2DJNZ 20H,NEXT2 MOV 20H,0AH HUAYANG3MOV P1,#00H LCALL DELAY LCALL DELAY LCALL DELAY MOV P1,#0FFH LCALL DELAY LCALL DELAY LCALL DELAY NEXT3MOV TL0,#0B0H MOV TH0,#3CH JUDGE3DJNZ 20H,NEXT3 MOV 20H,0AH JMP RETUNT DELAYMOV R2,#0FFH DELAY1MOV R1,#0FFH;花样二 ;设置花样二循环次数;装入计数值低 8 位 ;装入计数值高 8 位 ;0.5 秒未到,返回;装入计数值低 8 位 ;装入计数值高 8 位 ;0.5 秒未到,返回;延时子程序 DJNZ R1,$ DJNZ R2,DELAY1 RET RETUNTPOP ACC POP PSW RETI END;中断返回救护车警笛声程序ORG 0000H AJMP ORG AJMP ORG MOV MOV MOV MOV MOV MOV MOV SETB TR1 SETB ET1 SETB EA SJMP $ S1JB MOV MOV CPL DJNZ MOV DJNZ MOV SETB SJMP F0,S2 TH1,#0FCH TL1,#18H P1.0 R1,ENDS R1,#100 R2,ENDS R2,#10 F0 ENDS ;高音部分 MAIN 001BH S1 0040H SP,#70H R1,#100 R2,#10 R3,#20 TMOD,#10H TH1,#0FCH TL1,#18H;T0 的中断入口地址MAIN:;设置 T1 为定时器,工作方式 1 ;装入计数值高 8 位 ;装入计数值低 8 位 ;启动定时器 T1 ;允许 T1 中断 ;允许 CPU 中断 ;等待中断;取反;F0 赋值 S2MOV MOV CPL DJNZ MOV DJNZ MOV CLR ENDSRETI 本次实验主要定时器和计数器还有中断的使用,由于课本上例题详细,所以初始 化赋值之类的基础性问题并没有遇到什么困难,再加上第一次实验 P1 口输出和音乐实验的 铺垫,基本上没有遇到什么太大的问题。TH1,#0FEH TL1,#0CH P1.0 R1,ENDS R1,#100 R3,ENDS R3,#20 F0 ;低音部分
【定时器实验报告】XXXX 大学信息工程与自动化学院学生实验报告( 2009 ―2010 学年 第 二 学期 ) 课程名称开课实验室课程名称:单片机 开课实验室2010 年 5 月 14 日 年级、 专业、 年级、 专业、 学 姓名 成绩 班 号 实验项目名 指导教 定时器实验(十进制计数器) 定时器实验(十进制计数器) 称 师 教 该同学是否了解实验仪器原理 A.了解[ ] B.基本了解[ ] C.不了解[ ] A.强[ ] B.中等[ ] C.差[ ] 师 该同学的实验能力 A.达到[ ] B.基本达到[ ] C.未达到[ ] 评 该同学的实验是否达到要求 A.规范[ ] B.基本规范[ ] C.不规范[ ] 语 实验报告是否规范实验过程是否详细记录 A.详细[ ] B.一般[ ] C.无[ ]签名教师签名年 月 日一.实验目的实验目的掌握定时器 T0、T1 的方式选择和编程方法,了解中断服务程序的设计方法,学会实时 程序的调试技巧。二.实验原理实验原理MCS-51 单片机内设置了两个可编程的 16 位定时器 T0 和 T1, 通过编程, 可以设定为定 时器和外部计数方式。T1 还可以作为其串行口的波特率发生器。定时器 T0 由特殊功能寄存器 TL0 和 TH0 构成,定时器 T1 由 TH1 和 TL1 构成,特殊功 能寄存器 TMOD 控制定时器的工作方式,TCON 控制其运行。定时器的中断由中断允许寄存器 IE,中断优先权寄存器 IP 中的相应位进行控制。定时器 T0 的中断入口地址为 000BH,T1 的中断入口地址为 001BH。定时器的编程包括1) 2) 3) 4) 置工作方式。置计数初值。中断设置。启动定时器。定时器/计数器由四种工作方式,所用的计数位数不同,因此,定时计数常数也就不 同。1 在编写中断服务程序时,应该清楚中断响应过程:CPU 执行中断服务程序之前,自动 将程序计数器 PC 内容(即断点地址)压入堆栈保护(但不保护状态寄存器 PSW,更不保护 累加器 A 和其它寄存器内容) 然后将对应的中断矢量装入程序计数器 PC 使程序转向该中断 , 矢量地址单元中以执行中断服务程序。定时器 T0 和 T1 对应的中断矢量地址分别为 000BH 和 001BH。中断服务程序从矢量地址开始执行,一直到返回指令“RETI”为止。“RETI”指令的 操作一方面告诉中断系统该中断服务程序已经执行完毕, 另一方面把原来压入堆栈保护的断 点地址从栈顶弹出,装入到程序计数器 PC,使程序返回到被到中断的程序断点处,以便继 续执行。因此,我们在编写中断服务程序时注意。1. 在中断矢量地址单元放一条无条件转移指令, 使中断服务程序可以灵活地安排在 64K 字节程序存储器的任何空间。2.在中断服务程序中应特别注意用软件保护现场,以免中断返回后,丢失原寄存器、 累加器的信息。3.若要使执行的当前中断程序禁止更高优先级中断,可以先用软件关闭 CPU 中断,或 禁止某中断源中断,在返回前再开放中断。三.实验内容实验内容编写并调试一个程序, AT89C51 的 T0 工作方式 1 产生 1s 的定时时间, 用 作为秒计数时 间,当 1s 产生时,秒计数加 1;秒计数到 60 时,自动从 0 开始。实验电路原理如图 1 所示。计算初值公式 定时模式 1 th0=(2 -定时时间) /256 tl0=(2 -定时时间) mod
图 1 定时器实验电路原理图 四.实验步骤实验步骤1.打开 Proteus ISIS 编辑环境,按下表所列的元件清单添加元件。实验所用元件清单 元件名称 AT89C51 CAP CAP-ELEC CRYSTAL RES 7SEG-COM-CAT-GRN PULLUP AT889C51 元件,界面如图所示所属类 Microprocessor ICs Capacitors Capacitors Miscellaneous Resistors Optoelectronics Modelling Primitives 所属子类 8051 Family Generic Generic Generic 7-Segment Displays Digital[Miscellaneous]3 元件全部添加时,点击所添加的文件,并点击右键,选择“编辑属性” ;元件全部添加后,在 Proteus ISIS 的编辑区域中按实验原理图连接硬件电路,连接结果 如下图所示;2.按实验要求在 KeilC 中创建项目,编辑、编译程序,程序如下图所示;4 由编译结果可见,程序无误,可进行导入。3.将编译生成的目标码文件(后缀为.Hex)传入 Proteus 的实验电路中。在 proteus 软件已经完成实验电路图中选中元件 “AT89C51”单击元件, , 添加已生成的.hex 文件,点击“确定” ,即可导入,如下图所示;4.在 Proteus ISIS 仿真环境中运行程序,观察实验运行结果并记录。点击左下角的运行按钮,即可看到运行结果,从 00 开始循环计数,秒计数到 60 时,自 动从 0 开始,点击暂停按钮,记录实验结果如下图所示:5 当计数器到 59 后,自动从 00 开始,如下图所示;由此可见,电路连接正确,源代码正确,实现了实验的相应要求。五.参考程序参考程序second equ 30h count equ 31h org 00h ljmp start org 0bh ljmp int_t0 startmov second,#00h6 mov count,#00h mov dptr,#码表首址 mov p0,#3fh mov p2,#3fh mov tmod,#01h mov th0,#()/256 mov tl0,#() mod 256 ;定时 50ms setb tr0 mov ie,#82h sjmp $ int_t0mov th0,#()/256 mov tl0,#() mod 256 inc count mov a,count cjne a,#20,i2 ;是否到 1s mov count,#00h inc second mov a,second cjne a,#60,i1 ;是否到 60s mov second,#00h i1mov a,second mov b,#10 div ab movc a,@a+dptr mov p0,a mov a,b movc a,@a+dptr mov p2,a i2reti tabledb 3fh,06h,5bh,4fh,66h db 6dh,7dh,07h,7fh,6fh end六.思考题思考题若用定时器 1 方式 2,程序如何修改? 答:程序修改如下SECOND EQU 30H COUNT EQU 31H ORG 00H LJMP START ORG 1BH ;T1 中断入口地址7 LJMP INT_T1 STARTMOV SECOND,#00H MOV COUNT,#00H MOV DPTR,#TABLE ;段码表首址 MOV P0,#3FH MOV P2,#3FH MOV TMOD,#20H ;T1 模式 2,定时 MOV TH1,#06定时 500 微秒 MOV TL1,#06h SETB TR1 MOV IE,#88H SJMP $ INT_T1INC COUNT MOV A,COUNT CJNE A,#2000,I2 ;是否到 1s MOV COUNT,#00H INC SECOND MOV A,SECOND CJNE A,#60,I1 ;是否到 60s MOV SECOND,#00H I1MOV A,SECOND MOV B,#10 DIV AB MOVC A,@A+DPTR MOV P0,A MOV A,B MOVC A,@A+DPTR MOV P2,A I2RETI TABLEDB 3FH,06H,5BH,4FH,66H8 DB 6DH,7DH,07H,7FH,6FH END 七.实验实验总结通过本次实验,使我对 Proteus 7 Professional 软件的使用方法有了初步的了解,还认识 了 89C51 单片机的结构及各个端口的功能,同时,还掌握了怎样在 Proteus 环境中来导入 Keilc 环境下的程序来建立两个环境的联系,完成程序和电路图的联系。虽然在本次试验中遇到了的问题, 都在同学的帮助下解决了, 同时还进一步了解了单片 机方面的有关知识。9
【定时器实验报告】电子信息工程学系实验报告课程名称:单片机原理及接口应用 成 实验项目名称:51 定时器实验 姓名实验时间: 指导教师(签名) 学号绩:一、实 验 目 的:熟悉 keil 仿真软件、protues 仿真软件的使用和单片机定时程序的编写。了解 51 单片机中定时、计数的概念,熟悉 51 单片机内部定时/计数器的结构与工作原理。掌握中断方式处理定时/计数的工作过程, 掌握定时/计数器在 C51 中的设置与程 序的书写格式以及使用方法。二、实 验 环 境软件:KEIL C51 单片机仿真调试软件,proteus 系列仿真调试软件 三、实 验 原 理1、51 单片机定时计数器的基本情况 8051 型有两个十六位定时/计数器 T0、T1,有四种工作方式。MCS-51 系列单片机的定时/计数器有几个 相关的特殊功能寄存器方式控制寄存器 TMOD; 加法计数寄存器 TH0、TH1 (高八位);TL0、TL1 (低八位) ; 定时/计数到标志 TF0、TF1(中断控制寄存器 TCON) 定时/计数器启停控制位 TR0、TR1(TCON) 定时/计数器中断允许位 ET0、ET1(中断允许寄存 IE) 定时/计数器中断优先级控制位 PT0、PT1(中断优 IP) 2、51 单片机的相关寄存器设置 方式控制寄存器 TMODD7 GATE D6 C/T D5 M1 D4 M0 D3 GATE D2 C/T D1 M1 D0 M0TMOD 的低四位为 T0 的方式字,高四位为 T1 的方式字。TMOD 不能位寻址,必须整体赋值。TMOD 各位的含义如下1. 工作方式选择位 M1、M0 M1、M0 的状态决定定时器的工作方式M1 0 0 1 1 M0 0 1 0 1 功 能 说 明方式 0,为 13 位的定时/计数器 方式 1,为 16 位的定时/计数器 方式 2,为常数自动重装入的 8 位定时/计数器 方式 3,T0 分为两个 8 位定时/计数器, T1 在该方式时停止第 1 页 共 5 页 3、51 单片机定时器的工作过程(逻辑)方式一 方式 1:当 M1M0=01 时,定时器工作于方式 1。T1 工作于方式 1 时,由 TH1 作为高 8 位,TL1 作为低 8 位,构成一个十六位的计数器。若 T1 工作于 定时方式 1,计数初值为 a,晶振频率为 12MHz,则 T1 从计数初值计数到溢出的定时时间为 t =(216-a) μ S。4、51 单片机的编程 使用 MCS-51 单片机的定时/计数器的步骤是4.1.设定 TMOD,确定工作状态(用作定时器/计数器); 工作方式; 控制方式。如:T1 用于定时器、方式 1,T0 用于计数器、方式 2,均用软件控制。则 TMOD 的值应为:, 即 0x16。4.2.设置合适的计数初值,以产生期望的定时间隔。由于定时/计数器在方式 0、方式 1 和方式 2 时的最大 计数间隔取决于使用的晶振频率 fosc,如下表所示,当需要的定时间隔较大时,要采用适当的方法,即将 定时间隔分段处理。p129 方式 0 方式 1 方式 2 6MHz 16.384ms 131.072ms 0.512ms 8MHz 12.288ms 98.304ms 0.384ms 10MHz 9.83ms 78.643ms 0.307ms 12MHz 8.192ms 65.536ms 0.256ms计数初值的计算方法如下,设晶振频率为 fosc,则定时/计数器计数频率为 fosc/12,定时/计数器的计数总 次数 T_all 在方式 0、方式 1 和方式 2 时分别为 213 =
= 65536 和 28 = 256,定时间隔为 T,计数 初值为 a,则有 T = 12×(T_all C a)/fosc a = T_all C T×fosc/12 a = C T×fosc/12 (注意) THx = a / 256; TLx = a % 256; 4.3.确定定时/计数器工作于查询方式还是中断方式,若工作于中断方式,则在初始化时开放定时/计数器 的中断及总中断ET0 = 1; EA = 1;第 2 页 共 5 页 还需要编写中断服务函数void T0_srv(void) interrupt 1 using 1 { TL0 = a % 256; TH0 = a / 256; 中断服务程序段 } 4.4.启动定时器:TR0(TR1)= 1。四、实 验 内 容 过 程 及 结 果 分 析:利用 protues 仿真软件设计一个可以显示秒表时间的显示电路。利用实验板上的一位 led 数码管做显示, 利用中断法编 写定时程序,控制单片机定时器进行定时,所定时间 为 1s。刚开始 led 数码管显示 9,每过一秒数码管显示值减一,当显 示到 0 时返回 9,依此反复。然后设计 00-59 的两位秒表显示程序。(1)实现个位秒表,9-0用 protues 进行流水灯的仿真需要的元件有 AT89C51、CAP、BUTTON、LED-BLUE、RES、CRYSTAL、画出 仿真图Protues 仿真图使用 keil 仿真软件编写程序和使用 c51 编写并进行调试。仿真结果如下图所示第 3 页 共 5 页 仿真结果图 程序#include&reg51.h& unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,}; unsigned char i=0; void delay(char z) {char x,y; for(x=z;x&0;x--) for(y=123;y&0;y--); } main() {TMOD=0x10; TH1=-; TL1=-; EA=1;ET1=1;TR1=1; while(1); } (2)实现两位秒表,00-59 void time() interrupt 3 {TH1=-; TL1=-; a++; if(a==10) {a=0; P2=0 P0=tab[9-i]; i++; if(i==10) i=0; } }使用 keil 仿真软件编写程序和使用 c51 编写并进行调试。仿真结果如下图所示仿真结果图 程序#include&reg51.h& unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,}; unsigned char i=0; void delay(char z) {char x,y; for(x=z;x&0;x--) for(y=123;y&0;y--); } 第 4 页 共 5 页 main() {TMOD=0x10; TH1=-; TL1=-; EA=1;ET1=1;TR1=1; while(1) {P2=0 P0=tab[i/10]; delay(5); P2=0 P0=tab[i%10]; delay(5); }} void time() interrupt 3 {TH1=-; TL1=-; a++; if(a==10) {a=0; i++; if(i==60) {i=0; } }}五、实 验 心 得:通过实验熟悉 keil 仿真软件、protues 仿真软件的使用和单片机定时程序的编写。了解 51 单片机中定时、计数的概念, 熟悉 51 单片机内部定时/计数器的结构与工作原理。掌握中断方式处理定时/计数的工作过程,掌握定时/计数器在 C51 中的 设置与程序的书写格式以及使用方法。第 5 页 共 5 页
【定时器实验报告】微机原理实验报告实验名称定时器输入捕获实验 院 系:物理与机电工程学院专业班级08 电子信息工程 学 号 刘月梅 涂二生 2011 年 4 月 12 日学生姓名指导教师完成时间报告成绩:评阅意见:评阅教师日期 定时器输入捕获实验一、实验目的掌握使用定时器以及所涉及的寄存器的使用方法,学会程序的书写和使用。本次实验对程序进行修改使原来 CAP1.2 下降沿改为 CAP1.3 下降沿。将 GPIO 特 殊应用加入程序中, 使用 LEDS8 分奇数和偶数点亮;在 LED 灯亮的同时蜂鸣器随 着蜂鸣。二、实验器材电脑一台,ARM7 实验开发板,AXD 仿真软件 三、实验原理使用定时器 1 的输入捕获功能,获取延时参数,用于控制 LEDS8 的闪烁 频率。程序首先设置 P0.18 引脚连接 CAP1.3,同时设置 LEDS8 控制口输出, 再通过 T1CCR 设置 CAP1.3 为下降沿捕获,最后启动定时器。程序读取捕获 的值,用作延时参数,控制 LEDS8 闪烁。该实验流程图如图 4.96 所示,实 现程序如程序清单 4.25 所示。2 根据上表所示 P0.18、P0.21 控制 CAP1.3 的功能 根据表 5.5 所示设置引脚的连接,捕获 1.3 要使用 PINSEL1=1&&4;3 根据上表对 TICCR 进行修改,TICCR=1&&10. 四、实验流程图开始 ↓ P0.18 引脚连接 CAP1.3 ↓ 定时器初始化:时钟分频、下降沿捕获、使能定时器 ↓ 读取捕获的值,用作延时参数,控制 LEDS8 闪烁,蜂鸣器蜂鸣 ↓ 结束 图 4.96 定时器捕获实验流程图 五、输入捕获实验程序程序清单 4.25 #include &config.h&4 #define LEDS8 0xFF&&18 /* P1[25:18]控制 LED8~LED1 */ Const uint32 BEEP=1&&7; /* ***************************************************************** **************************************** ** 函数名称 :delay() ** 函数功能 :短软件延时 ** 入口参数 :dly 延时参数,值越大,延时越久 ** 出口参数 :无 ***************************************************************** **************************************** */ void delay(uint32 dly) { uint32 for ( ; dly&0; dly--) for (i=0; i&10; i++); } /* ***************************************************************** **************************************** ** 函数名称 :main() ** 函数功能 :使用定时器 1 捕获按键定时,控制 LEDS8 闪烁。** 调试说明 :需要将跳线 JP12 连接 LEDS8。***************************************************************** **************************************** */ int main (void) { volatile uint32 PINSEL0=0x; PINSEL1 = 1 && 4; // P0.17 连接捕获 1.3 PINSEL2 = PINSEL2 & (~0x08); // P1[25:16]连接 GPIO IO1DIR = LEDS8; // 设置 LEDS8 控制口为输出 IO0DIR=BEEP; T1PR = 99; T1CCR = 1 && 10; // 设置 CAP1.3 下降沿捕获 T1TC = 0; T1TCR = 0x01; // 启动定时器 while (1) { i = T1CR3;// 读取捕获到的 T1TC 值,用作延时参5 数 IO1PIN=0Xaa&&18;IOCLR=BEEP; delay(i); IO1PIN=0x55&&18;IOSET=BEEP; delay(i); } return 0; 注:修改过的程序均用下划线标出。全速运行程序,按一下 KEY3 键,LEDS8 开始闪烁(先奇数 LED 亮,再偶 数 LED 亮) ;再按第二次,LED 闪烁将会变慢;再次按 KEY3,LED 闪烁将会 变得更慢。六、实验小结通过实验使我对定时器的使用掌握的更多,掌握如何进行引脚的修改,要通 查表来确定所要连接的引脚,以及设置引脚功能的方法。并且复习对 GPIO 的使 用,使我懂得要学以致用,在以后的学习中要注意这方面能力的培养。6
【定时器实验报告】定时器实验实验报告 通信工程姚章瑞 一、实验目的 1、了解定时器的原理和四种工作方式的使用方法。2、学习定时器的相关应用,包括产生信号和计数等。二、实验原理 1、定时器结构和原理上图为定时器 T0、T1 的结构,其中振荡器经 12 分频后作为定时器的时钟脉冲,T 为外部 计数脉冲输入端,通过开关 K1 选择。反相器,或门,与门共同构成启/停控制信号。TH 和 TL 为加 1 计数器,TF 为中断标志。每接收到一个脉冲,加 1 计数器自动加 1,当计数器中 的数被加为 0 时产生溢出标志,TF 将被置 1。计数器工作方式的选择和功能的实现需要配 置相应的寄存器 TMOD 和 TCON。2、定时器工作方式 定时器共有四种工作方式分别为方式 0~方式 3。方式 0 为 13 位计数器,最大计数值为 213 个脉冲。方式 1 为 16 位计数器,最大计数值为 216 个脉冲。方式 2 是 8 位自动重装计数器。该方式下,TL 进行计数工作,TH 用于存放计数初值,当 产生溢出中断请求时会自动将 TH 中的初值重新装入 TL,以使计数器继续工作。方式 3 仅限于 T0 计数器, 在方式 3 下, 计数器被分成两个独立的 8 为计数器 TL0 和 TH0。T0三、实验内容 1、通过查询定时器状态,在 P1.0 产生近似 10kHz 的方波 2、利用定时中断,在中断处理程序中每秒通过 P1.0 切换一次逻辑笔的电平。3、利用计数器测量信号发生器产生的不同频率的方波周期,并在寄存器中显示结果。四、电原理图(无修改) 实验内容 1、3 无需接线 实验 2 原理图: 五、程序流程图 附手绘流程图六、代码及注释(无修改) 1、 ORG 8000H LJMP MAIN ORG 8100H MAINSETB P1.0 MOV TMOD, #01H MOV TH0, #0FFH MOV TL0, #0D2H SETB TR0 BACKJBC TF0,BACK1 SJMP BACK BACK1MOV TH0, #0FFH MOV TL0, #0D2H CPL P1.0 SJMP BACK;设置 P1.0 的初值 ;T0 工作于方式 1 ;定时 46 个脉冲翻转一次(10kHz);查询 TF0;重新设置定时器 ;方波翻转 2、 ORG LJMP ORG LJMP ORG LJMP ORG MAINSETB SETB MOV MOV MOV MOV MOV SETB SETB MOV MOV SJMP8000H MAIN 800BH INTT0 801BH IMTT1 8100H P1.0 P1.3 TMOD, #61H TH1, #9CH TL1, #9CH TH0, #0EEH TL0, #00H TR0 TR1 IP, #02H IE, #8AH $ ;设置 P1.0 的初值 ;设置 P1.3 的初值 ;T0 工作于方式 1,T1 工作于方式 2,T1 使用 P1.3 ;作为时钟 ;定时 100 个脉冲翻转一次 P1.0 ;定时 4608 个脉冲翻转一次 P1.3;设置中断优先级 ;允许中断INTT0MOV TH0, #0EEH MOV TL0, #00H CPL P1.3 RETI INTT1CPL P1.0 RETI 3、 RUTL RUTH CONT ORG LJMP ORG LJMP ORG MAINMOV MOV MOV MOV MOV MOV SETB SETB MOV SJMP INTT1MOV MOV DEC MOV JNZ CLR MOV MOV EXITRETIEQU EQU EQU 8000H MAIN 801BH IMTT1 H 72HTMOD, #15H TH0, #00H TL0, #00H TH1, #4CH TL1, #00H CONT, #14H TR0 TR1 IE, #88H $;T0、T1 工作于方式 1,T0 对外部信号计数 ;T0 计数清零 ;定时 46080 个脉冲(50ms) ;中断 20 次(20*50ms=1s);允许中断TH1, #4CH TL1, #00H CONT A, CONT EXIT TR0 RUTH, TH0 RUTL, TL0;重新定时 50中断次数减 1;完成 20 次中断,停止计数 ;存结果 七、实验结果和分析 1、实验一测得产生的方波与标准 10kHz 方波的频率之间仍有一些误差,通过调整计数初值 可得产生的相应频率如下表所示TH0 TL0 f/kHz FF D4 9.82 FF D5 9.82 FF D6 9.82 FF D7 9.82 FF D8 10.25 FF D9 10.24 FF DA 10.25 FF DB 10.25 FF DC 10.74 FF DD 10.73 FF DE 10.73 FF DF 10.73可以看出连续 4 个计数初值产生的方波频率相同,原因在于代码采用的查询 TF0 的方式来 完成方波的翻转,而每次查询需要两代码 JBC TF0, BACK1 SJMP BACK 即四个机器周期才能完成一次查询。但是计数器的计数是对机器周期进行计数, 因此即使改 变了计数初值,由于查询的精度限制,计数的最小时间单位被固定为 4 个机器周期,即 1 12 4 4.34us 11.0592MHz 实验数据中相邻两个频率之间的周期间隔分别为 1/9.82kHz-1/10.25kHz=4.27us 和 1/10.25kHz-1/10.73kHz=4.36us,基本符合上面的分析结果。2、为了增加产生的方波的精度,可以用中断方式代替查询方式来控制方波的翻转。中断允 许时,CPU 通过查询中断位来判断是否计数溢出,此时的计数最小时间单位为一个机器周 期,即 1.08us。此时产生的 10kHz 方波频率误差应该不大于 0.54us/100us=0.54% 3、 实验 2 中使用了中断方式产生周期 2s 的方波信号, 实际用示波器 cursor 测得周期为 2.002s, 由于周期较大,因此误差明显减小。4、实验 3 对信号发生器产生的 TTL 信号进行频率测量,测量结果如下表所示:组号 1 2 3 4 5 6 7 8 9输入频率/Hz 20.99 421.7 1.479k 4.935k 9.022k 20.18k 31.21k 39.22k 63.77k输出结果 (16 进制) 输出结果/Hz
05C8 EDD 79E4
误差 0.048% 0.071% 0.068% 0 0 0.042% 0.044% 0.045% 0.039% 实验测得误差均小于 0.1%。可以看出,频率计在中频的误差更小一些,当频率较小时,由 于起始计数位置的不同,可能导致计数多或少一个脉冲,从而产生误差,当频率较高时,由 于频率计的测量是精确到单个脉冲的, 而高频时的信号并不是稳定的, 而且信号发生器的读 数只能精确到 0.01kHz,因此产生误差。5、由于 16 位计数器的限制,测量范围被限定为 1Hz~65535Hz,如果想要测量更大范围内 的频率,可以减小测量时间,比如将测量时间改为 0.5s,测量范围就可以达到 131070Hz, 但是相应地测量精度会下降。另外一种方法是将 T0 计数的进位用寄存器存起来,测量范围 也可以增大,而且精度不减,甚至可以通过增加测量时间提高精度。但是无论如何,测量极 限无法超过机器周期,即最大测量限度应为 11.0592MHz/12=0.92MHz

我要回帖

更多关于 数码管计数器 的文章

 

随机推荐