关于51单片机定时器与蜂鸣器的微信小程序 定时器,出了点问题,求帮助,本人小白

&>&&>&&>&&>&51单片机 利用定时器和蜂鸣器唱歌
51单片机 利用定时器和蜂鸣器唱歌
上传大小:10KB
51单片机上用汇编语言实现的利用定时器和蜂鸣器唱歌程序
综合评分:4(1位用户评分)
所需积分:1
下载次数:18
审核通过送C币
创建者:nigelyq
创建者:scaulaughter
课程推荐相关知识库
上传者其他资源上传者专辑
开发技术热门标签
VIP会员动态
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
android服务器底层网络模块的设计方法
所需积分:0
剩余积分:720
您当前C币:0
可兑换下载积分:0
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为234。
51单片机 利用定时器和蜂鸣器唱歌
会员到期时间:
剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:单片机关于定时器的大作业实验报告(共10篇)
您现在的位置:&&
单片机关于定时器的大作业实验报告(共10篇)
相关热词搜索:
篇一:单片机关于定时器的大作业实验报告 课 程 设 计 报 告
基于微处理器的定时器设计 一.硬件系统的设计: (1)设计要求: 本课程设计的定时器,待机状态是一台时钟,以秒为单位两点闪烁,可设置多个闹铃时间,蜂鸣器鸣叫时间持续一分钟,并可作秒表使用,可控制秒表启停。
(2) 设计目的: 1. 复习和巩固所学过的知识,利用此毕业设计正好可以对所学过的知识进 行系统的回顾和。 2. 拓展知识面,课堂的知识是远远满足不了设计的要求的,这就需要我们 主动去找寻更多的资料,了解更多的知识。 3. 培养了设计能力和解决实际问题的能力,同时增强了自学能力,通过设 计完整的单片机系统也初步掌握了组成系统、编程、调试等能力。 4. 通过本LCD电子钟的设计初步了解了单片机应用系统开发研制过程,软 件和硬件设计的方法。 5. 本课程设计目的是制作基于微处理器的定时器,将学过的微处理器硬件 和软件知识,以及电子线路知识进行综合应用,形成一个能实际运行的电子作品。
(3) 系统组成及工作原理 该定时器主要由单片机,复位电路 ,电源,蜂鸣器和开关构成。本定时器采用ATMEL公司的AT89S51单片机为核心,使用晶振11.0592MHz
晶振与单片机AT89S51相连,通过软件编程的方法实现12分钟为一个周期,同时LCD显示分钟和秒的要求。
(a)硬件的设计: 本设计的硬件系统主要由以下几个模块来实现:控制模块、输入模块、输出模块、电源模块。 控制模块主要用开关实现秒表与时钟以及闹钟之间的变换。。 输入模块主要用于向控制器模块输入各种信息。 输出模块主要用于实时的实现各种显示。 电源模块主要用于向整个硬件系统供电。 (b)设计电路连线原理图: (c)时钟电路本设计是采用内部时钟方式,用一个11.0592MHz晶振和两个30Pf瓷片电容组成,为单片机提供标准时钟,其中两个瓷片电容起微调作用.其电路图见图
(d)AT89S51及LCD的引脚图: a) : b) (4)元器件清单(二)软件系统的设计: (1)使用单片机资源的情况: 设计时使用单片机资源的情况如下:AT89S51单片机的P0、P1、P2口作为液晶数据线接口,其中,P0口接液晶分个位,P1接液晶秒十位,P2接液晶秒个位。P3 口接时钟电路和控制开关,用单片机定时器0中方式1来控制定时器运行。 (2)软件系统的各个模块功能: 本设计的软件系统主要采用以下基本模块来实现: 主程序、中断服务程序、开关控制和液晶显示程序。
主程序用于对于各个程序模块的运行及控制,以及各个模式程序的初始化。特别是定时中断的初始值。实验中定时时篇二:51单片机定时器实验 51单片机定时器实验 实验内容: 实验内容: (1)编写程序使定时器0或者定时器1工作在方式1,定时50ms触发蜂鸣器。 C语言程序 #include&reg52.h& #define uint unsigned int #define ucahr unsigned char sbit FM=P0^0; void main() { TMOD=0x01; TH0=()/256; TH0=()%256; EA=1;
//开总中断 ET0=1;
//开定时器0中断 TR0=1; while(1); } void T0_time()interrupt 1 {
} 汇编程序
ORG 0000H JAMP MAIN ORG 000BH TH0=()/256; TH0=()%256; FM=~FM; LJMP INT0_INT ORG 0100H MIAN: SETB EA
SETB ET0 AJMP $ INT0_INT:MOV R2,#0FAH
MOV R3,#0C8H DJNZ R3,$ DJNZ R2,INT0_INT RETI (2)编写程序使定时器0或者定时器1工作在方式1,定时500ms使两位数码管从00、01、02……98、99每间隔500ms加1显示。 #include&reg52.h& #define uint unsigned int #define ucahr unsigned char uint 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=()/256; TH0=()%256; EA=1;
//开总中断 ET0=1;
//开定时器0中断 TR0=1;while(1)
} void T0_time()interrupt 1 {
} void shumaguan() { P3=0x01; P2=table[shi]; delay(5); P3=0x02; P2=table[ge]; delay(5);
TH0=()/256; TH0=()%256; num1++; if(num1==10) {} num1=0; num++;
shi=num/10; ge=num%10;
if(num==100) {
} shumaguan();void zuoyi() {
} void delay(uint x) {
} (3)编写程序使定时器0或者定时器1工作在方式2,自动重装载模式,定时500ms使两位数码管从00、01、02……98、99每间隔500ms加1显示。 #include&reg52.h& #define uint unsigned int #define ucahr unsigned char uint num,num1; int shi,ge,a; void delay(uint); void shumaguan(); void zuoyi(); unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; //共阳极数码管0-F编码表 void main() int i,j; for(i=0;i&x;i++)
for(j=0;j&110;j++);
a=~P3; a=a&&1; P3=~a; if(P3==0xfb) { P3=0 }TMOD=0x02; TH0=255-200; TH0=255-200; EA=1;//开总中断 ET0=1;
//开定时器0中断 TR0=1; P3=0x01; while(1)
} void T0_time()interrupt 1 {
} void shumaguan() { num1++; if(num1==2500) {
num++;shi=num/10;
ge=num%10;if(num==100)
shumaguan();
}篇三:单片机定时器 定时器实验报告
㈠ 实验目的 1. 掌握单片机内部计数器的使用和编程方法; 2. 掌握中断处理程序的编程方法。 ㈡ 实验器材 1. 2. 3. 4. 5. G6W仿真器一台 MCS—51实验板
一台 示波器一台 ㈢ 实验内容及要求 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。㈣ 实验框图循环彩灯代码 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秒未到,返回重置中断次数 ;花样一 ;设置花样一循环次数;装入计数值低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秒未到,返回延时子程序DJNZ R1,$ DJNZ R2,DELAY1 RET RETUNT:POP ACCPOP PSW RETI中断返回 END
救护车警笛声程序 ORG
0000H AJMP MAIN ORG
0040H MAIN: MOV
R3,#20 MOV
TMOD,#10HMOV
TH1,#0FCH MOV
SETB TR1SETB ET1SETB EASJMP $S1: JBF0,S2
TL1,#18H CPL
DJNZ R1,ENDS
DJNZ R2,ENDS
R2,#10 SETB F0SJMP ENDS ;T0的中断入口地址;设置T1为定时器,工作方式1;装入计数值高8位;装入计数值低8位 ;启动定时器T1 ;允许T1中断 ;允许CPU中断 ;等待中断 ;高音部分 ;取反 ;F0赋值篇四:单片机实验报告——定时器 实验四 定时器实验
自动化121班
一.实验目的 掌握定时器的工作原理及四种工作方式,掌握定时器计数初始值的计算,掌握如何对定时器进行初始化,以及程序中如何使用定时器进行定时。
二.实验仪器 单片机开发板一套,计算机一台。 三.实验任务 编写程序,使用单片机开发板上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 &reg52.h&
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,
void delay(int a)
{ for(i=0;i&a;i++)for(j=0;j&100;j++);
} void display(int shi,int ge){wei=1;P1=0wei=0;
duan=1;P1=table[shi];duan=0;
delay(5); P1=0wei=0;
duan=1;P1=table[ge];duan=0; }
void main() { TMOD=0x01; TH0=()/256; TL0=()%256; EA=1; ET0=1; TR0=1; num=0; while(1) { delay(5);display(shi,ge); } } void T0_time() interrupt 1 { TH0=()/256; TL0=()%256; k++;
{ k=0; num++; if(num==60)num=0;
shi=num/10; ge=num%10;
} } 3.实验接线,如图4-1。 用一条8芯的杜邦线将单片机的P1与开发板的J3端子相连;用2条单芯杜邦线将单片机的P2.0、P2.1分别与开发板的位锁存(A)和段锁存(B)相连;用1个跳线将J50的两个端子连接,用于给数码管提供电源。 4.上机调试、运行程序。 5.记录实验程序。 6.分析实验中出现的问题。 7.独立完成实验报告。 五.实验总结: 通过本实验,我对定时器有了更深刻的理解。更熟练的应用定时器中断。并且我还额外扩展了本实验,实现了两位计数。收获甚多。篇五:单片机定时器实验报告 XXXX大学信息工程与自动化学院学生实验报告 ( 学年 第
二 学期 ) 课程名称:单片机开课实验室: 2010年
5月14日一.实验目的: 掌握定时器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) 置工作方式。 置计数初值。 中断设置。 启动定时器。 定时器/计数器由四种工作方式,所用的计数位数不同,因此,定时计数常数也就不同。在编写中断服务程序时,应该清楚中断响应过程: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=(216-定时时间) /256 tl0=(2-定时时间) mod 256 16 图1 定时器实验电路原理图 四.实验步骤: 1.打开Proteus ISIS编辑环境,按下表所列的元件清单添加元件。AT889C51元件,界面如图所示:元件全部添加时,点击所添加的文件,并点击右键,选择“编辑属性”; 元件全部添加后,在Proteus ISIS的编辑区域中按实验原理图连接硬件电路,连接结果如下图所示; 2.按实验要求在KeilC中创建项目,编辑、编译程序,程序如下图所示;由编译结果可见,程序无误,可进行导入。 3.将编译生成的目标码文件(后缀为.Hex)传入Proteus的实验电路中。 在proteus软件已经完成实验电路图中选中元件“AT89C51”,单击元件,添加已生成的.hex文件,点击“确定”,即可导入,如下图所示; 4.在Proteus ISIS仿真环境中运行程序,观察实验运行结果并记录。 点击左下角的运行按钮,即可看到运行结果,从00开始循环计数,秒计数到60时,自动从0开始,点击暂停按钮,记录实验结果如下图所示: 篇六:定时器综合实验报告 南京信息职业技术学院 综合实验报告1
课程:低功耗单片机应用技术 报告名称:定时器综合实验 班级:11431P 分组:分组2 姓名学号: 1. 综合练习名称:定时器综合实验
2. 综合练习目的: 1) 了解低功耗单片机结构及基本工作原理; 2) 掌握低功耗单片机IO口配置和使用方式; 3) 掌握低功耗单片机时钟系统的配置方式; 4) 掌握低功耗单片机定时器工作原理及配置方式; 5) 能独立完成对单片机程序的修改和编写。 3. 综合练习要求: 1)时钟配置:XT1和XT2打开,SMCLK=MCLK=3*XT2=12.00MHzACLK=XT1=32.767Hz; 2) 定时器:P7.4(TB0.2)输出PWM波,要求:频率50.00Hz;占空比可调的(2.5%~7.5%);高电平周期范围(0.5ms~2.5ms); 3)每按一下P2.1,高电平周期增加0.1每按一下P1.1,高电平周期减小0.1 4) 每按一下P2.1,LED1闪烁一下;每按一下P1.1,LED2闪烁一下; 4. 综合练习分析: 该程序的目的是为了输出稳定的PWM波来控制舵机。首先要设置时钟,需要把三倍的外部时钟XT2提供给SMCLK于MCLK=12.00MHz,XT1提供给ACLK =32.767Hz,这样就有频率50.00Hz了。之后就是占空比于高电平周期了,它要求占空比可调的(2.5%~7.5%),高电平周期范围(0.5ms~2.5ms)。要实现这个要求,就需要按键来实现了:每按一下P2.1,高电平周期增加0.1每按一下P1.1,高电平周期减小0.1ms,而按键就需要中断服务程序了, 中断服务程序是用IF语句来实现的。最后,该程序运行就可以来控制舵机了。而本实验还有一点要求,就是需要按键闪烁,也就是I/O端口的设置,这样本实验就完美成功了。5. 项目实施: 软件流程图 6.项目总结: 通过这次实验,加深了定时器的使用,以及定时器设置方法的应用,懂得了中断对于程序的作用和定时时间的设定。在这次实验之前,我对中断的概念总是很模糊,不太明白中断子程序该在什么时候执行,直到自己动手用汇编编程,翻书仔细把书中关于中断的部分看了一遍,在结合书上的例题终于对中断有了个大致的了解。 我们知道在其他单片机中我们测脉冲宽度可以利用外部中断在上升沿河下降沿各读取一次定时器值来测定。但51单片机没有上升沿中断,也就没有办法测出高电平宽度。现在我们可以这样做,令TR0=1,GATE=1,这时定时器的启动只有INT0控制。当INT0为高电平时定时器启动,为低电平时定时器关闭。我们设置下降沿中断,在中断中就可以读取高电平所占的时间了。但是这样做只能得到高电平时间按。要想得到脉冲周期,可以再开一个定时器,另外一个就正常工作,这样就可以得到脉冲周期。也就可以求出脉冲宽度了。 定时器会存在误差,原因是在执行定时器中断的时候,会占用3到8个机器周期不等。这段时间我们并没有算到计数器初值里面。要想消除误差: 1.可以把定时器低八位设为0,中断中只要给TH0赋值,因为此时定时器已经开始启动了,低八位其实已经不是0了。2.将低四位设为0.赋初值时,利用ORL TL1,# ;加上你设定的初值。还有其他方法。还有一点T0和T1的工作方式2看似工作方式是一样的,其实T1在方式2的时候不能中断,而T0是可以中断的。 通过这次实训,我收获了很多,一方面学习到了许多以前没学过的专业知识与知识的应用,另一方面还提高了自己动手做项目的能力。本次实训,是对我能力的进一步锻炼,也是一种考验。从中获得的诸多收获,也是很可贵的,是非常有意义的。在实训中我学到了许多新的知识。是一个让我把书本上的理论知识运用于实践中的好机会,原来,学的时候感叹学的内容太难懂,现在想来,有些其实并不难,关键在于理解。 附录(源程序代码): #include &msp430.h& void ClkInit(void); void TimerInit(void); void GPIOInit(void);
void main(void) { WDTCTL = WDTPW + WDTHOLD; ClkInit(); TimerInit(); GPIOInit(); __bis_(转载于: 写论文 网:)SR_register(GIE); while(1); }
#pragma vector=PORT1_VECTOR __interrupt void Port_1(void) { __delay_cycles(4000); if(0x02 & P1IN) {P1IFG &=~0x02;} else { P4OUT |= BIT7; if (TBCCR2 &= 7500) TBCCR2 = 7500;
else TBCCR2 = TBCCR2 + 300;
P1IFG &=~0x02; __delay_cycles(12000);
P4OUT &= ~BIT7;} }
#pragma vector=PORT2_VECTOR __interrupt void Port_2(void) { __delay_cycles(4000);if(0x02 & P2IN) { P2IFG &=~0x02;} else { P1OUT |= BIT0; if (TBCCR2 &= 1500) TBCCR2 = 1500;
else TBCCR2 = TBCCR2 - 300;篇七:51单片机定时器实验 电子信息工程学系实验报告 课程名称:单片机原理 实验项目名称:51定时器实验 实验时间: 班级:测控081 姓名:学号:
实 验 目 的: 熟悉keil仿真软件、伟福仿真器的使用和C51定时程序的编写。了解51单片机中定时、计数的概念,熟悉51单片机内部定时/计数器的结构与工作原理。掌握中断方式处理定时/计数的工作过程,掌握定时/计数器在C51中的设置与程序的书写格式以及使用方法。 实 验 原 理: 定时分类及原理 1.软件定时:即让机器执行一个程序段,这段程序本身没有具体的执行目的,只是为了磨时间。执行这段程序所需要的时间就是延时时间。这种程序前面已设计过。这种方法定时占用CPU执行时间,降低了CPU利用率。此次实验使用的是MCS-51系列单片机。 2.数字电路硬件定时:采用小规模集成电路器件如555,外接定时部件(电阻和电容)构成。这样的定时电路简单,但要改变定时范围,必须改变电阻和电容,这种定时电路在硬件连接好以后,修改不方便。 3.可编程定时/计数器:是为方便微型计算机系统的设计和应用而研制的,它是硬件定时,又很容易地通过软件来确定和改变它的定时值,通过初始化编程,能够满足各种不同的定时和计数要求,因而在嵌入式系统的设计和应用中得到广泛的应用。 8051型单片机有两个十六位定时/计数器T0、T1,有四种工作方式,跟定时/计数器相关的特殊功能寄存器有这样几个: 方式控制寄存器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。 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; 还需要编写中断服务函数: void
T0_srv(void) interrupt
1{ TL0 = a % 256;TH0 = a / 256; 中断服务程序段 } 4.启动定时器:TR0(TR1)= 1。 实 验 设 备 与 器 件 硬件:微机、WAVE单片机仿真器、单片机实验板、跳帽若干 软件:KEIL C51单片机仿真调试软件,伟福V系列仿真调试软件 实 验 内 容: 利用实验板上的一位LED数码管做显示,利用中断法编写定时程序,控制单片机定时器进行定时,所定时间为1S。刚开始LED数码管显示0,每过1S数码管的显示值增加1,当显示到59时返回0,依此反复。 实验的程序代码如下: #include&reg51.h& void mDelay (unsigned int Delay) { for(;Delay&0;Delay--) {for(b=0;b&124;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; a=-0.1*6*; 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=0 P0=tab[i]; mDelay(6000); P2=(P2&&1)|0x01; P0=tab[j]; mDelay(14000);} }} 实 验 结 果 及 分 析: 本题实验的记数结果如下:
实验分析如下: 本实验是通过定时器来达成在LED数码管从00秒到59秒的显示过程的。首先,利用定时器先实现定时100ms,在累计记数到10次后就得到了1秒的效果,接着在LED数码管上相应的显示01,当到09时把十位记上1,以此类推得到在LED数码管上从00显示到59,最后,再置00。这样就达到了实验效果。
实 验 心 得:通过本次LED数码管进行51定时器实验,让我知道了对教材应该熟悉,因为教材是基础的,只有把基础的搞好了才能够进行其它层次的学习。其次此次试验我还懂得了有时候可以通过软件的仿真来验证书上的一些理论行的东西。通过C语言的编程,对LED灯的控制及51定时器的应用让我对单片机理解更加明了。 附 录: 延时函数: void mDelay(unsigned int Delay)
{ for(;Delay&0;Delay--) { for(i=0;i&124;i++) {;} }}篇八:单片机实验报告 03定时器 STM8S系列单片机原理与技术实验报告
课程名称: STM8S系列单片机原理与技术实验
学生学院: 物理与光电工程学院
专业班级: 电子科学与技术(3)学 号:
学生姓名: 郭桐汕 指导教师: 何榕礼
日 单片机实验三 一、实验名称: 10S定时器 二、实验目的: 利用tim2计数器,完成一个 10S 计时器的设计,数码显示 1~10,结束后重新开始。 三、实验工具: 计算机,stm8,数码管。四、代码:
#include &mapping.inc&#include &STM8S105C_S.inc& ;/******************** stm8单片机实验 ******************** ;文件名 : 10S定时器 ;描述:完成一个 10S 计时器的设计,数码显示 1~10 ;********************************************************* ;***************************接线************************** ;硬件:1、STM8s-discovery LED1
equ 2 lab1 equ 3 segment
word 'rom'
main.l ; initialize SP ld a,#{lab mult lab1}%OUT hello! ldw X,#stack_end
ldw SP,X #ifdef RAM0; clear RAM0 ram0_start.b EQU $ram0_segment_start ram0_end.b EQU $ram0_segment_end
ldw X,#ram0_start clear_ram0.l
incw X cpw X,#ram0_endjrule clear_ram0
#endif #ifdef RAM1 clear RAM1 ram1_start.w EQU $ram1_segment_start ram1_end.w EQU $ram1_segment_endldw X,#ram1_start clear_ram1.l
incw X cpw X,#ram1_endjrule clear_ram1
#endif ; clear stack stack_start.w EQU $stack_segment_start stack_end.w EQU $stack_segment_end
ldw X,#stack_start clear_stack.l
incw X cpw X,#stack_endjrule clear_stack
intel ;初始化PB,PE口,输出,推挽;mov PB_DDR,#0ffh
mov PB_CR1,#0ffh
mov PB_CR2,#0 mov PE_DDR,#0ffh
mov PE_CR1,#0ffh
mov PE_CR2,#0
mov PE_ODR,#0 next clrw x loop2 ld a,(LED_TAB,x) ld PB_ODR,a
call delay
jreq nextjp loop2delay push cc mov temp,#10 loop1 ldw y,#0ffffh loop decw y jrne loop dec temp jrne loop1 pop cc ret LED_TAB:八段共阴数码管字模 ;
dc.b3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh interrupt NonHandledInterrupt NonHandledInterrupt.l
iret motorola segment 'vectit' dc.l {$+main}dc.l {$+NonHandledInterrupt} ; trap
dc.l {$+NonHandledInterrupt} ; irq0
dc.l {$+NonHandledInterrupt} ; irq1
dc.l {$+NonHandledInterrupt} ; irq2
dc.l {$+NonHandledInterrupt} ; irq3
dc.l {$+NonHandledInterrupt} ; irq4
dc.l {$+NonHandledInterrupt} ; irq5
dc.l {$+NonHandledInterrupt} ; irq6
dc.l {$+NonHandledInterrupt} ; irq7
dc.l {$+NonHandledInterrupt} ; irq8 ; resetdc.l {$+NonHandledInterrupt} dc.l {$+NonHandledInterrupt} dc.l {$+NonHandledInterrupt} dc.l {$+NonHandledInterrupt} dc.l {$+NonHandledInterrupt} dc.l {$+NonHandledInterrupt} dc.l {$+NonHandledInterrupt} dc.l {$+NonHandledInterrupt} dc.l {$+NonHandledInterrupt} ; irq9 ; irq10 ; irq11 ; irq12 ; irq13 ; irq14 ; irq15 ; irq16 ; irq17
dc.l {$+NonHandledInterrupt}
dc.l {$+NonHandledInterrupt}
dc.l {$+NonHandledInterrupt}
dc.l {$+NonHandledInterrupt}
dc.l {$+NonHandledInterrupt}
dc.l {$+NonHandledInterrupt}
dc.l {$+NonHandledInterrupt}
dc.l {$+NonHandledInterrupt}
dc.l {$+NonHandledInterrupt}
dc.l {$+NonHandledInterrupt}
dc.l {$+NonHandledInterrupt}
dc.l {$+NonHandledInterrupt} end 五、实验结果和现象: 数码管显示 1~10。 ; irq18 ; irq19 ; irq20 ; irq21 ; irq22 ; irq23 ; irq24 ; irq25 ; irq26 ; irq27 ; irq28 ; irq29篇九:单片机实验7定时器实验 学院实验报告 课程名称:单片机原理及接口 实验项目名称:定时器实验实验时间: 班级:姓名: 学号:
实 验 目 的: 1.掌握定时和计数的原理; 2.掌握51单片机定时/计数器的基本概念:相关寄存器、定时与计数的脉冲来源; 3.掌握定时器的编程步骤(8句话)。 实 验 环 境: Win7、proteus、keil4 实 验 内 容 及 步 骤: 实验内容: 用定时器实现一个00-59自动走时的秒表功能,到59后跳到00。 步骤: 1.分析实验内容; 2.在proteus中构建所需电路图; 3.在keil中进行相应的编程; 4.把程序导入到proteus中观察现象。 实 验 结 果 及 分 析: 1.所画电路图为:
2.所编程序为: #include&reg52.h& #define uint unsigned int #define uchar unsigned char uchar num,se,ge, uchar code tablewei[]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//共阳数码管的位选 uchar code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 第 1 页 共 3 页0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//0到f的数字码void delay(uint z)//延时函数 { uint x,y; for(x=z;x&0;x--)
} void show(uchar a,uchar b)//在a的位置上显示b的值for(y=110;y&0;y--); { P2=tablewei[a];//开启数码管的第A位 P0=table[b];//在A位送b值
、 delay(5); } void main() { TMOD=0x01; TH0=()/256; TL0=()%256; EA=1; ET0=1; TR0=1; se=55; while(1) { ge=se%10; shi=se/10; show(8,ge); show(7,shi); } } void T0_time() interrupt 1 { TH0=()/256; TL0=()%256; num++; if(num==20) { num=0; se++; } if(se&=60) se=0; } 3.实验现象: 第 2 页 共 3 页 分析: 1.用定时器中断能够比较精确地进行定时; 2.用中断可以大大地节省CPU的资源。 第 3 页 共 3 页 篇十:C51单片机定时器及数码管控制实验报告 昆明理工大学信息工程与自动化学院学生实验报告 ( 201—201学年第1 学期) 课程名称:单片机技术 开课实验室:年
月日一、 实验目的 1. 掌握定时器 T0、T1 的方式选择和编程方法,了解中断服务程序的设计方法, 学会实时程序的调试技巧。 2. 掌握 LED 数码管动态显示程序设计方法。
二、 实验原理 1.89C51 单片机有五个中断源(89C52 有六个),分别是外部中断请求 0、外部中 断请求 1、定时器/计数器 0 溢出中断请求、定时器/计数器 0 溢出中断请求及串 行口中断请求。每个中断源都对应一个中断请求位,它们设置在特殊功能寄存器 TCON 和 SCON 中。当中断源请求中断时,相应标志分别由 TCON 和 SCON 的相应位 来锁寄。五个中断源有二个中断优先级,每个中断源可以编程为高优先级或低优 先级中断,可以实现二级中断服务程序嵌套。在同一优先级别中,靠内部的查询 逻辑来确定响应顺序。不同的中断源有不同的中断矢量地址。 中断的控制用四个特殊功能寄存器 IE、IP、TCON (用六位)和 SCON(用二位), 分别用于控制中断的类型、中断的开/关和各种中断源的优先级别。 中断程序由中断控制程序(主程序)和中断服务程序两部分组成: 1)中断控制程序用于实现对中断的控制; 2)中断服务程序用于完成中断源所要求的中断处理的各种操作。 C51 的中断函数必须通过 interrupt m 进行修饰。在 C51 程序设计中,当函数定 义时用了 interrupt m 修饰符,系统编译时把对应函数转化为中断函数,自动加 上程序头段和尾段,并按 MCS-51 系统中断的处理方式自动把它安排在程序存储 器中的相应位置。 在该修饰符中,m 的取值为 0~31,对应的中断情况如下: 0——外部中断 0 1——定时/计数器 T0 2——外部中断 1 3——定时/计数器 T1 4——串行口中断 5——定时/计数器 T2 其它值预留。 89C51 单片机内设置了两个可编程的 16 位定时器 T0 和 T1,通过编程,可以 设定为定时器和外部计数方式。T1 还可以作为其串行口的波特率发生器。
2. 定时器 T0 由特殊功能寄存器 TL0 和 TH0 构成,定时器 T1 由 TH1 和 TL1 构成, 特殊功能寄存器 TMOD 控制定时器的工作方式,TCON 控制其运行。定时器的中断 由中断允许寄存器 IE,中断优先权寄存器 IP 中的相应位进行控制。定时器 T0 的中断入口地址为 000BH,T1 的中断入口地址为 001BH。 定时器的编程包括: 1) 置工作方式。 2) 置计数初值。 3) 中断设置。4) 启动定时器。 定时器/计数器由四种工作方式,所用的计数位数不同,因此,定时计数常 数也就不同。
3.单片机的拉电流比较小(100~200uA),灌电流比较大(最大是 25mA,一般不 能超过 10mA),不能直接驱动数码管,需要扩流电路。可以用三级管来驱动,但 是 51 单片机只有 32 个 I/O 口,可能需要外接多种器件, I/O 口是不够用的。 故可选用 74HC573 锁存器来解决这个问题,开发板上数码管的硬件设计电路图, 如图 1 所示。 TX-1C 实验开发板用两个 74HC573 锁存器(输出电流较大,接口简单),通 过 P0 口控制六个数码管的段选及位选,其中 P2.6 控制锁存器 U1(DULA),P2.7 控制锁存器 U2(WELA)。单片机控制锁存器的锁存端,进而控制锁存器的输出, 这种分时控制的方法可方便地控制任意数码管显示任意数字。
图 1 LED 数码管电路原理图
三、 实验内容 利用动态扫描和定时器 1 在数码管上显示出从 765432 开始以 1/10 秒的速 度往下递减直至 765398 并保持显示此数,与此同时利用定时器 0 以 500MS 速度 进行流水灯从上至下移动,当数码管上数减到停止时,实验板上流水灯也停止 然后全部开始闪烁,3 秒后(用 T0 定时)流水灯全部关闭、数码管上显示出 “HELLO”。到此保持住。计算初值公式 定时模式 1 th0=(216-定时时间) / 256 tl0=(216-定时时间) % 256 四、 实验步骤 1、 按实验要求在 KeilC 中创建项目,编辑、编译程序。 2、 将编译生成的目标码文件(后缀为.Hex)下载到实验板电路中。 3、 在实验板中运行程序,观察实验运行结果并记录。
五、 实验结果 开始时数码管的数字是765432,随后是765429,流水灯显示的是第一个灯,实验结果如下图所示:当数码管显示765406时,流水灯显示是第六个灯,实现现象如下图所示:
当数码管显示765398时,流水灯显示的是第七个灯,由于LED灯变化快,难以捕捉到此时刻,以下图片是随后LED闪烁,数码管保持765398的现象: 本&&篇:《》来源于:
优秀范文,论文网站
本篇网址:/2016/shiyanbaogao_.html
好文大家读
Copyright &
All Rights Reserved.

我要回帖

更多关于 单片机蜂鸣器音乐代码 的文章

 

随机推荐