51入门

来源:互联网 发布:数据冗余度是什么意思 编辑:程序博客网 时间:2024/04/28 08:35

其实严格的说,51单片机是电子开发中也是不可获缺的部分,它可以广泛的应用在绝大多数的电子产品中,特别是嵌入式控制系统结构,在当代电子器件集成度越来越高的今天,在控制器件流程中,单片机还是比较占优的,成本只需几元。温故知新,本篇学习51单片机最基本知识,学生适合.

硬件:

         很多人刚开始接触单片机的时候,可能觉得比较神秘,为什么一堆指令和代码编写好后下载到芯片中,就会实现各种各样的功能,具体到芯片内部,大致说明一下,计算机是在1945年底,美国首次研制成功人类第一台计算机,这台机器重30吨,占地面积达167平方米,从最早开始发展起来的时候是许多的大型晶体管拼接而成的,而且只是实现了最简单存储功能,后来经过了半个多世纪的发展,随着技术和材料的进步,发展到今天的规模。由上面不难理解,所谓的最早的计算机,如在1949年,美国数学家冯.诺伊曼,在他的主持下,诞生了第一台存储程序的计算机,就是许多的晶体管依据数学算法搭建的硬件平台,象我们使用的最最常见的51单片机,它外围需要一个12MHz的晶振,在晶振脉冲的作用下,在单片机的内部就会有相应的TTL门电路进行工作,这样由于我们的代码,其实最终都会转化为01010000111101.......一系列的0、1二进制码,单片机在上电后,根据下载在存储单元中的01010001111....一系列的机器码,开始执行,而后就会根据我们编写的代码针对相应的I/O口,进行处理,当然输出也都是相应的高低电平,这样就实现了外围器件的控制。

标准51单片机组成:

        1 、一个8 位算术逻辑单元
        2 、32 个I/O 口4 组8 位端口可单独寻址
        3 、两个16 位定时计数器
        4 、全双工串行通信(RXD,TXD)
        5 、6 个中断源两个中断优先级
        6、 128 字节内置RAM
        7、 独立的64K 字节可寻址数据和代码区

       时钟频率,12MHZ,51单片机每条指令的执行周期为12个振荡周期,因此计算出一条指令的执行时间约为1Mhz,即为1us

存储区的结构:

     8051存储区,有DATA,IDATA,PDATA,XDATA等,idata,data速度最快,可以存放使用频繁的变量。

处理器状态:

CY-AC- F0 -RS1 -RS0 -OV -USR- P
CY 进位标志位
AC 辅助进位标志位
F0 通用标志位
RS1 寄存器组选择位高位
RS0 寄存器组选择位低位
OV 溢出标志位
USR 用户定义标志位
P 奇偶标志位

电源控制
8051 可通过软件设置两种节电方式空闲模式和低功耗模式设置电源,控制寄存器PCON 的相应位来进入节电方式置位IDLE 进入空闲模式,空闲模式将停止程序执行,RAM 中的数据仍然保持晶振继续工作但与CPU 断开定时器和串行口继续工作,发生中断将退出,中断模式执行完中断程序后,将从程序停止的地方继续指令的执行

通过置位PDWN 位来进入低功耗模式,低功耗模式中晶振将停止工作,因此定时器和串行口都将停止工作至少有两伏的电压加在芯片上,因此RAM 中的数据仍将保存,退出低功耗模式只有两种方式:上电或复位。

SMOD 位可控制串行通信的波特率,将使由定时器1 的溢出率或晶振频率产生的波特率
翻倍,置位SMOD 可使工作于方式1 2 3 定时器产生的波特率翻倍,当使用定时器2 产生
波特率时SMOD 将不影响波特率
电源控制寄存器不可位寻址
SMOD - - - GF1 -GF0- PDWN- IDLE
SMOD 串行口通信波特率控制位置位使波特率翻倍
- 保留
- 保留
- 保留
GF1 通用标志位
GF0 通用标志位
PDWN 低功耗标志位置位进入低功耗模式
IDLE 空闲标志位置位进入空闲模式

中断系统:


基本的8051 支持6 个中断源,两个外部中断,两个定时/计数器中断,一个串行口输入/输出中断,中断发生后处理器转到将五个中断入口处之一执行中断处理程序。

