单片机实验全解
- 格式:doc
- 大小:1.08 MB
- 文档页数:47
江苏省自考(单片机原理及应用)一、名词解释1.微处理器:即中央处理器CPU,它是把运算器和控制器集成在一块芯片上的器件总称。
2.单片机(单片微型计算机):把CPU、存储器、I/O接口、振荡器电路、定时器/计数器等构成计算机的主要部件集成在一块芯片上构成一台具有一定功能的计算机,就称为单片微型计算机,简称单片机。
3.程序计数器:程序计数器PC是一个不可寻址的16位专用寄存器(不属于特殊功能寄存器),用来存放下一条指令的地址,具有自动加1的功能。
4.数据指针:数据指针DPTR是一个16位的寄存器,可分为两个8位的寄存器DPH、DPL,常用作访问外部数据存储器的地址寄存器,也可寻址64K字节程序存储器的固定数据、表格等单元。
5.累加器:运算时的暂存寄存器,用于提供操作数和存放运算结果。
它是应用最频繁的寄存器,由于在结构上与内部总线相连,所以一般信息的传送和交换均需通过累加器A。
6.程序状态字:程序状态字PSW是一个8位寄存器,寄存当前指令执行后的状态,为下条或以后的指令执行提供状态条件。
它的重要特点是可以编程。
7.堆栈:堆栈是一组编有地址的特殊存储单元,数据遵循先进后出的存取原则。
栈顶地址用栈指针SP指示。
8.软件堆栈:通过软件唉内部RAM中定义一个区域作为堆栈(即由软件对SP设置初值),称软件堆栈。
9.振荡周期(晶振周期):振荡电路产生的脉冲信号的周期,是最小的时序单位。
10.时钟周期:把2个振荡周期称为S状态,即时钟周期。
1个时钟周期=2个振荡周期。
11.机器周期:完成一个基本操作所需的时间称为机器周期。
1个机器周期=12个振荡周期。
12.指令周期:执行一条指令所需的全部时间称为指令周期。
MCS-51单片机的指令周期一般需要1、2、4个机器周期。
13.地址/数据分时复用总线:是指P0口用作扩展时,先输出低8位地址至地址锁存器,而后再由P0口输入指令代码,在时间上是分开的。
14.准双向并行I/O口:当用作通用I/O口,且先执行输出操作,而后要由输出变为输入操作时,必须在输入操作前再执行一次输出“1”操作(即先将口置成1),然后执行输入操作才会正确,这就是准双向的含义。
1.25单片机内部由哪几部分电路组成?各部分电路的主要功能是什么?解:单片机内部由CPU、存储器和I/O接口等电路组成。
CPU的主要功能是对二进制数进行算术和逻辑运算、执行指令(从ROM中取指令,对指令译码,发各种控制信号使CPU和其他部分协调一致的工作,完成指令的功能),存储器由ROM和RAM组成,ROM的主要功能是存储单片机应用系统的程序,RAM的主要功能是存储实时数据或作为通用寄存器、堆栈、数据缓冲区。
I/O接口的主要功能是负责单片机和外设、外部存储器间的通信。
第二章存在的错别字问题:“振荡”写出“推荡”;“芯片”写成“蕊片”。
2.3、程序状态字PSW各位的定义是什么?解:PSW的各位定义如下:Cy:进位标志位;AC:辅助进位位;F0:用户标志位;RS1、RS0:寄存器选择位;OV:溢出标志位;P:奇偶标志位;PSW1:未定义。
2.4、什么叫堆栈?8031堆栈的最大容量是多少?MCS51堆栈指示器SP有多少位,作用是什么?单片机初始化后SP中的内容是什么?解:堆栈:符合“先进后出”或“后进先出”存取规律的RAM区域。
8031堆栈的最大容量是128B;MCS-51堆栈指针SP有8位,作用是存放栈顶(/栈低)地址;单片机初始化后(即单片机复位后)SP中的内容是07H。
存在的问题:1、堆栈的定义中,未答出“RAM区域”,而用了“部件”;2、只说了“单片机初始化后(即单片机复位后)SP中的内容是栈底地址”,未说明具体值07H;3、8031堆栈的最大容量错成128M或256B。
2.5、数据指针DPTR有多少位,作用是什么?解:数据指针DPTR有16位;作用是存放ROM或外部RAM的地址。
2.7、8051片内RAM容量有多少?可以分为哪几个区?各有什么特点?解:8051的片内RAM容量有128B;分为三个区:工作寄存器区、位寻址区和便笺区;存在的问题:1、8051的片内RAM容量错成256B。
2.8、8051的特殊功能寄存器SFR有多少个?可以位寻址的有哪些?解:8051的SFR有21个,可位寻址的有11个:ACC、B、PSW、IP、P3、IE、P2、SCON、P1、TCON 和P0。
单⽚机课后习题答案1.1 计算机经过了哪些主要发展阶段?解:单⽚机的发展⼤致经历了四个阶段:第⼀阶段(1970—1974年),为4位单⽚机阶段;第⼆阶段(1974—1978年),为低中档8位单⽚机阶段;第三阶段(1978—1983年),为⾼档8位单⽚机阶段;第四阶段(1983年⾄今),为8位单⽚机巩固发展阶段及16位单⽚机、32位单⽚机推出阶段。
1.2 写出下列机器数的真值:(1)01101110 (2)10001101 (3)01011001 (4)11001110 解:(1)01101110的真值=+110(2)10001101的真值=+141或-115 (3)01011001的真值=+89(4)11001110的真值=+206或-50说明:机器数是指计算机中使⽤的⼆进制数,机器数的值称为真值。
机器数可表⽰为⽆符号数也可表⽰为带符号数,其中计算机中的带符号数⼀般为补码形式。
10001101若为⽆符号数。
则其真值为+141;若为带符号数,由于最⾼位(符号位)为1.所以为负数(补码形式),则其真值为-115。
1.4 写出下列⼆进制数的原码、反码和补码(设字长为8位)。
(1)010111 (2)101011 (3)-101000 (4)-111111 解:(1) [x]原=00010111 [x]反= 00010111 [x]补= 00010111 (2)[x]原=00101011 [x]反= 00101011 [x]补= 00101011 (3)[x]原=10101000 [x]反= 11010111 [x]补= 11011000 (4)[x]原=10111111 [x]反= 11000000 [x]补=110000011.5 已知X=10110110,Y=11001111,求X 和Y 的逻辑与、逻辑或和逻辑异或。
解:10000110X Y ?= 11111111X Y += 01111001X Y ⊕=1.6 已知X 和Y ,试计算下列各题的[]X Y +补和[]-X Y 补(设字长为8位)。
stc单片机解密方法STC单片机解密方法1. 引言STC单片机是市场上应用广泛的一款单片机系列,具有强大的功能和灵活的应用场景,但也因其内部代码加密保护而让一些研究者和开发者面临一定的困扰。
本文将详细介绍几种STC单片机解密方法。
2. 软件解密方法源码逆向工程源码逆向工程是一种常见的软件解密方法,通过对编译后的程序进行反汇编、分析和逆向推导,可以还原出程序的源代码。
对于STC 单片机,可以使用一些逆向工程软件如IDA Pro、Ghidra等对其固件进行分析,以获取相关的解密算法。
破解工具一些破解工具如STC-ISP、STC-Loader等,可以直接读取STC单片机的Flash内存,并将其中的加密固件下载到计算机进行解密。
这些工具通常会利用芯片的漏洞或者通信接口,如串口或者ISP下载接口,获取到加密的固件,并进行解密。
需要注意的是,使用破解工具进行解密需要一定的技术水平和设备支持。
3. 硬件解密方法电压破解电压破解是一种常见的硬件解密方法,通过对芯片进行实验室环境下的电压监测和干扰,获取到芯片内部的数据和计算过程。
对STC 单片机而言,通过使用专用的电压监测设备和技术手段,我们可以获取到芯片中一些关键的数据和算法,从而达到解密的目的。
硬件仿真硬件仿真是一种比较高级的硬件解密方法,通过将STC单片机的芯片进行捷径连接,将芯片的内部电信号直接引出,可以使用现有的仿真器或者逻辑分析仪对该信号进行分析和还原。
通过硬件仿真的手段,解密者可以获取到STC单片机内部的代码执行过程和相关算法。
4. 总结STC单片机的解密方法有软件解密和硬件解密两种。
其中软件解密可以通过源码逆向工程和破解工具进行,需要一定的技术和设备支持;而硬件解密则涉及到电压破解和硬件仿真等方法,需要更高的技术水平和设备支持。
无论选择哪种解密方法,都需要遵守相关法律和伦理规范,以确保合法和公平。
本文仅介绍了几种STC单片机解密的常见方法,希望能为解密研究者和开发者提供一定的参考与启发。
单片机密码锁设计实训过程问题以及问题解决思路
单片机密码锁的设计实训过程中可能会出现以下问题:
1. 硬件问题:电路连线问题、元件损坏等。
可以通过检查电路连接情况、更换损坏的元件等方式解决。
2. 软件问题:程序代码错误、功能实现不完整、不稳定等。
可以通过检查代码错误、调试程序、优化算法等方式解决。
3. 安全性问题:密码泄露、系统被入侵等。
可以通过加强密码安全性、防范入侵攻击、加密数据等方式解决。
解决这些问题的思路:
1. 做好前期准备工作,仔细阅读开发板的说明书,清晰电路连接原理,检查电路、元件是否损坏。
2. 在编写程序时,先编写程序的框架,逐步实现需要的功能,测试程序的正确性和稳定性。
3. 加强密码的安全性,可以使用哈希函数对密码进行加密,限制密码输入次数,并确保系统的稳定和安全性,防范黑客攻击。
4. 可以结合实际应用场景,增加特定功能,例如记录开锁日志、远程控制等。
总之,单片机密码锁的设计实训需要认真分析问题,细心进行实验,不断的学习和优化以达到最终目标。
单⽚机原理部分课后习题解3.16 8051芯⽚需要外扩4KB程序存储器,要求地址范围为1000~1FFFH,以便和内部程序存储器地址相衔接。
所⽤芯⽚除了地址线和数据线外,只有⼀个⽚选控制端/CS,画出扩展系统的连接图。
解:3.17 在图3.13中,若因某种原因,P2.2、P2.1、P2.0误接为P2.5、P2.4、P2.3,这时所接的EPROM寻址区是如何分布的?解:误接后,A10,A9,A8则分别与P2.5,P2.4,P2.3相接,P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 P0.7~P0.0* * 0 0 0 * * * 00000000—11111111* * 0 0 1 * * * 00000000—11111111* * 0 1 0 * * * 00000000—11111111* * 0 1 1 * * * 00000000—11111111* * 1 0 0 * * * 00000000—11111111* * 1 0 1 * * * 00000000—11111111* * 1 1 0 * * * 00000000—11111111* * 1 1 1 * * * 00000000—11111111所以地址分布为:0000H~00FFH, 0800H~08FFH, 1000H~10FFH, 1800H~18FFH, 2000H~20FFH,2800H~28FFH, 3000H~30FFH, 3800H~38FFH4.8 编写程序,进⾏两个16位数的减法:6F5DH~13B4H,结果存⾄内部RAM的30H和31H 单元。
30H单元存差的低8位。
解:MOV A, #5DHCLR CSUBB A, #0B4HMOV 30H, ASUBB A, #13HMOV 31H, ASJMP $4.9 编写程序,若累加器内容分别满⾜⼀下条件,则程序转⾄LABEL存储单元。
思考题:【3-1】汇编语言与C语言哪种语言的可读性和可移植性强?在对速度和时序敏感的场合应该使用什么语言?对于复杂的单片机系统一般采用C与汇编混合编程的形式这句话对吗?【3-2】二进制机器语言与C和汇编语言两者之间是什么关系?用C或汇编编制的程序在ROM中是以编译后的二进制代码的形式存放这句话对吗?【3-3】80C51系列单片机指令的格式包含哪几个部分?各部分之间的间隔符是什么?四个部分中哪个部分是必须存在的,哪几个部分是可有可无的?标号的格式和代表的意义是?【3-4】80C51系列单片机有哪几种寻址方式?【3-5】80C51单片机中立即数是存放在ROM中还是RAM中?【3-6】判断下列说法是否正确。
(1)立即数寻址方式是被操作的数据本身就在指令中,而不是它的地址在指令中。
()(2)指令周期是执行一条指令的时间。
()(3)指令中直接给出的操作数称为直接寻址。
()(4)内部寄存器Rn(n=0~7)可作为间接寻址寄存器。
()【3-7】80C51单片机可以进行直接寻址的区域是?【3-8】80C51单片机可以进行寄存器寻址的范围是?【3-9】80C51单片机可以进行寄存器间接寻址的寄存器是?寻址的范围是?【3-10】在寄存器间接寻址方式中,其“间接”体现在指令中寄存器的内容不是操作数,而是操作数的()。
【3-11】80C51单片机变址寻址方式中可以作基址的寄存器是?可以作变址的寄存器是?@A+PC,@A+DPTR所找到的操作数是在ROM中对吗?【3-12】80C51单片机相对寻址改变的是PC的当前值,即改变的CPU执行指令的顺序这句话对否?【3-13】若访问特殊功能寄存器,只可以采用那种寻址方式?【3-14】若访问外部RAM单元,只可以使用哪种寻址方式?【3-15】若访问内部RAM单元,可使用哪些寻址方式?【3-16】若访问内外程序存储器,可使用哪些寻址方式?【3-17】80C51单片机可以进行位寻址的字节单元范围除11个可位寻址的特殊功能寄存器外还包括哪个区域?分别找出位地址是00H、08H、22H、7FH、D0H、E0H对应的字节地址?【3-18】已知(30H)=40H,(40H)=10H,(10H)=32H,(P1)=0EFH,试写出执行以下程序段后有关单元的内容。
1 数据传送实验 2 单片机并行I/O口的应用实验 第二个实验 数据上传失败 有需要的联系我 QQ: 2685376294
3 定时器/计数器应用实验一 实验程序一: ORG 0000H MAIN: MOV TMOD,#00H MOV TH1,#0FEH MOV TL1,#0EH MOV IE,#00H SETB TR1 LOOP: JNB TF1,LOOP MOV TH1,#0FEH MOV TL1,#0EH CPL P1.0 CLR TF1 AJMP LOOP END 实验程序二: ORG 0000H AJMP MAIN ORG 001BH AJMP LOOP ORG 0100H MAIN: MOV TMOD,#00H MOV TH1,#0FEH MOV TL1,#04H SETB EA SETB ET1 SETB TR1 HERE: SJMP $ LOOP: MOV TH1,#0FEH MOV TL1,#0EH CPL P1.1 RETI END 思考题程序一:(定时器0查询) ORG 0000H MAIN: MOV IE,#00H MOV TMOD,#01H SETB TR0 LOOP: CPL P1.0 MOV TH0,#0FEH MOV TL0,#0D4H LOOP1: JBC TF0,LOOP2 LJMP LOOP1 LOOP2: CPL P1.0 MOV TH0,#0FFH MOV TL0,#38H LOOP3: JBC TF0,LOOP LJMP LOOP3 END 思考题程序二:(定时器0中断,1查询) ORG 0000H LJMP MAIN ORG 000BH LJMP DSQ0 MAIN: MOV SP,#60H CLR P1.0 MOV TMOD,#11H MOV TH1,#0FFH MOV TL1,#38H MOV TH0,#0FEH MOV TL0,#0D4H SETB EA SETB ET0 CLR TR1 SETB TR0 SJMP $ DSQ0: CPL P1.0 MOV TH1,#0FFH MOV TL1,#38H MOV IE,#00H SETB TR1 LOOP: JBC TF1,LOOP1 LJMP LOOP LOOP1: CPL P1.0 MOV TH0,#0FEH MOV TL0,#0D4H SETB EA SETB ET0 RETI END 思考题程序三:(定时器0、1查询) ORG 0000H MAIN: MOV IE,#00H MOV TMOD,#11H MOV TH1,#0FFH MOV TL1,#38H MOV TH0,#0FEH MOV TL0,#0D4H LOOP0: SETB TR1 LOOP1: JBC TF1,LOOP2 LJMP LOOP1 LOOP2: CPL P1.0 CLR TR1 SETB TR0 MOV TH0,#0FEH MOV TL0,#0D4H LOOP3: JBC TF0,LOOP4 LJMP LOOP3 LOOP4: CPL P1.0 CLR TR0 MOV TH1,#0FFH MOV TL1,#38H LJMP LOOP0 END 实验程序图
思考题图 4 定时器/计数器应用实验二 (1)汇编查询 ORG 0000H LJMP MAIN
MAIN: CLR EA MOV TMOD , #06H MOV TH0 , #9CH MOV TL0 , #9CH SETB TR0 LOOP: JBC TF0 , LOOP1 LJMP LOOP LOOP1: CPL P1.0 LJMP LOOP END (2)C查询:#include"reg52.h" #include sbit P1_0=P1^0 ;
void main() { TMOD=0x06; TH0=0x9c; TL0=0x9c; TR0 = 1; while(1) { if(TF0==1) { TF0=0; P1_0=!P1_0; } }
} (3)汇编产生方波: ORG 0000H LJMP MAIN ORG 001BH LJMP LOOP3
MAIN: SETB EA SETB ET1 MOV TMOD , #62H MOV TH0 , #9CH MOV TL0 , #9CH MOV TH1 , #0CEH MOV TL1 , #0CEH SETB TR1 SETB TR0 LOOP: JNB TF0 , LOOP CLR TF0 CPL P1.0 LJMP LOOP LOOP3: CPL P1.1 RETI END (4)C 产生方波:#include"reg52.h" #include sbit P1_0=P1^0 ; sbit P1_1=P1^1 ;
void t1(void) interrupt 3 using 1 { P1_1=!P1_1; } void main() {EA=1; ET1=1; TMOD=0x62; TH0=0x9c; TL0=0x9c; TH1=0xce; TL1=0xce; TR1=1; TR0=1; while(1) { if(TF0==1) { TF0=0; P1_0=!P1_0; }
} } (5)两中断产生方波汇编: ORG 0000H LJMP MAIN ORG 000BH LJMP LOOP1 ORG 001BH LJMP LOOP3 MAIN: SETB EA SETB ET1 SETB ET0 MOV TMOD , #62H MOV TH0 , #9CH MOV TL0 , #9CH MOV TH1 , #0CEH MOV TL1 , #0CEH SETB TR1 SETB TR0 LOOP: LJMP $ LOOP1: CPL P1.0 RETI LOOP3: CPL P1.1 RETI END (6)C:#include"reg52.h" #include sbit P1_0=P1^0 ; sbit P1_1=P1^1 ; void t0(void) interrupt 1 using 0 { P1_0=!P1_0; } void t1(void) interrupt 3 using 1 { P1_1=!P1_1; } void main() {EA=1; ET1=1; ET0=1; TMOD=0x62; TH0=0x9c; TL0=0x9c; TH1=0xce; TL1=0xce; TR1=1; TR0=1; while(1); } (7)思考汇编: ORG 0000H LJMP MAIN ORG 000BH LJMP LOOP1 MAIN: MOV TMOD , #06H MOV TH0 , #38H MOV TL0 , #38H SETB EA SETB ET0 SETB TR0 LOOP: LJMP $ LOOP1: CPL P1.0 RETI END (8)C:#include"reg52.h" #include sbit P1_0=P1^0 ;
void t0(void) interrupt 1 using 1 { P1_0=!P1_0; } void main() {EA=1; ET0=1; TMOD=0x06; TH0=0x38; TL0=0x38; TR0=1; while(1); }
5 外部中断应用实验 ORG 0000H START: LJMP MAIN ORG 0030H MAIN: MOV SP, #70H MOV PSW, #08H MOV IE, #00H MOV TMOD, #02H MOV TH0, #0CDH MOV TL0, #0CDH
FUN: LCALL KEY JB 20H.0, KEY1 LJMP FUN
KEY1: SETB TR0 LOOP: JBC TF0, LOOP1 LCALL KEY JB 20H.1, LOOP2 LJMP LOOP LOOP1: CPL P1.2 LJMP LOOP LOOP2: CLR TR0 MOV TH0, #0CDH MOV TL0, #0CDH LJMP FUN
KEY: LCALL KEYCHULI JZ EXIT LCALL DL LCALL KEYCHULI JZ EXIT MOV B, 20H KEYSF: LCALL KEYCHULI JZ KEY0 LCALL DL LJMP KEYSF KEY0: MOV 20H, B EXIT: RET
KEYCHULI: PUSH PSW CLR RS1 SETB RS0 SETB P1.0 SETB P1.1 MOV A, P1 CPL A ANL A, #03H MOV 20H, A CLR RS1 CLR RS0 POP PSW RET
DL: MOV R1, #20 MOV R0, #255 DL1: DJNZ R0, DL1 DJNZ R1, DL1 RET END