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
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
可。
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条)