单片机定时器实验程序

合集下载

单片机定时器实验报告

单片机定时器实验报告

一、实验目的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产生一个溢出信号。

单片机定时器实验报告

单片机定时器实验报告

单片机定时器实验报告
单片机定时器实验报告
简介
•实验名称:单片机定时器实验
•实验目的:掌握单片机中定时器的工作原理及使用方法•实验设备:单片机开发板、电源等
实验内容
1.单片机定时器的基本概念和原理
2.单片机定时器的分类和特点
3.实验步骤和流程
–步骤1:搭建实验电路
–步骤2:编写单片机程序
–步骤3:下载程序到单片机
–步骤4:观察定时器的工作情况
4.实验结果和分析
实验结果
•在实验过程中,我们成功搭建了单片机定时器实验电路,并编写了相应的程序。

通过下载程序到单片机,观察到定时器按照预设
的时间间隔产生中断,并执行相应的任务。

•实验结果表明,我们掌握了单片机定时器的使用方法,可以实现定时功能。

实验分析
•单片机定时器是一种重要的计时和控制设备,广泛应用于各种电子设备中。

•通过本次实验,我们深入了解了单片机定时器的工作原理和使用方法,对于日后的电子设计和开发有着重要的意义。

实验总结
•通过本次实验,我们学习了单片机定时器的基本知识,掌握了单片机定时器的使用方法,并成功实现了定时功能。

•在实验过程中,我们发现了一些问题,并通过调试和修改程序进行了解决。

这对我们提高了动手实践和问题解决能力有很大帮助。

•通过本次实验,我们对于单片机定时器有了更深入的了解,为今后的学习和应用打下了坚实的基础。

参考资料
•《单片机原理与应用》
•单片机实验教材及课件。

51单片机定时器实验报告

51单片机定时器实验报告

51单片机定时器实验实验内容:实验内容:(1)编写程序使定时器0或者定时器1工作在方式1,定时50ms触发蜂鸣器。

C语言程序#include<reg52.h>#define uint unsigned int#define ucahr unsigned charsbit FM=P0^0;void main(){TMOD=0x01;TH0=(65535-50000)/256;TH0=(65535-50000)%256;EA=1; //开总中断ET0=1; //开定时器0中断TR0=1;while(1);}void T0_time()interrupt 1 {TH0=(65535-50000)/256; TH0=(65535-50000)%256; FM=~FM;}汇编程序ORG 0000HJAMP MAINORG 000BHLJMP INT0_INTORG 0100HMIAN: SETB EASETB ET0AJMP $INT0_INT:MOV R2,#0FAHMOV R3,#0C8HDJNZ R3,$DJNZ R2,INT0_INTRETI(2)编写程序使定时器0或者定时器1工作在方式1,定时500ms使两位数码管从00、01、02……98、99每间隔500ms加1显示。

#include<reg52.h>#define uint unsigned int#define ucahr unsigned charuint num,num1;sbit FM=P0^7;int shi,ge,a;void delay(uint);void shumaguan();unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; //共阳极数码管0-F编码表void main(){TMOD=0x01;TH0=(65535-50000)/256; TH0=(65535-50000)%256; EA=1; //开总中断ET0=1; //开定时器0中断TR0=1;while(1){shumaguan();}}void T0_time()interrupt 1 {TH0=(65535-50000)/256; TH0=(65535-50000)%256;num1++;if(num1==10) {num1=0;num++;shi=num/10;ge=num%10;if(num==100) {num=0;}}}void shumaguan() {P3=0x01;P2=table[shi];delay(5);P3=0x02;P2=table[ge]; delay(5);void zuoyi(){a=~P3;a=a<<1;P3=~a;if(P3==0xfb){P3=0xfe;}}void delay(uint x) {int i,j;for(i=0;i<x;i++)for(j=0;j<110;j++);}(3)编写程序使定时器0或者定时器1工作在方式2,自动重装载模式,定时500ms 使两位数码管从00、01、02……98、99每间隔500ms加1显示。

单片机定时器实验报告doc

单片机定时器实验报告doc

单片机定时器实验报告篇一:单片机实验报告——定时器实验四定时器实验自动化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。

单片机定时器实验报告

单片机定时器实验报告

