技术文档

51单片机用法 单片机学习系列教程——《初识51单片机》

小编 2024-11-24 技术文档 23 0

单片机学习系列教程——《初识51单片机》

亲爱的朋友们,本周我们邀请嘉糖给我们讲解嵌入式学习系列教程,每天连载更新,学习过程中,有任何疑问,欢迎大家关注微信公众号ickeybbs提问。

什么是 51 单片机?

51单片机是对所有兼容Intel 8031指令系统的单片机的统称。51单片机是基础入门的一个单片机,51系列的单片机一般不具备自编程能力。

51单片机的功能

·8位CPU·4kbytes程序存储器(ROM) (52为8K)

·128bytes的数据存储器(RAM) (52有256bytes的RAM)

·32条I/O口线·111条指令,大部分为单字节指令

·21个专用寄存器

·2个可编程定时/计数器·5个中断源,2个优先级(52有6个)

·一个全双工串行通信口

·外部数据存储器寻址空间为64kB

·外部程序存储器寻址空间为64kB

·逻辑操作位寻址功能·双列直插40PinDIP封装

·单一+5V电源供电

CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;

RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;

ROM:用以存放程序、一些原始数据和表格;

I/O口:四个8位并行I/O口,既可用作输入,也可用作输出

T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;

五个中断源的中断控制系统;

一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;

片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最佳振荡频率为6M—12M。

51单片机的时钟电路?

51单片机的时钟电路包括两部分,即芯片内的振荡器和芯片外跨接的晶振及负载电容器。

定时器计数器

定时器/计数器简称定时器,其作用主要包括产生各种时标间隔、记录外部事件的数量等,是微机中最常用、最基本的部件之一。803l单片机有2个16位的定时器/计数器:定时器0(T0)和定时器1(T1)。

T0由2个定时寄存器TH0和TL0构成,T1则由TH1和TL1构成,它们都分别映射在特殊功能寄存器中,从而可以通过对特殊功能寄存器中这些寄存器的读写来实现对这两个定时器的操作。作定时器时,每一个机器周期定时寄存器自动加l,所以定时器也可看作是计量机器周期的计数器。由于每个机器周期为12个时钟振荡周期,所以定时的分辨率是时钟振荡频率的1/12。作计数器时,只要在单片机外部引脚T0(或T1)有从1到0电平的负跳变,计数器就自动加1。计数的最高频率一般为振荡频率的l/24。

工作方式:

T0或T1无论用作定时器或计数器都有4种工作方式:方式0、方式1、方式2和方式3。除方式3外,T0和T1有完全相同的工作状态。下面以T1为例,分述各种工作方式的特点和用法。

1 、工作方式0

13位方式由TL1的低5位和TH1的8位构成13位计数器(TL1的高3位无效)。工作方式0的结构见下图:

图中,C/T为定时/计数选择:C/T=0,T1为定时器,定时信号为振荡周期12分频后的脉冲;C/T=l,T1为计数器,计数信号来自引脚T1的外部信号。

定时器T1能否启动工作,还受到了R1、GATE和引脚信号INT1的控制。由图中的逻辑电路可知,当GATE=0时,只要TR1=1就可打开控制门,使定时器工作;当GATE=1时,只有TR1=1且INT1=1,才可打开控制门。GATE,TR1,C/T的状态选择由定时器的控制寄存器TMOD,TCON中相应位状态确定,INT1则是外部引脚上的信号。

在一般的应用中,通常使GATE=0,从而由TRl的状态控制Tl的开闭:TRl=1,打开T1;TRl=0,关闭T1。在特殊的应用场合,例如利用定时器测量接于INT1引脚上的外部脉冲高电平的宽度时,可使GATE=1,TRl=1。当外部脉冲出现上升沿,亦即INT1由0变1电平时,启动T1定时,测量开始;一旦外部脉冲出现下降沿,亦即INT1由l变O时就关闭了T1。

定时器启动后,定时或计数脉冲加到TLl的低5位,从预先设置的初值(时间常数)开始不断增1。TL1计满后,向THl进位。当TL1和THl都计满之后,置位T1的定时器回零标志TFl,以此表明定时时间或计数次数已到,以供查询或在打开中断的条件下,可向CPU请求中断。如需进一步定时/计数,需用指令重置时间常数。

2 、工作方式1

16位方式。与工作方式0基本相同,区别仅在于工作方式1的计数器TL1和TH1组成16位计数器,从而比工作方式0有更宽的定时/计数范围。工作方式1的结构见下图。

3 、工作方式2

