单片机总结

时间:2024.4.21

在本站51hei-5板子上做315兆无线解码和红外解码试验的时候,延时函数的精度很重要

,要做到相当精确才可以成功,所以大家一定要掌握.

这也是大家最常在QQ里问我的一个问题,如果从keil里看了c语言的反汇编代码然后根据晶振和指令计算延时的时间这样虽然非常的准确但是相当的麻烦而且容易搞错,我这里介绍一个最简单的方法.可以验证你的延时函数

这里用一个例程详细介绍一下。

过程参考如下:

在编译器下建立一个新项目,也可以利用已有项目。此过程中需要注意,单片机晶振的选择,因为for循环里指令的执行时间和晶振有直接关系,本例中晶振使用11.0592M。

编写一段关于延时的函数,主要利用for循环,代码如下:

void delay_ms(unsigned int ms)

{

unsigned int i;

unsigned char j;

for(i=0;i<ms;i++)

{

for(j=0;j<200;j++);

for(j=0;j<102;j++);

}

}

其中ms是输入参数,如果输入1,就是要求程序延时1ms。

j变量是调整程序运行的时间参数。调整j的数值,使1次循环的时间在1ms。

将此程序编译通过,然后利用软件仿真,调整时间。

下面这个sec就是程序运行到现在的这一行所用的时间。

两次时间差就是延时函数使用的时间,如果与1ms相差比较多,用户可以调整j参数的值,使延时时间尽量接近1ms。如增大j的值for(j=0;j<105;j++);

此方法得出延时函数,在晶振不同的情况下,延时时间会不准。软件调试结果,这个程序的延时时间为:1.01779ms,一般的单片机系统中都可以应用。

下面来说说汇编的传统计算方法:

指令周期、机器周期与时钟周期

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

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

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

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

了解了上面这些我们来看一个例子

;============延时1秒子程序======================== DELAY_1S: ;延时子程序,12M晶振延时1.002035秒

MOV R4,#10

L3: MOV R2 ,#200 ;1指令周期

L1: MOV R3 ,#249 ;1指令周期

L2: DJNZ R3 ,L2 ;2指令周期

DJNZ R2 ,L1 ;2指令周期

DJNZ R4 ,L3 ;2指令周期

RET ;2指令周期

;循环体延时时间: [(249*2+1+2)*200+1+2]*10*12/120xx000=1.002030s

;加上ACALL指令和第一条mov指令以及最后一条RET指令算出来整个函数的时间为1.002035s

;===================================================

通常选用的是11.0592MHZ的晶振:

[(249*2+1+2)*200+1+2]*10*12/11059200=1.08727213541666666...S 汇编延时子程序的延时计算问题

对于程序

DELAY: MOV R0,#00H

DELAY1: MOV R1,#0B3H

DJNZ R1,$

DJNZ R0,DELAY1

查指令表可知 MOV一个机器周期,DJNZ 指令需用两个机器周期,而一个机器周期时间长度为12/11.0592MHz,所以该段程序执行时间为:

((0B3×2+1+2)×256+1)×12÷11059200=100.2789mS

第一层:DJNZ R1,$:执行了B3H次,一次两个周期,所以为0B3×2;

第二层:MOV R1,#0B3H为一个周期,DJNZ R0,DELAY1为两个周期,这样循环一次就是0B3×2+1+2个周期;第二层的执行次数本来是255次,但因为赋首值为0,而DJNZ是先减1,再比较的,所以就应该是256次。

这样的话,整个循环执行完应该是(0B3×2+1+2)×256+1次。再加上开始赋值这一句,就是((0B3×2+1+2)×256+1)了

还说明一下:

nop指令或者_nop_(); 函数占一个机器周期,

在stc单片机的12T模式下一个机器周期是一个振荡周期的12分频,如果你的晶振是12MHZ,那你的一个机器周期就是1微秒.一个nop指令的执行时间也就是1US 当在6T模式(下载的时候可选择模式)下12M晶振的时候,一个nop就是0.5US了。


第二篇:单片机学习总结


单片机是一门应用性和综合性很强的学科,它综合了电子技术中的模拟电路和数字电路方面的知识,特别是数字电路,因为数字电路在单片机里面的应用很多。由于单片机涉及的知识很多,所以我们只能循序渐进的学习,逐步的积累,没有什么捷径可循。