单片机定时器实验报告篇一:单片机实验报告——定时器实验四定时器实验自动化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。

单片机实验四-定时器和中断的应用实验(1)

单片机实验四-定时器和中断的应用实验(1)

实验四定时器和中断应用实验一、实验目的1. 学习定时器的编程和使用2.学习中断的使用方法二、实验说明P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。

由准双向口结构可知当P1口用作输入口时,必须先对口的锁存器写“1”,若不先对它写“1”,读入的数据是不正确的。

三、实验内容及步骤1.使用单片机最小应用系统。

用八位数据线连接单片机P1口JD2F与八位逻辑电平显示模块JD3I,打开相关模块电源。

2.用串行数据通信线连接计算机与仿真器,把仿真器插到单片机最小系统的锁紧插座中,请注意仿真器的方向:缺口朝上。

打开单片机最小应用系统的电源开关。

3.打开Keil uVision2仿真软件,首先建立本实验的项目文件,编制源程序,进行编译,直到编译无误。

4.进行软件设置,选择硬件仿真,选择串行口,设置波特率为38400。

5.打开模块电源和总电源,点击开始调试按钮,点击RUN按钮运行程序,观察发光二极管显示情况。

实验1用导线分别把单片机最小应用系统的 P1.1接拨断开关K0,P1.0接发光二极管L0。

采用定时中断处理方式,通过拨断开关K0控制二个不同占空比的脉冲信号输出,即当K0=0时,从P1.0输出周期为1秒占空比为50%的方波、当K0=1时,从P1.0输出周期为1秒占空比为20%的方波。

实验2用导线将实验箱上的单次脉冲源的负脉冲信号接到单片机最小应用系统的INT0( P3.2)输入引脚,模拟中断请求脉冲输入信号,P1.0接发光二极管L0。

程序响应中断请求执行中断服务程序使发光二极管L0闪烁3次,这样每输入一个中断请求脉冲(即按下单次脉冲源按钮),使发光二极管L0闪烁3次要求同学自己思考:修改实验2程序,每输入一个中断请求脉冲(即按下单次脉冲源按钮),使P1口连接的8个发光二极管从右到左(L0到L7)循环点亮一次(每个发光二极管闪烁3次)。

再按下单次脉冲源按钮,重复上述过程。

实验3用导线将拨断开关K0接到单片机最小应用系统的INT1( P3.3)输入引脚,并将开关K0拨在低电平位置K0=0。

单片机定时器及外部中断实验报告

单片机定时器及外部中断实验报告

单片机实验报告(二)实验名称:定时器及外部中断*名:**学号:*********班级:通信2班时间:2013.11南京理工大学紫金学院电光系一、实验目的1、学习定时/计数器的应用;2、学习外部中断技术的基本使用方法;3、学习中断处理程序的编程方法。

二、实验原理(1)以P1口作为输出口,定时器实现1s定时,实现显示数的1s加1,外部中断0键盘外接BUTTON,实现对显示数快速加1的控制。

(2)系统板上硬件连线把“单片机系统”A2区的J61接口的P1.0~P1.6端口与D1区的J52接口相连。

把“单片机系统”A2区的INT0端口用导线连接到D1区的KEY1端口上;三、实验内容利用定时器中断控制1s的输出,使用外部中断0使得显示的数加1. 程序如下:#include<reg51.h>#define uchar unsigned char#define uint unsigned intvoid delay(){uint x,y;for(x=100;x>0;x--)for(y=110;y>0;y--);}uchar m,flag;void main(){uchar a,b;TMOD=0x01;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EX0=1; EX1=1; PX1=1; ET0=1; EA=1; 中断开启TR0=1;m=0; P1=0;while(1){while(flag==0); flag=0;if(m==100) m=0;m++;a=m/10;b=m+a*6;P1=b;}}void timer0() interrupt 1 using 0{uchar t;TH1=(65536-50000)/256;TL1=(65536-50000)%256;if(t<20) t++;else { flag=1; t=0; }}void exter0() interrupt 0 using 1{if(INT0==0) delay();if(INT0==0) flag=1;}void exter1() interrupt 2 using 2{if(INT1==0) delay();if(INT1==0) m=0;}将编译好的程序下载到仿真电路中四、小结与体会通过本次定时器中断实验,我对定时器的工作原理有了更加深入的理解,这也是建立在向同学请教的基础上。

