51单片机基础入门

51单片机基础入门


2024年5月3日发(作者:)

单片机基础

一、 单片机基础知识

1.1 51系列单片机简介:

51系列单片机是单片机领域中的一类,也是影响最为深远,使用最为广泛的单片机系

列。51单片机是指Intel的MCS‐51系列及和其具有兼容内核的单片机。51系列单片机最早

由Intel公司发展起来,随后将51内核授权给其他各个厂商。因此,现在MCS‐51兼容的单

片机种类繁多,如:Atmel公司的AT889C系列、AT89S系列、Silicon Laboratories的C8051F

系列以及STC的单片机等。这些系列的单片机都有着十分接近的指令系统和硬件结构,在开

发起来很方便移植。

1.2 STC系列单片机:

STC89C51RC系列单片机是STC推出的新一代高速/低功耗/超强抗干扰的单片机,指令代

码完全兼容传统的8051单片机

12时钟/机器周期和6时钟/机器周期可以任意选择,HD版本

和90C版本内部集成MAX810专用复位电路。特征:

1) 增强型8051单片机,6时钟/机器周期和12时钟/机器周期可任意选择,指令代码完

全兼容传统8051

2)工作电压:5.5V ‐ 3.3V (5V单片机) / 3.8V ‐ 2.0V (3V单片机)

3) 工作频率范围:0~40MHz,相当于普通8051的 0~80MHz,实际工作频率可达48MHz.

4)用户应用程序空间:4K / 8K / 13K / 16K / 32K / 64K字节

5)片上集成

1280字节或512字节RAM

6)通用I/O口(35/39个),复位后为:P1/P2/P3/P4是准双向口/弱上拉(普通8051传统I/O

口);P0口是开漏输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上

拉电阻。

7)ISP(在系统可编程)/ IAP(在应用可编程),无需专用编程器,无需专用仿真器

可通过串口(RxD/P3.0, TxD/P3.1)直接下载用户程序,数秒即可完成一片

8)有EEPROM功能

9)看门狗

10)内部集成MAX810专用复位电路(HD版本和90C版本才有),外部晶体20M以下时,可

省外部复位电路。

11) 共3个16位定时器/计数器,其中定时器0还可以当成2个8位定时器使用。

12) 外部中断4路,下降沿中断或低电平触发中断,Power Down模式可由外部中断低电平

触发中断方式唤醒。

13)

通用异步串行口(UART),还可用定时器软件实现多个UART

14) 工作温度范围:‐40 ~ +85℃(工业级) / 0 ~ 75℃(商业级)

15) 封装:LQFP‐44,PDIP‐40,PLCC‐44,PQFP‐44.

备注:关于12时钟/机器周期和6时钟/机器周期的说明:

在单片机中有几个周期,时钟周期、机器周期、指令周期:

①时钟周期:时钟周期T又称为振荡周期,由单片机片内振荡电路OSC产生,常定义为时钟脉冲频率

的导数,是时序中最小的时间单位。如某单片机时钟频率为1MHz,那么它的时钟周期T即为1us。

②机器周期:机器周期定义为实现特定功能所需的时间,通常由若干时钟周期T构成。因此,微型计

算机的机器周期常常按其功能来命名,且不同机器周期所包含的时钟周期的个数也不相同。STC单片机的

一个机器周期为12个时钟周期(或6个时钟周期)。即,若单片机时钟频率为12MHz,那么时钟周期为1/12us,

而机器周期可以为1us(或者0.5us)。

③指令周期:指令周期是时序中的最大时间单位,定义是执行一条指令所需的时间。由于机器执行不

同指令所需的时间不同,因此不同指令所包含的机器周期也不相同。通常,包含一个机器周期的指令称为

单周期指令,包含两个机器周期的指令称为双周期指令,等等。在51单片机中有单周期、双周期和四周期

指令。四周期指令只有乘法和除法两种,其余均为单周期和双周期指令。

1.3 51单片机的一些基础知识

1. 存储器结构:

MCS‐51的存储器不仅有ROM和RAM之分,而且有片内和片外之分。

存储器地址分配:有三个地址空间:

1)ROM存储器地址空间(包括片内ROM和片外ROM),地址范围为0000H~FFFFH,当

