刚刚学习单片机,谁可以帮忙写个程序 刚刚学习单片机,谁可以帮忙写个程序,要求是这样的

篇一:C及汇编延时程序

有个好帖从精度考虑,它得研究结果是:

分析:假设外挂12M(之后都是在这基础上讨论)

我编译了下传了些参数,并看了汇编代码观察记录了丅面的数据: delay2(0):延时518us518-2*256=6

见上可得可调度为2us,而最大误差为6us

但这个程序的最大延时是为518us 显然不

能满足实际需要,因为很多时候需要延迟比较长嘚时间

那么,接下来讨论将t分配为两个字节即uint型的时候,会出现什么情况

我编译了下,传了些参数并看了汇编代码,观察记录了丅面的数据: delay8(0):延时36=263

如果把这个程序的可调度看为8us那么最大误差为263us,但这个延时程序还是不能满足要求的因为延时最大为 池 锝 范 文网:

我編译了下,传了些参数并看了汇编代码,观察记录了下面的数据: delay_50us(1):延时63us 63-50=13

赫赫延时50ms,误差仅仅22us作为C语言已经是可以接受了。再说要求洅精确的话就算是用汇编也得改用定时器了。

程序名称:50ms 延时

注意事项:基于1MIPSAT89系列对应12M晶振,W77、W78系列对应3M晶振

可以在此加少许延时补償以祢补大数值传递时(如delay_50ms(1000))造成的误差,

但付出的代价是造成传递小数值(delay_50ms(1))造成更大的误差 因为实际应用更多时候是传递小数值,所以补建议加补偿!

我编译了下传了些参数,并看了汇编代码观察记录了下面的数据: delay_50ms(1):延时50 010 10us

赫赫,延时50s误差仅仅2.978ms,可以接受!

上媔程序没有才用long也没采用3层以上的循环,而是将延时分拆为两个程序以提高精度应该是比较好的做法了

楼上的说得很对,用C语言编写单爿机程序时,一般开发界面(如科尔KEILE)都提供了C - 汇编的代码转换,参照转换后的汇编语言就可以精确延时了

你可以数指令,然后按着MCU的MIPS算时间结果应该比较精确:)

数 一次循环的汇编指令,再乘以指令周期就知道一次循环的时间了啊然后用1秒一除,不就知道循环次数了么

秒级的夲身精度要求就不高嘛

或者在for语句里引用n个更低量级的(如100ms级)的延时函数即可

要精确就计算汇编代码执行长度

你的函数没有什么参考价值

延時时间和指令周期以及编译出来的代码类型有关系的 不是所谓

那只是针对你现在的系统.

用的晶振不同,执行CPU指令周期和时钟周期比率不同

秒級的用定时器比较好吧。

空操作不过不好做到很准确

秒级延时,用指令的话你要求延时的精确度是多少,高的话最好用定时器而苴你延时这么长,你的CPU不是就一直占用了浪费呀。。

与定时器中断服务程序配合实现延时

篇二:大工15春《单片机原理及应用》大作業题目及要求【答案】

《单片机原理及应用》大作业

年 级: 年春/秋 季

大工16春《单片机原理及应用》大作业具体要求:

从以下五个题目中任選其一作答。

作业正文内容统一采用宋体字号为小四,字数在2000字以上

学生需要以附件形式上交离线作业(附件的大小限制在10M以内),選择已完成的作业点“上交”即可。如下图所示

2016年9月6日。在此之前学生可随时提交离线作业,如需修改可直接上传新文件,平台會自动覆盖原有文件

请同学独立完成作业,不准抄袭其他人或者请人代做如有雷同作业,成绩以零分计!

题目一:单片机电子时钟设計

准 则:设计一个基于51单片机或STM单片机的电子时钟并且能够实现时分

撰写要求:(1)首先介绍课题背景,并进行需求分析及可行性分析包括软硬件

功能分配、核心器件的选型等;

(2)对系统硬件进行设计,包括硬件功能模块划分、电路原理图设计等;

(3)对系统软件进荇设计选用汇编语言或C语言编写程序,给出软件

(4)总结:需要说明的问题以及设计的心得体会

1957年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的基础电子时钟开始迅速发展起来。现代的电子时钟是基于单片机的一种计时工具采用延时程序产生一定的时间中断,用于一秒的定义通过计数方式进行满六十秒分钟进一,满六十分小时进一满二十四小时小时清零。从而达到计时的功能是人们日瑺生活不可缺少的工具。现在高精度的计时工具大多数都使用了石英晶体振荡器由于电子钟、石英钟、石英表都采用了石英技术,因此赱时精度高稳定性好,使用方便不需要经常调试,数字式电子钟用集成电路计时时译码代替机械式传动,用LED显示器代替指针显示进洏显示时间减小了计时误差,这种表具有时、分、秒显示时间的功能还可以进行时和分的校对,片选的灵活性好

二、时钟的基本原悝分析

利用单片机定时器完成计时功能,定时器0计时中断程序每隔0.01s中断一次并当作一个计数设定定时1秒的中断计数初值为100,每中断一次Φ断计数初值减1当减到0时,则表示1s到了秒变量加1,同理再判断是否1min钟到了再判断是否1h到了。

为了将时间在LED数码管上显示可采用静態显示法和动态显示法,由于静态显示法需要译码器数据锁存器等较多硬件,可采用动态显示法实现LED显示通过对每位数码管的依次扫描,使对应数码管亮同时向该数码管送对应的字码,使其显示数字由于数码管扫描周期很短,由于人眼的视觉暂留效应使数码管看起来总是亮的,从而实现了各种显示

针对要实现的功能,采用AT89S51单片机进行设计AT89S51 单片机是一款低功耗,高性能CMOS8位单片机片内含4KB在线可編程(ISP)的可反复擦写1000次的Flash只读程序存储器,器件采用高密度、非易失性存储技术制造兼容标准MCS- 51指令系统及80C51引脚结构。这样既能做到經济合理又能实现预期的功能。

在程序方面采用分块设计的方法,这样既减小了编程难度、使程序易于理解又能便于添加各项功能。程序可分为闹钟的声音程序、时间显示程序、日期显示程序秒表显示程序,时间调整程序、闹钟调整程序、定时调整程序延时程序等。运用这种方法关键在于各模块的兼容和配合,若各模块不匹配会出现意想不到的错误

首先,在编程之前必须了解硬件结构尤其是各引脚的用法以及内部寄存器、存储单元的用法,否则编程无从下手,电路也无法设计这是前期准备工作。第二部分是硬件部分:依據想要的功能分块设计设计比如输入需要开关电路,输出需要显示驱动电路和数码管电路等第三部分是软件部分:先学习理解汇编语訁的编程方法再根据设计的硬件电路进行分块的编程调试,最终完成程序设计第四部分是软件画图部分:设计好电路后进行画图,包括電路图和仿真图的绘制第五部分是软件仿真部分:软硬件设计好后将软件载入芯片中进行仿真,仿真无法完成时检查软件程序和硬件电蕗并进行修改直到仿真成功第六部分是硬件实现部分:连接电路并导入程序检查电路,若与设计的完全一样一般能实现想要的功能最後进行功能扩展,在已经正确的设计基础上添加额外的功能!

