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

第二章:

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 单元)的内容如何?

asm 复制代码
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处
存储单元 内容
R0 30H
R1 5AH
A 7FH
B 5AH
P1 7FH
30H 20H
40H 20H
5AH 7FH

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

asm 复制代码
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,数据交换
存储单元 内容
A FAH
B 30H
30H 87H
R0 31H

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

asm 复制代码
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
存储单元 内容
A 78H
B 54H
SP 5FH

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

asm 复制代码
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 单元的内容为多少?

asm 复制代码
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

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

asm 复制代码
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 中

asm 复制代码
MOV A , R1
MOV R3, A 

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

asm 复制代码
MOV A , #30H
MOV R0, @A 

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

asm 复制代码
MOV DPTR , #0100H 
MOVX A , @DPTR 
MOV 20H , A

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

asm 复制代码
MOV DPTR , #0200H 
MOVX A , @DPTR 
MOV 20H , A

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

asm 复制代码
MOV DPTR , #0200H 
MOVX A , @DPTR 
MOV DPTR , #0030H
MOVX @DPTR , A

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

asm 复制代码
MOV DPTR , #2000H 
MOVX A , @DPTR 
MOV DPTR , #0030H
MOVX @DPTR , A

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

asm 复制代码
MOV DPTR , #0200H
MOVX A , @DPTR 
MOV DPTR , #0201H 
MOVX @DPTR , A

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

asm 复制代码
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)

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

程序设计(必考)

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

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

asm 复制代码
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语言代码进行理解

asm 复制代码
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 语言代码如下

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,编写程序并上机调试(必考,记住就行)

asm 复制代码
	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)

相关推荐
LaoZhangGong12320 分钟前
测试W5500的第2步_使用ioLibrary库创建TCP客户端
网络·经验分享·stm32·单片机·网络协议·tcp/ip
Dev_XH11 小时前
【成品设计】STM32和UCOS-II的项目
stm32·单片机·嵌入式硬件
Dev_XH11 小时前
【成品设计】基于 STM32 的智能鞋柜系统
stm32·单片机·嵌入式硬件
LeonDL16814 小时前
YOLOv8 在单片机上的几种部署方案
人工智能·python·单片机·嵌入式硬件·深度学习·yolo·yolov8 在单片机上的部署
LeonDL16814 小时前
YOLOv8 在单片机上部署的缺点和应对方案
python·单片机·嵌入式硬件·深度学习·yolo·yolov8在单片机上的缺点·yolov8 在单片机上的优化
尚久龙14 小时前
STM32实现RS485通讯
stm32·单片机·嵌入式硬件
嵌入式Linux,14 小时前
ESP32和STM32 就不应该放在一起比,
stm32·单片机·嵌入式硬件
硬件智障15 小时前
51单片机实现流水灯
单片机·嵌入式硬件·51单片机
暮雪倾风15 小时前
【STM32】ST-Link V2.1制作
stm32·单片机·嵌入式硬件
yuanpan15 小时前
支持python的单片机有哪些
开发语言·python·单片机