单片机复习专栏

题型
一、选择题 1分*10
二、填空题 1分*10
三、判断题 1分*5
四、简单题 6分*5
五、应用题 共45分(10+10+15+10)

一、概述
1.51单片机是一款8位的单片机
51单片机的内部构成
图1.
(1)8位微控制器CPU
(2)数据存储器 128B RAM
(3)程序存储器 4KB Flash ROM
(4)4个8位可编程并行I/O口
(5)2个可编程的16位定时器
(6)1个全双工工异步串行口

二、AT89S51单片机内硬件结构
2.并行I/O口引脚

单片机三总线结构:数据总线,地址总线,控制总线


1.P0口:
P0作为地址总线(低8位)及数据总线的分时复用端口,P0口也可以作为通用I/O口使用,但需加上拉电阻,这时为准双向口。

2.P1口:通用IO端口

3.P2口:P2口作为高8位地址总线用,也可作为通用的I/O口使用。

4.P3口:P3口第一功能作为通用I/O端口
第二功能:
P3.0 RXD 串行数据输入口
P3.1 TXD 串行数据输出口
P3.2 INT0 外部中断0输入
P3.3 INT1 外部中断1输入
P3.4 T0 定时器0外部计数输入
P3.5 T1 定时器1外部计数输入
P3.6 WR 外部数据存储器写选通控制信号
P3.7 RD 外部数据存储器读选通控制信号

除P0以外,P1P2P3内部全部具有上拉电阻

3.程序状态字寄存器PSW
标志寄存器PSW(Program Status Word)是一个8位的寄存器,它用于保存指令执行结果的状态
PWS.D7进位标志位Cy,如果运算过程有进位/借位,Cy=1。
PWS.D6辅助进位标志位Ac,当D3位向D4位产生进位或者借位,Ac=1。
PWS.D5用户使用的标志位F0,编程时,用户用指令将其置1或者置0。
PWS.D4D3工作寄存器组选择控制位1和位0 RS1,RS0
RS1=0 RS0=0 选择0组
RS1=0 RS0=1 选择1组
RS1=1 RS0=0 选择2组
RS1=1 RS0=1 选择3组
PWS.D2溢出标志位OV,如果运算结果出现溢出了,OV=1。
PWS.D1 保留位,未使用
PWS.D0奇偶校验位P,累加器A中1的个数位奇数时P=1

若ACC=0X63,则P的值为:0

控制器
控制器的主要任务是识别指令,根据指令控制单片机各功能部件
控制器主要包含程序计数器PC指令寄存器指令译码器定时及控制电路

程序计数器PC是一个独立的16位计数器,不可访问,单片机复位时,PC中的内容是0000H,从程序存储器0000H单元取指令,开始执行程序。
PC永远指向下一条指令的地址
PC工作过程:CPU读指令时,PC的内容作为所取指令的地址,程序存储器按此地址输出指令字节,同时PC自动+1
PC的计数宽度决定了程序存储器的地址范围,PC为16位,故可对64KB(2^16B)寻址。

程序存储空间ROM
AT89S51分为片内程序存储器和片外程序存储器
片内程序存储器是4KB的Flash存储器,存储范围为0000H-0FFFH
因为51单片机有16根地址总线,所以片外的的存储器分为大小为64KB,存储范围为0000H-FFFFH

因为片内和片外的地址有重复,为了让CPU确定访问的是片内还是片外,通过引脚EA上所接的电平就可以确定
!EA=1时,PC的值如果超过片内存储器的最大地址(0FFFH),则访问外部存储器,如果小于这个最小地址,则访问片内存储器。(先片内再片外
!EA=0时,片内存储器被忽略,直接访问片外存储器。(直接片外

数据存储器空间RAM
分为片内和片外两部分。内部128B的RAM,00H~7FH。存放可读/写的数据。内部不够用时,外部可扩展最多64KB
因为片内和片外访问使用不同的指令,所以不需要区分
地址为00H-1FH的单元是四组通用寄存器
地址为20H-2FH的128位是可位寻址区,可以按位寻址也可以按字节寻址
地址位30H-7FH用户RAM区一般RAM),只能字节寻址
特殊功能寄存器(SPF)的单元地址映射在80H-FFH

凡是可址寻址的SFP,其字节地址末位只能是0H或者8H

堆栈指针SP

SP的内容指示出堆栈顶部在内部RAM中的位置。堆栈主要有两个功能:保护断点和现场保护。

①保护断点。预先把主程序的断点在堆栈中保护起来,为程序的正确返回做准备。

②现场保护。执行子程序或中断服务子程序的时候,可能用到单片机中的一些寄存器单元,会破坏主程序运行时这些寄存器单元的原有内容。所以执行子程序前把单片机中有关寄存器单元的内容保存起来,送人堆栈。

AT89S51的并行I/O端口
当P1口输出时,可以提供电流负载,P1口具有驱动4个TTL负载芯片,IO口输入之前,先写入1再输入适用于P0123)屏蔽干扰。

