单片机定时器实验
单片机定时器实验报告
![单片机定时器实验报告](https://img.taocdn.com/s3/m/855af51a68eae009581b6bd97f1922791688bee5.png)
一、实验目的1. 理解单片机定时器的工作原理和功能。
2. 掌握单片机定时器的编程方法,包括初始化、设置定时时间、启动定时器等。
3. 学会使用定时器实现定时功能,并通过实验验证其效果。
二、实验器材1. 单片机实验板2. 连接线3. 51单片机4. 计时器5. 示波器6. 电脑7. Keil软件三、实验原理定时器是单片机的一种重要外设,用于实现定时功能。
51单片机内部有两个定时器,分别为定时器0和定时器1。
定时器的工作原理是通过定时器计数器对机器周期进行计数,当计数器达到设定值时,定时器溢出,并产生中断请求。
定时器0和定时器1都具有四种工作模式,分别为:1. 模式0:13位定时器/计数器2. 模式1:16位定时器/计数器3. 模式2:8位自动重装模式4. 模式3:两个8位计数器本实验采用定时器0工作在模式1,实现50ms的定时功能。
四、实验步骤1. 将单片机实验板连接到电脑,并启动Keil软件。
2. 创建一个新的项目,并添加51单片机头文件(reg51.h)。
3. 编写定时器初始化函数,设置定时器0工作在模式1,并设置定时时间为50ms。
4. 编写定时器中断服务函数,用于处理定时器溢出事件。
5. 编写主函数,设置定时器中断,并启动定时器。
6. 编译并下载程序到单片机实验板。
7. 使用示波器观察定时器0的溢出信号。
五、实验代码```c#include <reg51.h>#define TIMER0_MODE1 0x01// 定时器0初始化函数void Timer0_Init() {TMOD &= 0xF0; // 清除定时器0模式位TMOD |= TIMER0_MODE1; // 设置定时器0工作在模式1TH0 = 0xFC; // 设置定时器0高8位初值TL0 = 0x18; // 设置定时器0低8位初值ET0 = 1; // 开启定时器0中断EA = 1; // 开启总中断TR0 = 1; // 启动定时器0}// 定时器0中断服务函数void Timer0_ISR() interrupt 1 {TH0 = 0xFC; // 重新加载定时器0高8位初值TL0 = 0x18; // 重新加载定时器0低8位初值// ... (其他处理)}void main() {Timer0_Init(); // 初始化定时器0while(1) {// ... (其他处理)}}```六、实验结果与分析1. 编译并下载程序到单片机实验板,使用示波器观察定时器0的溢出信号,可以看到定时器0每隔50ms产生一个溢出信号。
单片机定时器实验报告
![单片机定时器实验报告](https://img.taocdn.com/s3/m/02de7f1e0622192e453610661ed9ad51f11d5453.png)
单片机定时器实验报告
单片机定时器实验报告
简介
•实验名称:单片机定时器实验
•实验目的:掌握单片机中定时器的工作原理及使用方法•实验设备:单片机开发板、电源等
实验内容
1.单片机定时器的基本概念和原理
2.单片机定时器的分类和特点
3.实验步骤和流程
–步骤1:搭建实验电路
–步骤2:编写单片机程序
–步骤3:下载程序到单片机
–步骤4:观察定时器的工作情况
4.实验结果和分析
实验结果
•在实验过程中,我们成功搭建了单片机定时器实验电路,并编写了相应的程序。
通过下载程序到单片机,观察到定时器按照预设
的时间间隔产生中断,并执行相应的任务。
•实验结果表明,我们掌握了单片机定时器的使用方法,可以实现定时功能。
实验分析
•单片机定时器是一种重要的计时和控制设备,广泛应用于各种电子设备中。
•通过本次实验,我们深入了解了单片机定时器的工作原理和使用方法,对于日后的电子设计和开发有着重要的意义。
实验总结
•通过本次实验,我们学习了单片机定时器的基本知识,掌握了单片机定时器的使用方法,并成功实现了定时功能。
•在实验过程中,我们发现了一些问题,并通过调试和修改程序进行了解决。
这对我们提高了动手实践和问题解决能力有很大帮助。
•通过本次实验,我们对于单片机定时器有了更深入的了解,为今后的学习和应用打下了坚实的基础。
参考资料
•《单片机原理与应用》
•单片机实验教材及课件。
单片机实验报告定时器
![单片机实验报告定时器](https://img.taocdn.com/s3/m/fe71b524178884868762caaedd3383c4bb4cb497.png)
一、实验目的1. 理解单片机定时器的原理及工作方式。
2. 掌握单片机定时器的编程方法,实现定时功能。
3. 学习使用定时器中断,处理定时器事件。
二、实验环境1. 硬件设备:MCS-51单片机实验板、示波器、电源等。
2. 软件环境:Keil C51、Proteus仿真软件。
三、实验原理1. 定时器概述定时器是单片机的一个重要组成部分,用于产生定时信号或测量时间。
MCS-51单片机内部有两个定时器,即定时器0和定时器1。
2. 定时器工作原理定时器通过内部计数器进行计数,当计数达到设定值时,产生一个定时中断,执行中断服务程序。
定时器的工作方式分为四种:方式0、方式1、方式2和方式3。
3. 定时器编程定时器编程主要包括以下几个步骤:(1)设置定时器工作模式:通过向定时器模式寄存器(TMOD)写入相应的值来设置定时器工作模式。
(2)设置定时器初值:通过向定时器寄存器(THx、TLx)写入相应的值来设置定时器初值。
(3)启动定时器:通过设置定时器控制寄存器(TCON)的相应位来启动定时器。
(4)编写定时器中断服务程序:当定时器溢出时,执行中断服务程序,实现相应的功能。
四、实验内容1. 实验一:定时器0定时50ms(1)硬件连接:将P1.0口连接到蜂鸣器。
(2)软件设计:- 设置定时器0工作在方式1,定时50ms。
- 开启定时器0中断。
- 编写定时器0中断服务程序,使蜂鸣器响50ms。
2. 实验二:定时器1计数脉冲(1)硬件连接:将P3.4口连接到信号发生器。
(2)软件设计:- 设置定时器1工作在方式2,计数P3.4口的脉冲信号。
- 开启定时器1中断。
- 编写定时器1中断服务程序,记录计数器计数值,并通过数码管显示。
3. 实验三:定时器0定时1s(1)硬件连接:将P1.0口连接到蜂鸣器。
(2)软件设计:- 设置定时器0工作在方式1,定时1s。
- 开启定时器0中断。
- 编写定时器0中断服务程序,使蜂鸣器响1s。
五、实验步骤1. 编写实验一程序,并使用Proteus进行仿真测试,验证程序功能。
单片机定时器实验原理
![单片机定时器实验原理](https://img.taocdn.com/s3/m/b611a919814d2b160b4e767f5acfa1c7aa0082d1.png)
单片机定时器实验原理一、概述单片机定时器是单片机的重要组成部分,它能够实现定时控制、时间间隔生成等功能。
通过单片机定时器实验,可以更好地了解单片机的内部结构和工作原理,为进一步开发单片机应用系统打下坚实的基础。
二、实验目的1. 掌握单片机定时器的结构和原理。
2. 学会使用单片机定时器进行时间间隔控制。
3. 了解单片机定时器的应用范围和限制。
三、实验原理1. 单片机定时器的结构单片机定时器通常由一个计数器和一个控制逻辑组成。
计数器负责记录脉冲数,控制逻辑负责控制计数器的计数和复位。
单片机定时器通常采用可编程计数脉冲,可以实现任意时间间隔的生成。
2. 单片机定时器的原理单片机定时器的工作原理是基于计数器的计数。
当单片机接收到一个启动信号时,计数器开始计数,当计数达到预设的时间间隔时,单片机输出相应的信号或执行相应的操作。
通过改变计数器的预设值,可以改变时间间隔的长短。
3. 单片机定时器的应用单片机定时器在许多领域都有应用,如智能家居、工业控制、通信设备等。
在智能家居中,可以通过单片机定时器控制家电设备的开启和关闭;在工业控制中,可以通过单片机定时器实现生产线的自动化控制;在通信设备中,可以通过单片机定时器实现时间戳的生成和数据传输的时间控制。
四、实验步骤1. 准备实验器材和软件环境,包括单片机、定时器芯片、编程器、开发板等。
2. 连接实验设备,并调试确保连接正常。
3. 编写实验程序,并上传到单片机中。
4. 观察并记录实验结果,分析误差原因。
5. 根据实验结果,调整程序参数,进行多次实验,直到达到满意的效果。
五、实验注意事项1. 实验过程中要保持设备连接的稳定性,避免意外断开。
2. 编程和调试过程中要确保程序正确,避免误操作导致设备损坏。
3. 注意观察实验现象,及时记录实验数据,分析实验结果。
4. 实验结束后,要清理实验现场,确保设备复位。
六、实验结果分析通过实验,我们能够得到较为准确的时间间隔控制结果。
单片机定时器实验报告doc
![单片机定时器实验报告doc](https://img.taocdn.com/s3/m/75fb352e168884868662d63c.png)
单片机定时器实验报告篇一:单片机实验报告——定时器实验四定时器实验自动化121班 36 张礼一.实验目的掌握定时器的工作原理及四种工作方式,掌握定时器计数初始值的计算,掌握如何对定时器进行初始化,以及程序中如何使用定时器进行定时。
二.实验仪器单片机开发板一套,计算机一台。
三.实验任务编写程序,使用单片机开发板上8位共阴极数码管的其中一位来显示0~9这九个字符,先从“0”开始显示,数字依次递增,当显示完“9”这个字符后,又从“0”开始显示,循环往复,每1秒钟变换一个字符,1秒钟的定时时间必须由定时器T0(或T1)提供。
开发板上的8位共阴极数码管与单片机的输入输出端口P1的硬件接线如图4-1所示,单片机P1口的8条数据线通过J3端子同时连接到 2片74HC573D锁存器的输入端,数码管的各个同名端分别连接后再与锁存器U2的8个输出端相连,每一位数码管的位选端分别与锁存器U3的8个输出端相连。
两片锁存器的输出使能端OE都恒接地,使得锁存器的内部数据保持器输出端与锁存器的输出端保持接通。
而U2的锁存使能端LE由P2.1控制,所以P2.1是段锁存;U3的锁存使能端LE由P2.0控制,所以P2.0是位锁存。
当锁存使能端为“1”时,则锁存器输入端的数据传送到输出端;当锁存使能端为“0”时,锁存器输入端的数据则不能传送到输出端;因此段码和位码通过锁存器分时输出。
汇编语言程序流程如图4-2:四.实验步骤:1.数码管的0~9的字型码表如下:2.参考图4-2所给的程序流程图编写实验程序。
(注:以下程序为两位60秒计数程序)#include sbit wei=P2^0; sbit duan=P2^1;char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};int i,j,k,num,shi,ge; void delay(int a) {for(i=0;i void display(int shi,int ge){wei=1;P1=0xfe;wei=0;duan=1;P1=table[shi];duan=0;wei=1; delay(5);P1=0xfd;wei=0; duan=1;P1=table[ge];duan=0; }void main() {TMOD=0x01;TH0=(65536-45872)/256; TL0=(65536-45872)%256; EA=1; ET0=1; TR0=1; num=0; while(1) {delay(5);display(shi,ge); } }void T0_time() interrupt 1 {TH0=(65536-45872)/256; TL0=(65536-45872)%256; k++; if(k==20) { k=0; num++;if(num==60)num=0; shi=num/10; ge=num%10; } }3.实验接线,如图4-1。
单片机实验三-定时器实验
![单片机实验三-定时器实验](https://img.taocdn.com/s3/m/ff82ce2a6c85ec3a87c2c5de.png)
实验三 定时器实验 ——循环彩灯实验1、 实验目的1. 学习8051内部计数器的使用和编程方法。
2. 进一步掌握中断处理程序的编写方法。
2、 实验原理1. 定时常数的确定定时器/计数器的输入脉冲周期与机器周期一样,为振荡频率的1/12。
比如实验中时钟频率为12MHZ,现要采用中断方法来实现0.5秒延时,要在定时器1中设置一个时间常数,使其每隔0.05秒产生一次中断,CPU响应中断后将RO中计数值减一,令RO=0AH,即可实现0.5秒延时。
初值=65536-500002. 初始化程序包括定时器初始化和中断系统初始化,主要是对IP、IE、TCON、TMOD的相应位进行正确的设置,并将时间常数送入定时器中。
3. 设计中断服务程序和主程序中断服务程序除了要完成计数减一工作外,还要将时间常数重新送入定时器中,为下一次中断做准备。
主程序则用来控制发光二极管按要求顺序燃灭。
3、 实验要求由8051内部定时器1按方式1工作,即作为16位定时器使用,每0.05秒钟T1溢出中断一次。
P1口的P1.0~P1.7分别接发光二极管的L1~L8。
要求编写程序模拟一循环彩灯。
彩灯变化花样可自行设计。
建议变化花样为:L1、L2、…L8依次点亮;L1、L2、…L8依次熄灭;L1、L2、…L8全亮、全灭。
各时序间隔为0.5秒。
让发光二极管按以上规律循环显示下去。
4、 实验连线P1.0~P1.7分别接发光二极管L1~L8即可。
5、 程序org 0000hLjmp mainorg 000BhLjmp INTTorg 0100hmain:mov sp,#60h /*设置堆栈指针mov TMOD,#01h /*设置TMOD,仅由TRx控制中断,定时器模式,工作方式1mov TH0,#3CHMOV TL0,#0B0H /*设置初值x=65536-50000 (12M晶振)SETB EA /*开中断SETB ET0 /*开定时器中断T0SETB TR0 /*启动定时器MOV R1,#8 /*中断子程序工作方式1的工作次数MOV R2,#8 /*中断子程序工作方式2的工作次数MOV R3,#1 /*中断子程序工作方式3的工作次数MOV R0,#0AH /*延时次数(产生中断的次数)MOV A,#0FFHWAIT1:AJMP WAIT1INTT:MOV TH0,#3CHMOV TL0,#0B0H /*计数器赋初值DJNZ R0,RETT /*R0减1后判断延时的次数是否足够,足够顺序执行,不足够跳中断返回CJNE R1,#0,INTT1 /*判断彩灯工作方式1工作是否完毕,完毕顺序执行下一种方式,未完毕跳转继续执行此种方式CJNE R2,#0,INTT2 /*判断彩灯工作方式2工作是否完毕,完毕顺序执行下一种方式,未完毕跳转继续执行此种方式CJNE R3,#0,INTT3 /*判断彩灯工作方式3工作是否完毕,完毕顺序执行下一种方式,未完毕跳转继续执行此种方式 JMP INTT4 /*跳转执行第4种方式INTT1:MOV R0,#0AH /*重新向延时次数计数器赋初值CLR C /*C清零RLC A /*带进位左循环移位,低位移入0,即LED相继点亮(低电平亮)DEC R1 /*工作次数减1JMP RETT /*跳中断返回INTT2:MOV R0,#0AHSETB C /*C置1RRC A /*带进位右循环移位,高位移入1,即LED相继熄灭(低电平灭)DEC R2JMP RETTINTT3:MOV R0,#0AHMOV A,#0 /*8位LED灯全部点亮DEC R3JMP RETTINTT4:MOV R0,#0AHMOV P1,#0FFH /*8位LED灯全部熄灭MOV R1,#8MOV R2,#8MOV R3,#1MOV R0,#0AHMOV A,#0FFH /*重新装入相应初值,循环执行彩灯的四种工作方式JMP INTTRETT:MOV P1,A /*输出彩灯的各种状态RETIEND6、 结论通过本次试验掌握了8051内部计数器的使用和编程方法。
单片机定时器计数器实验报告
![单片机定时器计数器实验报告](https://img.taocdn.com/s3/m/7d19b197e43a580216fc700abb68a98271feac4a.png)
文档来源为:从网络收集整理.word 版本可编辑.欢迎下载支持.单片机定时器计数器实验报告篇一:单片机计数器实验报告篇一:单片机计数器实验报告计数器实验报告计数器实验报告㈠ 实验目的实验目的1. 学习单片机内部定时学习单片机内部定时//计数器的使用和编程方法;计数器的使用和编程方法;2. 2.进一步掌握中断处理程序的编程方法。
进一步掌握中断处理程序的编程方法。
㈡ 实验器材实验器材1. 2. 3. 4. 5.G6W 仿真器一台仿真器一台 MCS MCS —51实验板实验板 一台一台一台 PC PC 机 一台一台一台 电源 一台一台一台 信号发生器信号发生器 一台一台㈢ 实验内容及要求实验内容及要求8051内部定时计数器,按计数器模式和方式1工作,对P3.4P3.4((T0T0)引脚进行计数,使用)引脚进行计数,使用8051的T1作定时器,作定时器,50ms 50ms中断一次,看T0内每50ms 来了多少脉冲,将计数值送显(通过LED 发光二极管8421码来表示),1秒后再次测试。
秒后再次测试。
㈣ 实验说明实验说明1. 本实验中内部计数器其计数器的作用,外部事件计数器脉冲由P3.4引入引入定时器T0T0。
单片机在每个机器周期采样一次输入波形,。
单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变,这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样,同时这就决定了输入波形的频率不能超过机器周期频率。
能超过机器周期频率。
2. 2. 计数脉冲由信号发生器输入(从计数脉冲由信号发生器输入(从T0端接入)。
3. 计数值通过发光二极管显示,要求:显示两位,十位用L4L4~~L1的8421码表示,个位用L8L8~~L5的8421码表示码表示4. 将脉搏检查模块接入电路中,对脉搏进行计数,计算出每分钟脉搏跳动算出每分钟脉搏跳动次数并显示次数并显示㈤ 实验框图实验框图((见下页见下页) )程序源代码程序源代码 ORG 00000H LJMP MAIN ORG 00000H LJMP MAINORG 001BH AJMP MAIN1 MAIN:MOV SP,#60HMOV TMOD,#15H MOV 20H,#14H MOV TL1,#0B0H MOVTH1,#3CHMOV TL0,#00H;T0的中断入口地址的中断入口地址 ; ;设置T1做定时器做定时器,T0,T0做计数器,都于方式1工作工作 ; ;装入中断次数装入中断次数装入中断次数 ; ;装入计数值低装入计数值低8位 ;装入计数值高8位MOV TH0,#00HSETB TR1 ;启动定时器T1 SETB TR0 ;启动计数器T0SETB ET1 ;允许T1中断中断 SETB EA ; SETB EA ;允许CPU 中断中断 SJMP $; SJMP $;等待中断等待中断MAIN1: PUSH PSW PUSH ACC CLR TR0CLR TR1 MOV TL1,#0B0H MOV TH1,#3CHDJNZ 20H,RETUNT MOV 20H ,#14HSHOW: MOV R0,TH0 MOV R1,TL0MOV A,R1 MOV B,#0AH DIV ABMOV C,ACC.3MOV P1.0,C MOV C,ACC.2 MOV P1.1,C MOVC,ACC.1 MOV P1.2,C MOV C,ACC.0 MOV P1.3,CMOV 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.0MOV P1.7,C ;保护现场保护现场;装入计数值低8位;装入计数值高8位,50ms;,50ms;允许允许T1中断中断;未到1s,1s,继续计时继续计时继续计时 ;1s ;1s 到重新开始到重新开始;显示计数器T0的值的值;;读计数器当前值读计数器当前值 ; ;将计数值转为将计数值转为十进制十进制;显示部分,将A 中保存的十位赋给L0~L3 将B 中保存的各位转移到A 中 ;将个位的数字显示在将个位的数字显示在L4~L7上;RETUNT:MOV TL0,#00H;将计数器将计数器T0清零清零 MOV TH0,#00H MOV TH0,#00HSETB TR0SETB TR1POP ACCPOP PSWRETI ;中断返回中断返回在频率为1000HZ 时,时,L0~L7L0~L7显示为5050;频率为;频率为300HZ时,时,L0~L7L0~L7显示为1515,结果正确,程序可以正确运行。
单片机实验电子钟报告
![单片机实验电子钟报告](https://img.taocdn.com/s3/m/7f40ae9cab00b52acfc789eb172ded630b1c98bb.png)
实验四 电子钟(定时器、中断综合实验)一、实验目的熟悉MCS51类CPU 的定时器、中断系统编程方法, 了解定时器的应用、实时程序的设计和调试技巧。
二、实验内容编写一个时钟程序, 产生一个50ms 的定时中断, 对定时中断计数, 将时、分、秒显示在数码管上。
三、程序框图主程序中断处理电子钟程序框图四、实验步骤 1.连线说明: E5 区A0 ←→ A3 区A0 E5 区CS ←→ A3 区CS5 E5 区CLK ←→ B2 区2MHzE5 区A.B.C.D ←→ G5 区A.B.C.D (排线每个8 位, 注意高低位一致) 2.时间显示在数码管上五、程序清单 ms50 DATA 31H ;存放多少个50ms sec DATA 32H ;秒 min DATA 33H ;分hour DATA 34H ;时buffer DATA 35H ;显示缓冲区EXTRN CODE(Display8)ORG 0000HLJMP STARORG 000BH ;定时器T0中断处理入口地址LJMP INT_Timer0ORG 0100HSTAR: MOV SP,#60H ;堆栈MOV ms50,A ;清零ms50MOV hour,#12 ;设定初值: 12:59:50MOV min,#59MOV sec,#50MOV TH0,#60 ;定时中断计数器初值MOV TL0,#176 ;定时50msMOV TMOD,#1 ;定时器0: 方式一MOV IE,#82H ;允许定时器0中断SETB TR0 ;开定时器T0STAR1: LCALL Display ;调用显示JNB F0,$CLR F0SJMP STAR1 ;需要重新显示时间;中断服务程序INT_Timer0: MOV TL0,#176-5MOV TH0,#60PUSH 01HMOV R1,#ms50INC @R1 ;50ms单元加1CJNE @R1,#20,ExitIntMOV @R1,#0 ;恢复初值INC R1INC @R1 ;秒加1CJNE @R1,#60,ExitInt1MOV @R1,#0INC R1INC @R1 ;分加1CJNE @R1,#60,ExitInt1MOV @R1,#0INC R1INC @R1 ;时加1CJNE @R1,#24,ExitInt1MOV @R1,#0ExitInt1: SETB F0ExitInt: POP 01HRETIHexToBCD: MOV B,#10DIV ABMOV @R0,BINC R0MOV @R0,AINC R0RETDisplay: MOV R0,#bufferMOV A,secACALL HexToBCDMOV @R0,#10H ;第三位不显示INC R0MOV A,minACALL HexToBCDMOV @R0,#10H ;第六位不显示INC R0MOV A,hourACALL HexToBCDMOV R0,#bufferLCALL Display8RETENDEXTRN CODE (Display8)BUFFER DA TA 60HORG 0000HAJMP MAINORG 000BHAJMP IT0PMAIN: MOV TMOD,#01HMOV 20H,#20HCLR AMOV 52H,A ;计数和显示MOV 51H,A ;空间清零MOV 50H,#50HMOV 40H,AMOV 41H,AMOV 43H,AMOV 44H,AMOV 46H,AMOV 47H,ASETB ET0SETB EAMOV TH0,#9EH ;计数器赋初值MOV TL0,#58HSETB TR0MOV 45H,#11HMOV 42H,#11HMOV R0,#BUFFERLCALL Display8HERE: AJMP HEREIT0P: PUSH PSWPUSH ACCMOV TH0,#9EH ;重新转入计数值MOV TL0,#58HDJNZ 20H,RETURN ;计数不满20返回MOV 20H,#20H ;重置中断次数MOV A,#01H ;秒加1ADD A,50HDA A ;秒单元十进制调制PUSH ACCCJNE A,#60H,SWS ;是否到60秒, 否则返回MOV A,#00HSWS: MOV R5,ASW AP AANL A,#0FHMOV 41H,AMOV A,R5ANL A,#0FHMOV 40H,A ;满60秒, 秒单元清零LCALL AAAPOP ACCMOV 50H,ACJNE A,#60H,RETURNMOV 50H,#00HMOV A,#01H ;分单元加1ADD A,51H ;分单元十进制调整DA APUSH ACCCJNE A,#60H,SWS1;是否到60分, 否则返回MOV A,#00HSWS1: MOV R5,A·SW AP AANL A,#0FHMOV 44H,AMOV A,R5ANL A,#0FHMOV 43H,ALCALL AAAPOP ACCMOV 51H,ACJNE A,#60H,RETURNMOV 51H,#00H ;满60分, 分单元清零MOV A,#01H ;时单元加1ADD A,52HDA APUSH ACCCJNE A,#24H,SWS2 ;是否到24小时, 否则返回MOV A,#00HSWS2: MOV R5,ASW AP AANL A,#0FHMOV 47H,AMOV A,R5ANL A,#0FHMOV 46H,ALCALL AAAPOP ACCMOV 52H,ACJNE A,#24H,RETURNMOV 52H,#00H ;满24小时, 时单元清零RETURN:POP PSWPOP ACCRETIAAA: MOV R0,#40H ;计数器的值赋MOV R1,#60H ;给显示空间MOV R5,#08HABC: MOV A,@R0MOV @R1,AINC R1INC R0DJNZ R5,ABCMOV R0,#BUFFERLCALL Display8RETEND六、思考题1.电子钟走时精度与哪些有关系?中断程序中给TL0赋值为什么与初始化程序中不一样?2、使用定时器方式二, 重新编写程序。
51单片机定时器实验内容
![51单片机定时器实验内容](https://img.taocdn.com/s3/m/d8c596880408763231126edb6f1aff00bed570e8.png)
51单片机定时器实验内容
51单片机定时器实验的内容可以根据不同的需求和目的进行调整,以下是
一些可能的实验内容:
1. 定时器初始化实验:实验目标是了解如何初始化51单片机的定时器,包括设置定时器的工作模式、计数值、初始值等。
实验中可以编写代码,让定时器在初始化后自动开始计时,并在达到指定时间后产生中断或输出信号。
2. 定时器中断实验:实验目标是了解如何使用51单片机的定时器中断功能,实现定时器在达到指定时间后自动触发中断,并在中断服务程序中执行特定的操作。
实验中可以编写代码,让定时器在达到指定时间后自动进入中断服务程序,并在其中执行特定的操作,如点亮LED灯等。
3. 定时器PWM输出实验:实验目标是了解如何使用51单片机的定时器PWM输出功能,实现定时器输出PWM波形。
实验中可以编写代码,让定时器输出不同占空比的PWM波形,并通过调整占空比来控制LED灯的亮
度等。
4. 定时器与外部事件同步实验:实验目标是了解如何使用51单片机的定时器与外部事件同步,实现定时器在外部事件发生时自动开始计时或停止计时。
实验中可以编写代码,让定时器在外部事件发生时自动开始计时或停止计时,并在达到指定时间后执行特定的操作。
以上是一些常见的51单片机定时器实验内容,通过这些实验可以深入了解51单片机的定时器工作原理和用法,并提高编程技能和硬件控制能力。
单片机定时器实训报告
![单片机定时器实训报告](https://img.taocdn.com/s3/m/c45d5d5ce97101f69e3143323968011ca300f725.png)
一、实训背景随着电子技术的不断发展,单片机作为嵌入式系统中的核心部件,得到了广泛应用。
定时器作为单片机的重要功能模块,能够实现定时、计数等功能,是单片机应用系统设计的关键技术之一。
为了提高学生的单片机应用能力,本次实训选取了基于51单片机的定时器应用作为实训内容。
二、实训目的1. 掌握51单片机定时器的基本原理和工作方式;2. 学会使用定时器实现定时、计数等功能;3. 培养学生动手实践能力和解决实际问题的能力;4. 提高学生对单片机应用系统的设计水平。
三、实训内容本次实训主要涉及以下内容:1. 51单片机定时器原理及工作方式;2. 定时器初始化编程;3. 定时器中断编程;4. 定时器应用实例:LED流水灯控制。
四、实训步骤1. 学习51单片机定时器原理及工作方式,掌握定时器的工作模式、定时器计数范围等参数;2. 编写定时器初始化程序,包括定时器模式选择、计数初值设置等;3. 编写定时器中断服务程序,实现定时功能;4. 编写LED流水灯控制程序,实现定时器中断触发LED流水灯效果;5. 将程序烧录到单片机中,进行实验验证。
五、实训结果与分析1. 定时器初始化编程:根据实训要求,设置了定时器模式、计数初值等参数,实现了定时器定时功能;2. 定时器中断编程:编写了定时器中断服务程序,实现了定时器中断触发功能;3. LED流水灯控制:通过定时器中断触发,实现了LED流水灯效果,验证了定时器应用实例的正确性。
在实训过程中,遇到以下问题及解决方法:1. 定时器计数初值设置错误:通过查阅资料,了解了定时器计数初值的计算方法,正确设置了计数初值;2. 定时器中断服务程序编写错误:通过分析程序,发现中断服务程序中存在逻辑错误,修改后程序运行正常。
六、实训心得通过本次实训,我深刻认识到以下内容:1. 定时器在单片机应用系统中的重要作用,掌握了定时器的基本原理和工作方式;2. 编程过程中,要注重代码的可读性和可维护性,提高编程效率;3. 在遇到问题时,要善于查阅资料,分析问题原因,并采取有效措施解决问题;4. 实训过程中,要注重理论与实践相结合,提高动手实践能力。
单片机定时器实验报告
![单片机定时器实验报告](https://img.taocdn.com/s3/m/64b30a6a905f804d2b160b4e767f5acfa1c783e5.png)
单片机定时器实验报告单片机定时器实验报告概述:单片机是一种集成电路,具有微处理器核心,用于控制和执行各种任务。
在嵌入式系统中,单片机的定时器是一个重要的组件,用于生成精确的时间延迟和周期性的信号。
本实验旨在通过使用单片机的定时器模块,学习和掌握定时器的基本原理和应用。
实验目的:1. 理解单片机定时器的工作原理;2. 掌握定时器的基本配置和使用方法;3. 实现定时器产生精确的时间延迟和周期性的信号。
实验器材:1. 单片机开发板;2. USB数据线;3. 电脑。
实验步骤:1. 连接单片机开发板和电脑,确保开发板与电脑正常通信;2. 打开开发板的开发环境软件,创建一个新的工程;3. 在工程中选择定时器模块,并进行基本配置,如选择定时器模式、预分频系数等;4. 编写程序代码,实现定时器功能。
可以选择定时产生一个精确的时间延迟,或者产生一个周期性的信号;5. 将程序代码下载到单片机开发板中,并运行程序;6. 观察实验结果,验证定时器的工作是否符合预期。
实验结果:经过实验,我们成功实现了单片机定时器的功能。
通过设置定时器的工作模式和预分频系数,我们可以生成精确的时间延迟和周期性的信号。
实验结果与预期一致,证明了定时器的可靠性和准确性。
实验总结:通过本次实验,我们深入了解了单片机定时器的原理和应用。
定时器作为嵌入式系统中的重要组件,具有广泛的应用前景。
掌握定时器的基本配置和使用方法,对于开发嵌入式系统和实现各种功能非常重要。
通过实验,我们不仅学到了理论知识,还掌握了实际操作的技巧和经验。
然而,单片机定时器的应用不仅仅局限于时间延迟和周期性信号的生成。
在实际工程中,定时器还可以用于测量脉冲宽度、频率计数、PWM波形生成等。
因此,我们在以后的学习和工作中,应该进一步探索和应用定时器的其他功能,以满足不同场景下的需求。
总之,单片机定时器是嵌入式系统中不可或缺的组件之一。
通过本次实验,我们对定时器的原理和应用有了更深入的了解。
单片机实验二 定时器实验程序
![单片机实验二 定时器实验程序](https://img.taocdn.com/s3/m/afa842adb0717fd5360cdc66.png)
sbit L3=P0^7;
unsigned char keynum;
unsigned int lasttime=100;
bit bset=0;
unsigned char keyscan();
void display();
unsigned char getkey();
void set();
code unsigned char table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};
sbit H1=P3^6;
sbit H2=P3^7;
sbit L1=P0^5;
void main()
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
P1M1=0x00;
P1M0=0xff;
while(1)
{
keynum=keyscan();
display();
set();
}
}
void timer0() interrupt 1
{
P1=0X00;
W1=1;
W2=0;W3=1;W4=1;
P1=table[(unsigned char)(lasttime%1000/100)]|a;
}
else if(ct1<60)
{
P1=0X00;
W2=1;
W3=0;W4=1;W1=1;
P1=table[(unsigned char)(lasttime%1000%100/10)]|a;
实验三 定时器实验 实验报告
![实验三 定时器实验 实验报告](https://img.taocdn.com/s3/m/788db82daaea998fcc220e65.png)
课程名称:单片机实验题目:实验三定时实验学生姓名:专业:电子信息科学与技术班级:学号:指导教师:张涛实验三 定时器实验一、实验目的1、掌握单片机系统定时器断的原理及使用方法。
二、实验原理 (一)、单片机定时器/计数器的结构 1.定时器/计数器组成框图8051单片机内部有两个16位的可编程定时器/计数器,称为定时器0(T0)和定时器1(T1),可编程选择其作为定时器用或作为计数器用。
此外,工作方式、定时时间、计数值、启动、中断请求等都可以由程序设定,其逻辑结构如图所示。
_____INT1(P3.3)_____INT0(P3.2)T1(P3.5)T0(P3.4)图 8051定时器/计数器逻辑结构图由图可知,8051定时器/计数器由定时器 T0、定时器T1、定时器方式寄存器TMOD 和定时器控制寄存器TCON 组成。
2.定时/计数器的方式寄存器和控制寄存器定时/计数器的初始化通过定时/计数器的方式寄存器TMOD 和控制寄存器TCON 完成。
1)定时/计数器方式寄存器TMODTMOD 为T1、T2的工作方式寄存器,其格式如下:TMOD D7 D6 D5 D4 D3 D2 D1 D0(89H) TMOD 的低 (1(2)T /C :功能选择位。
0/C =时,设置为定时器工作方式;1/C =时,设置为计数器工作方式。
(3)GATE :门控位。
当GA TE=0时,软件控制位TR0或TR1置1即可启动定时器;当GATE=1时,软件控制位TR0或TR1须置1,同时还须0INT (P3.2)或1INT (P3.3)为高电平方可启动定时器,即允许外中断0INT 、1INT 启动定时器。
TMOD 不能位寻址,只能用字节指令设置定时器工作方式,高4位定义T1,低4位定义T0。
复位时,TMOD 所有位均置0。
2)定时器/计数器控制寄存器TCONTCON 的作用是控制定时器的启动、停止,标志定时器的溢出和中断情况。
定时器控制字TCON 的格式如下:TCON (88H ) 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H(1) TCON.7 TF1:定时器1溢出标志位。
单片机实验定时器 Timer AB
![单片机实验定时器 Timer AB](https://img.taocdn.com/s3/m/e2d02a7b8e9951e79b8927b5.png)
单片机原理实验报告学生姓名所在班级实验日期实验组成员实验成绩2014.5.15实验三、定时器Timer A/B【实验目的】1. 熟悉μ’nSP™IDE集成开发环境的使用方法;1. 通过实验熟悉定时器Timer A/B 的工作原理。
2. 掌握预置数单元P_TimerA/B_Data 和定时控制单元P_TimerA/B_Ctrl 的设置方法3. 掌握定时器Timer A/B 的编程方法。
【实验设备】1. 装有Windows 系统和µ’nSP™ IDE 集成开发环境的PC 机一台,µ’nSP™十六位单片机实验箱一个,示波器一台。
2. 本实验用到的实验箱硬件模块为:SPCE061A 核心及周边电路模块(包含32 个I/O 口),发光二极管电路模块。
【实验要求】1. 编程要求:编写一个汇编语言程序。
2. 实现功能:设置不同的计数初值、不同的占空比和不同的时钟源,IOB8 同时和一个发光二极管和示波器连接,用户可以通过观察二极管点亮的持续时间和熄灭持续的时间,通过示波器观察信号波形的占空比变化和频率。
3. 实验现象:计数初值不同、占空比不同、时钟源不同,发光二极管的亮灭状态变化就不同。
【实验原理】TimerA 和TimerB 定时器启动后,在预置数单元P_TimerA_Data 或P_TimerB_Data 内置入一个计数初值N 后,在所选的时钟源频率下开始向计数增加的方向计数N+1,N+2,……FFFEH,当计数到FFFFH 后,再来一个计数时钟则溢出到0000H,这时的计数时间为(FFFF-N)*1/(TimerA 或者TimerB 的时钟源频率)。
比如,当启动TimerA 定时器后,TimerA 时钟源频率选择为1024Hz,计数初值设置为0xF7FF,则它的计数时间为(FFFF-F7FF)*1/1024=2s。
产生溢出时,一方面,如果已经打开TimerA 或者TimerB中断,会产生中断请求信号TA_TimeOut_INT 或TB_TimeOut_INT,被CPU 响应后执行相应的中断服务程序。
51单片机定时器计数器汇编实验
![51单片机定时器计数器汇编实验](https://img.taocdn.com/s3/m/48d270f30242a8956aece40f.png)
实验三、定时器/计数器实验报告一、实验内容1、编写单片机程序,用T0作定时器产生周期为1秒的方波(用查询方式编程),从P3.6,P3.7口输出,将P3.7接到示波器显示该方波波形;用T1作计数器对从P3.6输出的方波进行计数,计数结果通过P1口输出到发光二极管显示。
(计算机仿真)2、编写单片机程序,用T0作定时器产生周期为1秒的方波(用查询方式编程),从P3.6,P3.7口输出,将P3.6输出的方波接到P3.5口通过T1作计数器对该方波进行计数,计数值由LED显示,用存储示波器显示P3.7输出的方波。
(实验台验证)3、设计一个60秒计时器,秒计时结果用两位LED数码管显示。
(计算机仿真)二、实验仿真图(1)脉冲计数实验程序ORG 0000HBEGIN:MOV TMOD,#51H MOV TL0,#0F0HMOV TH0,#0DBHMOV TH1,#00HMOV TL1,#00HMOV P1,#00HMOV P0,#00HMOV P2,#00HMOV R3,#00HMOV R4,#00HSETB TR0SETB TR1S1: MOV R1,#33HMOV A,R4MOV R5,TL1ADD A,R5MOV P1,AMOV R2,TL1CJNE R2,#10,S2MOV TH1,#00HMOV TL1,#00HINC R3MOV A,R3MOV DPTR,#TAB1MOVC A,@A+DPTRMOV P2,AMOV P0,#3FHMOV A,R3MOV B,#0AHMUL ABMOV R4,AMOV P1,R4AJMP NEXTS2: MOV R1,#33HMOV DPTR,#TAB1MOV A,TL1MOVC A,@A+DPTRMOV P0,AAJMP NEXT LOOP: JBC TF0,NEXT AJMP LOOPNEXT: MOV TL0,#0F0HMOV TH0,#0DBHDJNZ R1,LOOPCPL P3.6CPL P3.7AJMP S1TAB1:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;(SW3,SW4为:00) END(2)60秒定时器实验程序ORG 0000HBEGIN:MOV TMOD,#51HTL0,#0F0HMOVMOVTH0,#0DBHTH1,#00HMOVTL1,#00HMOVR3,#00HMOVP0,#00HMOVP2,#00HMOVSETBTR0TR1SETBS1: MOV R1,#33HR2,TL1MOVR2,#10,S2CJNETH1,#00HMOVTL1,#00HMOVR3INCR3,#06H,S4CJNER3,#00HMOVS4: MOV A,R3DPTR,#TAB1MOVA,@A+DPTRMOVCP2,AMOVMOVP0,#3FHNEXTAJMPS2: MOV R1,#33HDPTR,#TAB1MOVA,TL1MOVA,@A+DPTRMOVCMOVP0,ANEXTAJMPLOOP: JBC TF0,NEXTLOOPAJMPNEXT: MOV TL0,#0F0HTH0,#0DBHMOVR1,LOOPDJNZP3.6CPLCPLP3.7S1AJMPTAB1:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END。
单片机定时器实验程序
![单片机定时器实验程序](https://img.taocdn.com/s3/m/7076bcda195f312b3169a573.png)
定时器#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intUchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e, 0x79,0x71}; //0~F的共阴极字段码表uchar chocode[]={0xfe,0xfd,0xfb,0xf7}; //位选码表uchar N,M;sbit P3_5=P3^5; //位定义sbit P3_6=P3^6;sbit P3_7=P3^7;sbit P0_4=P0^4;sbit P3_3=P3^3;sbit P3_4=P3^4;sbit P0_7=P0^7;//===================================延时1毫秒======================void Delay1ms(){unsigned char i, j;_nop_();i = 2;j = 199;do{while (--j);} while (--i);}//==================================延时300毫秒=====================void Delay300ms(){unsigned char i, j, k;i = 3;j = 26;k = 223;do{do{while (--k);} while (--j);} while (--i);}//=====================================数码管显示==================void display(uchar N,M){P0=chocode[3];P1=table[M];Delay1ms();P1=0;P0=chocode[2];P1=table[N];Delay1ms();P1=0;P0=chocode[1];P1=table[0];Delay1ms();P1=0;P0=chocode[0];P1=table[0];Delay1ms();P1=0;}//========================扫描键盘,设置倒计时初值=============== void Scan_Key(void){uchar m;bit FLAG0=0;P3_6=0;P3_7=1;P0=0xff;m=P0;switch(m&0xf0){case 0xd0: N++;FLAG0=1;if(M==10){N++;M=0;}break;case 0xb0: M++;FLAG0=1;if(M==10){M=0;N++;}break;default: break;}if(FLAG0){while((P0|0x0f)!=0xff) //松手检测{display(N,M);}}else{display(N,M);}P3_6=1;P3_7=0;P0=0xff;m=P0;switch(m&0xf0){case 0xd0: N--;FLAG0=1;break;case 0xb0: M--;FLAG0=1;break;default: break;}if(FLAG0){while((P0|0x0f)!=0xff) //松手检测{display(N,M);}}else{display(N,M);}P3_7=1;P3_6=0;}//==========================主函数==============================main(){P1=0x0;while(1){uchar i;Scan_Key(); //扫描键盘,确定倒计时初值P0=0xff;if(P0_7==0) //检测是否开始倒计时{while((P0|0x0f)!=0xff) //松手检测{display(N,M);}while(1) //定时开始{for(i=0;i<120;i++) //循环定时120次,实现定时1秒钟{TMOD=0x01;TH0=0xd8;TL0=0xf0;TR0=1;display(N,M);do{display(N,M);} while(TF0==0);//检测是否完成一次定时}if((M|N)==0) //定时到,所有灯闪烁{while(1){P0=0xff;P2=0x00;P0_4=0;P3_3=0;P3_4=0;P3_5=0;Delay300ms();P2=0xff;P0_4=1;P3_3=1;P3_4=1;P3_5=1;Delay300ms();}}if(M==0){M=9;N--;}else M--;}}}}。
单片机定时器实验程序
![单片机定时器实验程序](https://img.taocdn.com/s3/m/f3b26200844769eae009ed6b.png)
void tim(void) interrupt 1 using 1
{
ET0=0; TR0=0;
//关闭中断 保证程序顺利运行
TH0=0xd8; //重新赋值
TL0=0xf0;
count++;
if (count==100)
{
count=0;
time--; //second 秒减 1
if(time==0) //second
void DelayMS(uint xms)
{
uint i,j;
for(i=xms;i>0;i--) for(j=300;j>0;j--);
}
/******************************************************************/
/*
显示函数 1
*/
/******************************************************************/
T1_init();
//P0=0xff;
while(1) { keyscan(); // k = key(); switch(k) { case KM: { Display1(); break; }
//无任何按键按下 默认为 0 返回
case 1: { time+=10; time=time%99; Display1(); k=KM; break; }
void T1_init()
{ TMOD |=0x01;//定时器设置 10ms in 12M crystal,工作在模式 1,16 位定时 TH0=0x0dc; TL0=0x00; EA=1; //开总中断 //IE= 0x82; //打开中断
C单片机定时器及数码管控制实验报告
![C单片机定时器及数码管控制实验报告](https://img.taocdn.com/s3/m/53ca142549d7c1c708a1284ac850ad02de8007a0.png)
C单片机定时器及数码管控制实验报告一、实验目的:1.理解单片机的定时器的工作原理和使用方法;2.掌握单片机控制数码管显示的方法;3.综合运用单片机定时器和数码管控制来实现对时间的计时功能。
二、实验器材:1.STC89C52单片机开发板;2.4位数码管;3.相关电源电缆;4.相关串口连接线;5.PC机。
三、实验原理:1.定时器的工作原理:定时器是单片机中的一个重要模块,它可以用来产生一定时间间隔的定时中断。
在STC89C52单片机中,有两个可编程定时器,分别是Timer0和Timer1、定时器的工作方式有两种:定时器工作模式和计数器工作模式。
通过设定定时器的工作模式、预分频系数以及计数初值,可以实现定时中断。
2.数码管的控制原理:数码管是一种常见的数码显示器材,一般由多个LED组成,通过对LED的开关控制来实现不同数字的显示。
使用单片机控制数码管可以实现数字的动态显示。
通常使用行扫描和列驱动两种方法来控制数码管的显示。
在本实验中,我们使用列驱动的方法来控制数码管的显示。
3.单片机定时器和数码管控制实验的原理流程:(1)初始化定时器设置,包括设定工作模式、预分频系数和计数初值。
(2)初始化数码管连接引脚,并将引脚置为输出状态。
(3)在定时器中断中,通过改变数码管显示的值来实现时间的动态显示。
四、实验步骤:1.硬件连线将STC89C52单片机开发板上的P0口连接到4位数码管的输入口,共7根线。
其中6根线对应4位数码管的6个段输入,另外1根线连接到4位数码管的控制端,用于控制数码管的选通位。
2.软件编程(1)定义头文件和端口变量#include <reg52.h>#define uint unsigned int#define uchar unsigned charsbit DIG1=P0^0; // 数码管第1位sbit DIG2=P0^1; // 数码管第2位sbit DIG3=P0^2; // 数码管第3位sbit DIG4=P0^3; // 数码管第4位sbit DULA=P0^4; // 数码管段选sbit WELA=P0^5; // 数码管位选uchar code ledData[16]={ // 共阳数码管动态显示数值表,共16个字符0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};(2)初始化函数void Init_Timer0(void) // 初始化定时器0TMOD,=0x01;//设定为定时器模式,工作模式1TH0=0xfc; // 给定初值,定时1msTL0=0x18;ET0=1;//打开定时器0中断TR0=1;//启动定时器0void Init_Timer1(void) // 初始化定时器1TMOD,=0x10;//设定为定时器模式,工作模式1TH1=0xf8; // 给定初值,定时10msTL1=0xcc;ET1=1;//打开定时器1中断TR1=1;//启动定时器1(3)定时器中断函数void Timer0Interrupt( interrupt 1 // 计时定时器中断函数static uchar count=0;TH0=0xfc;TL0=0x18;count++;if(count>=1000) // 1秒到count=0;LED_Place=0; // 置位数码管位置Digit_Index++; // 下一个要显示的数字if(Digit_Index>=8)Digit_Index=0;}if(LED_Place==1) // 第2位数码管LEDX=ledData[N%10];DIG2=0;DIG1=1;//第2位数码管显示}else if(LED_Place==2) // 第3位数码管LEDX=ledData[N/10%10];DIG3=0;DIG2=1;//第3位数码管显示}else if(LED_Place==3) // 第4位数码管LEDX=ledData[N/100%10];DIG4=0;DIG3=1;//第4位数码管显示}else // 第1位数码管LEDX=ledData[N/1000%10];DIG1=0;DIG4=1;//第1位数码管显示}}(4)主函数void mainInit_Timer0(; // 初始化定时器0Init_Timer1(; // 初始化定时器1EA=1;//全局中断使能while(1)//主函数其他处理}五、实验效果:经过上述步骤的硬件连接和软件编程,当单片机开始运行后,数码管将开始显示时间。
单片机 实验三中断及定时器实验
![单片机 实验三中断及定时器实验](https://img.taocdn.com/s3/m/1f47a472336c1eb91a375d61.png)
实验三:中断及定时器实验一、实验目的:1、弄清中断的概念、基本原理,掌握中断技术的应用2、了解中断初始化的方法,中断向量安装和中断服务子程序的设计方法。
3、了解定时/计数器的工作原理及MCS51单片机的定时器内部结构4、掌握时间常数计算方法5、掌握定时器初始化方法和定时中断程序设计方法二、实验内容:定时器实验1、这个是一个电子钟走时程序,利用定时器T0产生50ms中断,中断计数器中断20次为1秒,利用秒信号进行电子钟计时。
先读懂下面程序段,然后编辑、编译程序,并在伟福仿真器上模拟调试该程序。
程序清单如下:COUNT EQU 7FHCOUNT1 EQU 7EHS_MEM EQU 73HM_MEM EQU 72HH_MEM EQU 71HORG 0000HLJMP MAINORG 000BHLJMP INT_T0 ;“*1”MAIN: MOV SP,#2FHMOV TMOD,#BMOV TH0,#03CH ;50毫秒中断时间常数MOV TL0,#0BHMOV IE,#B ;开放T0MOV IP,#0MOV S_MEM,#0MOV M_MEM,#0MOV H_MEM,#0MOV COUNT,#20SETB TR0;______________________________________________________ W AIT:NOPSJMP W AITINT_T0: MOV TL0,#0BHMOV TH0,#3CHDJNZ COUNT,EXT_T0MOV COUNT,#20 ;恢复中断计数器INC S_MEM ;“*2”MOV A,S_MEMCJNE A,60,EXT_T0MOV S_MEM,#0INC M_MEMMOV A,M_MEMCJNE A,#60,EXT_T0MOV M_MEM,#0INC H_MEMMOV A,H_MEMCJNE A,#13,EXT_T0MOV H_MEM,#0EXT_T0: RETI2、按下列要求修改程序或回答问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三单片机内部定时器应用实验目的1、理解单片机内部定时器的工作原理及使用方法2、了解单片机定时中断程序的编写和调试方法3、掌握定时器的基本使用方法实验仪器单片机开发板、万利仿真机、稳压电源、计算机实验原理1、单片机定时器的工原理MCS-51 单片机内部有两个16 位可编程的定时器/计数器T0 和T1。
它们即可用作定时器方式,又可用作计数器方式。
其中T0 由TH0 和TL0 计数器构成;T1 由TH1 和TL1 计数器构成。
工作于定时器方式时,通过对机器周期(新型51单片机可以对振荡周期计数)的计数,即每一个机器周期定时器加1,来实现定时。
故系统晶振频率直接影响定时时间。
如果晶振频率为12MHZ,则定时器每隔(1/12MHZ)×12=1us 加1。
工作于计数器方式时,对P3.4 或P3.5 管脚的负跳变(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=65.536ms ,小于1s 。
故必须设置一个软件计数单元,即假设定时器定时中断时间为50ms ,则必须定时中断20次才达到1s 并对秒计时单元加1,20即为软件计数次数。
最后再把秒计时单元的值转成显示数码送显示缓冲区。
图4-9 定时器应用程序流程图实验内容1、单片机定时器秒计时器LEDCLK BIT P3.4;LEDDIN BIT P2.3;LEDDATA DATA P0;DSEG AT 30Hdispbuf: ds 8;显示缓冲区timetick: ds 1second: ds 1minute: ds 1hour: ds 1TIMECOUNT EQU 50000CSEG at 0000HSJMP MAINORG 000BHLJMP P_T0ORG 0030;中断服务程序P_T0:PUSH PSWPUSH ACCPUSH DPHPUSH DPLMOV TH0,#(65535-TIMECOUNT)/256MOV TL0,#(65535-TIMECOUNT)MOD 256SETB RS0;后面所使用的R0~r7DJNZ timetick,P_T02MOV timetick,#20INC second; cjne second,#60,P_T01; MOV SECOND,#0; inc minute;P_T01: MOV A,secondMOV B,#100DIV ABMOV R0,#dispbuf+2MOV @R0,ADEC R0MOV A,BMOV B,#10DIV ABMOV @R0,ADEC R0MOV @R0,BP_T02: CLR RS0POP DPLPOP DPHPOP ACCPOP PSWRETIMAIN:mov sp,#60hMOV dispbuf,#0MOV dispbuf+1,#0MOV dispbuf+2,#0MOV dispbuf+3,#0MOV dispbuf+4,#0MOV dispbuf+5,#0MOV dispbuf+6,#0MOV dispbuf+7,#0MOV TH0,#(65535-TIMECOUNT)/256;3CAF MOV TL0,#(65535-TIMECOUNT)MOD 256;MOV TMOD,#01H;设定定时器的工作方式SETB ET0;允许T0溢出中断SETB TR0;启动t0SETB EA;开启总中断MAIN1:ACALL DISPSJMP MAIN1DISP:MOV R6,#8MOV R0,#dispbufCLR LEDCLKCLR LEDDINNOPDISP1: SETB LEDCLKMOV A,@R0MOV DPTR,#LEDTABMOVC A,@A+DPTRMOV LEDDATA,A;MOV R7,#5ACALL DelayNmsINC R0SETB LEDDINCLR LEDCLKDJNZ R6,DISP1RET; 大延时DelayNms:D1: ACALL Delay1msDJNZ R7,D1RET; 延时子程序Delay1ms:push 07mov R7,#250delay1:NOPNOPDJNZ R7,delay1POP 07RETLEDTAB:DB 03H,9FH,25H,0DH;0,1,2,3DB 99H,49H,41H,1FH;4,5,6,7DB 01H,09H,11H,0C1H;8,9,A,BDB 63H,85H,61H,71H;C,D,E,FEND2、修改上面的程序,设计一个N秒倒计时器(N为学号后两位)。
倒计时时间到后,重新开始计时。
LEDCLK BIT P3.4;LEDDIN BIT P2.3;LEDDATA DATA P0;DSEG AT 30Hdispbuf: ds 8;显示缓冲区timetick: ds 1second: ds 1minute: ds 1hour: ds 1TIMECOUNT EQU 50000CSEG at 0000HSJMP MAINORG 000BHLJMP P_T0ORG 0030H;中断服务程序P_T0:PUSH PSWPUSH ACCPUSH DPHPUSH DPLMOV TH0,#(65535-TIMECOUNT)/256MOV TL0,#(65535-TIMECOUNT)MOD 256 SETB RS0;后面所使用的R0~r7DJNZ timetick,P_T01MOV timetick,#20dec secondMOV A,secondCJNE A,#00,P_T01MOV SECOND,#33P_T01: MOV A,secondMOV B,#100DIV ABMOV R0,#dispbuf+2MOV @R0,ADEC R0MOV A,BMOV B,#10DIV ABMOV @R0,ADEC R0MOV @R0,BCLR RS0POP DPLPOP DPHPOP ACCPOP PSWRETIMAIN:mov sp,#60hMOV dispbuf,#0MOV dispbuf+1,#0MOV dispbuf+2,#0MOV dispbuf+3,#0MOV dispbuf+4,#0MOV dispbuf+5,#0MOV dispbuf+6,#0MOV dispbuf+7,#0mov timetick,#20mov second,#33MOV TH0,#(65535-TIMECOUNT)/256;3CAF MOV TL0,#(65535-TIMECOUNT)MOD 256;MOV TMOD,#01HSETB ET0;允许T0溢出中断SETB TR0;启动t0SETB EA;开启总中断MAIN1:ACALL DISPSJMP MAIN1DISP:MOV R6,#8MOV R0,#dispbufCLR LEDCLKCLR LEDDINNOPDISP1: SETB LEDCLKMOV A,@R0MOV DPTR,#LEDTABMOVC A,@A+DPTRMOV LEDDATA,A;MOV R7,#5ACALL DelayNmsINC R0SETB LEDDINCLR LEDCLKDJNZ R6,DISP1RET; 大延时DelayNms:D1: ACALL Delay1msDJNZ R7,D1RET; 延时子程序Delay1ms:push 07mov R7,#250delay1:NOPNOPDJNZ R7,delay1POP 07RETLEDTAB: DB 03H,9FH,25H,0DH;0,1,2,3DB 99H,49H,41H,1FH;4,5,6,7DB 01H,09H,11H,0C1H;8,9,A,BDB 63H,85H,61H,71H;C,D,E,FEND思考题1、在实验程序基础上编写一个24小时计时时钟。
LEDCLK BIT P3.4;LEDDIN BIT P2.3;LEDDATA DATA P0;DSEG AT 30Hdispbuf: ds 8;显示缓冲区timetick: ds 1second: ds 1minute: ds 1hour: ds 1TIMECOUNT EQU 50000CSEG at 0000HSJMP MAINORG 000BHLJMP P_T0ORG 0030H;中断服务程序P_T0:PUSH PSWPUSH ACCPUSH DPHPUSH DPLMOV TH0,#(65535-TIMECOUNT)/256MOV TL0,#(65535-TIMECOUNT)MOD 256SETB RS0;后面所使用的R0~r7DJNZ timetick,P_T02MOV timetick,#20INC secondMOV A,secondCJNE A,#60,P_T01;秒MOV SECOND,#0inc minute;MOV A,minute;分CJNE A,#60,P-T01INC HOUR;时MOV A,HOURCJNE A,#12,P-T01MOV HOUR,#0P_T01: MOV A,secondMOV B,#100DIV ABMOV R0,#dispbuf+2MOV @R0,ADEC R0MOV A,BMOV B,#10DIV ABMOV @R0,ADEC R0MOV @R0,BP_T02: CLR RS0POP DPLPOP DPHPOP ACCPOP PSWRETIMAIN:mov sp,#60hMOV dispbuf,#0MOV dispbuf+1,#0MOV dispbuf+2,#0MOV dispbuf+3,#0MOV dispbuf+4,#0MOV dispbuf+5,#0MOV dispbuf+6,#0MOV dispbuf+7,#0MOV TH0,#(65535-TIMECOUNT)/256;3CAF MOV TL0,#(65535-TIMECOUNT)MOD 256;MOV TMOD,#01H;设定定时器的工作方式SETB ET0;允许T0溢出中断SETB TR0;启动t0SETB EA;开启总中断MAIN1:ACALL DISPSJMP MAIN1DISP:MOV R6,#8MOV R0,#dispbufCLR LEDCLKCLR LEDDINNOPDISP1: SETB LEDCLKMOV A,@R0MOV DPTR,#LEDTABMOVC A,@A+DPTRMOV LEDDATA,A;MOV R7,#5ACALL DelayNmsINC R0SETB LEDDINCLR LEDCLKDJNZ R6,DISP1RET; 大延时DelayNms:D1: ACALL Delay1msDJNZ R7,D1RET; 延时子程序Delay1ms:push 07mov R7,#250delay1:NOPNOPDJNZ R7,delay1POP 07RETLEDTAB: DB 03H,9FH,25H,0DH;0,1,2,3DB 99H,49H,41H,1FH;4,5,6,7DB 01H,09H,11H,0C1H;8,9,A,BDB 63H,85H,61H,71H;C,D,E,FEND2、说说把显示程序放在主程序和定时中断程序的优缺点。