中断源中断向量
上电复位              0000H
外部中断0           0003H
定时器0 溢出      000BH
外部中断1           0013H
定时器1 溢出      001BH
串行口中断         0023H
定时器2 溢出      002BH

中断优先级寄存器:


每个中断源都可通过设置中断优先级寄存器IP 来单独设置中断优先级,如果每个中断源的相应位被置位,则该中断源的优先级为高,如果相应的位被复位,则该中断源的优先级为低。

IP 寄存器可位寻址
- - PT2- PS- PT1- PX1 -PT0- PX0
- 保留
- 保留
PT2 定时器2 中断优先级
PS 串行通信中断优先级
PT1 定时器1 中断优先级
PX1 外部中断1 优先级
PT0 定时器0 中断优先级
PX0 外部中断0 优先级

中断使能寄存器:


通过设置中断使能寄存器IE 的EA 位,使能所有中断每个中断源都有单独的使能位,可通过软件设置IE 中相应的使能位在任何时候使能或禁能中断,中断使能寄存器IE 的各位如下所示
中断使能寄存器IE 可位寻址
EA - ET2- ES- ET1 -EX1- ET0- EX0
EA 使能标志位置位则所有中断使能复位则禁止所有中断
- 保留
ET2 定时器2 中断使能
ES 串行通信中断使能
ET1 定时器1 中断使能
EX1 外部中断1 使能
ET0 定时器0 中断使能
EX0 外部中断0 使能

外部中断信号:


8051 支持两个外部中断信号这使外部器件能请求中断从而得到相应的服务外部
中断由外部中断引脚外部中断0 为P3.2 外部中断1 为P3.3 电平为低或电平由高到低
跳变引起由电平触发还是跳变触发取决于寄存器TCON 的ITX 位见A-7
电平触发时当检测到中断引脚电平为低时将产生中断低电平应至少保持一个指
令周期或12 个时钟周期因为处理器每个指令周期检测一次引脚跳变触发时当在连
续的两个周期中检测到由高到低的电平跳变时将产生中断而电平的0 状态应至少保持
一个周期

内置定时/计数器:
标准的8051 有两个定时/计数器每个定时器有16 位定时/计数器既可用来作为定
时器对机器周期计数也可用来对相应I/0 口TO T1 上从高到低的跳变脉冲计数 当
用作计数器时脉冲频率不应高于指令的执行频率的1/2 因为每周期检测一次引脚电平
而判断一次脉冲跳变需要两个指令周期如果需要的话当脉冲计数溢出时可以产生一
个中断
TCON 特殊功能寄存器timer controller 用来控制定时器的工作起停和溢出标志位
通过改变定时器运行位TR0 和TR1 来启动和停止定时器的工作TCON 中还包括了定时器T0
和T1 的溢出中断标志位当定时器溢出时相应的标志位被置位当程序检测到标志位从
0 到1 的跳变时如果中断是使能的将产生一个中断注意中断标志位可在任何时候
置位和清除因此可通过软件产生和阻止定时器中断
定时器控制寄存器TCON 可位寻址
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
TF1 定时器1 溢出中断标志响应中断后由处理器清零
TR1 定时器1 控制位置位时定时器1 工作复位时定时器1 停止工作
TF0 定时器0 溢出标志位定时器0 溢出时置位处理器响应中断后清除该位
TR0 定时器0 控制位置位时定时器0 工作复位时定时器0 停止工作
IE1 外部中断1 触发标志位当检测到P3.3 有从高到低的跳变电平时置位处
理器响应中断后由硬件清除该位
IT1 中断1 触发方式控制位置位时为跳变触发复位时为低电平触发
IE0 外部中断1 触发标志位当检测到P3.3 有从高到低的跳变电平时置位处
理器响应中断后由硬件清除该位
IT0 中断1 触发方式控制位置位时为跳变触发复位时为低电平触发

定时器的工作方式由特殊功能寄存器TMOD 来设置通过改变TMOD 软件可控制两个
定时器的工作方式和时钟源是I/0 口的触发电平还是处理器的时钟脉冲TMOD 的高四

