1微机基本概念1.1什么是单片机?与通用微机相比,具有哪些特点?1.2在各种系列的单片机中,片内ROM的配置有几种形式?用户应根据什么原则来选用?2MCS-51系列单片机概述2.18051单片机片内包含哪些主要组成部分?2.2PC是什么寄存器?有何作用?是否属于SFR?2.3DPTR是什么寄存器?有何作用?是否属于SFR?2.4MCS-51系列单片机有哪几个并行I/O口?各有什么特性?2.5MCS-51系列单片机的时钟周期、机器周期、指令周期是如何分配的?当晶振频率为6MHz时,一个机器周期为多少us?2.6ALE信号有何功用?一般情况下它与机器周期的关系如何?在什么条件下ALE信号可用作外部设备的定时信号?2.7有哪几种方法能使单片机复位?复位后各寄存器和RAM的影响如何?3指令系统和汇编语言程序设计3.1MCS-51系列单片机存储器的组织结构是怎样的?片内数据存储器分为哪几个性质和用途不同的区域?3.2EA/V PP引脚有何功用?8031的EA引脚应如何处理?为什么?3.3MCS-51系列单片机如何确定和改变当前工作寄存器?3.4MCS-51系列单片机指令系统有哪几种寻址方式?举例说明。
3.5访问片内RAM和片外RAM,各应采用哪些寻址方式?3.6MCS-51系列单片机指令系统包含哪几大类指令?各有何用处?3.7请用数据传送指令来实现下列要求的数据传送1)R0的内容传送到R1中2)片内RAM 20H单元的内容传送到A中3)片外RAM 30H单元的内容传送到R0中4)片外RAM 30H单元的内容传送到片内RAM 20H单元中5)片外RAM 1000H单元的内容传送到片内RAM 20H单元中6)ROM 2000H单元的内容传送到R1中7)ROM 2000H单元的内容传送到片内RAM 20H单元中8)ROM 2000H单元的内容传送到片外RAM 30H单元中9)ROM 2000H单元的内容传送到片外RAM 1000H单元中3.8设(A)=0FH,(R0)=30H,片内RAM (30H)=0AH、(31H)=0BH、(32H)=0CH,执行下列程序后各单元内容如何变化?MOV A,@R0MOV @R0,32HMOV 32H,AMOV R0,#31HMOV A,@R03.9设片内RAM (30H)=5AH,(5AH)=40H,(40H)=00H,并口(P1)=7FH,执行下列程序后R0、R1、A、B、P1、片内RAM 40H、30H、5AH单元的内容如何?MOV R0,#30HMOV A,@R01MOV @R0,AMOV @R1,P1MOV A,P1MOV 40H,#20HMOV 30H,40H3.10设(A)=5AH,(R1)=30H,(30H)=E0H,(C)=1。
分析下列各指令执行后A的内容以及对标志位的影响。
1)XCH A,R12)XCH A,30H3)XCH A,@R14)XCHD A,@R15)SWAP A6)ADD A,R17)ADD A,30H8)ADD A,#30H9)ADDC A,30H10)INC A11)SUBB A,30H12)SUBB A,#30H13)DEC A14)RL A15)RLC A16)CPL A17)CLR A18)ANL A,30H19)ORL A,@R120)ORL A,#30H3.11分析下列各段程序中每条指令的执行结果。
1)MOV SP,#50HMOV A,#0F0HMOV B,#0FHPUSH APUSH BPOP BPOP A2)MOV A,#30HMOV B,#0AFHMOV R0,#31HMOV 31H,#87HXCHD A,@R0XCH A,B233) MOV A,#45HMOV R5,#78HADD A,R5DA AMOV 30H,A4) MOV A,#83HMOV R0,#47HMOV 47H,#34HANL A,#47HORL 47H,AXRL A,@R03.12 对下列程序进行手工汇编。
ORG 1000HCLR AMOV R0,#20HLOOP: CJNE @R0,#24H,NEXTSJMP QUITNEXT: INC AINC R0SJMP LOOPQUIT: MOV R1,AHALT: SJMP HALTEND3.13 SJMP 指令和AJMP 指令都是2字节转移指令,它们有何区别?各自的转移范围是多少?能否用AJMP 指令代替程序中所有的SJMP 指令?为什么?3.14 设51的晶振频率为6MHz ,试用循环转移指令编写延时20ms 的延时子程序。
3.15 试编写程序,将片内RAM 20H~2FH 单元清零。
3.16 试编写程序,求片内RAM 20H 单元中“1”的个数,并将结果存入21H 单元。
3.17 试编写程序,查找在片内RAM 30H~50H 单元中出现“FFH ”的个数,并将结果存入51H单元。
3.18 试编写程序,计算∑=101i i ,并将结果存入片内RAM 30H 单元。
3.19 从片内RAM 30H 单元开始存放一组无符号数,其数目已存放在21H 单元。
编写程序求出最小数,并将其存入20H 单元。
3.20 从片内RAM 30H 单元开始存放一组用补码表示的带符号数,其数目已存放在20H 单元。
编写程序统计出其中正数、0和负数的数目,并将结果分别存入21H 、22H 、23H 单元。
3.21 片内RAM 有一数据块,存放在20H~2FH 单元中。
要求对这些数据进行奇偶校验,凡满足偶校验的数据(1的数目为偶数个)都要转存到片外RAM 8000H 开始的数据区中。
试编写有关程序。
3.22 编写程序,将片外RAM 1001H~10FFH 区域内的数据逐个搬到2001H 开始的区域。
3.23 用软件实现逻辑函数F=X Y W+XYZ XYZW +的功能,其中F 、W 、X 、Y 、Z 均为位变量。
3.24按下列功能要求,编制子程序。
1)将R3R2中的16位二进制数转换成3字节压缩的BCD码,转换结果存放在R6R5R4中。
2)3字节无符号数相加:R7R6R5+R4R3R2→@R0(3个连续单元)3)3字节无符号数乘以2字节无符号数:R7R6R5*R4R3→@R0(5个连续单元)4)2字节整数开平方:2RR→R433.25在片外RAM首地址为table的数据表中,有10个字节的数据。
编程将每个字节的最高位无条件地置1。
3.26片内RAM从table单元开始连续存放了8个数,编程求出平均值并存入buf单元。
3.27片内RAM从list单元开始存放一正数表,表中的数为无序排列,并以-1作结束标志,编程找出表中的最小数并存入min单元。
3.28求16位带符号二进制补码数的绝对值。
假定补码放在片内RAM的num和mum+1单元,求得的绝对值仍放在原单元。
3.29求16位补码数的原码,16位补码数放在片内RAM的data1和data+1单元,转换后得到的原码仍放在原单元。
3.30比较两个ASCII码字符串是否相等。
字符串的长度在片内RAM 41H单元,第一个字符串的首地址为42H,第二个字符串的首地址为52H。
如果两个字符串相等,则置片内RAM 40H 单元为00H,否则置片内RAM 40H单元为FFH。
编程实现搜索并把搜索到的非空字符的地址存入片内RAM单元40H和41H中(高字节放入41H)。
3.31编写将4位十六进制数转换为ASCII码的程序。
假定十六进制数存放在片内RAM op1单元开始的区域中,转换得到的ASCII码存放在op2单元开始的区域中。
4片内硬件资源4.1何谓对并口的读-改-写操作?4.2从8051 P1口并行输出驱动8个LED,编写程序循环点亮P1.0~P1.7输出驱动的LED,每次只点亮一个。
4.3定时器/计数器用作定时时,其定时时间与哪些因素有关?用作计数时,对外界的计数频率有何限制?4.4定时器T0、T1各有几种工作方式?简述之。
4.5当定时器T0工作在方式3时,由于TR1位已被T0占用,如何控制定时器T1的开启和关闭?4.6已知8051的时钟频率fosc=6MHz,若要求定时值分别为0.1ms、1ms、10ms,定时器T0工作在方式0、方式1、方式2时,定时器对应的初值各为多少?4.7已知8051的时钟频率fosc=6MHz,试编写程序,使P1.0输出矩形脉冲(每周期40us高电平,360us低电平),建议用定时器工作方式2。
4.8已知8051的时钟频率fosc=6MHz,试编写程序,利用定时器T0工作在方式3,使P1.0和P1.1分别输出周期为1ms和400us的方波。
4.9已知8051的时钟频率fosc=6MHz,试编写程序,将定时器T1设置为外部事件计数器,要求每计数100个脉冲,T1转为1ms定时方式,定时到后,又转为计数方式,周而复始。
4.10已知8051的时钟频率fosc=6MHz,利用定时器来测量单次正脉冲宽度,采用何种工作方式可获得最大的量程?求允许测量的最大脉宽是多少?44.11某异步串行接口,其帧格式由1个起始位,7个数据位,1个奇偶校验位和1个停止位组成。
当该接口每分钟传送1800个字符时,试计算出传送波特率。
4.12串行口工作在方式1和方式3时,其波特率与fosc、定时器T1方式2的初值及SMOD位的关系如何?设fosc=6MHz,利用定时器T1方式2产生波特率为110波特,试计算定时器初值,问实际得到的波特率有误差吗?4.13试设计一个单片机的双机通信系统,并编写通信程序,将甲机片内RAM 30H~3FH存储区的数据块通过串行口传送到乙机片内RAM 40H~4FH存储区中去。
4.14利用单片机串行口外接两片74LS164串入并出移位寄存器来扩充一个16位的并行输出口,并将片内RAM两个单元中的双字节数送扩充并行输出口,试画出扩充电路及编写程序。
4.158051提供了几个中断源?有几级中断优先级别?各中断标志是如何产生的?又如何清除这些中断标志?各中断源所对应的中断矢量地址是多少?4.16试分析以下几种中断优先级的排列顺序(级别由高到低)是否可能?若可能,则应如何设置中断源的中断级别?否则简述不可能的理由。
1)定时器T0溢出中断,定时器T1溢出中断,外中断0INT,串行口中断;INT,外中断12)串行口中断,外中断0INT,定时器T1溢出中断;INT,定时器T0溢出中断,外中断13)外中断0INT,定时器T0溢出中断,串行口中断;INT,定时器T1溢出中断,外中断14)外中断0INT,串行口中断,定时器T0溢出中断,定时器T1溢出中断;INT,外中断15)串行口中断,定时器T0溢出中断,外中断0INT,定时器T1溢出中断;INT,外中断16)外中断0INT,定时器T0溢出中断,串行口中断,定时器T1溢出中断;INT,外中断17)外中断0INT,串行口中断。