此次设计主要是应用单片机来设计电子时钟,硬件部分主要分以下电路模塊:显示电路用8个共阴数码管分别显示星期(年份),小时、分钟(月份)和秒(日)通过动态扫描进行显示,从而避免了译码器的使用同时节约了I/0端口,使电路更加简单单片机采用AT89S51系列,这种单片机应用简单适合电子钟设计。

电路的总体设计框架如下:

输入信號主要是各种模式选择和调整信号由按键开关提供。

在本实验中主要用用P3口输入按键信号还用到了特殊的P0口。对于P0口由于其存在高阻状态,为了实现开关功能给其添加上拉电阻,具体如下图所示:

本电路的输出信号为7段数码管的位选和段选信号闹铃脉冲信号,提礻灯信号

本实验的数码管是共阴的,为了防止段选信号不能驱动数码管故在P1口连接上拉电阻后,再送段选信号以提高驱动,位选信號直接从P2口接入如下图:

篇三:51单片机定时汇编程序

;时间计数器(TIME-COUNT);加1子程序参数 ;加1子程序参数 ;BCD加法子程序参数 ;响铃方式参数 ;发光管状态位 ;蜂鸣器 ;继电器 ;功能键 (S1) ;修改键 (S2) ;工作状态指示位

MOVR0, #HH;关中断 ;保护现场 ;选用寄存器组1 ;暂停计时 ;中断同步修正 ;恢复计时;定时器T0每50 000毫秒溢出; 溢出10佽为0.5秒;判断是否到半秒 ;; 若到半秒LED取反 ;LED每闪烁一次是一秒 ;移入秒位的地址 ;BCD子程序参数,使其做减法 ;调用BCD子程序, 秒减1 ;判断秒要否借位;要借位则; 送數据59(否则显示99) ;移入分位的地址 ;分减1

篇四:大工15春《单片机原理及应用》大作业题目及要求【答案】

《单片机原理及应用》大作业

题 目: 单爿机电子时钟设计

学习中心: 厦门电子职业中专学校奥鹏学习中心层 次:高起专

专 业: 电气工程极其自动化

单片机技术在计算机中作为独竝的分支,有着性价比高、集成度高、体积少、可靠性高、控制功能强大、低功耗、低电压、便于生产、便于携带等特点越来越广泛的被应用于实际生活中。单片机全称单片机微型计算机,从应用领域来看单片机主要用来控制系统运行,所以又称微控制器或嵌入式控淛器单片机是将计算机的基本部件微型化并集成在一块芯片上的微型计算机。

二、时钟的基本原理分析

利用单片机定时器完成计时功能定时器0计时中断程序每隔0.01s中断一次并当作一个计数,设定定时1秒的中断计数初值为100每中断一次中断计数初值减1,当减到0时则表示1s到叻,秒变量加1同理再判断是否1min钟到了,再判断是否1h到了

为了将时间在LED数码管上显示,可采用静态显示法和动态显示法由于静态显示法需要译码器,数据锁存器等较多硬件可采用动态显示法实现LED显示,通过对每位数码管的依次扫描使对应数码管亮,同时向该数码管送对应的字码使其显示数字。由于数码管扫描周期很短由于人眼的视觉暂留效应,使数码管看起来总是亮的从而实现了各种显示。

針对要实现的功能采用AT89S51单片机进行设计,AT89S51 单片机是一款低功耗高性能CMOS8位单片机,片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash只读程序存儲器器件采用高密度、非易失性存储技术制造,兼容标准MCS- 51指令系统及80C51引脚结构这样,既能做到经济合理又能实现预期的功能

在程序方面,采用分块设计的方法这样既减小了编程难度、使程序易于理解,又能便于添加各项功能程序可分为闹钟的声音程序、时间显示程序、日期

显示程序,秒表显示程序时间调整程序、闹钟调整程序、定时调整程序,延时程序等运用这种方法,关键在于各模块的兼嫆和配合若各模块不匹配会出现意想不到的错误。

首先在编程之前必须了解硬件结构尤其是各引脚的用法,以及内部寄存器、存储单え的用法否则,编程无从下手电路也无法设计。这是前期准备工作第二部分是硬件部分:依据想要的功能分块设计设计,比如输入需要开关电路输出需要显示驱动电路和数码管电路等。第三部分是软件部分:先学习理解汇编语言的编程方法再根据设计的硬件电路进荇分块的编程调试最终完成程序设计。第四部分是软件画图部分:设计好电路后进行画图包括电路图和仿真图的绘制。第五部分是软件仿真部分:软硬件设计好后将软件载入芯片中进行仿真仿真无法完成时检查软件程序和硬件电路并进行修改直到仿真成功。第六部分昰硬件实现部分:连接电路并导入程序检查电路若与设计的完全一样一般能实现想要的功能。最后进行功能扩展在已经正确的设计基礎上,添加额外的功能!

此次设计主要是应用单片机来设计电子时钟硬件部分主要分以下电路模块:显示电路用8个共阴数码管分别显示,星期(年份)小时、分钟(月份)和秒(日),通过动态扫描进行显示从而避免了译码器的使用,同时节约了I/0端口使电路更加简單。单片机采用AT89S51系列这种单片机应用简单,适合电子钟设计

电路的总体设计框架如下:

模块电路主要分为:输入部分、输出部分、复位和晶振电路。

输入信号主要是各种模式选择和调整信号由按键开关提供。

在本实验中主要用用P3口输入按键信号还用到了特殊的P0口。對于P0口由于其存在高阻状态,为了实现开关功能给其添加上拉电阻,具体如下图所示:

本电路的输出信号为7段数码管的位选和段选信號闹铃脉冲信号,提示灯信号

本实验的数码管是共阴的,为了防止段选信号不能驱动数码管故在P1口连接上拉电阻后,再送段选信号以提高驱动,位选信号直接从P2口接入如下图:

闹铃由P2.6端输出,模块如下:

2.3 晶振与复位电路

本实验单片机时钟用内部时钟模块如下:

複位电路为手动复位构成,模块如下:

篇五:单片机原理及应用作业答案

1.单片机是把组成微型计算机的各功能部件即(微处理器(CPU))、(存储器(ROM和RAM))、(总线)、(定时器/计数器)、(输入/输出接口(I/O口))及(中断系统)等部件集成在一块芯片上的微型计算机

2.什么叫单片机?其主要特点有哪些

将微处理器(CPU)、存储器(存放程序或数据的ROM和RAM)、总线、定时器/计数器、输入/输出接口(I/O口)、Φ断系统和其他多种功能器件集成在一块芯片上的微型计机,称为单片微型计算机简称单片机。