单片机EA脚接地,即EA=0时,均为片外ROM,如EA=1,则0000H~0FFFH为片内ROM,

1000H~FFFFH为片外ROM,故通常单片机都会将EA接高,保证从片内ROM启动。此区也

被称为CODE区。

2)片内RAM地址空间,地址范围为00H~FFH。对于8051来说,00~7FH为低128B RAM

区(也称DATA区),而80H~FFH为SFR区(特殊功能寄存器区);对于8052等,80H~FFH

为高128B RAM区(称IDATA区),与SFR地址是重叠的,通过区分所访问的存储区来解决

地址重叠问题,因此IDATA区只能通过间接寻址来访问。

3)片外RAM地址空间,地址范围为0000H~FFFFH。(XDATA区,对XDATA的读写操作

需要至少两个处理周期)

备注:ROM与RAM的区别

ROM为只读存储器(Read Only Memory),是一种只能读出事先所存数据的固态半导体存储器。其特

性是一旦储存资料就无法再将之改变或删除。

RAM,随机存取存储器(Random Access Memory)。存储单元的内容可按需随意取出或存入,且存取

的速度与存储单元的位置无关的存储器。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间

使用的程序

2. 处理器状态:

处理器的状态保存在状态寄存器PSW中,状态字中包括状态字中包括进位位、用于BCD

码处理的辅助进位位、奇偶标志位溢出标志位,还有前面提到的用于寄存器组选择RS0和

RS1。0组从地址00H开始,1组从地址08H开始2组从地址10H开始,3组从地址18H开

始。这些地址都可通过直接或间接方式进行寻址PSW。

BIT7

CY

BIT6

AC

BIT5

F0

BIT4

RS1

BIT3

RS0

BIT2

OV

BIT1

USR

BIT0

P

CY 进位标志位

AC 辅助进位标志位

F0 通用标志位

RS1 寄存器组选择位高位

RS0 寄存器组选择位低位

OV 溢出标志位

USR 用户定义标志位

P 奇偶标志位

3. 电源控制:

电源控制寄存器PCON的相应位来进入节电方式,置位IDLE进入空闲模式,空闲模式

将停止程序执行,RAM中数据仍然保存,晶振继续工作,但与CPU断开。定时器和串口继

续工作。发生中断将退出中断模式。执行完中断程序后,将从程序停止的地方继续指令的执

行。

通过置位PDWN位来进入低功耗模式,低功耗模式中晶振将停止工作,因此定时器和

串行口都将停止工作。至少2V的电压加在芯片上,因此RAM中的数据仍将保存。退出低功

耗模式只有两种方式:上电或复位。

SMOD位可控制串行通信的波特率,将使由定时器1的溢出率和晶振频率产生的波特率

翻倍。置位SMOD可使工作与方式1,2,3定时器产生的波特率翻倍。当使用定时器2产

生波特率时,SMOD将不影响波特率。

BIT7

SMOD

BIT6

BIT5

BIT4

BIT3

GF1

BIT2

GF0

BIT1

PDWN

BIT0

IDLE

SMOD 串行口通信波特率控制位,置位使波特率翻倍

‐ 保留

GF1 通用标志位

GF0 通用标志位

PDWN 低功耗标志位,置位进入低功耗模式

IDLE 空闲标志位,置位进入空闲模式

4. 中断系统

STC89C51RC/RD+系列单片机提供了8个中断请求源,它们分别是:外部中断0(INT0)、

定时器0中断、外部中断1(INT1)、定时器1中断、串口(UART)中断、定时器2中断、外部中断

2(INT2)、外部中断3(INT3)(外部中断2与外部中断3在STC单片机所特有,之前的AT89C52单片机

中没有引入)。所有的中断都具有4个中断优先级。用户可以用关总中断允许位(EA/IE.7)或相应

中断的允许位的方法来屏蔽所有的中断请求,也可以打开相应的中断允许位来使CPU响应相应的

中断申请;每一个中断源可以用软件独立地控制为开中断或关中断状态;每一个中断的优先级别

均可用软件设置。高优先级的中断请求可以打断低优先级的中断,反之,低优先级的中断请求不