位控制定时器1 低四位控制定时器0 TMOD 的结构如下
定时器控制寄存器TMOD-不可位寻址
GATE C/T M1 M0 GATE C/T M1 M0
定时器1 定时器0
GATE 当GATE 置位时定时器仅当TR=1 并且INT=1 时才工作如果GATE=0
置位TR 定时器就开始工作
C/T 定时器方式选择如果C/T=1 定时器以计数方式工作C/T=0 时以
定时方式工作
M1 模式选择位高位
M0 模式选择位低位
表A-8
可通过C/T 位的设置来选择定时器的时钟源C/T=1 定时器以计数方式工作对I/0
引脚脉冲计数C/T=0 时以定时方式工作对内部时钟脉冲计数当定时器用来对内
部时钟脉冲计数时可通过硬件或软件来控制GATE=0 为软件控制置位TR 定时器就开
始工作GATE=1 为硬件控制当TR=1 并且INT=1 时定时器才工作当INT 脚给出低电平
时定时器将停止工作这在测量INT 脚的脉冲宽度时十分有用当然INT 脚不作为外
部中断使用
7.1 定时器工作方式0 和方式1
定时器通过软件控制有四种工作方式方式0 为十三位定时/计数器方式定时器溢出
时置位TF0 或TF1 并产生中断方式1 将以十六位定时/计数器方式工作除此之外和方
式0 一样
7.2 定时器工作方式2
方式2 为8 位自动重装工作方式定时器的低8 位TL0 或TL1 用来计数高8 位TH0
或TH1 用来存放重装数值当定时器溢出时TH 中的数值被装入TL 中定时器0 和定时
器1 在方式2 时是同样的定时器1 常用此方式来产生波特率
7.3 定时器工作方式3
方式3 时定时器0 成为两个8 位定时/计数器TH0 和TL0 TH0 对应于TMOD 中定
时器0 的控制位而TL0 占据了TMOD 中定时器1 的控制位这样定时器1 将不能产生溢出
中断了但可用于其它不需产生中断的场合如作为波特率发生器或作为定时计数器被软
件查询当系统需要用定时器1 来产生波特率而又同时需要两个定时/计数器时这种工
作方式十分有用当定时器1 设置为工作方式3 时将停止工作
7.4 定时器2
51 系列单片机如8052 第三个定时/计数器定时器2 他的控制位在特殊功能寄存器
T2CON 中结构如下
定时器2 控制寄存器可位寻址
TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RL2
TF2 定时器2 溢出标志位定时器2 溢出时将置位当TCLK 或RCLK 为1 时
将不会置位
EXF2 定时器2 外部标志当EXEN2=1 并在引脚T2EX 检测到负跳变时置位
如果定时器2 中断被允许将产生中断

RCLK 接收时钟标志当串行口以方式1 或3 工作时将使用定时器2 的溢出
率作为串行口接收时钟频率
TCLK 发送时钟标志位当串行口以方式1 或3 工作时将使用定时器2
的溢出率作为串行口接收时钟频率
EXEN2 定时器2 外部允许标志当EXEN2=1 时在T2EX 引脚出现负跳变时将造
成定时器2 捕捉或重装并置位EXF2 产生中断
TR2 定时器运行控制位置位时定时器2 将开始工作否则定时器2 停
止工作
C/T2 定时器计数方式选择位如果C/T2=1 定时器2 将作为外部事件计数器
否则对内部时钟脉冲计数
CP/RL2 捕捉/重装标志位当EXEN2=1 时如果CP/RL2=1 T2EX 引脚的负跳变
将造成捕捉如果CP/RL2=0 T2EX 引脚的负跳变将造成重装
通过由软件设置T2CON 可使定时/计数器以三种基本工作方式之一工作第一种为捕
捉方式设置为捕捉方式时和定时器0 或定时器1 一样以16 位方式工作这种方式通过
复位EXEN2 来选择当置位EXEN2 时如果T2EX 有负跳变电平将把当前的数锁存在RCAP2H
和RCAP2L 中这个事件可用来产生中断
第二种工作方式为自动重装方式其中包含了两个子功能由EXEN2 来选择当EXEN2
复位时16 位定时器溢出将触发一个中断并将RCAP2H 和RCAP2L 中的数装入定时器中当
EXEN2 置位时除上述功能外T2EX 引脚的负跳变将产生一次重装操作
最后一种方式用来产生串行口通讯所需的波特率这通过同时或分别置位RCLK 和TCLK
来实现在这种方式中每个机器周期都将使定时器加1 而不像定时器0 和1 那样需
要12 个机器周期这使得串行通讯的波特率更高