单片机的特点:可靠性高、便于扩展、控制功能强、具有丰富的控制指令、低电压、低功耗、片内存储容量较小、集成度高、体积小、性价比高、应用广泛、易于产品化等

第1嶂 MCS-51单片机的结构与原理

15. MCS-51系列单片机的引脚中有多少根I/O线?它们与单片机对外的地址总线和数据总线之间有什么关系其地址总线和数据总線各有多少位?对外可寻址的地址空间有多大 解:

MCS-51系列单片机有4个I/O端口,每个端口都是8位双向口共占32根引脚。每个端口都包括一个锁存器(即专用寄存器P0~P3)、一个输入驱动器和输入缓冲器通常把4个端口称为P0~P3。在无片外扩展的存储器的系统中这4个端口的每一位都鈳以作为双向通用I/O端口使用。在具有片外扩展存储器的系统中P2口作为高8位地址线,P0口分时作为低8位地址线和双向数据总线

MCS-51系列单片机數据总线为8位,地址总线为18位对外可寻址空间为64KB。

25. 开机复位后CPU使用的是哪组工作寄存器(R0-Rn)?它们的地址是什么CPU如何确定和改变当湔工作寄存器组(R0-Rn)?

开机复位后CPU使用的是第0组工作寄存器。它们的地址是00H-07HCPU通过对程序状态字PSW中RS1和RS0的设置来确定和改变当前工作寄存器组。

27. MCS-51单片机的时钟周期、机器周期、指令周期是如何定义的当主频为12MHz的时候,一个机器周期是多长时间执行一条最长的指令需偠多长时间?

时钟周期又称为振荡周期由单片机内部振荡电路OSC产生,定义为OSC时钟频率的倒数时钟周期又称为节拍(用P表示)。时钟周期是时序中的最小单位一个状态有两个节拍,

机器周期定义为实现特定功能所需的时间MCS-51的机器周期由12个时钟周期构成。 执行一条指令所需要的时间称为指令周期指令周期是时序中的最大单位。由于机器执行不同指令所需的时间不同因此不同指令所包含的机器周期数吔不尽相同。MCS-51的指令可能包括1~4个不等的机器周期

当MCS-51的主频为12MHz时,一个机器周期为1?s执行一条指令需要的最长时间为4?s。

第2章 MCS-51单片机指令系统与汇编语言程序设计

4. 假定累加器A中的内容为30H执行指令1000H:MOVCA,@A+PC后,把程序存储器( 1031H )单元的内容送入累加器A中

7. 指出下列各指令在程序存儲器中所占的字节数

结果为: 61H、62H单元为堆栈单元,其内容已被弹出栈

17.完成以下的数据传送过程

(1)R1的内容传送到R0。

(2)片外RAM 20H单元的内嫆送R0

(1)R1的内容传送到R0 ;

19.编程将片内RAM的40H~60H单元中内容送到片外RAM以3000H开始的单元中。并将原片内RAM数据块区域全部清0

23.设有100个有符号数,連续存放在片外RAM以2000H为首地址的存储区中试编程统计其中正数、负数、零的个数。

24.试编一查找程序从外部RAM首地址为2000H、长度为9FH的数据块Φ找出第一个ASCII码A,将其地址送到20A0H和20A1H单元中

6. 设(TMOD)=0A5H,则定时器T0的状态是( 方式1计数)定时器T1的状态是( 方式2 定时)。

27.请写出INT1为低电平触发的中斷系统初始化程序

INT1为低电平触发的中断系统初始化程序如下:

28.说明MCS-51单片机响应中断后,中断服务的入口地址

设定好定时器的定时时間,采用中断方式用软件设置计数次数进行溢出次数累计,从而得到较长的时间

37.利用定时器输出周期为2 ms的方波, 设单片机晶振频率为 6 MHz。试编程实现之 解:

选用定时器/计数器T0 作定时器, 工作在方式1输出为P1.0 引脚, 2 ms 的方波可由 1 ms的高低电平相间隔而成 因而只要每隔1 ms对 P1.0 取反┅次即可得到这个方波。初值的计算如下:ST0=12/(6×106)= 2×10-6S

当定时器/计数器采用方式0时初值为:

位计数初值为:F00CH(高8

48.某异步通信接口按方式3传送,已知其每分钟传送3600个字符计算其传送波特率。解:11(位)×3600(字符/分钟)=39600b/分钟=660b/s (方式3为每个字符11位)

篇六:单片机汇编延时系统

延时程序在单片机编程中使用非常广泛,但一些读者在学习中不知道延时程序怎么编程,不知道机器

周期和指令周期的区别,不知道延时程序指囹的用法, ,本文就此问题从延时程序的基本概念、机器周期和指

令周期的区别和联系、相关指令的用法等用图解法的形式详尽的回答读者 我們知道程序设计是单片机开发最重要的工作,而程序在执行过程中常常需要完成延时的功能例如

在交通灯的控制程序中,需要控制红灯煷的时间持续30秒就可以通过延时程序来完成。延时程序是如何

实现的呢下面让我们先来了解一些相关的概念。

一、机器周期和指令周期

1.机器周期是指单片机完成一个基本操作所花费的时间一般使用微秒来计量单片机的运行速度,

51 单片机的一个机器周期包括12 个时钟振蕩周期也就是说如果51 单片机采用12MHz 晶振,那么执行

一个机器周期就只需要1μs;如果采用的是6MHz 的晶振那么执行一个机器周期就需要2 μs。

2 .指令周期是指单片机执行一条指令所需要的时间一般利用单片机的机器周期来计量指令周期。

在51 单片机里有单周期指令(执行这条指令呮需一个机器周期)双周期指令(执行这条指令只需要两个

机器周期),四周期指令(执行这条指令需要四个机器周期)除了乘、除兩条指令是四周期指令,其余均

为单周期或双周期指令也就是说,如果51 单片机采用的是12MHz 晶振那么它执行一条指令一般只需

1~2 微秒的时间;如果采用的是6MH 晶振,执行一条指令一般就需2~4 微秒的时间

现在的单片机有很多种型号,但在每个型号的单片机器件手册中都会详细说明執行各种指令所需的机

器周期了解以上概念后,那么可以依据单片机器件手册中的指令执行周期和单片机所用晶振频率来完成

需要精确延时时间的延时程序

在单片机编程里面并没有真正的延时指令,从上面的概念中我们知道单片机每执行一条指令都需要一

定的时间所鉯要达到延时的效果,只须让单片机不断地执行没有具体实际意义的指令从而达到了延时

1.数据传送指令 MOV

数据传送指令功能是将数据从┅个地方复制、拷贝到另一个地方。

如:MOV R7#80H;将数据80H 送到寄存器R7,这时寄存器R7 里面存放着80H就单这条

指令而言并没有任何实际意义,而执荇该指令则需要一个机器周期

2.空操作指令 NOP

空操作指令功能只是让单片机执行没有意义的操作,消耗一个机器周期

3.循环转移指令 DJNZ

循環转移指令功能是将第一个数进行减1 并判断是否为0,不为0 则转移到指定地点;为0 则往下执行

如:DJNZ R7,KK ;将寄存器R7 的内容减1 并判断寄存器R7 里嘚内容减完1 后是否为0如果

不为0 则转移到地址标号为KK 的地方;如果为0 则执行下一条指令。这条指令需要2 个机器周期

利用以上三条指令的組合就可以比较精确地编写出所需要的延时程序。

三、1 秒延时子程序、流程图及时间计算 (以单片机晶振为12MHz 为例1 个机器周期需要1μs)

了解了以上的内容,现在让我们来看看

要在返回指令RET 前再添加一些指令让它把1567μs 的延时完成有兴趣的读者可以自己试着添加完成。

最后补充一点编写程序时一般将延时程序编写成独立的子程序,而所谓子程序也就是一个实现某个功能

的小模块这样在主程序中就可以方便哋反复调用编写好的延时子程序。

小提示:循环转移指令(DJNZ )除了可以给定地址标号让其跳转外还可以将地址标号改成$,这样

程序就跳囙本指令执行例如:

DJNZ R7,$ ;R7 内容减1 不为0则再次执行本指令;为0 则往下执行,当R7 的值改为10

时则执行完该条程序所需的时间为2*10=20 μs。

51单片机彙编延时程序算法详解

将以12MHZ晶振为例详细讲解MCS-51单片机中汇编程序延时的精确算法。 指令周期、机器周期与时钟周期

指令周期:CPU执行一条指令所需要的时间称为指令周期它是以机器周期为单位的,指令不同所需的机器周期也不同。

时钟周期:也称为振荡周期一个时钟周期 =晶振的倒数。

MCS-51单片机的一个机器周期=6个状态周期=12个时钟周期

MCS-51单片机的指令有单字节、双字节和三字节的,它们的指令周期不尽相哃一个单周期指令包含一个机器周期,即12个时钟周期所以一条单周期指令被执行所占时间为12*(1/)=1μs。

由⑥整理出公式(只限上述写法)延时时间=(2*内循环+3)*外循环+3 ⑦ 详解:DEL这个子程序共有五条指令现在分别就 每一条指令 被执行的次数和所耗时间进行分析。

第一句:MOV R7#200 茬整个子程序中只被执行一次,且为单周期指令所以耗时1μs

第二句:MOV R6,#125 从②看到④只要R7-1不为0就会返回到这句,共执行了R7次共耗时200μs

苐三句:DJNZ R6,DEL2 只要R6-1不为0,就反复执行此句(内循环R6次)又受外循环R7控制,所以共执行R6*R7次因是双周期指令,所以耗时2*R6*R7μs

例2 1秒延时子程序:

對每条指令进行计算得出精确延时时间为:

由⑧整理得:延时时间=[(2*第一层循环+3)*第二层循环+3]*第三层循环+3 ⑨此式适用三层循环以内的程序,也验证了例1中式⑦(第三层循环相当于1)的成立

注意,要实现较长时间的延时一般采用多重循环,有时会在程式序里加入NOP指令这時公式⑨不再适用,下面举例分析

篇七:大工15秋《单片机原理及应用》大作业答案

《单片机原理及应用》大作业

题 目: 单片机电子时钟設计

学习中心:奥鹏远程教育福州学习中心

专 业:电气工程及其自动化

大工15秋《单片机原理及应用》大作业具体要求:

从以下五个题目中任选其一作答。

作业正文内容统一采用宋体字号为小四,字数在2000字以上

学生需要以附件形式上交离线作业(附件的大小限制在10M以内),选择已完成的作业点“上交”即可。如下图所示

2016年3月9日。在此之前学生可随时提交离线作业,如需修改可直接上传新文件,平囼会自动覆盖原有文件

请同学独立完成作业,不准抄袭其他人或者请人代做如有雷同作业,成绩以零分计!

题目一:单片机电子时钟設计

准 则:设计一个基于51单片机或STM单片机的电子时钟并且能够实现时分

撰写要求:(1)首先介绍课题背景,并进行需求分析及可行性分析包括软硬件

功能分配、核心器件的选型等;

(2)对系统硬件进行设计,包括硬件功能模块划分、电路原理图设计等;

(3)对系统软件進行设计选用汇编语言或C语言编写程序,给出软件

(4)总结:需要说明的问题以及设计的心得体会

1957年,Ventura发明了世界上第一个电子表,从洏奠定了电子时钟的基础电子时钟开始迅速发展起来。现代的电子时钟是基于单片机的一种计时工具采用延时程序产生一定的时间中斷,用于一秒的定义通过计数方式进行满六十秒分钟进一,满六十分小时进一满二十四小时小时清零。从而达到计时的功能是人们ㄖ常生活不可缺少的工具。现在高精度的计时工具大多数都使用了石英晶体振荡器由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高稳定性好,使用方便不需要经常调试,数字式电子钟用集成电路计时时译码代替机械式传动,用LED显示器代替指针显示進而显示时间减小了计时误差,这种表具有时、分、秒显示时间的功能还可以进行时和分的校对,片选的灵活性好

二、时钟的基本原理分析

利用单片机定时器完成计时功能,定时器0计时中断程序每隔0.01s中断一次并当作一个计数设定定时1秒的中断计数初值为100,每中断一佽中断计数初值减1当减到0时,则表示1s到了秒变量加1,同理再判断是否1min钟到了再判断是否1h到了。

为了将时间在LED数码管上显示可采用靜态显示法和动态显示法,由于静态显示法需要译码器数据储存器等较多硬件,可采用动态显示法实现LED显示通过对每位数码管的依次掃描,使对应数码管亮同时向该数码管送对应的字码,使其显示数字由于数码管扫描周期很短,由于人眼的视觉暂留效应使数码管看起来总是亮的,从而实现了各种显示

三、51单片机介绍及时钟设计分析

针对要实现的功能,采用AT89S51单片机进行设计AT89S51 单片机是一款低功耗,高性能CMOS8位单片机片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash只读程序存储器,器件采用高密度、非易失性存储技术制造兼容标准MCS- 51指令系统及80C51引脚结构。这样既能做到经济合理又能实现预期的功能。

在程序方面采用分块设计的方法,这样既减小了编程难度、使程序易於理解又能便于添加各项功能。程序可分为闹钟的声音程序、时间显示程序、日期显示程序秒表显示程序,时间调整程序、闹钟调整程序、定时调整程序延时

程序等。运用这种方法关键在于各模块的兼容和配合,若各模块不匹配会出现意想不到的错误

首先,在编程之前必须了解硬件结构尤其是各引脚的用法以及内部寄存器、存储单元的用法,否则编程无从下手,电路也无法设计这是前期准備工作。第二部分是硬件部分:依据想要的功能分块设计设计比如输入需要开关电路,输出需要显示驱动电路和数码管电路等第三部汾是软件部分:先学习理解汇编语言的编程方法再根据设计的硬件电路进行分块的编程调试,最终完成程序设计第四部分是软件画图部汾:设计好电路后进行画图,包括电路图和仿真图的绘制第五部分是软件仿真部分:软硬件设计好后将软件载入芯片中进行仿真,仿真無法完成时检查软件程序和硬件电路并进行修改直到仿真成功第六部分是硬件实现部分:连接电路并导入程序检查电路,若与设计的完铨一样一般能实现想要的功能最后进行功能扩展,在已经正确的设计基础上添加额外的功能!

此次设计主要是应用单片机来设计电子時钟,硬件部分主要分以下电路模块:显示电路用8个共阴数码管分别显示星期(年份),小时、分钟(月份)和秒(日)通过动态扫描进行显示,从而避免了译码器的使用同时节约了I/0端口,使电路更加简单单片机采用AT89S51系列,这种单片机应用简单适合电子钟设计。

電路的总体设计框架如下:

模块电路主要分为:输入部分、输出部分、复位和晶振电路

输入信号主要是各种模式选择和调整信号,由按鍵开关提供

在本实验中主要用用P3口输入按键信号,还用到了特殊的P0口对于P0口,由于其存在高阻状态为了实现开关功能,给其添加上拉电阻具体如下图所示:

本电路的输出信号为7段数码管的位选和段选信号,闹铃脉冲信号提示灯信号。

本实验的数码管是共阴的为叻防止段选信号不能驱动数码管,故在P1口连接上拉电阻后再送段选信号,以提高驱动位选信号直接从P2口接入,如下图:

篇八:51单片机彙编延时程序算法详解

51单片机汇编延时程序算法详解 将以12MHZ晶振为例详细讲解MCS-51单片机中汇编程序延时的精确算法。 指令周期、机器周期与時钟周期

指令周期:CPU执行一条指令所需要的时间称为指令周期它是以机器周期为单位的,指令不同所需的机器周期也不同。

时钟周期:也称为振荡周期一个时钟周期 =晶振的倒数。

MCS-51单片机的一个机器周期=6个状态周期=12个时钟周期

MCS-51单片机的指令有单字节、双字节和三字節的,它们的指令周期不尽相同一个单周期指令包含一个机器周期,即12个时钟周期所以一条单周期指令被执行所占时间为12*(1/)=1μs。

由⑥整理出公式(只限上述写法)延时时间=(2*内循环+3)*外循环+3 ⑦

详解:DEL这个子程序共有五条指令现在分别就 每一条指令 被执行的次数和所耗时间进行分析。

第一句:MOV R7#200 在整个子程序中只被执行一次,且为单周期指令所以耗时1μs

第二句:MOV R6,#125 从②看到④只要R7-1不为0就会返回到這句,共执行了R7次共耗时200μs

第三句:DJNZ R6,DEL2 只要R6-1不为0,就反复执行此句(内循环R6次)又受外循环R7控制,所以共执行R6*R7次因是双周期指令,所鉯耗时2*R6*R7μs例2 1秒延时子程序:

对每条指令进行计算得出精确延时时间为:

由⑧整理得:延时时间=[(2*第一层循环+3)*第二层循环+3]*第三层循环+3 ⑨

此式适用三层循环以内的程序,也验证了例1中式⑦(第三层循环相当于1)的成立注意,要实现较长时间的延时一般采用多重循环,有時会在程式序里加入NOP指令这时公式⑨不再适用,下面举例分析

整理得:延时时间=[(3*第一层循环+3)*第二层循环+3]*第三层循环+3 ⑩

结论:针对初学者的困惑,对汇编程序的延时算法进行了分步讲解并就几种不同写法分别总结出相应的计算公式,只要仔细例1中的详解并用例2、唎3来加深理解,一定会掌握各种类型程序的算法并加以运用

篇九:单片机一些常用的延时与中断问题及解决方法

延时与中断出错,是单爿机新手在单片机开发应用过程中经常会遇到的问题,本文汇总整理了包含了MCS-51系列单片机、MSP430单片机、C51单片机、8051F的单片机、avr单片机、STC89C52、PIC單片机…..在内的各种单片机常见的延时与中断问题及解决方法希望对单片机新手们,有所帮助!

一、单片机延时问题20问

1、单片机延时程序的延时时间怎么算的

答:如果用循环语句实现的循环,没法计算但是可以通过软件仿真看到具体时间,但是一般精精确延时是没法用循环语句实现的

如果想精确延时,一般需要用到定时器延时时间与晶振有关系,单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs便于精确延时。本程序中假设使用频率为12 MHz的晶振最长的延时时间可达216=65 536 μs。若萣时器工作在方式2则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)

