单片微机原理与接口技术期末复习

2023-12-13 05:00:52

第二章:

STC15F2K60S2 参数含义

(1)“STC”代表的含义是不能在应用中访问程序存储器,但设置了可单独访问的数据 Flash 区域
(2)F :工作电源为5V
(3)2k:片内 RAM 的容量是 2K
(4)60:片内程序存储器容量为60KB
(5)S2:含有两个串行口

STC15F2K60S2增强在哪里

(1)在8051的内核基础上进行功能扩展性能改进

PSW程序状态字

(1)重点注意B0的P:奇偶标志位。
注意:累加器ACC和AC辅助进位标志位不是同一个东西。累加器ACC是一个8bit的寄存器,而AC辅助进位标志位是1bit的存储在PSW中的位。

在这里插入图片描述

基本RAM

(1)片内基本RAM分为低128字节和高128字节。
(2)低128字节分为:
<1>4个工作寄存器组,共32字节,00H~1FH。
<2>位寻址区,共16字节,20H~2FH。
<3>通用RAM,共80字节,30H~7FH。
(3)高128字节地址与特殊功能寄存器地址相同,为了区分采用不同的寻址方式。
<1>高128字节RAM只能采用寄存器间接寻址方式。指令为:
MOV A, @Ri ; 从外部RAM读取数据到A
<2>特殊功能寄存器只能直接寻址,指令为:
MOV A,direct;

在这里插入图片描述

I/O的四种工作模式

(1)准双向口、推挽输出、仅输入、开漏模式。

当 I/O处于准双向口、推挽输出、开漏模式时,若要从I/O输入数据,首先应该要堆I/O做什么?

(1)先让端口置为高电平。

STC15F2K60S2单片机I/O能否直接驱动LED?一般情况,驱动LED应该加限流电阻,如何计算?

(1)能。
(2)根据LED的工作电压、工作电流以及工作电源来进行计算。
R=(Vcc-Vz)/I

STC15F2K60S2单片机集成了内部扩展RAM,同时也保留外部扩展RAM的功能, 请问内部扩展RAM与外部扩展RAM能否同时使用?如何选择?

(1)不能。
(2)通过特殊功能寄存器AUXR中的EXTRAM进行选择,默认时为0,选择片内扩展RAM,为1时选择片外扩展RAM。

在这里插入图片描述

第四章

简述 STC15F2K60S2 单片机寻址方式与寻址空间的关系。

(1)一些简写的含义:
<1>A:累加器ACC,又记为A。注意和程序状态标志寄存器PSW的bit7的AC区分。
<2>B:专门用于乘法和除法运算设置的寄存器,用于存放于乘法和除法运算的操作数和运算结果。
<3>DPTR:数据指针,由DPL和DPH组成,用于存放16位地址,进而堆16位地址的程序存储器和扩展RAM进行访问。
<4>C:程序状态标志寄存器PSW的bit7,进位位CY。

寻址方式寻址空间
立即寻址程序存储器
寄存器寻址工作寄存器组、 A、 B、 DPTR、 C
直接寻址基本RAM的低128字节RAM、特殊功能寄存器、位寻址区
寄存器间接寻址低 128 字节、高128字节RAM 、扩展RAM
变址寻址程序存储器

简述利用散转移指令实现多分支转移的方法

( 1) 设置一张转移指令表,对应各分支设置一条转移指令,通过转移指令转到各分支程序程序的首地址处;
(2)将转移指令表的首址送给 DPTR,对应分支号在分支表中的偏移地址送给累加器A;
(3)执行 JMP @A+DPTR,首先根据分支号转到该分支在转移指令表的首地址处,通过执行该分支的转移指令转到该分支程序首地址处,即执行该分支程序。

述“MOVC A,@a+PC”与“MOVC A,@A+DPTR”指令各自的访问空间

(1)MOVC A,@a+PC:下一指令首址的后 256 字节程序空间;
<1>PC指向下一条指令的首地址
<2>A是一个8bit的累加器,共256个值。
<3>因此这里可访问下一指令首址的后 256 字节程序空间。
(2)MOVC A,@A+DPTR:整个 64K 程序空间。
<1>因为DPTR是数据指针,有16位,可以访问整个64K的程序空间