在大二的时候,我就听学长介绍过单片机,当时感觉很神奇,从此就对单片机特别感兴趣,也感觉它特别有用。于是经学长推荐,在大二上学期我利用学习之余在图书馆借书,学习了KILE和Proteus软件,刚开始学习的时候,对单片机没有什么认识,不知道什么是单片机,更不知道它有什么作用。通过学习才大体知道了单片机的一些知识。由中央处理器CPU、随机存储器RAM、只读存储器ROM、I/O接口、定时器/计数器以及串行通信接口等集成在一块芯片上,构成了一个单片微型计算机,简称为单片机。也算给我正式学习单片机打下一个基础。

在大二下学期,我购买了一套单片机学习开发板和郭天祥主编的《新概念51单片机C语言教程》,从此正式开启我的单片机学习之路。在刚开始学时,就完全模仿郭天祥主编的这本书再结合开发板一步一步的学,从点亮一个发光二级管,流水灯,数码管,定时器,中断,矩阵键盘,AD、DA,串口通行,I2C总线等一步一步的深入学习。此时,我虽然能看懂程序,一些简单的程序可以自己编写,但一些比较复杂的自己编不出来。在大二暑假,我发现了郭天祥主讲的《十天学

会单片机》视屏,于是我坚持天天看视屏,然后在自己根据视屏内容结合开发板写程序,调程序,就这样学了一个暑假。通过这个视屏,我初步了解了单片机的硬件结构,编程方法及调试方法(用KILE软件调试和用开发板调试),寄存器的使用,学会了如何看芯片资料,初步开始利用芯片时序图来编程。可以说这个视屏对我学习单片机有巨大的帮助,更夸张的说是这个视屏将我带进了单片机的世界,让我尽情的体验单片机带给我的快乐!

在大三上学期,我有幸参加了教改班的单片机课程学习。我觉得邓老师的教学很有特点,让我们自己一个模块、一个模块的焊电路板,写程序,调试,然后上讲台讲。这样不仅提高了我对单片机的进一步学习,更锻炼了我在公众面前的表达能力。我觉得大学的教育就应当如此,应该多注重学生的实际动手操作能力,只有自己亲自动手做了,才能体会到其中的艰辛,当然还伴随着众多的乐趣。在经过大三一学期的学习,我的单片机水平有了质的飞跃。首先焊电路板,从单片机最小系统、电源、流水灯开始,第一次自己通过模电上学的一个电源的构成知识做了一个电源,知道了用HC573锁存器对流水灯的作用以及上拉电阻的用法。其次焊数码管,数码管有共阴共阳之分,焊电路板以及写程序都有区别。接着焊了键盘、串口通信、液晶、AD、DA、I2C总线24C02芯片、时钟芯片DS1302、DS12C887、温度传感芯片18B20以及其他模块。通过焊电路,现在对单片机各个模块的硬件设计了如指掌,通过软件调试,我已经基本掌握用芯片资料时序图和寄存器编程。最后阶段我用了一个多月的时间做了三个时钟,下面以我

做的三个时钟为例讲一下感受:

1:用定时器中断、24C02芯片、按键和1602液晶做了一个年、月、日、星期、时、份、秒都可调的时钟,充分利用24C02掉电保护的特点,当关闭电源后再次打开,时钟会从上次停止的时间继续走。在做这个时钟时,要注意24C02的时序图以及寄存器的初始化。并且要注意写完时钟后,首次使用24C02,时钟可能是乱码,只需要用按键的加减键将其调为可读的时钟后,以后上电数据就可以正常走。

2:用DS1302、18B20和液晶做了一个不可调节的时钟。设计这个芯片的初衷是学习DS1302和18B20这两个芯片,于是我写程序实现了一个时钟从设定的初值时间开始走,并且显示温度。在设计中,一定要对DS1302寄存器初始化后他才能正常工作,在对照18B20芯片手册写程序时,我充分体验到了邓老师说的一句话“硬件设计简单,软件必然是复杂的”。在对18B20写程序时,遇到了很多麻烦,都是时序的问题。

3:用DS12C887、按键和液晶做了一个年、月、日、星期、时、份、秒可调节的时钟。由于DS12C887内部自带晶振和可充电锂电池,上电后自动充电,所以这个时钟掉电后内部时钟继续走,。在写这个时钟时,DS12C887一直用不起来,开始是由于时序不对,后来表不走,最后发现内部晶振没起振,是因为对其内部寄存器的初始化不对。总之在遇到各种奇怪的现象后不断调试,最终将三个时钟调出来了。