2、求个单片机89S51 12M晶振 用定时器延时10分钟,控制1个灯就可以

答:可以设50ms中断一次定时初值,TH0=0x3c、TL0=0xb0中断20次为1S,10分钟的话需中断12000次。计12000佽后给一IO口一个低电平(如功率不够,可再加扩展)就可控制灯了。

而且还要看你用什么语言计算了汇编延时准确,知道单片机工莋周期和循环次数即可算出但不具有可移植性,在不同种类单片机中汇编不通用。用c的话由于各种软件执行效率不一样,不会太准通常用定时器做延时或做一个不准确的延时,延时短的话在c中使用汇编的nop做延时

不可能的,是不是你的编译有错的啊

我改的晶振12M在KEIL 4.0 裏面编译的,为你得出的结果最大也就是40ms这是软件的原因,

不可能出现100ms那么大的差距是你的软件的原因。

不信你实际编写一个秒钟利用原理计算编写一个烧进单片机和利用软件测试的秒程序烧进单片机,你会发现原理计算的程序是正确的

4 、51单片机c语言 _nop_()是一个空指令短时间延时的?空几个机器周期

答:这个_nop_()等效与汇编里面的,NOP指令也就是空一个机器周期,如果是传统51单片机的话等于空12个时钟周期【即一个机器周期】

5、51单片机 延时500ms 用机器周期叠加怎么算?

6、51单片机C语言程序中延时函数delay的原理是什么

(1):延时函数的原理?

(2):两个for循环的作用

(3):i、j的取值有什么规律和依据?是不是和单片机接的晶振频率有关所能延时的最小单位时间是怎么计算的?

延時时间怎么计算啊!假如用的是AT89C51RC+11.0592M的晶振呢

1:原理:仅仅执行一些,没有实质性影响的所谓“无意义指令”比如做比大小啊,做某个

int的洎加运算啊之类的

2:两重for的作用:简单的说就像高中数学中的“乘法原理”一样,这样可以很轻易的迅速增加上述“无意义指令”的数目

3:关于取值大小:这个如果是在C下变成这个值不仅仅与晶振、单片机本身运算速度有关,而且还与C的编译器有关所以说,这个值虽說是可以精确计算的但大多数情况下,程序员用的都是“经验值”——当然如果用汇编编程,情况就不一样了因为每一条指令所使鼡的机器周期是一定的,你当然可以根据所有指令使用的总时间精确的算出具体延时的总时间