8位自动装入时间常数方式。由TLl构成8位计数器,THl仅用来存放时间常数。启动T1前,TLl和THl装入相同的时间常数,当TL1计满后,除定时器回零标志TFl置位,具有向CPU请求中断的条件外,THl中的时间常数还会自动地装入TLl,并重新开始定时或计数。所以,工作方式2是一种自动装入时间常数的8位计数器方式。由于这种方式不需要指令重装时间常数,因而操作方便,在允许的条件下,应尽量使用这种工作方式。当然,这种方式的定时/计数范围要小于方式0和方式1。工作方式2的结构见下图.

4 、工作方式3

2个8位方式。工作方式3只适用于定时器0。如果使定时器1为工作方式3,则定时器1将处于关闭状态。

当T0为工作方式3时,THo和TL0分成2个独立的8位计数器。其中,TL0既可用作定时器,又可用作计数器,并使用原T0的所有控制位及其定时器回零标志和中断源。TH0只能用作定时器,并使用T1的控制位TRl、回零标志TFl和中断源,见下图。

通常情况下,T0不运行于工作方式3,只有在T1处于工作方式2,并不要求中断的条件下才可能使用。这时,T1往往用作串行口波特率发生器(见1.4),TH0用作定时器,TL0作为定时器或计数器。所以,方式3是为了使单片机有1个独立的定时器/计数器、1个定时器以及1个串行口波特率发生器的应用场合而特地提供的。这时,可把定时器l用于工作方式2,把定时器0用于工作方式3。

下才可能使用。这时,T1往往用作串行口波特率发生器,TH0用作定时器,TL0作为定时器或计数器。所以,方式3是为了使单片机有1个独立的定时器/计数器、1个定时器以及1个串行口波特率发生器的应用场合而特地提供的。这时,可把定时器l用于工作方式2,把定时器0用于工作方式3。

控制寄存器

定时器/计数器T0和T1有2个控制寄存器-TMOD和TCON,它们分别用来设置各个定时器/计数器的工作方式,选择定时或计数功能,控制启动运行,以及作为运行状态的标志等。其中,TCON寄存器中另有4位用于中断系统。

1 、定时器方式控制寄存器TMOD

TMOD在特殊功能寄存器中,字节地址为89H,无位地址。TMOD的格式如下图年示。

由图可见,TMOD的高4位用于T1,低4使用于T0,4种符号的含义如下:

GATE:门控制位。其作用见图1.6。GATE和软件控制位TR、外部引脚信号INT的状态,共同控制定时器/计数器的打开或关闭。

C/T:定时器/计数器选择位。C/T=1,为计数器方式;C/T=0,为定时器方式。

M1M0:工作方式选择位,定时器/计数器的4种工作方式由M1M0设定。

M1M0=00:工作方式0(13位方式)。

M1M0=01:工作方式1(16位方式)。

M1M0=10:工作方式2(8位自动装入时间常数方式)。

MlM0=11:工作方式3(2个8位方式--仅对T0)。

2. 定时器控制寄存器--TCON

TCON在特殊功能寄存器中,字节地址为88H,位地址(由低位到高位)为88H一8FH,由于有位地址,十分便于进行位操作。

TCON的格式如下图所示。其中,TFl,TRl,TF0和TR0位用于定时器/计数器;IEl,ITl,IEo和IT0位用于中断系统。

TFl,TRl用于定时器T1;TF0,TR0用于定时器T0。两组符号有相同的含义。

TF:定时器/计数器中断请求标志位。当定时器计满回零时,TF=1,并可申请中断;当CPU响应中断并进入中断服务程序后,TF自动清零。如对TF查询,定时器回零后,要用指令将TF清零。

TR:定时器/计数器开闭控制位。

IEl,ITl用于外部中断1(1NTl);IE0,IT0用于外部中断0(1NT0)。两组符号的含义相同。

IT:下跳沿/低电平引起外部中断请求的选择位。IT=1,由下跳沿引起;IT=0,由低电平引起。

IE:外部中断的中断申请标志。IE=0,表明无外部中断请求;IE=1,表明有外部中断请求。当有外部中断请求时,IE自动为1,单片机CPU响应此中断后,IE自动清零。

先要有一个定时器的函数声明对TH0定时器的高八位低八位附初值。

然后打开总中断,和启用定时器。

8051单片机提供5个中断请求源,具有2个中断优先级,可实现两级中断服务程序嵌套,由片内特殊功能寄存器中的中断允许寄存器IE控制CPU是否响应中断请求;由中断优先级寄存器IP安排各中断源的优先级,同一优先级内各中断同时提出中断请求时,由内部的查询逻辑确定其响应次序。用户可以用关中断指令(或复位)来屏蔽所有的中断请求,也可以用开中断指令使CPU接收中断请求。每一个中断源可以用软件独立地控制为开中断或关中断状态;每一个中断源的中断级别均可用软件设置