内置UART
8051 有一个可通过软件控制的内置全双工串行通讯接口由寄存器SCON 来进行设
置可选择通讯模式允许接收检查状态位SCON 的结构如下
串行控制寄存器SCON -可位寻址
SM0 SM1 SM2 REN TB8 RB8 TI RI
SM0 串行模式选择
SM1 串行模式选择
SM2 多机通讯允许位当模式0 时此位应该为0 模式1 时当接收到停止位时
该位将置位模式2 或模式3 时当接收的第9 位数据为1 时将置位
REN 串行接收允许位
TB8 在模式2 和模式3 中将被发送数据的第9 位
RB8 在模式0 中该位不起作用在模式1 中该位为接收数据的停止位在模
式2 和模式3 中为接收数据的第9 位
TI 串行中断标志位由软件清零
RI 接收中断标志位有软件清零

UART 有一个接收数据缓冲区当上一个字节还没被处理下一个数据仍然可以缓冲区
接收进来但如果接收完这个字节如果上个字节还没被处理上个字节将被覆盖因此
软件必须在此之前处理数据当连续发送字节时也是如此
8051 支持10 位和11 位数据模式11 数据模式用来进行多机通讯并支持高速8 位移
位寄存器模式模式1 和模式3 中波特率可变

8.1 UART 模式0
模式0 时UART 作为一个8 位的移位寄存器使用波特率为fosc/12 数据由RXD 从
低位开始收发TXD 用来发送同步移位脉冲因此方式0 不支持全双工这种方式可用
来和像某些具有8 位串行口的EEPROM 之类的器件通讯
当向SBUF 写入字节时开始发送数据数据发送完毕时TI 位将置位置位REN 时
将开始接收数据接收完8 位数据时RI 位将置位
8.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 非整数的重装值必须和下一个整数非常接近通常产生的波特率
都能使系统正常的工作这点需要开发者把握
这样如果你使用9.216M 晶振想产生9600 的波特率第一步设K=1 分子为9216000
分母为3686400 相除结果为2.5 不是整数设K=2 分子为18432000 分母为3686400
相除结果为5 可得TH1=251 或0FBH
如果用8052 的定时器2 产生波特率RCAP2H 和RCAP2L 的重装值也需要经过计算根
据需要的波特率用下式计算
[RCAP2H RCAP2L]=65536-OsFreq/ 32*BaudRate
假设你的系统使用9.216M 晶振你想产生9600 的波特率用上式产生的结果必须是
正的而且接近整数最后得到结果30 重装值为65506 或FFE2H
8.3 UART 模式2
模式2 的数据以11 位方式发送1 位起始位8 位数据位第九位1 位停止位发
送数据时第九位为SCON 中的TB8 接收数据的第九位保存在RB8 中第九位一般用来多
机通信仅在第九位为1 时单片机才接收数据多机通信用SCON 的SM2 来控制当SM2
置位时仅当数据的第九位为1 时才引发通讯中断当SM2 为0 时只要接收完11 位就产
生一次中断
第九位可在多机通讯中避免不必要的中断在传送地址和命令时第九位置位串行
总线上的所有处理器都产生一个中断处理器将决定是否继续接收下面的数据如果继续
接收数据就清零SM2 否则SM2 置位以后的数据流将不会使他产生中断
SMOD=O 时模式2 的波特率为1/64Osc SMOD=1 时波特率为1/32Osc 因此使用
模式2 当晶振频率为11.059M 时将有高达345K 的波特率模式3 和模式2 的差别在于
可变的波特率

本文只是大概的说明一下标准51单片机所涉及到的知识,详细的最好需要买本单片机的相关书籍,网络上有本很好的教程《Keil C51 使用技巧及实战》,是周立功公司的,有兴趣的最好能看下,相信对初学者会有不小的提高。

原创粉丝点击