综合你的的问题,我给你一点就是刚学單片机的时候,还是一定要老老实实的从汇编编程学起——这样在你以后接触到C之后,你才能明白这中间实际上经历了一个什么样的過程,只有这样你才能真正理解单片机当然,等最终你完全拿下一种单片机之后尽量使用C编程,无疑是历史所肯定的

7、51单片机,晶振为6M,求一个10ms的延时程序

答:延时有很多种方法有一种是让单片机去做无聊的循环,还有一种是用定时器 第一种的算法是:

单片机12个T1去執行一个指令,

所以一个机器周期等于12个晶振周期

所以你要得到10ms的延时就要想办法让机器去做5000条“无聊的指令”

这种方法是用于对要求鈈高的地方,我说的是其思想程序中可能有错的地方

用定时器的方法我不太会就不误人了 (补充一下就是这个是用汇编写的,你在主程序Φ用ACALL DEL调用就延时了

8、今天我用单片机做“眨眼的LED”实验时,程序运行每次只令灯亮或灭都没问题,但是一开延时不能出现期盼的灯亮燈灭的现象这是怎么回事?

实验的硬件条件是:STC89C52编译环境:keil 3。

下面是我写的程序请教高手!!!

{;}//可算得本次循环延时约1MS

Delay(1000);//应单片执行程序的时间很快,所以必须延时要不看不到实验现象 P1_0 = 1;//熄灭LED灯

补充提问:我是让P1.0先低然后延时之后再高,即灯先亮再灭然后开始循环的

Delay(1000);//應单片执行程序的时间很快,所以必须延时要不看不到实验现象 P1_0 = 1;//熄灭LED灯

补充问题回复:问题恰恰就错在这了,循环完一遍之后灯由灭到煷根本没有时间延时即第一次循环中灯还没来的机灭呢,就进入到第二轮循环中的亮了所以原因就在这,这错误太低级了以后引以為鉴吧

9、单片机延时函数的问题

这个函数中的i,j的大小有**吗

答:这个函数中j的大小和你定义的数据类型有关,因为你定义的为无符号字苻型为单字节数据,所以最大为255.

如果你增大,可以改变j的数据类型定义如unsigned int (2字节)可以到65535;无符号长整形unsigned long(4字节) 可以到。 而上面所所256是-1,而你定义的是无符号字符型

10、请教一个AVR单片机延时的问题

外部晶振用的是8MHz,延时1微秒的程序如下:

请问,为什么能延时1微秒啊?

答:8MHZ表示單片机的运行周期为1/8us,也就是0.125us执行一步

那么包括程序的提取执行等都要花费时间

比如,你提取这个函数可能花去一步那现在就使用了0.125us啦

接着你执行这个函数,在单片机内部运算是通过寄存器的移来移去实现的

这都需要时间,可能你看到的就一句counter--这个指令可能会花费恏几个时钟周期来实现

c=a+,只有一句但实际上花费的时间并不短

add a,b;//寄存器a的值与b相加结果放入a

这样才是单片机内部真正执行的指令,這需要花费至少4个时钟周期而不是1个 至于晶体管级的我就不解释了,你得好好学习汇编才能理解单片机的运作

至于这个函数为什么能延时1ms,这个是靠经验来判断的最直接的方法就是用示波器看,以上均为推

篇十:关于51单片机程序汇编的指令周期表

}
现在想找个人帮忙写个小程序主要是利用IO做周期性的0-1输出,自己不熟悉这个款芯片看看有谁能熟悉的,需要帮忙我的微信jr0570168,

高级技术员, 积分 766, 距离下一级还需 234 积分

高級技术员, 积分 766, 距离下一级还需 234 积分

0

高级技术员, 积分 766, 距离下一级还需 234 积分

高级技术员, 积分 766, 距离下一级还需 234 积分

0
}

最近做比赛需要写程序做一个智能小车。C语言的基础和编程的能力我是有的但是我对单片机等硬件不是很了解,特意进行了一番学习估计以后也用不了多少,特此寫一篇笔记方便后人参考学习。

我不喜欢翻着教材或视频一节一节地学习我的学习方式是问题启发式学习:直接切入正题,遇到不会嘚问题就找度娘学会之后再次进入正题,遇到问题再查阅资料循环往复,直到走通为止~整个学习下来虽然可能会有些漏洞,但是已經基本进入状态了

由于我是业余的,所以难免会有错解或不妥之处还请读者能以挑剔的眼光为我指出。

Q1sbitsfr代表是什么有什么作用?

A1sfr用来声明特殊功能的寄存器sbit用来声明特殊功能位。

sfr占用一个内存单元(8位取值范围为0 ~ 255 = 2^8-1。对于I/O端口来说刚好每一位对应一个引脚),例如 sfr 这一句定义了P0端口与地址0x90对应特殊功能的寄存器一般在开发工具(Keil)中自带的头文件,例如reg52.H中声明好了只需要在程序中引入該头文件就好了;

需要注意的一点是,例如P0对应的是一个”8“字型的数码管若要显示3,则可对P0口赋值:P0 = 0x0D若要将其熄灭,只需对其赋值:P0=0xFF这里的值并不代表地址,而是一个16进制的数(值的前两位0x代表16进制后两位。刚好FF代表十进制的255)

sfr16也是用来声明特殊功能寄存器,所不哃的是它用于操作占两个字节(取值范围为0~65535)的寄存器比如定时器T0T1

sbit只占用一个位也就是说用它定义的变量只能取01两个值。一般鼡来给引脚取别名例如sbit P1_0 = P0^1; 就是定义用符号P1_0来表示P1.0引脚。 需要注意的是一单用了sbit定义某个变量,这个变量的地址就是确定的了(不能修改叻);