单片机定时器的应用proteus仿真实验报告总结

单片机定时器的应用proteus仿真实验报告总结

单片机定时器的应用proteus仿真实验报告总结一、实验目的
本次实验旨在通过使用Proteus仿真软件,掌握单片机定时器的应用,了解定时器的工作原理和使用方法。

二、实验原理
单片机定时器是一种常用的计时和延时控制器,它可以在特定时间内
产生一个周期性的信号。

单片机定时器通常由一个计数器和一个比较
器组成。

计数器会不断计数,当计数值达到设定值后,比较器会发出
一个触发信号。

通过对比较器输出信号进行处理,可以实现各种延时
和周期性控制。

三、实验材料
1. Proteus仿真软件
2. 单片机模块
3. LED灯
4. 电阻
5. 电容
四、实验步骤
1. 打开Proteus软件,并新建一个电路图。

2. 在电路图中添加单片机模块、LED灯、电阻和电容等元件。

3. 连接电路图中各元件之间的线路。

4. 设置单片机定时器参数,并编写程序代码。

5. 进行仿真测试,并记录测试结果。

五、实验结果分析
在本次实验中,我们成功地使用了Proteus仿真软件进行了单片机定
时器的应用测试。

通过设置单片机定时器参数和编写程序代码,我们
成功地实现了对LED灯的周期性控制,达到了预期的效果。

六、实验总结
通过本次实验,我们深入了解了单片机定时器的工作原理和应用方法,并掌握了使用Proteus仿真软件进行单片机定时器测试的技能。

这对
于我们今后的学习和工作都具有很大的帮助。

51单片机定时器实验内容

51单片机定时器实验内容

51单片机定时器实验内容
51单片机定时器实验的内容可以根据不同的需求和目的进行调整,以下是
一些可能的实验内容:
1. 定时器初始化实验:实验目标是了解如何初始化51单片机的定时器,包括设置定时器的工作模式、计数值、初始值等。

实验中可以编写代码,让定时器在初始化后自动开始计时,并在达到指定时间后产生中断或输出信号。

2. 定时器中断实验:实验目标是了解如何使用51单片机的定时器中断功能,实现定时器在达到指定时间后自动触发中断,并在中断服务程序中执行特定的操作。

实验中可以编写代码,让定时器在达到指定时间后自动进入中断服务程序,并在其中执行特定的操作,如点亮LED灯等。

3. 定时器PWM输出实验:实验目标是了解如何使用51单片机的定时器PWM输出功能,实现定时器输出PWM波形。

实验中可以编写代码,让定时器输出不同占空比的PWM波形,并通过调整占空比来控制LED灯的亮
度等。

4. 定时器与外部事件同步实验:实验目标是了解如何使用51单片机的定时器与外部事件同步,实现定时器在外部事件发生时自动开始计时或停止计时。

实验中可以编写代码,让定时器在外部事件发生时自动开始计时或停止计时,并在达到指定时间后执行特定的操作。

以上是一些常见的51单片机定时器实验内容,通过这些实验可以深入了解51单片机的定时器工作原理和用法,并提高编程技能和硬件控制能力。

单片机定时器实验报告

单片机定时器实验报告

单片机定时器实验报告单片机定时器实验报告概述:单片机是一种集成电路,具有微处理器核心,用于控制和执行各种任务。

在嵌入式系统中,单片机的定时器是一个重要的组件,用于生成精确的时间延迟和周期性的信号。

本实验旨在通过使用单片机的定时器模块,学习和掌握定时器的基本原理和应用。

实验目的:1. 理解单片机定时器的工作原理;2. 掌握定时器的基本配置和使用方法;3. 实现定时器产生精确的时间延迟和周期性的信号。

实验器材:1. 单片机开发板;2. USB数据线;3. 电脑。

实验步骤:1. 连接单片机开发板和电脑,确保开发板与电脑正常通信;2. 打开开发板的开发环境软件,创建一个新的工程;3. 在工程中选择定时器模块,并进行基本配置,如选择定时器模式、预分频系数等;4. 编写程序代码,实现定时器功能。