程序分析

设内部基本 RAM(30H) =5AH,(5AH) =40H,( 40H) =00H, P1 端口输入数据为7FH,问执行下列指令后,各有关存储单元(即 R0, R1, A, B, P1, 30H, 40H 及 5AH 单元)的内容如何?

MOV R0, #30H     ; 将立即数30,存入寄存器R0
MOV A, @R0       ; 将地址30H处的5AH,存入累加器A 
MOV R1, A         ; 将累加器A中的5AH,存入R1 
MOV B, R1         ; 将R1中的5AH,存入寄存器B
MOV @R1, P1    ; 读取P1端口的7FH,存入5AH地址处
MOV A, P1          ; 读取P1端口的7FH,存入累加器A
MOV 40H, #20H  ; 将立即数20H,存入地址40H处
MOV 30H, 40H    ; 将地址40H处的数据20H,存入地址30H处
存储单元内容
R030H
R15AH
A7FH
B5AH
P17FH
30H20H
40H20H
5AH7FH

执行下列指令后,各有关存储单元(即 A, B, 30H, R0 单元)的内容如何?

MOV A, #30H    ; 将立即数30H,存入累加器A
MOV B, #0AFH  ; 将立即数0AFH,存入寄存器B
MOV R0, #31H     ; 将立即数31H,存入寄存器R0 
MOV 30H, #87H    ; 将立即数87H,存入地址30H
XCH A, R0         ; 将寄存器A的30H,和寄存器R0的31H,数据交换
XCHD A, @R0  ;将寄存器A的低4位1,和寄存器R0的低四位0,数据交换
XCH A, B       ; 寄存器A的30H,和寄存器B的0AFH,数据交换
SWAP A      ; 将累加器A的高4位0AH,和低四位0FH,数据交换
存储单元内容
AFAH
B30H
30H87H
R031H

执行下列指令后, A、 B 和 SP 的内容分别为多少?

MOV SP, #5FH   ; 将立即数5FH,存入堆栈指针SP
MOV A, #54H     ; 将立即数54H,存入累加器A
MOV B, #78H    ; 将立即数78H,存入寄存器B
PUSH ACC     ; 将堆栈指针SP自增1,变为60H。累加器A的内容54H,存入60H处
PUSH B      ; 将堆栈指针SP自增1,变为61H。寄存器B的内容78H,存入61H处
MOV A, B    ; 将寄存器B的内容78H,存入累加器A
MOV B, #00H ;将立即数00H,存入寄存器B
POP ACC  ; 将堆栈指针SP内容78H,存入累加器A。堆栈指针SP自减1,变为60H
POP B   ; 将堆栈指针SP内容54H,存入寄存器B。堆栈指针SP自减1,变为5FH
存储单元内容
A78H
B54H
SP5FH

分析执行下列指令序列后各寄存器及存储单元的结果。

MOV 34H, #10H  ; 将立即数10H,存入地址34H
MOV R0, #13H   ; 将立即数13H,存入寄存器R0
MOV A, 34H     ; 将立即数34H,存入累加器A
ADD A, R0   ; 将寄存器R0内容13H,和累加器A中的内容34H,相加得到47H存入累加器A
MOV R1, #34H  ; 将立即数34H,存入寄存器R1
ADD A, @R1   ; 将地址34H的内容10H,和累加器A中的内容47H,相加得到57H存入累加器A

若( A)= 25H,( R0)= 33H,( 33H) =20H, 执行下列指令后, 33H 单元的内容为多少?

CLR C          ; 清除CY位
ADDC A, #60H  ; 将立即数60H,和累加器A中的内容25H,相加得到85H存入累加器A
MOV 20H, @R0  ;  将33H地址处的内容20H,存入地址20H处
ADDC A, 20H    ;  将20H地址处的内容20H,和累加器A中的内容85H,相加得到A5H存入累加器A
MOV 33H, A  ; 将累加器A中的内容A5H存入地址33H处

最终33H 单元的内容为A5H