复位电路
复位方式有两种方式:上电自动复位手动按钮复位

C51拓展了新的数据类型,重点是bit和sbit的使用
数据存储类型
1.在C语言的基础上,拓展了4种数据类型
bit
sfr
sfr16
sbit
定义东西三种方法

C51定义的任何数据类型必须以一定的方式,定位在8051单片机的某一存储区内通过不同的存储类型来修饰。
C51语言存储类型与8051存储空间的对应关系
存储区 存储类型 与存储空间对应关系
DATA data 片RAM直接寻址,位于片内低128字节
BDATA bdata 片RAM位寻址区,位于20H-2FH空间
IDATA idata 片RAM的256字节,必须间接寻址的存储区
XDATA xdata 片外64KB的RAM空间 (空间大)
PDATA pdata 片外RAM256字节 (速度快)
CODE code 程序存储区

访问片外数据存储区比访问片内数据存储区慢,程序存储区只能读不能写

1.共阴数码管断码的编码

共阴数码管是将 LED 的阴极公共连接在一起,共阳数码管是将 LED 的阳极公共连接在一起。为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段,因此,为LED显示器提供的编码正好是一个字节。
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};   //0-F

2.动态数码管和静态数码管的两种驱动方式

静态显示

  静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。

  动态显示

  LED数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划”a,b,c,d,e,f,g,dp”的同名端连在一起,另外为每个数码管的公共端增加单独的I/O端口线控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的公共端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

3.矩阵键盘两种控制方法及电路

查询工作方式, 中断扫描方式

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排成矩阵形。采用逐行或逐列扫描,就可以读出任意位置按键的状态。

五个中断源:
中断源 中断级别
外部中断0 最高
T0溢出中断
外部中断1
T1溢出中断
串行口中断 最低

中断的使用:TCON IE IP寄存器,中断服务函数的定义由谁调用
中断优先级寄存器IP:中断请求源有两个中断优先级,每一个中断请求源可由软件设置为高优先级中断或低优先级中断。也可以实现两级中断嵌套。

中断优先级
两条基本规则:P156
(1)低优先级可被高优先级中断,高优先级不能被低优先级中断
(2)任何一种中断(不管是高级还是低级)一旦得到相应,不会再被它的同级中断源所中断
(3)在同时收到几个同优先级的中断请求时,哪一个中断请求能优先得到响应,取决于内部查询顺序。P156

外部中断代码编写 初始化函数

定时器/计数器中断

1.定时器/计数器4种工作方式
M1 M0 工作方式
0 0 方式0,为13位定时器/计数器
0 1 方式1,为16位定时器/计数器
1 0 方式2,为8位的常数自动重新装载的定时器/计数器
1 1 方式3,仅适用于T0,此时T0分成2个8位计数器,T1停止计数

2.定时器的应用P179 例7-3

用定时器0,定时功能,方式1,计时1ms

#include <stdio.h>
void Delay(unsigned int i){
	unsigned int j;
	for(;i>0;i--);
	for(j=0;j<125;j++){} 
}
void main(){
	TMOD=0x01;
	ET0=1;
	EA=1;
	TR0=1;
	while(1){
		TH0=0xfc;
		TL0=0x18;
		...
		TF0=0;
	}	
}
void T1 int(void) interrupt 3{
	while(1){
		...
	} 
}

3.计数器的应用P178 例7-2 (都是中断)

用定时器1,计数功能,方式1,执行计数4次

#include <stdio.h>
void Delay(unsigned int i){
	unsigned int j;
	for(;i>0;i--);
	for(j=0;j<125;j++){} 
}
void main(){
	TMOD=0x50;
	TH1=0xff;
	TL1=0xfc;
	EA=1;
	ET1=1;
	TR1=1;
	while(1)	
}
void T1 int(void) interrupt 3{
	while(){
		...
	} 
}

1.串口通信基础7
什么是并行通信,串行通信,单工,半双工,全双工

2.波特率概念及计算
波特率时表征数据通信传输速率的一种方式,它可以视为单位时间内所传输的二进制数据位数,单位b/s
例:波特率为1200,表示每秒发送1200bit
通信双方的波特率相等时,才能保证数据的正常传输。

3.串口通信的初始化程序

串行口的4种工作方式
4种工作方式由特殊功能寄存器SCON中SM0、SM1定义
SM0 SM1 方式 功能
0 0 0 同步移位寄存器方式
0 1 1 8位异步收发,波特率可变(由定数器控制)
1 0 2 9位异步收发,波特率为fosc/64或fosc/32
1 1 1 9位异步收发,波特率可变(有定时器控制)

波特率的制定方法

方式0 波特率 fosc/12
方式1和方式3 波特率 2smod/32*定时器T1的溢出率
方式2 波特率 2^smod/32*定时器T1的溢出率


评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注