可以选择定时产生一个精确的时间延迟,或者产生一个周期性的信号;5. 将程序代码下载到单片机开发板中,并运行程序;6. 观察实验结果,验证定时器的工作是否符合预期。

实验结果:经过实验,我们成功实现了单片机定时器的功能。

通过设置定时器的工作模式和预分频系数,我们可以生成精确的时间延迟和周期性的信号。

实验结果与预期一致,证明了定时器的可靠性和准确性。

实验总结:通过本次实验,我们深入了解了单片机定时器的原理和应用。

定时器作为嵌入式系统中的重要组件,具有广泛的应用前景。

掌握定时器的基本配置和使用方法,对于开发嵌入式系统和实现各种功能非常重要。

通过实验,我们不仅学到了理论知识,还掌握了实际操作的技巧和经验。

然而,单片机定时器的应用不仅仅局限于时间延迟和周期性信号的生成。

在实际工程中,定时器还可以用于测量脉冲宽度、频率计数、PWM波形生成等。

因此,我们在以后的学习和工作中,应该进一步探索和应用定时器的其他功能,以满足不同场景下的需求。

总之,单片机定时器是嵌入式系统中不可或缺的组件之一。

通过本次实验,我们对定时器的原理和应用有了更深入的了解。

单片机实验二 定时器实验程序

单片机实验二 定时器实验程序
sbit L2=P0^6;
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;

单片机实验3 中断、定时器计数器实验

单片机实验3 中断、定时器计数器实验

西南科技大学实验报告课程名称:单片机原理及应用A实验名称:中断、定时器/计数器实验姓名:学号:班级:生医1401指导教师:雷华军西南科技大学信息工程学院制实验题目数码管动态扫描显示驱动、键盘动态扫描驱动一、实验目的1、熟练巩固单片机开发环境KEIL界面的相关操作和PROTUES仿真软件的操作,会使用HEX文件进行单片机的仿真。

2、了解定时器的原理和四种工作方式的使用方法,学习定时器的相关应用,包括产生信号和计数,利用定时器进行延时等。

3、进一步掌握熟练单个数码管以及多位数码管的显示原理,学会将0~1000的数字进行显示。

4、掌握利用单片机产生矩形方脉冲的相关原理。

二、实验原理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下,T0计数器被分成两个独立的8为计数器TL0和TH0。

3、定时器间隔1ms产生一个脉冲利用单片机1 P3.0口进行脉冲的输出,通过定时器进行端口定时控制,实现每1ms高低电平变换。

就可以实现一个占空比为50%的矩形脉冲输出。

对于定时器的定时功能实现,需要进行定时器模式选择,定时器初值设定。

4、利用中断进行脉冲的计数将单片机1 P3.0口输出的脉冲连接到单片机2的中断INT0口P3.2,通过脉冲的高低电平变换触发中断0,进行脉冲个数的计数。

实验二 单片机定时器计数器编程

实验二  单片机定时器计数器编程

实验二单片机定时器/计数器编程一、实验目的1、掌握单片机定时器/计数器的工作方式;2、掌握单片机定时器/计数器的编程方法。

二、实验内容1、学习单片机定时器/计数器的工作方式、初始化以及应用等;2、利用单片机定时器/计数器编写程序驱动开发板上的LED灯按一定规律工作。

基本要求:利用定时器1控制LEDB闪烁,闪烁频率为2Hz。

提高要求:读懂教材定时器/计数器的应用实例4和5,在实验室开发板上采用分模块设计的方法编程实现以下两个任务之一:1、控制LEDB闪烁,2.5秒一个周期,亮0.5s,灭2s,周而复始。

2、将教材例5对P1.0和P1.1的控制,改为对LEDB和LEDG的控制,时序不变。

三、实验设备1、STC单片机开发板;2、PC机以及串口线。

四、实验分析及关键代码(1)利用定时器1控制LEDB闪烁,闪烁频率为2Hz。

实验分析:控制LEDB闪烁,频率为2Hz,即0.5s。

解决思路:定时器工作方式选0x01,计数器初值为(65536-50000),循环10次即为0.5s。

