【期末复习】51单片机
本文为单片机课程期末复习,仅供参考。
一、AT89C51内部硬件结构
一个8位的微处理器CPU
片内数据存储器RAM (128B/256B),用以存放可以读/写的数据,如运算的中间结果、最终结果以及欲显示的数据等。
片内程序存储器ROM(4KB/8KB),用于存放程序、一些原始数据和表格。
四个8位并行I/O(输入/输出)接口P0~P3,每个口可以用作输入,也可以用作输出,还兼有其它复合功能。
两个可编程16位定时/计数器,每个定时/计数器都可以设置成计数方式,用以 对外部事件进行计数,也可以设置成定时方式,并根据计数或定时的结果实现计算机控制。
一个全双工UART的串行I/O口,可实现单片机与单片机或其它微机之间串行通信。
五个中断源的中断控制系统。
片内振荡器和时钟产生电路,但需外接晶振和电容。(可以不记)
二、内部存储器组织结构
程序存储器(ROM)
片内集成4KB ROM,支持外部扩展至最大64KB
采用统一编址方式,通过EA引脚选择内外存储器:
EA=1:使用片内ROM
EA=0:使用外部扩展ROM
数据存储器(RAM)
片内256B RAM与外部64KB RAM独立编址
片内RAM分区结构:
低128字节:用户数据区
高128字节:特殊功能寄存器区(SFR)
进一步划分为:用户RAM区、位寻址区、工作寄存器组
特殊功能寄存器(SFR)
对应各功能部件的控制寄存器,AT89C51包含21个SFR,其中11个支持位寻址。
工作寄存器组选择:通过PSW寄存器的RS1、RS0位配置
RS1 | RS0 | 寄存器组 | R0~R7地址 |
---|---|---|---|
0 | 0 | 第0组 | 00H ~ 07H |
0 | 1 | 第1组 | 08H ~ 0FH |
1 | 0 | 第2组 | 10H ~ 17H |
1 | 1 | 第3组 | 18H ~ 1FH |
三、C51程序设计基础
C51与标准C语言的主要差异
库函数差异:C51库函数针对51单片机硬件特性定制
特有数据类型:
sfr:定义8位特殊功能寄存器
sfr16:定义16位寄存器
bit:声明位变量
sbit:单独操作寄存器特定位
数据存储类型:
data/idata:访问内部RAM
xdata/pdata:访问外部RAM
code:访问程序存储器(ROM)
中断函数支持:通过interrupt关键字直接定义中断服务函数
中断函数格式
四、并行I/O口原理与编程
电气特性
采用TTL电平标准:
逻辑"0":0~2.4V
逻辑"1":3.6~5V
四个I/O口功能特点
P0口:外部扩展存储器时作为地址总线低8位和数据总线复用口,无内部上拉电阻。作为输入或输出时应在外部接上拉电阻。
P1口:通用I/O口,内置上拉电阻
P2口:外部扩展时作为地址总线高8位,内置上拉电阻
P3口:除通用I/O外,还具有第二功能。
按键
键的连击问题
人为按键通常按下时间为几十到数百毫秒,若是程序在循环中不断检测按键是否按下,在按键按下的时间中,循环检测程序已经执行多次,会造成一次按下执行多次操作。可使用等待按键释放方法解决。
按键抖动问题
按键抖动是当用手按下一个按键时,按键在闭合位置和断开位置之间往往会弹跳几下才会稳定到闭合状态,在释放按键同理。这是由机械结构的固有特性决定的。 按键抖动的持续时间大小一般在10ms左右,可使用延时10ms后等待按键稳定再次判断是否有键按下,或采用按键消抖电路,或专用键盘接口芯片含有按键自动去抖电路。
数码管静态和动态显示区别
静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。
动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。轮流向各位数码管送出段码和相应的位选,利用人眼视觉暂留作用,使人感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。
五、中断系统
5个中断源
中断源,引起中断的原因,可以引起中断的事件称为中断源。AT89C51单片机有5个中断源,分别为外部中断0(INT0)、外部中断1(INT1)、定时器中断0(TF0)、定时器中断1(TF1)、串口中断(RI/TI)。
中断向量、中断优先级、中断嵌套、中断拓展的含义
中断向量是硬件预先为每个中断源分配的中断服务子程序的入口地址。
中断优先级,系统根据引起中断事件的重要性和紧迫程度,硬件将中断源分为若干个级别,称作中断优先级。中断嵌套是指高优先级可以打断低优先级中断的执行,等到高优先级的中断服务执行完毕后,返回断点处,继续执行低优先级中断的服务。
中断拓展:
软件扩展是指将多个外部信号连接到同一中断引脚,中断触发后 查询多个I/O口状态,判断具体触发源。
硬件扩展是指通过外部电路将多路信号编码为1路,接入INTO/INT1,配合软件解码。
中断响应条件
EA=1中断允许总开关接通。
中断源请求标志位=1
中断源中断允许位=1
无同级或更高级中断正在被服务。
中断允许控制寄存器
中断优先级控制寄存器
触发方式配置
TCON寄存器中的IT0/IT1位控制触发方式:
ITx=0:低电平触发
ITx=1:下降沿触发(推荐使用,抗干扰性强)
中断编程过程
六、定时器/计数器系统
定时和计数的实质与区别
定时和计数本质上都是加法计数器,计数加1,加满溢出,触发中断。
区别在于计数脉冲的来源,定时是对内部脉冲计数,即每个机器周期产生1个计数脉冲,使计数器加 1。计数是对外部脉冲的计数。
定时器的四种工作模式
M1 | M0 | 工作方式 | 方式说明 |
---|---|---|---|
0 | 0 | 0 | 13位定时/计数器 |
0 | 1 | 1 | 16位定时/计数器 |
1 | 0 | 2 | 8位,初值自动重置定时/计数器 |
1 | 1 | 3 | 两个8位定时/计数器(只有T0有) |
初值计算和定时时间
加法计数器是计满溢出时才申请中断,所以在给计数器赋初值时,输入的是计数器计数的最大值与这一计数值的差值。设最大值为M,计数值为N,初值为X,则X的计算方法为:
计数状态: X = M-N
定时状态: X = M-(定时时间∕机器周期)
方式1
方式2的TL0是用来计数的,而TH0是用来保存初值的,所以可以实现自动重装。
补充:
fosc是主频,f机器=fosc/12,
以12Mhz为例,f机器=1Mhz,M是10的-6,hz是 次/s,1s等于10的-6μs,所以最终等于1μs。
单位 | 符号 | 换算关系 | 示例(以1秒为基准) |
---|---|---|---|
秒 | s | 1 s = 基准单位 | 1 s = 1 s |
毫秒 | ms | 1 ms = 10⁻³ s | 1 s = 1,000 ms |
微秒 | μs | 1 μs = 10⁻⁶ s | 1 s = 1,000,000 μs |
纳秒 | ns | 1 ns = 10⁻⁹ s | 1 s = 1,000,000,000 ns |
频率单位 | 对应周期 | 时间单位 |
---|---|---|
Hz | 1 s | 秒 |
kHz (10³ Hz) | 1 ms | 毫秒 |
MHz (10⁶ Hz) | 1 μs | 微秒 |
GHz (10⁹ Hz) | 1 ns | 纳秒 |
查询方式实现
注意需要重置溢出标志位
注意如果说要输出时钟周期为T的方波,那么定时时间则为T/2。
中断方式实现
如果定时时间超过最大定时时间,可通过定时(范围内)+计数实现
一种是自己设置一个用于计数的变量,一种是使用系统自带的计数器
注意:计数器计数时是对下跳沿计数
PWM
通过调节数字脉冲占空比来等效输出模拟量
方波输出时,定时时间为时钟周期的一半(T/2)
七、串行通信接口
串行口的工作方式
同步移位寄存器,主要用于拓展并行输入或输出口。
方式1是8位数据的异步通信。
方式2和方式3是9位数据的异步通信。
波特率计算
波特率设定方法:
初始化设置TI为0,发送数据时将内容写入SBUF发送完成后会置为1,如果还需要继续发送数据,就需要重新置为0。
RI==1说明数据接收完成,读取数据,然后重新置为0,即允许接收数据。
如有问题或建议,欢迎在评论区中留言~