可以打断高优先级及同优先级的中断。当两个相同优先级的中断同时产生时,将由查询次序来决

定系统先响应哪个中断。中断次序表:

如果使用C语言编程,中断查询次序号就是中断号,如:

void int0() interrupt 0;

void timer0() interrupt 1;

void int1() interrupt 2;

void timer1() interrupt 3;

void uart() interrupt 4;

void timer2() interrupt 5;

void int2() interrupt 6;

void int3() interrupt 7;

注意:函数可以自己命名,但是后面的中断号不能随便改,必须以interrupt x的格式。

4.1 中断优先级寄存器

每个中断源都可通过中断优先级寄存器IP来单独设置中断优先级。如果每个中断源的

相应位被置位,则该中断源的优先级为高。如果相应的位被复位,则该中断源的优先级为低。

IP寄存器(可位寻址)

BIT7

BIT6

BIT5

PT2

BIT4

PS

BIT3

PT1

BIT2

PX1

BIT1

PT0

BIT0

PX0

‐ 保留

PT2 定时器2中断优先级

PS 串行通信中断优先级

PT1 定时器1中断优先级

PX1 外部中断1优先级

PT0 定时器0中断优先级

PX0 外部中断0优先级

STC单片机拓展中断优先级:扩展中断优先级寄存器(IPH),字节地址为B7H,不能位寻址。

IPH:中断优先级控制寄存器高

BIT7

PX3H

BIT6

PX2H

BIT5

PT2H

BIT4

PSH

BIT3

PT1H

BIT2

PX1H

BIT1

PT0H

BIT0

PX0H

4.2 中断使能寄存器

通过设置中断使能寄存器IE的EA位,使能所有中断。每个中断源都有单独的使能位,

可通过软件设置IE中相应的使能位在任何时候是你使能或禁能中断。

中断使能寄存器(IE)(可位寻址)

BIT7

EA

BIT6

BIT5

ET2

BIT4

ES

BIT3

ET1

BIT2

EX1

BIT1

ET0

BIT0

EX0

EA 使能标志位,置位则所有中断使能,复位则禁止所有中断

‐ 保留

ET2 定时器2中断使能

ES 串行通信中断使能

ET1 定时器1中断使能

EX1 外部中断1使能

ET0 定时器0中断使能

EX0 外部中断0使能

在STC89C5x系列单片机中添加了XICON(辅助中断控制寄存器),地址C0H .

XICON:辅助中断控制寄存器

BIT7

PX3

BIT6

EX3

BIT5

IE3

BIT4

IT3

BIT3

PX2

BIT2

EX2

BIT1

IE2

BIT0

IT2

PX3 置位表明外部中断3的优先级为高,优先级最终由[PX3H, PX3]=[0,0];[0,1];[1,0];[1,1]

来决定

EX3 如被设置成1,允许外部中断3中断;清零则静止外部中断3中断。

IE3 外部中断3中断请求标志位,中断条件成立后,IE3=1,可由硬件自动清零。

IT3 当此位由软件置位时,外部中断3为下降沿触发中断;当此为由软件清零时,为低

电平触发中断。

PX2 置位表明外部中断2的优先级为高,优先级最终由[PX2H, PX2]=[0,0];[0,1];[1,0];[1,1]

来决定

EX2 如被设置成1,允许外部中断2中断;清零则静止外部中断2中断。

IE2 外部中断2中断请求标志位,中断条件成立后,IE2=1,可由硬件自动清零。

IT2 当此位由软件置位时,外部中断2为下降沿触发中断;当此为由软件清零时,为低

电平触发中断。

单片机复位以后,IE和XICON被清0。

PX3H, PX3: 外部中断3优先级控制位。

当PX3H=0且PX3=0时,外部中断3为最低优先级中断(优先级0)

当PX3H=0且PX3=1时,外部中断3为较低优先级中断(优先级1)

当PX3H=1且PX3=0时,外部中断3为较高优先级中断(优先级2)

当PX3H=1且PX3=1时,外部中断3为最高优先级中断(优先级3)

PX2H, PX2: 外部中断2优先级控制位。

当PX2H=0且PX2=0时,外部中断2为最低优先级中断(优先级0)