代码如下:#include<reg51.h>#define uchar unsigned char sbit A=P2^4;uchar i=0;void main (){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;while(1){while(TF0){TF0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;i++;if(i==10){A=!A;i=0;}}}}(2)控制LEDB闪烁,2.5秒一个周期,亮0.5s,灭2s,周而复始。

解决思路:设置两个循环,计数器初值设为(65536-50000),亮灯循环10次,灭灯循环40次。

代码如下:#include<reg51.h>#define uchar unsigned charsbit A=P2^4;uchar i=0;void main (){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;while(1){while(TF0){TF0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;i++;if(i==10){A=1;}if(i==50){A=0;i=0;}}}}五、实验总结对软件及计数器的操作及代码不太熟悉,多次查询课本及上网查找资料后懂得计数器工作方式及计数操作,其他问题迎刃而解。

单片机实验定时器 Timer AB

单片机实验定时器 Timer AB

单片机原理实验报告学生姓名所在班级实验日期实验组成员实验成绩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单片机定时器计数器汇编实验

实验三、定时器/计数器实验报告一、实验内容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。

单片机定时器实验程序

单片机定时器实验程序

定时器#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--;}}}}。

单片机定时器实验程序

单片机定时器实验程序

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; //打开中断

单片机 实验三中断及定时器实验

单片机  实验三中断及定时器实验

实验三:中断及定时器实验一、实验目的: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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ORG 0000H
LJMP START
ORG 001BH ;定时器/计数器1中断程序入口地址
LJMP INT
ORG 0100H
START: MOV TMOD,#10H ;计数器置为方式1
MOV TL1,#0B0H ;装入时间常数
MOV TH1,#03CH
SETB ET1 ;允许定时器T1中断
SETB EA ;允许总中断
SETB TR1 ;开始计数
MOV R0,#05H ;05是进入中断的次数LOOP: MOV R1,#00H
MOV R2,#26H ;灯的状态循环次数LOOP1: MOV A,R1
ACALL TABLE
MOV P1,A
INC R1
LOOP2: CJNE R0,#00H,LOOP2
MOV R0,#05H
DJNZ R2,LOOP1
LJMP LOOP
TABLE: INC A ;从表中取显示码入累加器
MOVC A,@A+PC
RET
DB 0FFH,0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,80H,0H
DB 01H,03H,07H,0FH,1FH,3FH,7FH,0FFH,00H,0FFH,0FEH DB 0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH,0BFH,0DFH DB 0EFH,0F7H,0FBH,0FDH,0FEH,0FFH,00H,0FFH,00H INT: CLR TR1 ;停止计数
DEC R0 ;计数值减一
MOV TL1,#0B0H ;重置时间常数初值
MOV TH1,#03CH
SETB TR1 ;开始计数
RETI ;中断返回
END
将T1改为T0,并且溢出间隔为0.05s
ORG 0000H
LJMP START
ORG 001BH ;定时器/计数器1中断程序入口地址
LJMP INT
ORG 0100H
START: MOV TMOD,#01H ;计数器置为方式1
MOV TL1,#78H ;装入时间常数
MOV TH1,#0CH
SETB ET0 ;允许定时器T1中断
SETB EA ;允许总中断
SETB TR0 ;开始计数
MOV R0,#05H ;05是进入中断的次数
LOOP: MOV R1,#00H
MOV R2,#25H ;灯的状态循环次数
LOOP1: MOV A,R1
ACALL TABLE
MOV P1,A
INC R1
LOOP2: CJNE R0,#00H,LOOP2
MOV R0,#05H
DJNZ R2,LOOP1
LJMP LOOP
TABLE: INC A ;从表中取显示码入累加器
MOVC A,@A+PC
RET
DB 0FFH,07FH,3FH,1FH,0FH,07H,03H,01H,00H
DB 80H,81H,0C1H,0C3H,0E3H,0E7H,0F7H,0FFH
DB 00H,0FFH,00H,0FFH,0EFH,0E7H,0C7H,0C3H,83H,81H,01H,00H DB 01H,03H,07H,0FH,1FH,3FH,7FH,0FFH
INT: CLR TR1 ;停止计数
DEC R0 ;计数值减一
MOV TL1,#78H ;重置时间常数初值
MOV TH1,#0CH
SETB TR1 ;开始计数
RETI ;中断返回
END。

相关文档
最新文档