分析执行下列各条指令后的结果。

MOV 20H, #25H ;将立即数25H,存入地址20H处
MOV A, #43H ;将立即数43H,存入累加器A
MOV R0, #20H ;将立即数20H,存入寄存器R0
MOV R2, #4BH ;将立即数4BH,存入寄存器R2
ANL A, R2 ;将寄存器R2的内容4BH(0100 1011B),和累加器A的中内容43H(0100 0011B),相与,得到43H(0100 0011B)存入累加器A
ORL A, @R0 ;将地址20H的内容25H(0010 0101B),和累加器A的中内容43H(0100 0011B),相或,得到67H(0110 0111B)存入累加器A
SWAP A ;将累加器A的高4位6H,与累加器A的低4位7H交换,得到76H存入累加器A
CPL A ;将累加器中的76H(0111 0110B),按位取反得到8AH(1000 1001B)存入累加器A
XRL A, #0FH ;将立即数0FH(0000 1111B),和累加器A中的8AH(1000 1001B),异或得到86H(1000 0110B)存入累加器A
ORL 20H, A ;将累加器A中的86H(1000 0110B),和20H地址处的25H(0010 0101B),相或,得到0A7H(1010 0111B)存入地址20H处

程序设计

将 R1 中的数据传送到 R3 中

MOV A , R1
MOV R3, A 

将基本 RAM 30H 单元的数据传送到 R0 中

MOV A , #30H
MOV R0, @A 

将扩展 RAM 0100H 单元的数据传送到基本 RAM 20H 单元

MOV DPTR , #0100H 
MOVX A , @DPTR 
MOV 20H , A

将程序存储器 0200H 单元的数据传送到基本 RAM 20H 单元

MOV DPTR , #0200H 
MOVX A , @DPTR 
MOV 20H , A

将程序存储器 0200H 单元的数据传送到扩展 RAM 0030H 单元

MOV DPTR , #0200H 
MOVX A , @DPTR 
MOV DPTR , #0030H
MOVX @DPTR , A

将程序存储器 2000H 单元的数据传送到扩展 RAM 0300H 单元

MOV DPTR , #2000H 
MOVX A , @DPTR 
MOV DPTR , #0030H
MOVX @DPTR , A

将扩展 RAM 0200H 单元的数据传送到扩展 RAM 0201H 单元

MOV DPTR , #0200H
MOVX A , @DPTR 
MOV DPTR , #0201H 
MOVX @DPTR , A

将片内基本 RAM 50H 单元与 51H 单元中的数据交换

MOV A , 50H 
MOV 51H , A

第五章

认识伪指令

(1)伪指令不会产生机器指令码

填空选择题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

伪指令EQU和DATA都是用于定义字符名称,试说明它们有什么不同点?

(1)EQU可以定义汇编符号,只能先定义后使用。
(2)DATA主要用于定义数据,可以先使用后定义。

伪指令DB、 DW、 DS都是用于定义程序存储空间,试问有什么不同点?试用伪指令定义,从程序存储器2000H起预留10个地址空间,接着存储数据20、 100,接着再存储字符W和Q的ASCII码。

(1)
<1>DB:存储字节。
<2>DW:定义存储字。
<3>DS:定义存储空间。
(2)

ORG 2000H  ; 程序从2000H地址开始
DS 10  ; 预留10字节空间
DB 20,100   ; 存入20,100
DB 'W','Q'   ;存入字符W和Q的ASCII码

程序设计(必考)

编写程序,将基本RAM30H~3FH的内容传送到扩展RAM0300H~030FH中

(1)程序设计题,所有寄存器,地址直接无法直接交换数据,必须通过累加器A中转!!!

MOV DPTR , #0300H  ; 
MOV R0 , #30H   ; 将数据 30H的存入R0寄存器
MOV R1 , #10H    ; 将数据 10H的存入R1寄存器
LOOP :
	MOV A,@R0
	MOVX @DATP , A
	INC DPTR ; 数据指针DPTR数据自增
	INC R0   ; 寄存器R0数据自增
	DJNC R1 , LOOP