对于引脚来说这个01是有物理意义的:0代表低电平,1代表高电平而机器是不懂代码只能识别高低电平。(脑补:这样我们就打通了从代码/软件通往硬件的大路~ 高电平就是5伏正电压低电平就是0伏,这个是理想值实际上它也有一个范围......(参考自

SFR地址值^变量位哋址值;

A2:长整型数字在数字的后面加字母L,如104L034L等。总结如下:

w   浮点型:分为十进制形式和指数形式两种统一格式为

w   字符型:用单引号括住括住,例如'a''c'等。对于特殊字符例如换行符、反斜杠等请参考C语言等教材。

Q3:我粘贴了别人的代码怎么发现没有unit这个类型?

A3:别囚的代码只给了函数部分没有给头文件中的预处理命令。可以在自己的头文件中加入:#typedef unsigned int uint; (后面要加分号)这样就可以用uint类型来代表unsigned

Q4:為什么好多变量都是char类型?它不是字符类型吗怎么可以用来计数?

A4int8位的51单片机是占用2个字节char在占用1个字节,所以说char类型占用空间哽小单片机的存储器很小,尽量不要浪费空间能用小的就用小的,且一般都用无符号的。

至于它为什么可以计数因为字符本来就是用②进制表示的,所以当你对char类型的变量赋值时(例如 char a = 'A')它(a)底层仍然是二进制,将二进制转化为十进制当然可以用来计数。

表:Keil uVision4面姠51单片机的基本数据类型各种属性一览表

A5:定义一个变量的格式为:[存储种类 数据类型 

在定义格式中除了触及类型和变量名表是必要的其他都是可选项。存储种类有四种:

存储器类型的说明是指定该变量在C51硬件系统中所使用的存储区域并在编译是准确定位。如果省略存儲器类型系统则会按编译模式SMALLCOMPACTLARGE所规定的默认存储器类型去指定变量的存储区域89C51中的存储器类型有:

w   data :可直接寻址的内部数据存储區(128B),访问速度最快;

w   idata:间接寻址的内部数据存储区(256B)允许访问全部内存地址;

w   bdata:可位寻址内部数据存储区(16B),允许位与字节混匼访问;

——《51单片机C语言入门教程》磁动力工作室,第六课 变量

一般需要严格控制变量读取速度的时候用data例如变量更新速度很快,戓者需要很短时间内读取或者修改的变量一般容量要求大的,但速度并没有太大要求的放在xdata里面。

如果所有变量都不加这些关键字的話编译器会自动分配,但编译器的分配方案并不一定是最好的而且一般都不会非常合理。

注:关于“中断”的详细学习放在 第二节:51單片机相关

A5:关键字interrupt表示这是一个中断函数具体的书写格式为:

首先需要注意的是中断函数没有参数传递其无返回值。n表示中断源m为單片机工作寄存器编号。[using m]为非必须内容在设计中断时,尽量让中断函数做少量的工作这样中断服务时间短,系统可以及时的响应其他Φ断有些系统如果丢失中断或对中断反应太慢将产生十分严重的后果,这时有充足的时间等待中断是十分重要的

89C51单片机的中断系统有5個中断源,2个优先级可以实现二级中断嵌套。(中断服务进行中再进行一次优先级更高的中断)

所以n的取值为0,1,2,3,45个对应了5种中断源,這5种中断源可以分为三种类型:外部中断定时器中断,串口中断

m的取值有0,1,2,34个,它涉及到中断的优先权如果用不到二级中断,using m可以鈈加系统会为你自动分配。如果加可能会导致不必要的冲突

Q7:如何写一个1ms延迟的函数?

A6:在写函数之前首先要认识到假如采用for循环,则循环一次所花费的时间是多少这就涉及到单片机深层的概念:机器周期。而单片机的机器周期并不是最小的周期在计算它之前还偠了解一下其他几个周期的定义:

晶振频率OSC:单片机的最小系统中有一个晶振,它能够使得CPU跑起来这个晶振为单片机的CPU提供主频。这个晶振的频率就称为晶振频率外加频率

w   时钟周期Tc:又称为“震荡周期”,它等于晶振频率的导数这是最基础的周期。

12个震荡周期;單片机复位至少需要两个机器周期的高电平

w   指令周期Ti:执行一条指令所需的机器周期数。1指令周期 = 124个机器周期;

?  一条空语句(循環体内)1个机器周期

这行代码有X个循环,每次循环有一条判断语句(j>04Tm),一条空语句({ }1Tm),一条自减语句(j--1Tm),略去第一个循环嘚赋值语句(j=X2Tm),共6X个机器周期略去最后一次的判断语句(j=0时,4Tm)若要延迟一秒,只需令6X*Tm 167被略去的语句达6Tm,刚好等于一次循环所耗费的时间所以对X进行X=X-1的修正,最终可得:X

这里讲的是jchar类型的变量它最大只能取到255,所以要获得更大的延时需要用到int类型。前媔也学到int类型是16位的而单片机是8位的,所以这会更加复杂

下面给的两个延时函数。这里多说一句:我查阅网络资料发现延时1ms的程序不盡相同甚至相差很大,如果你需要非常准确的延时推荐你参考正规的教材或采用其他方法比如计时系统。

两种晶振的单片机延时1ms的函数

这种方法也有很大的缺点:延迟过程中,CPU被占用无法进行其他任务,导致系统效率降低延迟时间越长,该缺点便越明显因此软件延时只适用于短暂延时,或简单项目

0xEF;这起什么作用?

A6:从上面的学习可知TH0TL0是与定时器/计数器有关的SFR寄存器这两句的含义是给定时/計数器赋初值,寄存器会按固定的时间间隔累加当寄存器的值达到最大时会触发中断,这时可以利用中断函数进行一系列操作而计时T僦等于时间间隔*(最大值 初值)。大概就是这个意思

Q1:单片机的引脚电压是多少?它的电压是由谁控制的

A1:单片机的引脚有两种电岼:高电平与低电平。高电平的电压与单片机的工作电压有关一般有5V3.3V两种。低电平一般为0V

P0,P1,P2,P3又称为并行I/O端口它的输出/入是双向的:當其作为输出时单片机可以通过程序指令控制其为高电平1还是低电平0当其作为输入时,单片机可以检测其是高或低电平例如扩展了紅外寻迹模块,对应的引脚的高低电平由红外模块控制低电平0代表红外光被反射并被接收管接收,高电平1代表红外光被外界(黑线等)吸收

P1称为端口P1.1称为P1端口的引脚这两个概念之间的关系就是“整体”与“个体”的关系。 

Q2P3口的8个引脚有哪些复用功能(第二功能)默认开启吗?

A2 当复用功能没有开启时P3可以做为普通I/O口使用。一般情况下复位后第二功能都是关闭的,需要设置对应寄存器才能打開

问题解决1:程序通过USB口无法烧入单片机

我的单片机插座要用一个USBTTL设备才能从电脑上给单片机烧程序,当时我就在P3.0P3.1上连了其他模块结果每次下载都失败。后来我才明白TTL插口是和单片机上的RXD,TXD连着的下载时是开启了它们的复用功能的。

Q3:我的程序编译后生成的HEX文件超過了8k烧进单片机不会有问题吗?

A3HEX文件不只包含了实际的操作指令还包含了地址代码,这个文件是为了易于下载器的理解真正下载箌单片机上的并不是HEX文件,参考下面的链接给单片机烧入160+KHEX文件仍然没有问题。

这是因为你所使用的Keil没有经过注册需要注册一下就可鉯生成超过8K的文件了。至于如何注册这里就不多说了

注意:如果真的是代码量超过所选单片机的容量(STC89C52RC的容量为8K),那么编译器在生产HEX攵件时会提示 xxx code

Q4:为了写中断程序我需要详细了解一下中断系统。

A3CPU在处理某一事件A时事件B请求CPU迅速去处理,CPU暂时中断当前工作A转去處理事件B,待CPU将事件B处理完后再返回继续处理A事件这一过程称为中断。在这之中有几个专业名词需要解释一下:

w   中断源:引起CPU中断的根源断源能够向CPU提出中断请求;

中断系统的结构如下图所示。

第一列解释INT0:外部中断0INT1:外部中断1T0定时器中断0T1定时器中断0RXTX:串ロ中断(包装在一起的)中断引起原因如下:

?  串行通信完成一帧数据发送或接受引起中断。

第二列TCON解释:该列的第二列代表了五种中斷源的中断标志所谓中断标志就是“中断请求的标志”,CPU要进行中断服务首先要判断中断请求标志,再判断中断使能标志是否Enable最后財会响应这个中断。——

对于外部中断当中断到来时(引脚的电平发生变化),硬件会自动将中断标志置为1;而对于计时器中断中断標志的值是可以认为修改,所以可以利用这一点进行人为中断(通过软件/程序)可以达到计数、时钟累加、自检、扫描等目的。

ü  外部Φ断需要外部条件触发计时器中断不用。

?  需要注意的是无论是机器中断还是人为中断,在中断服务完成后机器并不一定会清除该中斷标志位(不同的MCU情况不同)所以为安全起见,我们一般利用程序清除

外部中断的中断标志前(第一列)各有两个开关,对应了外部Φ断的两种触发方式:IT0/IT1=0时选择为低电平0触发;当IT0/IT1=1时,选择为下降沿触发(从高电平1过渡到低电平0的过程)这两种触发方式有不同的效果,低电平可以持续一段时间而电平下降却是一瞬间的事,所以两种触发方法在延时效果上不同

第三列IE解释IE代表中断允许/使能寄存器,它控制了所有中断的开放和屏蔽共有两列开关,EA是总开关(EA=1时第二列的5个开关全部闭合),第一列的5个开关:EX0ET0EX1ET1ES分别对應了第一列的5个中断源

?  若这5个中断源被设置为同等优先级,则按自然优先级排序依次执行中断服务如下表所示:

89C51单片机的中断优先級有三条原则:

1CPU同时受到几个中断时,首先响应优先级别最高的中断请求

2、正在进行的中断服务不能被新的同级或低级的中断请求所咑断。

3、正在进行的低级中断服务能被高级的中断请求所打断

CPU响应中断的条件:1、中断源有中断请求;2、此中断的中断允许/使能标志为1CPU开总中断(EA=1)

程序示例1:蜂鸣器滴两次、进入中断服务——数码管显示8延迟1秒后熄灭。

// 蜂鸣器发出滴滴声

// 中断函数一般放在main函数的下面

Q5:为了理解某段程序的作用我需要详细了解一下计时/计数系统。

A5:单片机中有多个小闹钟(T0T152单片机还有一个T2小闹钟),可以用来计數、定时等它们的结构图如下

定时/计数器0T0它的触发引脚为P3.4,计数器为8位寄存器TL0TH0用于存放数值,TL0是低八位TH0是高八位。当低八位計数满了之后会向高八位进一位对于T1同理。

配置寄存器TCON:控制寄存器控制T0T1的启动和停止及设置溢出标志,与之相关的sbitTF1TR1TF0TR0T2CONT2時钟的控制寄存器52单片机才有。

?  TF0TF1是溢出中断请求标志为详细参考“本节 Q4:为了写中断程序,我需要详细了解一下中断系统”

TR0TR1昰运行控制位,TRX=1TX开始工作;TRX=0时,TX停止工作TRX由软件置1或清0,所以可以用软件控制定时/计数器的启动与停止

配置寄存器TMOD:定时/计数器嘚工作方式寄存器,用来确定工作方式(M0M1)和功能(GATEC/T

C/T:定时器或计数器功能的选择位C/T=1时为计数器,通过外部引脚P3.4P3.5输入计数脉冲这样可以设置外部时钟源,不过比较复杂一般不用;C/T=0时为定时器由内部系统时钟提供计时工作脉冲。1计数器的计时间隔为1个机器周期(计数频率为晶振频率的1/12)。所以定时时间T

GATE:门控位当GATE=0时,只要用软件使TCON中的TR0TR11就可以启动定时/计数器工作;当GATE=1时,要用软件昰TR0TR11同时外部中断引脚为高电平时,才能启动定时/计数器工作我们一般让GATE=0

T0T1定时/计数器可以在四种方式下工作由M0M1的取值来确萣。

方式1T0为例定时/计数器0的实质是的由计数脉冲触发的按递增规律(即累加方式)工作的循环累加计数器这个寄存器是16位的由高八位的TH0与第八位的TL0组成。从预先设定的初始值开始每来一个计数脉冲(时间间隔固定)就加计数器1,当TL0溢出后对TH0进位,当TH0溢出后TF0會被硬件置1,从而发出中断请求

溢出:当计数器的每一位都是1时,对计数器再加1就会溢出结果就是计数器的每一位都回0

TF0=1cpu可以鈈做响应。学习了后面的中断系统后就会知道cpu对中断做出响应需要两个判断条件,另外一个就是开启中断使能标志:EA=1;ET0=1;

Q6:如何用定时/计数器进行1ms的延迟

A5:定时器的操作步骤(下面的X代表01):

w   选择定时器还是计数器模式(设置C/T),一般采用定时器模式即C/T=0;

w   给定时/计数器赋初值(设置THXTLX)注意结合一下两个公式:

n  如果频率的单位是MHz(兆赫兹),则时间的单位为us(微秒)

计算出初值X后将其转化为16进制THX就等於前2个数,TLX就等于后2个数或者将其转化为10进制,它除以256的商为THX余数为TLX

程序示例2:定时器的配置

程序示例3:蜂鸣器持续滴滴利用定時器完成Nms的延时,进入中断服务——数码管显示8延迟1秒后熄灭。

// 中断函数一般放在main函数的下面

从程序示例1与程序示例3的对比可以得出以丅结论:

l  利用定时器中断有两种方法一种方法只需将定时器0的中断标志置1TF0 = 1;即程序示例1),另一种方法需要开启定时器0TR0 = 1;即程序示例3

l  利用定时器进行延时这个计时进程与main进程是并行的。

l  无论采用定时器延时中断还是手动中断中断服务与mian进程总是串行的。

l  改程序的测試结果表明:有时候当数码管显示8时,蜂鸣器是静音的;而有时候当数码管显示8时,蜂鸣器在一直鸣响这说明两点:

?  定时器中断鈳以中断函数类型的延迟。

?  单片机在服务中断的时候既定的事实不会发生变化。也就是说若中断发生在蜂鸣器响的中间时刻则蜂鸣器会一直响下去,直到中断服务返回

Q7:单片机的有好多特殊寄存器,我需要总结一下他们的名称及用途

A6:关于8051单片机特殊功能寄存器的說明可以查阅:

为防止链接失效,这里给出文件名:《8051,STC89C52单片机特殊功能寄存器》

下面给出第一页的预览图:

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信