单片机期末复习
1.MOV寻址
- 立即寻址
MOV A, #05H直接赋值05H - 直接寻址
MOV A, 20H赋值地址20H的内容 - 寄存器寻址
MOV A, R0特定寄存器R0的内容 - 寄存器间接寻址
MOV A, @R0以R0内容为地址 - 变址寻址
MOVC A, @A+DPTRA的内容+DPTR的地址 - 相对寻址
- 位寻址
- MOV操作内部RAM数据
- MOVX操作外部RAM数据
- MOVC操作外部ROM数据
定时器
8051有2个可编程的定时器/计数器,可编程的意思是指通过写指令设置有关的寄存器,如工作方式、定时时间、计数初值、启动方式等
系统脉冲的12分频作为计数脉冲时用作定时器
初始化定时器T1
1 | MOV TMOD, #10H ; 确定工作模式 |
TMOD的设置
| GATE | C/T | M1 | M0 |
|---|---|---|---|
| 0 | 定时/计数 | 工作方式 | 工作方式 |
IE的设置
| 1000 | T1 | INT1 | T0 | INT0 |
|---|
| TCON | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
|---|---|---|---|---|---|---|---|---|
| T1标志 | T1启停 | T0启停 |
- TR为启停控制位
中断
中断通常分为外部中断(INT0,INT1)和内部中断(T0,T1),还有串口中断(TI/RI)
- EA功能:设置 EA(Enable All Interrupts,开全局中断位)。
- EX1 EX0 ET1 ET0功能:设置指定中断使能位。
- IT0 IT1功能:置0在低电平触发,置1在负边沿触发。
- 中断源的入口地址
| 中断 | 入口地址 | 中断标志位 |
|---|---|---|
| INT0 | 0003H | IE0 |
| T0 | 000BH | TF0 |
| INT1 | 0013H | IE1 |
| T1 | 001BH | TF1 |
| 串口中断 | 0023H | TI/RI |
- 中断优先级由中断优先级寄存器IP (Interrupt Priority) 控制
- 中断服务程序的返回指令必须是RETI
- 8051 CPU 数据存储器的寻址能力是64KB,范围为0000~FFFFH
- 堆栈寄存器SP有8位,特点是用于标注堆栈的栈顶单元的地址,复位后内容为07H当执行中断服务程序或调用子程序时,用PUSH和POP指令堆栈保护现场,
INC A累加器A的值加1
DEC累加器A的值减一
CPL按位取反
ANL按位与(AND)操作
ORL按位或(OR)操作
XRL按位异或(XOR)操作
RL
RR循环右移
XCH数据交换指令
XCHD交换累加器(A)和目标地址的低四位,只能使用 @R0 或 @R1 指针。
SWAP交换高4位和低4位
MUL AB无符号乘法,A存低八位,B存高八位
DIV AB执行A/B,商存入A,余数存入BADD A, 30HA=A+(30H的值)
ADDC A, @R0A=A+(@R0的值)+CY
SUBB相减- 数据指针寄存器DPTR占用2个单元,共有16位分别为DPH 和DPL,都是8位寄存器。用于作为RAM的指针,用来存放片内ROM或片外ROM/RAM地址。数据位数多意味着存储空间大。
- DA指令为二进制转十进制指令,用于数据显示环节。当计算结果为A~F时,会自动转换至0~9,确保显示正确
- 8051单片机有4个并行I/O口,32根I/O线,P0作为数据总线和低8位地址总线,P2口的其他功能为单片机有外部拓展时,作为高8位地址线使用
- 8051控制线RST用于复位,分为上电复位和开关复位
- 数码管动态显示原理:接4个数码管的共阳极公共端,比如第一个数码管显示8,只需要通过P1口输出8的字形码,接第一个数码管公共端的P2.0输出高电平即可实现显示8。
- 在MCS-51系统中,决定程序执行顺序的寄存器是PC,用来存放下一条将要执行指令的地址,,能自动+1,能存放16位二进制数,可通过转移控制指令修改它的内容
- SJMP是短跳转指令,程序的跳转范围在256字节以内.SJMP LOOP 是相对寻址,开始执行标号为LOOP的指令行。
- 8051的最小系统的组成是 电源电路、单片机、晶振电路、复位电路。
- PSW寄存器中
- P位是奇偶标志,也就是判断累加器A中1的个数的奇偶。
- F0是用户标志,也就是供程序员使用的位。比如:该位=1,表示电机启动,=0表示电机停止
- LED数码管有静态显示和动态显示,静态显示只适用于显示位数较少的场合。动态显示适合显示位数较多场合。
- 单片机的特点有高性能、低价格,体积小、可靠性高,低电压、低功耗。
- 8051 控制线ALE作用是锁存低8位地址,8051在访问片外存储器时,P0口输出低8位地址的同时还在ALE线上输出一个高电平脉冲,其下降沿用于把这个片外存储器低8位地址锁存到外部地址锁存器,以便使P0口引脚线传送随后而来的片外存储器读写数据。在不访问片外存储器时,8051CPU自动在ALE/线上输出频率为fosc/6的脉冲序列。
- 8051有8个工作寄存器R0 ~ R7,0组:00H~07H; 1组:08H~0FH; 2组:10H~17H; 3组:18H~1FH。
- 时钟周期为,机器周期通常,大多数指令周期需要 1~2 个机器周期。
- DAC0832连接方式有直通方式、单缓冲方式、双缓冲方式。
- PSEN作用:片外ROM选通控制线
- RD和WR的作用:访问外部RAM读写控制线
- 8255工作模式有模式0、1、2;模式0为基本输入输出,模式1为选通输入输出,模式2只有A口能设定。
- 8051片内RAM容量是128B,可分为寄存器区,位寻址区,通用RAM区
- A/D 转换芯片ADC0809 中既可做为查询的状态标志,又可作为中断请求信号使用的是EOC,输出允许信号为OE,ADC0809有8个通道
- 单片机复位后,PC的值为0000H,4个I/O口的值为FFH。
- 输入接口电路是指将外部信号送入单片机系统的通道称为 输入接口电路。
输入接口电路作用:是CPU与外部输入设备进行数据传输的通道,是单片机系统与外部设备交换信息的桥梁。 - 8051最小系统工作方式为复位方式、程序执行方式、节电方式、EPROM编程和效验方式。
- 8051的内部结构由8个部件组成:中央处理器(CPU)、片内数据存储器(RAM)、片内程序存储器(ROM/EPROM)、输入输出接口(并行I/O口)、可编程串行口、定时器/计数器、中断系统及特殊功能寄存器。
- 计算机中数的表示形式有无符号数和符号数,其中符号数有原码 反码 补码
- 单片机时序是指单片机执行指令时应发出的控制信号的时间序列。时钟周期,机器周期,指令周期
编程题
跳转指令
- DJNZ 表示 “Decrement and Jump if Not Zero”(减 1 并跳转,如果不为 0)。
- JNZ表示 “Jump if Not Zero”(如果累加器A值不为零,则跳转)。
- JB 表示"Jump if Bit is set"(如果位为 1 则跳转)
- JNB表示"Jump if Bit is not set"(如果位为 0 则跳转)。
- CJNE 全称为 Compare and Jump if Not Equal(比较并跳转,如果不相等)
CJNE <source>, <direct>, <label>
1 | 比较 <source> 和 <direct> 的值: |
1. 用汇编语言编写:统计内部RAM 30H开始的100个数中0的个数并存放在R5中。
1 | MOV R0, #30H ;从30H开始 |
2. 用汇编语言编写:设X和Y均为16位无符号二进制数,分别存放在内部RAM的40H、41H和50H、51H单元,试编写能完成Z=X+Y操作的程序,并且把结果Z送到内部RAM的40H、41H单元。
1 | MOV R0, 40H ; X的低四位 |
3. 用汇编语言编写:已知系统时钟频率为12MHz,编写延时2s子程序。
1 | MOV R4, #20 |
4. 用汇编语言编写:将外部RAM 2000H单元开始的数据块传送到内部RAM 60H开始的位置,直到片外RAM单元出现零为止。
1 | MOV DPTR, #2000H |
5. 用汇编语言编写:统计内部RAM 70H开始的50个单元中负数的个数并存放在R5中。
1 | MOV R1, #70H ; |
6. 设单片机的晶振频率为6MHz,利用定时器T0的功能,编写能延时10ms的程序。
1 | ORG 00H |
7. 用汇编语言编写:设内部RAM 地址是20H的单元无符号数X,编写程序实现:求函数Y= 9X +21,并把Y送入22H单元,并给出注释。
1 | MOV A, 20H ; X传入A |
8. 在采用8255扩展I/O口时,若把8255 的PC7引脚作为输入,接一个开关,PB7引脚接一个发光二极管。请编写程序实现以下功能:C口开关接高电平信号时,B口所接的发光二极管点亮。
设8255的地址为X, X+1, X+2, X+3
1 | MOV DPTR #X+3 ;控制口地址 |
9. P2口接8个LED灯,试用汇编编写实现单个LED灯左移程序,延时程序略
1 | MOV A, #FEH ; 01111111 |
10. 设8051单片机的时钟频率为12MHz,试编写利用定时器T0在P2.0引脚输出周期为1s方波的程序。
TC=216-T定时/T计数=65536-50ms/1us=15536=3CB0H
开T0: #82H 11110010H
开T1: #88H 11111000H
1 | ORG 000H |
方案设计题
1. 计一种基于89C51单片机的显示工具,以显示范围从000到999的数字。根据本课程所学内容设计一个可行方案,尽量包括方案分析、硬件设计、软件设计等方面,以满足该需求。
设计一种基于89C51单片机的显示工具,以显示范围从000到999的数字,需要构建一个包含单片机、数码管显示模块以及必要的外围电路的系统。
以下是详细的设计步骤和要点:
一硬件设计
单片机:AT89C51
数码管:三位共阳或共阴数码管
驱动电路:如果数码管为共阳,则单片机输出低电平点亮相应段;如果为共阴,则输出高电平点亮。
电阻和电容:用于限流和去耦
显示原理:
使用三个独立的数码管分别显示百位、十位和个位。
单片机通过控制每个数码管的段选和位选信号来显示不同的数字。
数码管连接:
段选:单片机的某个端口(如P0口)连接数码管的段选端,通过输出不同的编码来显示不同的数字。
位选:使用单片机的另外几个端口(如P2.0, P2.1, P2.2)分别控制三个数码管的位选信号,每次只点亮一个数码管以进行显示。
电路设计:
限流电阻:在段选和位选线上串联限流电阻,以防止电流过大损坏数码管或单片机。
三、 软件设计
初始化:
设置单片机的IO口为输出模式。
初始化定时器(如果需要动态扫描显示)。
数码管编码
定义一个包含0-9数字对应的段选编码的数组。
显示逻辑
通过读取一个计数器或外部输入的值,将其分解为百位、十位和个位。
依次点亮每个数码管,并通过段选线输出对应的数字编码。
使用延时函数确保每个数码管有足够的显示时间。
2. 某部门需要设计一种基于89C51单片机的6位阿拉伯数字密码输入工具。根据本课程所学内容设计一个可行方案,尽量包括方案分析、硬件设计、软件设计等方面,以满足该需求。
设计一种基于89C51单片机的6位阿拉伯数字密码输入工具,主要涉及到硬件电路设计和软件编程两个方面。
一、硬件设计
单片机选择:89C51单片机作为核心控制器。
输入设备:
键盘:可以采用矩阵键盘或独立按键键盘。考虑到6位数字输入,建议使用6个独立按键,每个按键代表一个数字(0-9,可能需要两个按键组合来表示10,或者通过逻辑判断来区分输入)。如果需要更紧凑的设计,可以使用4x4矩阵键盘,通过软件编码来区分不同的数字输入。
显示设备(可选):
LED灯:简单应用中,可以用LED灯来显示输入状态或密码验证结果。
二、软件设计
初始化:
初始化单片机,包括IO口配置、LCD显示屏(如果使用)的初始化等。
键盘扫描:
编写键盘扫描程序,不断检测按键是否被按下。
如果检测到按键按下,则根据按键的编码确定输入的数字。
密码输入逻辑:
定义一个变量或数组来存储输入的密码。
每当一个数字被输入时,更新密码变量或数组,并显示当前输入的密码(如果使用了显示屏)。
如果输入超过6位数字,则忽略额外的输入或提示用户重新输入。
密码验证(可选):
在密码输入完成后,可以设计密码验证逻辑。
将输入的密码与预设的密码进行比较。
如果密码正确,则执行相应的操作(如解锁设备、点亮LED等)。
如果密码错误,则给出错误提示,并允许用户重新输入。
主循环:
不断重复键盘扫描和密码输入/验证的逻辑,直到满足特定的退出条件(如正确输入密码、达到最大尝试次数等)。
3. 设计一个基于AT89C51单片机的定时工具定时范围10~50秒。请根据本课程所学内容设计一个可行方案,尽量包括方案分析、硬件设计、软件设计等方面,以满足该需求。
在设计一个基于AT89C51单片机的定时工具时,需要考虑到定时器/计数器的配置、按键输入控制、以及显示输出等多个方面。
以下是一个设计方案,其定时范围设定为10秒到50秒。
一、设计分析
定时范围:10秒至50秒,步长为1秒。
按键控制:至少需要一个按键来启动和停止定时器,并可能需要调整定时时长。
显示输出:通过数码管或LCD显示屏显示当前时间或剩余时间。
二、硬件设计
单片机:AT89C51
显示模块:4位数码管(如果采用LCD显示,则可以使用LCD1602)
按键模块:至少一个按键(可以使用矩阵键盘以支持更多功能,如设置时间等)
复位电路:用于单片机复位
三、软件设计
定时器初始化:
配置定时器0或定时器1(通常选择定时器0,因为它在AT89C51中更常用)。
设置定时器的工作模式(通常为模式1,16位定时器/计数器模式)。
根据晶振频率计算定时器初始值,以实现大约1秒的定时中断。
按键扫描与处理:
设计按键扫描程序,用于检测按键是否被按下。
根据按键的不同功能(如启动、停止、设置时间等),执行相应的处理逻辑。
时间显示:
设计显示程序,用于在数码管或LCD上显示当前时间或剩余时间。
更新显示内容需要在定时器中断服务程序中进行。
主程序流程:
初始化单片机、定时器、显示模块等。
进入主循环,等待按键事件。
当检测到按键事件时,根据按键功能执行相应操作。
在定时器中断服务程序中更新显示内容,并处理定时逻辑。
4. 某工厂需要设计一个使用89C51单片机进行开关量的边沿信号检测。请根据本课程所学内容设计一个可行方案,尽量包括方案分析、硬件设计、软件设计等方面,以满足该需求。
- 硬件设计
所需材料:89C51单片机、开关(按钮或限位开关)、电阻(限流用)、电源(适配89C51)、跳线若干、面包板或PCB板
连接方式:
将开关的一端连接到89C51的某个外部中断引脚(如INT0或INT1),另一端连接到地。
开关的另一端通过一个限流电阻连接到单片机的VCC。
- 软件设计
初始化:
设置外部中断为边沿触发模式(上升沿或下降沿,根据需求选择)。
初始化定时器(如果需要进一步的时间控制或测量)。
初始化串口(如果需要调试信息输出)。
外部中断服务程序(ISR):
编写中断服务程序以响应外部中断。
在中断服务程序中,首先判断是哪种边沿触发了中断(如果配置为边沿触发,则通常需要软件判断)。
记录边沿事件(例如,通过翻转一个标志位或增加计数器)。
如果需要,可以发送中断事件的信息到串口或其他输出设备。