编写程序,查找在基本 RAM 20H~4FH 单元中出现 00H 的次数,并将查找结果存入50H 单元

(1)如下为汇编码,但是因为汇编码比较晦涩,所以我还增加了C语言代码进行理解

MOV R0 , #20H   ; 将数据 20H的存入R0寄存器,表示地址
MOV R1 , #30H    ; 将数据 30H的存入R1寄存器,用于表示循环30H次
MOV 50H, #00H  ; 将50H地址处的数据清零
LOOP1:
	CJNE @R0 , #00H , LOOP2 ; 如果R0地址的值不为0,进行跳转
	INC 50H   ; 如果R0地址的值为0,50H地址处数据自增
LOOP2:
	INC R0
	DJNC R1 , LOOP1
	SJMP $ ; 死循环

(2)C 语言代码如下

int main()
{
	uint8_t* R0 = 20H;
	uint8_t R1 = 30H;
	(uint8_t*)50H = 0;
	do
	{
		if(*R0 != 0)
		{
			((uint8_t*)50H)++;
		} 
		R0++;
	}while(--R1);
}

用一个端口输入数据,用一个端口输出数据并控制 8 只 LED 灯的亮灭。当输入数据小于 20 时,奇数位 LED 灯亮;当输入数据位于 20~30 之间时, 8 只 LED 灯全亮;当输入数据大于 30 时,偶数位 LED 灯亮。做题要求如下:

(1)画出硬件电路图:

在这里插入图片描述

第七章

中断的概念

(1)中断、中断源、中断优先级、中断嵌套。

中断过程

(1)中断过程包括中断请求、 中断响应 、 中断服务 与中断返回等4个工作过程。

中断源

(1)引起CPU中断的根源或原因,成为中断源。
(2)STC15F2K60S2 有14个中断源

几个优先级

(1)一般记住前五个即可。

在这里插入图片描述

填空题

(1)CPU面向I/O口的服务方式包括 查询 、** 中断** 与DMA通道等3种方式
(2)中断过程包括中断请求、 中断响应 、 中断服务 与中断返回等4个工作过程。
(3)中断服务方式中, CPU与I/O设备是 并行 工作的。
(4)根据中断请求能否被CPU响应,可分为非屏蔽中断可屏蔽中断 两种类型。 STC15F2K60S2单片机的所有中断都属于 可屏蔽中断
(5)若要求T0中断,除对ET0置1外,还需对 EA 置1。
(6)STC15F2K60S2单片机的中断优先等级分为个优先等级,当处于同一个中断优先级时,前5个中断的自然优先顺序由高到低是外部中断0 、 T0中断、 外部中断1 、 T1中断 、串行口1中断
(7)外部中断0中断请求信号输入引脚是 P3.2 ,外部中断1中断请求信号输入引脚是 P3.3 。外部中断0、外部中断1的触发方式由 下降沿触发双边沿触发两种类型。当IT0=1时,外部中断0的触发方式是 下降沿触发
(8) 外部中断2中断请求信号输入引脚是 P3.6 ,外部中断3中断请求信号输入引脚是 P3.7 ,外部中断4中断请求信号输入引脚是 P3.0 。外部中断2、外部中断3、外部中断4的中断触发方式只有1种类型,属于 下降沿 触发方式。
(9)外部中断0、外部中断1、外部中断2、外部中断3、外部中断4中断源的中断请求标志,在中断响应后相应的中断请求标志 自动清零。
(10)串行口1的中断包括 串行发送 和 串行接收 两个中断源,对应两个中断请求标志,串行口1的中断请求标志在中断响应后 不会 自动清零。

相比查询服务方式,中断服务有哪些优势?

(1) 可使CPU与外设并行工作,提高CPU的工作效率;
(2)可实时响应外部设备的请求服务。

STC15F2K60S2单片机有几个中断优先等级?按照自然优先权,由高到低前5个中断是什么?(必考)

(1)两个
(2)外部中断0,T0中断,外部中断1,T1中断,串口1中断。

第八章

定时/计数器(T0/T1)的工作方式