写完这三个时钟,我收获挺大的,现在可以比较熟练地利用时序图写程序,也对单片机的定时、中断有了进一步的了解,可以说这是

我单片机学习的又一大提高。

有时候单片机的学习很单调,比如检查电路,程序怎么也写不对,这些问题检查好多遍也没解决,有些知识学起来很抽象,不容易理解,只能慢慢适应,一边学习理论知识,一边编写程序,将程序刷入单片机进行耐心的调试,通过这种方式才能更快速的学习单片机。同时也会从学习中体会成功的喜悦。

总之,在一学期的学习中,从硬件,软件,调试,演讲等各个方面都有了很大的收获。

注:以下是我焊的电路板照片,其电路原理图详见PPT

主板 下载部分

流水灯和蜂鸣器

键盘

24C02、DS1302、DS12C887 数码管

锁存器

74HC573

稳压电源

更多相关推荐:
AT24C02做密码锁c程序——西华师范大学电子协会黄超自学51单片机总结

#includereg52.h#includeintrins.h#defineuintunsignedint#defineucharunsignedcharsbitsda=P2^1;sbitscl=P2^0;v…

单片机总结

单片机课程学习总结单片机这门课程我已经学了一个学期了在这一个学期的学习过程中我一开始不怎么懂得编程但慢慢的我现在已经不仅会读程序还会写程序了真为自己一个学期来努力学到的单片机知识只是而感到高兴怎么学单片机也常看...

单片机总结

MCS51单片机课程总结单片机设计技术1概述微型计算机系统包括硬件系统软件系统两大部分运算器微处理器控制器存储器ROMRAM微型计算机IO接口并行接口串行接口主机总线DBABCB硬件外设键盘显示器打印机等微型计...

单片机重点总结

第1章1、微型计算机通常由哪些部分组成?各有哪些功能?答:微型计算机通常由控制器、运算器、存储器、输入/输出接口电路、输入设备和输出设备组成。控制器的功能是负责从内部存储器中取出指令并对指令进行分析、判断、并根…

单片机总结报告

单片机总结报告IC卡小组成员刘绍凯06291043刘永欢06291044一实验设备二实验原理刘中芳06291045如硬件连接图所示本系统可分为如下几个模块单片机80C196模块复位晶振电路电源电路显示模块键位模...

单片机知识点总结

单片机考点总结1.单片机由CPU、存储器及各种I/O接口三部分组成。2.单片机即单片微型计算机,又可称为微控制器和嵌入式控制器。3.MCS-51系列单片机为8位单片机,共40个引脚,MCS-51基本类型有803…

单片机概念总结

概念填空题1单片微型计算机singlechipmicrocomputer简称单片机它是把微型计算机的各个功能部件中央处理器CUP随机存储器RAM只读存储器ROM定时计数器及IO接口电路集成在一块芯片上构成一个完...

单片机学习总结

单片机是一门应用性和综合性很强的学科,它综合了电子技术中的模拟电路和数字电路方面的知识,特别是数字电路,因为数字电路在单片机里面的应用很多。由于单片机涉及的知识很多,所以我们只能循序渐进的学习,逐步的积累,没有…

单片机实训总结

单片机心得总结通过这一个学期的单片机学习,我收获了很多关于单片机的知识,并且这些知识和日常的生活息息相关。了解了一些简单程序的录入,LED显示器、键盘、和显示器的应用和原理。LED显示器:LED显示器是由发光二…

单片机实验小结

这学期的单片机实验课程已经结束了,虽然做的实验是比较简答的,但麻雀虽小五脏俱全,因此自己也通过实验课学到了很多知识。单片机实验课是为了更好的学习单片机使用单片机而开设的一门课程。单片机在实际生活中的应用非常广泛…

单片机学习总结

单片机假期培训总结郭林朋首先感谢领导给我这次培训的机会,通过这次培训我获益良多,提高了自己的专业技能,下面就是我对本次学习的总结和教训。第一天的开学典礼上,我们听了亚龙集团陈总经理的报告,特别是陈总经理提出的,…

单片机课程设计总结报告参考模板

湖州师范学院求真学院课程设计总结报告课程名称单片机应用系统设计设计题目基于STC89C51的数字电子钟设计专业电子科学与技术班级080835姓名张静学号12指导教师李祖欣吴小红报告成绩求真学院信息与工程系二一一...

单片机总结(35篇)