当PX2H=0且PX2=1时,外部中断2为较低优先级中断(优先级1)

当PX2H=1且PX2=0时,外部中断2为较高优先级中断(优先级2)

当PX2H=1且PX2=1时,外部中断2为最高优先级中断(优先级3)

PT2H, PT2: 定时器2中断优先级控制位。

当PT2H=0且PT2=0时,定时器2中断为最低优先级中断(优先级0)

当PT2H=0且PT2=1时,定时器2中断为较低优先级中断(优先级

1)

当PT2H=1且PT2=0时,定时器2中断为较高优先级中断(优先级2)

当PT2H=1且PT2=1时,定时器2中断为最高优先级中断(优先级3)

PSH, PS: 串口1中断优先级控制位。

当PSH=0且PS=0时,串口1中断为最低优先级中断(优先级0)

当PSH=0且PS=1时,串口1中断为较低优先级中断(优先级1)

当PSH=1且PS=0时,串口1中断为较高优先级中断(优先级2)

当PSH=1且PS=1时,串口1中断为最高优先级中断(优先级3)

PT1H, PT1: 定时器1中断优先级控制位。

当PT1H=0且PT1=0时,定时器1中断为最低优先级中断(优先级0)

当PT1H=0且PT1=1时,定时器1中断为较低优先级中断(优先级1)

当PT1H=1且PT1=0时,定时器1中断为较高优先级中断(优先级2)

当PT1H=1且PT1=1时,定时器1中断为最高优先级中断(优先级3)

PX1H, PX1: 外部中断1优先级控制位。

当PX1H=0且PX1=0时,外部中断1为最低优先级中断(优先级0)

当PX1H=0且PX1=1时,外部中断1为较低优先级中断(优先级1)

PX1H=1且PX1=0时,外部中断1为较高优先级中断(优先级2)

当PX1H=1且PX1=1时,外部中断1为最高优先级中断(优先级3)

PT0H, PT0: 定时器0中断优先级控制位。

当PT0H=0且PT0=0时,定时器0中断为最低优先级中断(优先级0)

当PT0H=0且PT0=1时,定时器0中断为较低优先级中断(优先级1)

当PT0H=1且PT0=0时,定时器0中断为较高优先级中断(优先级2)

当PT0H=1且PT0=1时,定时器0中断为最高优先级中断(优先级3)

PX0H, PX0: 外部中断0优先级控制位。

当PX0H=0且PX0=0时,外部中断0为最低优先级中断(优先级0)

当PX0H=0且PX0=1时,外部中断0为较低优先级中断(优先级1)

当PX0H=1且PX0=0时,外部中断0为较高优先级中断(优先级2)

当PX0H=1

且PX0=1时,外部中断0为最高优先级中断(优先级3)

5. 串行口控制寄存器SCON

SCON:串行口控制寄存器(可位寻址)

BIT7

SM0/FE

BIT6

SM1

BIT5

SM2

BIT4

REN

BIT3

TB8

BIT2

RB8

BIT1

TI

BIT0

RI

RI: 串行口1接收中断标志。若串行口1允许接收且以方式0工作,则每当接收到第8位数据时

置1;若以方式1、2、3工作且SM2=0时,则每当接收到停止位的中间时置1;当串行口以方式2

或方式3工作且SM2=1时,则仅当接收到的第9位数据RB8为1后,同时还要接收到停止位的中间

时置1。RI为1表示串行口1正向CPU申请中断(接收中断),RI必须由用户的中断服务程序清零。

TI: 串行口1发送中断标志。串行口1以方式0发送时,每当发送完8位数据,由硬件置1;

若以方式1、方式2或方式3发送时,在发送停止位的开始时置1。TI=1表示串行口1正在向CPU申

请中断(发送中断)。值得注意的是,CPU响应发送中断请求,转向执行中断服务程序时并不将TI

清零,TI必须由用户在中断服务程序中清零。

SM0 SM1

方式 功能说明

0 0 0

同步移位寄存器方式

0 1 1

10位异步收发(8位数据),波特率可变(由定时器1的溢

出率控制)

1 0 2

11位异步收发(9位数据),波特率固定

1 1 3