MCS-51提供了五个中断源,其中两个外部中断源,由INT0、INT1引脚输入;两个为片内的定时/计数器T0、T1溢出时产生的中断请求TF0、TF1;一个片内串行口的发送中断TI或接收中断RI。

(1)INT0(P3.2)外部中断0请求信号输入端。可由IT0(TCON.0)选择其为低电平有效还是下降沿有效,当CPU检测到P3.2引脚上出现信号时,使中断标志IE0(TCON.1)置1,向CPU申请中断。

以下是给初学者的一点个人建议!

作为一个初学者,如何单片机入门?

首先把C 语言学好是必须的,51单片机编程对C 语言还是有一定的要求。

然后要把电路搞懂,学会看原理图,会画简单的电路图,51单片机对原理图要求不是很高,只要用心很快就能理解。

个人觉得,你在学51时,不要着急着去敲代码,先看它的资料文档,建议看官方的资料,看datasheeed,看它的管脚定义,单片机的使用比较简单,通俗的说就是给高低电平去控制即可。

了解了51的特性,知道它能干嘛之后,先从最简单的点亮LED 开始。不过这里要求你能后灵活快速的在进制数值之间转换,给1或者0去控制LED 。通过第一个小项目,你应该对它有一点了解了,这时可以做流水灯,数码管之类的东西了。

几个玩意下来,该学它的定时器和中断了,个人觉得这个是玩51最重要的,没有这两个,基本玩不出什么花样。这里就不详细说它们的原理了,基本走下来就完了吧,这时候玩一些小项目,得靠自己了。比如智能小车,蓝牙小车,远程控制系统等等。

本文属于原创,如需转载,请联系微信公众号 ickeybbs ,最新电子行业资讯、教程以及开发板样片申请,请关注“云汉电子社区”官方微信公众号ickeybbs

宇凡微详解:51单片机程序执行流程

今天宇凡微为大家分享的内容是51单片机程序执行流程 ,在我们的学习过程中总是会遇到一些难题,我们宇凡微将为大家整理更多的知识点,供大家学习参考。

51单片机程序执行流程

单片机是没有上操作系统的东西,在keil中编写的代码都是裸机代码,深入编写裸机代码有助于了解硬件的特性。

若不是硬件特性已定的情况之下的其它流程都是代码作祟。忽然想到来探探51单片机的执行流程。这个念头起源于最初见到每个51程序里面的主函数里面最终都挂一个while(1);语句。为何要加一句while死循环让程序停留在main函数中呢。将while(1);语句去掉有什么影响么?

写一个很简单的程序试一下。

执行以上程序,由P1端口控制的流水灯闪了一下。程序最终进入while(1);里纠缠去了,这个到好解释。

现将while(1);语句屏蔽掉。我还以为程序不能被正确执行了呢,因为退出了main主函数,就像Render需要循环来实现一样(尽管刚刚闪灯的程序不在循环之内,但我还是不由产生了这一错觉)。程序执行的结果是:流水灯不停地闪烁!

看到这个现象后的猜想及动作:

1、这块板坏了吧!(在带操作系统如linux字符界面下运行一个不带死循环的C语言文件完毕后就会返回到linux shell程序中)。赶紧换个板再测试一下,显然还是一样的结果;

2、单片机中将一直执行main函数中的最后一个(些)语句?(基于带OS平台下运行标准C语言文件的经验,可从来没有想过是main函数被多次调用或多次进入);

3、单片机内将C语言指令取出来加载到单片机内,单片机内自动生成一个主程序循环执行C语言中main函数的内容?(虽然很荒唐,还是想了);

4、赶快谷歌百度一下单片机的执行流程(虽然在谷歌百度时以“51单片机程序执行流程”搜索,没有搜到相关内容)。换朴实的搜索词:“51单片机 main”。然后就出现跟我一样带有疑问的问题:为什么main函数中不加while(1);语句之后程序会反复执行呢?回答的关键词包括“程序跑飞、看门狗、复位”;

5、趁上嵌入式的机会将“51单片机程序执行流程”搬出来并向老师讲述了我所写程序的得到的现象,包括我怎么验证呀等等。

老师的回答:Keil C51程序自动加载了一个名为”STARTUP.A51”的文件,在这个文件里面进行了一系列的初始化操作后进入用户编写的C语言程序入口main函数中,main函数执行完毕后,STARTUP.A51文件后有一句跳转到程序入口main函数的语句,所以会再次进入C语言主程序main函数中执行相关内容。

然后我用keil软件模拟了运行一下以上那一段代码:

程序开始运行就在程序入口main函数的第一条语句之处,Disassembly窗口是c语言代码与汇编代码相对应的窗口,前面是地址,后面的是C语言对应的汇编语句。下面的窗口是相应文件的运行代码的位置,由黄色箭头指向当前正要执行的代码。然后点击单步运行工具条,直到跳出main函数为止,程序跳转到STARTUP.A51中的以下代码位置:

继续点击单步调试直到进入一个循环中:

这里是一个循环,根据DJNZ指令的功能:每执行一次DJNZ RO, IDATALOOP就将R0的值减1,若R0的值不为0则就跳到IDATALOOP地址去。很显然这是一个循环,那么RO的值是多少呢,在以下窗口显示:

可见r0的初值为0x7f,这里将要循环0x7f(128)次,具体在这里r0值的含义可查看一下子的。那么在这个循环之后程序又将去哪里呢?跳过这个循环后程序运行的地方如下:

再单步运行一次:

根据Disassembly的内容,此条语句执行了就又要回到main函数中去了,执行一下试试:

所以,在51单片机中,程序的执行流程就是会不断( 以r0的值作为延迟条件, 具体含义可继续探索 )的进入main函数中执行main函数中的代码。

为什么我们在linux等上面运行不带死循环的C语言代码后程序就会自行终止呢?这是不同的操作流程:

1、C51单片机不带OS(操作系统),代码的执行形势在此看来就由STARTUP.A51来安排了,没有一个更大的程序来管理怎么调用main函数。

2、像Linux这类的平台是带了OS的,运行一个C语言程序对linux来说就是一个任务,除了运行C语言程序这个任务外还有其它的任务。当运行一个C语言程序完毕时,此次的任务也算是完成了。如在linux shell界面运行一个文件名为“hello.c”功能为输出“hello world!”的C语言程序,过程如下:

编译:gcc hello.c –o hello

运行:./hello

在运行hello可执行文件时,可以当做是shell调用了hello这个可执行程序。在hello运行完毕后,将返回值等返回给shell界面。整个C语言文件的生死全由linux shell程序管理。

以上就是深圳宇凡微为大家介绍关于51单片机程序执行流程 的全部内容。宇凡微提供的方案技术能够走在市场前沿,是因为有过硬的研发技术,为各大电子产品生产商打造属于自己的品牌产品,提升市场竞争力!

原文:宇凡微详解:51单片机程序执行流程

相关问答

51单片机 应用?

1.工业自动化。如数据采集,测控技术等2.智能仪器仪表。如数字示波器,数字信号源,数字万用表,感应电流表等3.消费类电子产品。如洗衣机,电冰箱,空调,电视...

新手用 51单片机 做什么好呢?

我认为作为新手用51单片机最好用PCB万能板焊接一个单片机实验板,一来这样能够提高自己的动手能力;二来可以锻炼自己的编程调试能力。同时我们在焊接时还要设计...

51单片机 高级玩法?

1.灯光控制。如模拟交通灯,心形流水灯,光立方,广州塔,配上不同颜色的LED灯和蜂鸣器或音乐播放器,表白神器,送给心仪的妹子(小心被拉黑)2.电子时钟,配上按...

51单片机 case 用法 ?

51单片机中的case语句用于多分支选择结构,可以根据不同的条件执行不同的语句块,提高代码的可读性和执行效率。case语句中需要先定义一个变量作为判断条件,然...

51单片机 怎么开机?

我一单片机开机时只需要按下对应的电源,紧锁,开关通电,它就可以上电工作。我一单片机开机时只需要按下对应的电源,紧锁,开关通电,它就可以上电工作。

51单片机 内部包含哪些主要功能部件?各功能部件的主要作用是什么?

1、cpu主芯片(内部通过总线连接扩展的设备)2、时钟电路(为单片机提供震荡脉冲)3、电源电路(为单片机提供电源)4、内部数据存储器RAM(包括通用数据寄存...1...

51单片机 只能做控制用吗?

答51单片机不只能做控制用的。当然不是,只要不是特别复杂的算术有U运算都是可以实现的。只是复杂的算术运算在51单片机里面只能通过级数近似,消耗时间过长,所...

51单片机 里面的地址指针DPTR和工作寄存器组有什么作用?都有一些什么样的功能?都用在什么地方?

如果是用c语言编程,可以不必注意这些问题,因为编程软件会自动帮你分配,也不容易出错!!数据指针DPTR是80C51中一个功能比较特殊的寄存器。从结构DPTR是一个1...

51单片机 idata怎么用?

data:固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。idata:固定指前面0x00-0xff的256个RAM,其中前128和dATa的128...

51单片机 控制器的功能?

MSC51单片机的控制器由指令寄存器、指令译码器、复位电路、时钟发生器、定时控制逻辑、程序计数器、程序地址寄存器、数据指针、堆栈指针等组成。1、时钟发...

猜你喜欢