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


    第二章:

    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处
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    存储单元内容
    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,数据交换
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    存储单元内容
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    存储单元内容
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    若( 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处
    
    • 1
    • 2
    • 3
    • 4
    • 5

    最终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处
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    程序设计

    将 R1 中的数据传送到 R3 中

    MOV A , R1
    MOV R3, A 
    
    • 1
    • 2

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

    MOV A , #30H
    MOV R0, @A 
    
    • 1
    • 2

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

    MOV DPTR , #0100H 
    MOVX A , @DPTR 
    MOV 20H , A
    
    • 1
    • 2
    • 3

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

    MOV DPTR , #0200H 
    MOVX A , @DPTR 
    MOV 20H , A
    
    • 1
    • 2
    • 3

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

    MOV DPTR , #0200H 
    MOVX A , @DPTR 
    MOV DPTR , #0030H
    MOVX @DPTR , A
    
    • 1
    • 2
    • 3
    • 4

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

    MOV DPTR , #2000H 
    MOVX A , @DPTR 
    MOV DPTR , #0030H
    MOVX @DPTR , A
    
    • 1
    • 2
    • 3
    • 4

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

    MOV DPTR , #0200H
    MOVX A , @DPTR 
    MOV DPTR , #0201H 
    MOVX @DPTR , A
    
    • 1
    • 2
    • 3
    • 4

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

    MOV A , 50H 
    MOV 51H , A
    
    • 1
    • 2

    第五章

    认识伪指令

    (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码
    
    • 1
    • 2
    • 3
    • 4

    程序设计(必考)

    编写程序,将基本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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    编写程序,查找在基本 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 $ ; 死循环
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    (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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    用一个端口输入数据,用一个端口输出数据并控制 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
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    第九章

    概念

    (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)

  • 相关阅读:
    Yolo-FastestV2:更快更轻
    【Linux内核】各种同步机制伪代码
    python毕业设计作品基于django框架 教室图书馆座位预约系统毕设成品(7)中期检查报告
    DockerFile系列:构建Tomcat9
    项目进展(十)-解决ADS1285在调试时出现的问题
    Git存储原理——Git对象
    10 个适用于 Windows 的最佳 PDF 编辑器,用于轻松编辑 PDF 文件
    使用node实现websocket
    MYSQL练习题
    一维前缀和[模版]
  • 原文地址:https://blog.csdn.net/qq_63922192/article/details/134352350