11位异步收发(9位数据),波特率可变(由定时器1的溢

出率控制)

SM2 多机通信控制位:主要用于方式2与方式3。当接收机的SM2=1时,可以利用收到的RB8

来控制是否激活RI(RB8=0时,不激活RI,收到的信息丢弃;RB8=1时收到的数据进入SBUF,

并激活RI,进而在中断服务中将数据从SBUF读走)。当SM2=0时,不论收到的RB8是0还是1,

均可以使收到的数据进入SBUF,并激活RI。通过控制SM2,可以实现多机通信。在方式0时,SM2

必须是0。在方式1时,若SM2=1,则只有接收到有效停止位时,RI才置1。

REN 允许串行接收位:REN=1,允许串行口接收数据;REN=0,禁止串行口接收数据。

TB8 方式2,3中发送数据的第9位:在方式2或方式3中,是发送数据的第9位,可以用软件

规定其作用。可以用做数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位。在

方式0和方式1中,该位未用。

RB8 方式2,3中接收数据的第9位:在方式2

、3中,是接收数据的第9位,可作为奇偶检验

位或地址帧/数据帧的标志位。在方式1时,若SM2=0,则RB8是接收到的停止位。

串行口的4种工作方式:

1)UART模式0

模式0时UART作为一个8位的移位寄存器使用波特率为fosc/12 数据由RXD从低位开

始收发TXD用来发送同步移位脉冲。因此方式0不支持全双工这种方式,可用来和像某些具

有8位串行口的EEPROM之类的器件通讯。当向SBUF写入字节时,开始发送数据。数据发

送完毕时TI 位将置位。置位REN时,将开始接收数据,接收完8位数据时RI位将置位。

2)UART模式1

工作于模式1时传输的是10位,1个起始位、8个数据位和1个停止位。这种方式可和包

括PC 机在内的很多器件进行通讯。这种方式中波特率是可调的,而用来产生波特率的定时

器的中断应该被禁止。PCON的SMOD位为1时可使波特率翻倍。TI和RI在发送和接收停止

位的中间时刻被置位,这使软件可以响应中断并装入新的数据。数据处理时间取决于波特率

和晶振频率。如果用定时器1来产生波特率应通过下式来计算TH1的装入值:

TH1=256- K*OscFreq / 384*BaudRate(K=1 if SMOD=0 K=2 if SMOD=1)

重装值要小于256。非整数的重装值必须和下一个整数非常接近。通常产生的波特率都能使

系统正常的工作。

3) UART 模式2、3

模式2、3时为11位数据的异步通信口。TXD(P3.1)为数据发送引脚,

RXD(P3.0)

为数据接收引脚。这两种模式下,起始位1位,数据9位(含1位附加的第9位,发送时SCON

中的TB8,接收时为RB8),停止位1位,一帧数据为11位。方式2的波特率固定为晶振频率

的1/64或1/32,方式3的波特率由定时器T1的溢出率决定。

二、 建立第一个51单片机工程

2.1 Keil 安装:

第1步:找到资料包中的Keil下的,双击进入安装界面,点击Next进入

下一步。

第2步:进入License Agreement界面,选择I agree to all the terms of the preceding License

Agreement,点击下一步。

第3步:选择keil存放的位置,通常就放在D:Keil中即可,点击下一步。

第4步:填写用户信息,自己填写点击下一步,开始安装,等到Finish页面出现,安装

完成。

2.2编写第一个单片机程序:

第1步:打开Keil,进入主界面。

第2步:点击菜单项中的Project‐>New μVision Project…,如图:

第3步:在弹出的窗口中选择你要存放工作的文件夹,输入文件名,这里取HelloLed,

点击保存,如图:

第4步:弹出器件选择项,这里我们还是选择Atmel‐>89S52(与STC89C52单片机兼容)

第5步:弹出窗口询问是否Copy标准8051启动代码,如图:

选择是,这样工程建立完成,我们可以看到Keil界面变为下图所示:

第6步:建立我们的第一个C文件,HelloLed.c。点击File‐>New或者选择New图标创

建一个新文件。如图:

出现一个文本框,按保存文件或Ctrl+S,将此文件保存,在弹出窗口中,输入文件名:

HelloLed.c。

第7步:将C代码添加到项目中,右击Source Group 1,选择Add Files to Group ‘Source

Group 1’,选择刚刚保存的HelloLed.c。

点击确定,添加完成,完成后工作空间如图:

第8步:编写C代码:

#include //添加头文件,stc89c5x.h是根据STC单片特别进行了更改的头文件

sbit LED = P0^0;//位寻址方式,用LED来代表P0口的第0位

/**

*函数功能:软件延时,大约1ms

*/

//软件延时程序,进行一定的延时

void delay(unsigned int t)

{

unsigned int i;

while(t‐‐){

for(i=123;i>0;i‐‐);

}

}

void main()

{

while(1){//程序一直运行下去

LED = 1;//LED熄灭

delay(200);

//延时,保证LED闪烁能够看清

LED = 0;//LED亮

delay(200);

}

}

备注:1.关于头文件stc89c5x.h,此头文件是根据STC单片的特点对reg52.h进行了更改之

后的,在安装keil时找到我们的资料中的stc89c5x.h头文件,将其拷贝到我们Keil安装目录

下的C51下的INC中,如: D:KeilC51INC,使用时直接将原来的#include 换为

#include 即可,若不使用STC89C5x单片机的特殊寄存器,直接使用

可。

2.关于C语言中#include引用使用<>和’’的区别:<>包含头文件时,编译器先进入到软件安

装文件夹处开始搜索这个头文件如:D:KeilC51INC中搜索,若没有找到,将报错;使用’’

包含的头文件,编译器现在当前工程所在文件夹下开始搜索头文件,没有找到在回到软件

安装文件夹寻找。

第9步:代码编写完成,就需要开始编译,将我们的程序烧写到单片机中了。点击Options

for Target图标,如图:

将晶振频率改为11.0592MHz。

点击Output选项,选中Create Hex File项,以保证编译生成可在单片机上执行的代码,

点击确定,返回主界面:

第10步:点击编译选项,编译整个工程:

无错误,编译通过接下来就可以把我们生成的文件烧写到单片机中了。

三、烧写代码到单片机:

第1步:连接好USB线,将JP1与JP4分别用跳线帽短接。

图3‐1 将JP1与JP4用跳线帽短接

第2步:打开STC_ISP_V488软件,选择正确的单片机类型,我们这里选用STC89C52RC

图3‐2 选择相应单片机型号

第3步:在Step2中打开要编程的.hex文件

图3‐3 选择hex文件

第4步:在step3中选择好对应的COM口,查看COM口方式(我的电脑‐>属性‐>硬件‐>

设备管理器‐>端口(COM和LPT)),查看串口是否已经连接上,如图:

图3‐4 查看COM口连接

将对应COM口设置好,此处需要注意的一定在最高波特率和最低波特率处统一选为

9600,若不一致,很可能烧不进程序。(可能是这个软件的一个bug吧)如图:

图3‐5 设置波特率

第5步:step4默认不变,第五步中点击Download下载(注意下载前保证单片机未上电,

即将按键按下),等到提示给单片机上电时(仍在连接中,请给MCU上电),按键,让按键

处于弹起状态。

图3‐6 点击下载之后

图3‐7 提示给MCU上电

等提示此时,即切换开关

图3‐8 下载完成

当看到此界面下载即成功。

再看实验板,我们可以看见LED已经闪烁起来了。

附录:

一、关于实验班上几个跳线的使用说明:

1. 下载程序、单片机与CPU通信:

在此种情况下,就和下载程序一样,将JP1与JP4短接起来即可

2. 使用电脑和蓝牙通信:

要保证能够实现电脑和蓝牙的正常通信,此时将JP1和JP4的跳线帽拔下,将JP5与JP6

短接。

3. 使用蓝牙和单片机通信

要保证蓝牙与单片机能够通信正常,需要将JP13与JP14短接,如图:

二、关于STC_ISP_v488中串口调试工具使用:

1、 点击右端串口助手,进入串口调试界面

2、 设置串口参数

3、 打开串口即可

具体设置如图:


发布者:admin,转转请注明出处:http://www.yc00.com/web/1714727349a2503783.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信