单片机定时器计数器实验报告
篇一:单片机计数器实验报告 计数器实验报告 ㈠ 实验目的
1. 学习单片机内部定时/计数器的使用和编程方法; 2. 进一步掌握中断处理程序的编程方法。 ㈡ 实验器材 1. 2. 3. 4. 5.
G6W仿真器一台 MCS—51实验板 一台 PC机 一台 电源 一台 信号发生器 一台 ㈢ 实验内容及要求
8051内部定时计数器,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数,使用8051的T1作定时器,50ms中断一次,看T0内每50ms来了多少脉冲,将计数值送显(通过LED发光二极管8421码来表示),1秒后再次测试。 ㈣ 实验说明
1. 本实验中内部计数器其计数器的作用,外部事件计数器脉冲由P3.4引入
定时器T0。单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变,这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样,同时这就决定了输入波形的频率不
1word格式支持编辑,如有帮助欢迎下载支持。
能超过机器周期频率。 2. 计数脉冲由信号发生器输入(从T0端接入)。
3. 计数值通过发光二极管显示,要求:显示两位,十位用L4~L1的8421
码表示,个位用L8~L5的8421码表示
4. 将脉搏检查模块接入电路中,对脉搏进行计数,计算出每分钟脉搏跳动 次数并显示
㈤ 实验框图(见下页)
程序源代码 ORG 00000H LJMP MAIN ORG 001BH AJMP MAIN1 MAIN: MOV SP,#60H
MOV TMOD,#15H MOV 20H,#14H MOV TL1,#0B0H MOV TH1,#3CHMOV TL0,#00H
;T0的中断入口地址 ;设置T1做定时器,T0做计数器,都于方式1工作 ;装入中断次数 ;装入计数值低8位 ;装入计数值高8位 MOV TH0,#00H
SETB TR1 ;启动定时器T1 SETB TR0 ;启动计数器T0 SETB ET1 ;允许T1中断 SETB EA ;允许CPU中断 SJMP $;等待中断
MAIN1: PUSH PSW PUSH ACC CLR TR0
2word格式支持编辑,如有帮助欢迎下载支持。
CLR TR1 MOV TL1,#0B0H MOV TH1,#3CH DJNZ 20H,RETUNT MOV 20H ,#14H SHOW: MOV R0,TH0 MOV R1,TL0 MOV A,R1 MOV B,#0AH DIV AB
MOV C,ACC.3MOV P1.0,C MOV C,ACC.2 MOV P1.1,C MOV C,ACC.1 MOV P1.2,C MOV C,ACC.0 MOV P1.3,C
MOV A,B MOV C,ACC.3MOV P1.4,C MOV C,ACC.2 MOV P1.5,C MOV C,ACC.1 MOV P1.6,C MOV C,ACC.0 MOV P1.7,C ;保护现场 ;装入计数值低8位
;装入计数值高8位,50ms;允许T1中断 ;未到1s,继续计时 ;1s到重新开始
;显示计数器T0的值;读计数器当前值 ;将计数值转为十进制
;显示部分,将A中保存的十位赋给L0~L3 将B中保存的各位转移到A中 ;将个位的数字显示在L4~L7上 ; RETUNT:
MOV TL0,#00H;将计数器T0清零 MOV TH0,#00H SETB TR0SETB TR1POP ACCPOP PSW RETI ;中断返回
在频率为1000HZ时,L0~L7显示为50;频率为300HZ
3word格式支持编辑,如有帮助欢迎下载支持。
时,L0~L7显示为15,结果正确,程序可以正确运行。 思考与小结:
有了前面的定时器实验做基础,定时器计数器的选择以及初始化已经不再是难点,本次试验的重点是写入两个中断判断程序和十六进制到十进制的转化和显示。 MOV TL1,#0B0H ;装入计数值低8位
MOV TH1,#3CH;装入计数值高8位,50ms
MOV 20H,#14H ;未到1s,继续计时 DJNZ 20H,RETUNT;1s到重新开始 RETUNT:
MOV TL0,#00H;将计数器T0清零 MOV TH0,#00H 由于书上详细解释了设置中断时间的问题,所以中断程序并没有什么太大的难点,主要是要思考一下程序的执行顺序问题。
十六进制到十进制的转化和显示使我们这次实验遇到的比较大的困难,刚开始采用的是DA指令,由于没有搞清楚它的实质错误的使用了DA。DA用于十六进制到BCD的转换,不能用于十六进制到8421的转换,于是我们思考了很久。后来终于找到了比较简单的方法用除数,十位放在A中,个位也就是余数放在B中。
MOV R0,TH0 ;读计数器当前值 MOV R1,TL0 MOV A,R1 MOV B,#0AH DIV AB;将计数值转为十进制
4word格式支持编辑,如有帮助欢迎下载支持。
由于这次的数字比较小而且要显示在L0~L7上,所以可以用这种方法,如果是数字比较大的话这种方法也不奏效,需要写一段通用代码来实现。
后面的问题可谓是一只强大的拦路虎,可能是基础只是不过关的缘故,我们一直在数字的显示顺序上纠结万分,用了左循环但是没有达到预期目的,在老师的指导之下才知道原来可以直接位赋值。以后一些使用的知识和技巧一定要掌握。
MOV C,ACC.3 ;显示部分,将A中保存的十位赋给L0~L3 MOV P1.0,C MOV C,ACC.2 MOV P1.1,C
MOV C,ACC.1 MOV P1.2,C MOV C,ACC.0 MOV P1.3,C MOV A,B;将B中保存的各位转移到A中 MOV C,ACC.3 ;将个位的数字显示在L4~L7上 MOV P1.4,C MOV C,ACC.2 MOV P1.5,C MOV C,ACC.1 MOV P1.6,C MOV C,ACC.0 MOV P1.7,C
篇二:51单片机定时器实验 电子信息工程学系实验报告 课程名称:单片机原理
实验项目名称:51定时器实验 实验时间:XX-11-27 班级:测控081 姓名:学号:2 实 验 目 的:
熟悉keil仿真软件、伟福仿真器的使用和C51定时程
5word格式支持编辑,如有帮助欢迎下载支持。
序的编写。了解51单片机中定时、计数的概念,熟悉51单片机内部定时/计数器的结构与工作原理。掌握中断方式处理定时/计数的工作过程,掌握定时/计数器在C51中的设置与程序的书写格式以及使用方法。 实 验 原 理: 定时分类及原理
1.软件定时:即让机器执行一个程序段,这段程序本身没有具体的执行目的,只是为了磨时间。执行这段程序所需要的时间就是延时时间。这种程序前面已设计过。这种方法定时占用CPU执行时间,降低了CPU利用率。此次实验使用的是MCS-51系列单片机。
2.数字电路硬件定时:采用小规模集成电路器件如555,外接定时部件(电阻和电容)构成。这样的定时电路简单,但要改变定时范围,必须改变电阻和电容,这种定时电路在硬件连接好以后,修改不方便。
3.可编程定时/计数器:是为方便微型计算机系统的设计和应用而研制的,它是硬件定时,又很容易地通过软件来确定和改变它的定时值,通过初始化编程,能够满足各种不同的定时和计数要求,因而在嵌入式系统的设计和应用中得到广泛的应用。
8051型单片机有两个十六位定时/计数器T0、T1,有四种工作方式,跟定时/计数器相关的特殊功能寄存器有这样
6word格式支持编辑,如有帮助欢迎下载支持。
几个: 方式控制寄存器TMOD
M1、M0的状态决定定时器的工作方式,定时和外部事件计数方式选择位C/T,GATE与TR0、TR1配合决定定时/计数器的启停。
加法计数寄存器TH0、TH1 (高八位)TL0、TL1(低八位); 定时/计数到标志TF0、TF1(中断控制寄存器TCON); 定时/计数器启停控制位TR0、TR1(TCON);
定时/计数器中断允许位ET0、ET1(中断允许寄存IE); 定时/计数器中断优先级控制位PT0、PT1(中断优IP)。 定时/计数器的工作方式 MCS-51的定时器有方式0、方式1、方式2和方式2这3种工作方式。 1.方式0 当M1M0=00时,定时器工作于方式0。
方式 0为13位的计数器,由TL0的低5位和TH0的8位组成,TL0低5位计数溢出时向TH0进位,TH0计数溢出时 置位溢出标志TF0。若T0工作于定时方式,设计数初值为a,晶振频率为12MHz,则T0从初值开始计数到溢出的定 时时间为 t=(213-a)×1μS。 2. 方式1 当M1M0=01时,定时器工作于方式1。
T1工作于方式1时,由TH1作为高8位,TL1作为低8位,构成一个十六位的计数器。若T1工作于定时方式1,计数初值为 a,晶振频率为12MHz,则T1从计数初值计数到溢出的定时时间为t =(216-a)μS。
7word格式支持编辑,如有帮助欢迎下载支持。
3. 方式2
M1M0=10时,定时器/计数器工作于方式2,方式2为自动恢复初值的 8位计数器。TL1作为8位计数器,TH1作 为计数初值寄存器。 t =(28-a)μS。
单片机内部的定时计数模块,在定时时,对工作频率的12分频进行计数,先记入TL后记入TH,直到溢出为止,根据TL、TH内的初值不同可以定出不同的时间;在计数工作方式时,对T0(T1)引脚的输入脉冲进行计数,将计数值记入TL、TH。当定时/计数溢出时,会引起中断。
设置合适的计数初值,以产生期望的定时间隔。由于定时/计数器在方式0、方式1和方式2时的最大计数间隔取决于使用的晶振频率fosc,如下表所示,当需要的定时间隔较大时,要采用适当的方法,即将定时间隔分段处理。 计数初值与定时时间的关系为:T = 12×(T_all – a)/fosc定时间隔为T,计数初值为a。所以有计数初值a =–T×fosc/12,THx = a / 256,TLx = a % 256。定时器均有一个最大定时时间,对于长时间的定时需要,可以将定时间隔为固定的较小时间,通过另设一全局变量ah1用于计数,累加固定的较小定时时间来进行。
确定定时/计数器工作于查询方式还是中断方式,若工作于中断方式,则在初始化时开放定时/计数器的中断及总中断: ET0 = 1; EA = 1;
8word格式支持编辑,如有帮助欢迎下载支持。
还需要编写中断服务函数:
void T0_srv(void) interrupt 1 using 1{ TL0 = a % 256;TH0 = a / 256; 中断服务程序段 }
4.启动定时器:TR0(TR1)= 1。 实 验 设 备 与 器 件
硬件:微机、WAVE单片机仿真器、单片机实验板、跳帽若干 软件:KEIL C51单片机仿真调试软件,伟福V系列仿真调试软件 实 验 内 容:
利用实验板上的一位LED数码管做显示,利用中断法编写定时程序,控制单片机定时器进行定时,所定时间为1S。刚开始LED数码管显示0,每过1S数码管的显示值增加1,当显示到59时返回0,依此反复。 实验的程序代码如下: #include
void mDelay (unsigned int Delay) {unsigned int b; for(;Delay>0;Delay--) {for(b=0;b int i,j,k,a; i=-1; j=0; k=0;
unsigned
char
code
tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void main() {TMOD=0x01;
9word格式支持编辑,如有帮助欢迎下载支持。
a=-0.1*6*1000000/12; TH0=a/256; TL0=a%256; EA=1; ET0=1; TR0=1; while(1); }
void t0( )interrupt 1 {TH0=a/256; TL0=a%256; k++; if(k==10) {k=0; i++;
if(i==10){i=0;j++;} if(j==6){i=0;j=0;} {P2=0xfe; P0=tab[i]; mDelay(6000); P2=(P2 实 验 结 果 及 分 析: 本题实验的记数结果如下: 实验分析如下:
本实验是通过定时器来达成在LED数码管从00秒到59秒的显示过程的。首先,利用定时器先实现定时100ms,在累计记数到10次后就得到了1秒的效果,接着在LED数码管上相应的显示01,当到09时把十位记上1,以此类推得到在LED数码管上从00显示到59,最后,再置00。这样就达到了实验效果。 实 验 心 得:
通过本次LED数码管进行51定时器实验,让我知道了对教材应该熟悉,因为教材是基础的,只有把基础的搞好了才能够进行其它层次的学习。其次此次试验我还懂得了有时候可以通过软件的仿真来验证书上的一些理论行的东西。通过C语言的编程,对LED灯的控制及51定时器的应用让我对单片机理解更加明了。 附 录: 延时函数:
void mDelay(unsigned int Delay) { unsigned int i;
10word格式支持编辑,如有帮助欢迎下载支持。
for(;Delay>0;Delay--) { for(i=0;i篇三:单片机定时器实验报告
定时器实验报告 ㈠ 实验目的
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。 ㈣ 实验框图 循环彩灯代码
11word格式支持编辑,如有帮助欢迎下载支持。
ORG 0000H LJMP MAIN
ORG 000BH ;T0的中断入口地址 MAIN: MOV SP,#60H
MOV TMOD,#01H ;设置T1工作于方式一 MOV 20H,#0AH ;装入中断次数 MOV TL0,#0B0H ;装入计数值低8位 MOV TH0,#3CH;装入计数值高8位 SETB TR1 ;启动定时器T1 SETB ET1 SETB EA SJMP $ CAIDENG: PUSH PSW
PUSH ACCMOV TL0,#0B0H MOV TH0,#3CH JUDGE: DJNZ 20H,RETUNT MOV 20H,#0AH
HUAYANG1:MOV R0,#08HMOV P1,#00HMOV A,#01H
LOOP:MOV P1,A
LCALL DELAY LCALL DELAY LCALL DELAY RL A DJNZ R0,LOOP NEXT1:
MOV TL0,#0B0H MOV TH0,#3CH JUDGE1: DJNZ 20H,NEXT1MOV 20H,0AH
;允许T1中断;允许CPU中断 ;等待中断 ;保护现场 ;装入计数值低8位 ;装入计数值高8位 ;0.5秒未到,返回 ;重置中断次数 ;花样一
;设置花样一循环次数;装入(本文来自: 小草范文 网:
12word格式支持编辑,如有帮助欢迎下载支持。
单片机定时器计数器实验报告)计数值低8位 ;装入计数值高8位;0.5秒未到,返回 HUAYANG2: ;花样二
MOV R0,#08H ;设置花样二循环次数MOV P1,#0FFH MOV A,#0FEH LOOP1:MOV P1,A LCALL DELAY LCALL DELAY LCALL DELAY RL A
DJNZ R0,LOOP1 NEXT2:
MOV TL0,#0B0HMOV TH0,#3CH JUDGE2: DJNZ 20H,NEXT2 MOV 20H,0AH HUAYANG3:MOV P1,#00H
LCALL DELAY LCALL DELAY LCALL DELAY
MOV P1,#0FFH LCALL DELAYLCALL DELAY LCALL DELAY NEXT3:
MOV TL0,#0B0HMOV TH0,#3CH JUDGE3: DJNZ 20H,NEXT3 MOV 20H,0AH JMP RETUNT DELAY: MOV R2,#0FFH DELAY1: MOV R1,#0FFH
;装入计数值低8位 ;装入计数值高8位;0.5秒未到,返回 ;装入计数值低8位 ;装入计数值高8位;0.5秒未到,返回 ;延时子程序
13word格式支持编辑,如有帮助欢迎下载支持。
DJNZ R1,$
DJNZ R2,DELAY1 RET RETUNT:POP ACCPOP PSW RETI ;中断返回 END 救护车警笛声程序 ORG 0000H AJMP MAIN
ORG 001BH AJMP S1 ORG 0040H MAIN:
MOV SP,#70H MOV R1,#100 MOV R2,#10 MOV R3,#20
MOV TMOD,#10HMOV TH1,#0FCH MOV TL1,#18H SETB TR1SETB ET1SETB EASJMP $S1:
JBF0,S2 MOV TH1,#0FCH MOV TL1,#18H
CPL P1.0 DJNZ R1,ENDS MOV R1,#100 DJNZ R2,ENDS MOV R2,#10 SETB F0SJMP ENDS
;T0的中断入口地址;设置T1为定时器,工作方式1;装入计数值高8位;装入计数值低8位
;启动定时器T1 ;允许T1中断 ;允许CPU中断 ;等待中断 ;高音部分 ;取反 ;F0赋值
14word格式支持编辑,如有帮助欢迎下载支持。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务