(1)方式0是一个16位自动重装载定时/计数器。
(2)方式2是一个8位自动重装载定时/计数器。

利用T1定时设计一个LED流水灯,时间间隔为500ms,编写程序并上机调试(必考,记住就行)

	ORG 0000H
	LJMP MAIN
	ORG 001BH
	LJMP Timer_ISR
MAIN: 
	MOV R3 , #10     ;设置50ms计数循初值
	MOV TOMD,#00H  ; 设置定时器1为方式0
	MOV TH1 , #3CH    ; 设置50ms定时器初值
	MOV TL1 , #0B0H  
	MOV R2 , #07H    ;设置左移次数
	MOV P1 , #0FEH  ;设置信号灯显示(左移)的起始状态值
	MOV A , #0FEH	  ;设置信号灯显示(左移)的起始状态值
	CLR 00H   ;设置左、右移标志位,为0左移,为1右移
	SETP TR1 ; 启动T1定时器
	SJMP $ ;死循环
Timer_ISR:
	DJNZ R3, Exit_T1_ISR  ; 定时时间到,执行移步操作,否则中断结束
	MOV R3 , #10
	JB 00H , Right_Shift   ; 判断左、右控制
	RL  A     ; 左移控制
	MOV P1 , A
	DJNZ R2,Exit_T1_ISR  ;判断左移流程是否结束,如果结束进入右移控制
	SETB 00H  ; 置为左、右移控制标志
	MOV R2 , #07H ; 重新设置移位次数
	SJMP Exit_T1_ISR  
Right_Shift:
	RR A  ;右移控制
	MOV P1,A
	DJNZ R2,Exit_T1_ISR  
	CLR 00H
	MOV R2,#07H
Exit_T1_ISR:
	RET1
	END

第九章

概念

(1)串行通讯的一字节一字节的发送数据
(2)波特率计算公式

在这里插入图片描述

简述 STC15F2K60S2 单片机串行口 1 方式 2、方式 3 的相同点与不同点。

(1) 相同点:字符帧格式是一样的。
(2) 不同点:波特率发生器不同。

第十章

ADC的参考电压源

STC15F2K60S2单片机ADC模块的参考电压源(VREF)就是输入工作电源 Vcc,无专门ADC参考电压输入通道。如果 Vcc不稳定,如电池的供电系统中,电压常常在 5.3~4.2V 之间漂移,则可以在8路A/D 转换通道的任一通道上接一基准电源 (如1.25V 基准电压),以此计算出此时的工作电压 Vcc,再计算其他输入通道的模拟输入电压。

STC15F2K60S2的ADC个数

(1)STC15F2K60S2有8通道,10位的ADC。

填空题

(1) A/D转换电路按转换原理一般分为 并行比较 、** 逐次逼近比较**与 双积分 等3种类型。
(2)在A/D转换电路中,转换位数越大,说明A/D转换电路的转换精度越 高。
(3)10位A/D转换器中, VREF为5V。当模拟输入电压为3V时,转换后对应的数字量为 (3/5)2^10 = 614
(4)8位A/D转换器中, VREF为5V。转换后获得的数字量为7FH,请问对应的模拟输入电压是 5
(7FH / 2^8)= 2.5V。
(5)STC15F2K60S2单片机内部集成了 8 通道 10 位的A/D转换器,转换速度可达到 300 KHz。
(6)STC15F2K60S2单片机A/D转换模块转换的参考电压VREF是 电源电压。
(7)STC15F2K60S2单片机A/D转换模块的中断向量地址是 002BH ,中断号是5。

选择题

(1)STC15F2K60S2单片机A/D转换模块中转换电路的类型是 逐次逼近型
(2)STC15F2K60S2单片机A/D转换模块的8路模拟输入通道是在 P1 口
(3)当P1ASF=35H时,说明 P1.5、 P1.4、 P1.2、 P1.0 可用作A/D转换的模拟信号输入通道
(4) 当ADC_CONTR=83H时, STC15F2K60S2单片机的A/D模块选择了 P1.3 为当前模拟信号输入通道
(5)

文章来源:https://blog.csdn.net/qq_63922192/article/details/134352350
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。