第一章1-1微处理器、微计算机、微处理机、CPU、单片机它们有何区别?答:微处理器、CPU、微处理机它们都是中央处理器,微计算机、单片机是一完整的计算机。。1-3单片机系统将普通计算机的哪几部分集成于一块芯片上?答:单片机系统是将CPU、内存和I/O接口集成在一小块硅片上的微型机应用系统。1-6简述单片机特点及主要应用领域。答:单片机具有集成度高、功能强、速度快、体积小、功耗低、使用方便、性能可靠、价格低廉等特点,因此,在工业控制、智能仪器仪表、数据采集和处理、通信系统、网络系统、汽车工业、国防工业、高级计算器具、家用电器等领域得到广泛的应用第二章2-1MCS-51单片机内部包含哪些主要部件?答:①8位CPU②4KB的程序存储器(掩膜ROM)③128B的数据存储器④片外程序存储器最大寻址能力64KB⑤片外数据存储器最大寻址能力64KB⑥32根输入/输出线⑦1个全双工异步串行接口⑧2个16位定时/计数器⑨5个中断源,2个中断优先级2-4、MCS-51单片机的P0~P3口在结构上有何不同?P0:数据总线和低8位地址总线P1:通用I/O接口P2:高8位地址线P3:多功能I/O接口2-5、单片机的片内、片外存储器如何选择?当EA为低电平时,CPU直接访问外部程序存储器当EA为高电平时,CPU要先对内部0~4K程序存储器访问,然后自动延至外部超过4K的程序存储器。2-7、状态字寄存器各位的含义如何?PSW的各位定义为:CY:进行标志位(D7位)。在进行加、减运算时,如果操作结果使累加器A中最高位D7向前有进位或借位,则CY=1,否则CY=0。在位操作中,CY作位累加器C使用。AC:辅助进行位(D6位)。在加减运算中,当A中的D3位向D4位有进位或借位时,AC=l,否则AC=0。通常在二-十进制调整时使用。F0、F1:用户标志位(D6、D1位)。这两个是供用户定义的标志位,用户可根据需要对F0、F1赋予一定的含义,由用户用软件方法对其置位或复位,用以控制用户程序的转向。RS1、RS0:工作寄存器区选择控制位(D4、D3位)。用于设定哪一组工作寄存器为当前正在工作的工作寄存器组,即对相同名称的R0~R7改变其物理地址,由用户通过软件方式加以选择。RS1、RS0的取值与选用工作寄存器的关系如表2-7示。单片机在开机或复位后,RS1和RS0总是为零状态,也说是说,选择0区为当前工作寄存器组,故单片机复位后的工作寄存器R0~R7的物理地址为00H~07H。OV:溢出标志位。用于指示累加器A在算术运算过程中是否发生的溢出。当运算结果超出了8位数能表示的范围,即-128~+127,则OV自动置1,否则OV=0。在加法运算中,OV=l表示运算结果是错误的,OV=0表示运算正确;在乘法运算中,OV=l表示乘积超过255,即乘积分别在B与A中,OV=0表示乘积只在A中;在除法运算中,OV=l表示除数为0,除法不能进行,OV=0表示除数不为0,除法可以正常进行。P:奇偶标志位。每条指令执行完毕后,由硬件根据A中1的数目对P位自动置位。若A中1的数目为奇数,则P=1,若A中1的数目为偶数,则P=0。2-8(5-1)中断是指CPU暂时中止其正在执行的程序,转去执行请求中断的那个外围设备或事件的服务程序,等处理完后再返回执行原来中止的程序。MCS-51系列单片机有5个中断源,其中断源与中断入口地址分别为:外部中断0(INTO)中断入口地址:0003H定时器/计数器0(TO)中断入口地址:000BH外部中断1(INT1)中断入口地址:0013H定时器/计数器中断1(TL)中断入口地址:001BH串行中断(RI/TI)串行口0023H中断入口地址与中断服务子程序的入口地址是有区别的,中断入口地址如上,而中断服务子程序的入口地址就是中断服务子程序名称所在的地址即中断服务子程序第一句所在的地址。2-11MCS-51单片机的控制信号有哪些?作用如何?P0.0~P0.7:P0端口8位双向口,能驱动8个LSTTL(低功耗TTL)负载P1.0~P1.7:P1端口8位双向口,能驱动4个LSTTL(低功耗TTL)负载P2.0~P2.7:P2端口8位双向口,能驱动4个LSTTL(低功耗TTL)负载P3.0~P3.7:P3端口8位双向口,能驱动4个LSTTL(低功耗TTL)负载ALE(/PROG):地址锁存允许/编程信号。/PSEN:外部程序存储器读选通信号。/EA(/VPP):访问程序存储控制信号/编程电压输入端。XTAL1和XTAL2:外接晶体引线端。RST/VPD:复位信号/备用电源输入端2-16、AT89系列单片机的复位方式有几种?复位后单片机的状态如何?有两种复位方式:手动按钮复位和上电复位在SFR中,除了端口锁存器、堆栈指针SP和串行口的SBUF外,其余寄存器全部清零,端口琐存器的复位值为0FFH,堆栈指针值为07H,SBUF内为不定值。内部RAM的状态不受复位影响,在系统启动时,RAM的内容是不定的。第三章3-1判断以下指令的正误(1)MOV28H,@R2(2)DECDPTR(3)INCDPTR(4)CLRR0(5)CPLR5(6)MOVR0,R1(7)PHSHDPTR(8)MOVF0,C(9)MOVF0,Acc.3(10)MOVXA,@R1(11)MOVC,30H(12)RLCR03-1答:(1)错(2)错(3)对(4)错(5)错(6)错(7)错(8)对(9)错(10)对(11)对(12)错3-4MCS-51单片机有那几种寻址方式?这几种寻址方式是如何寻址答:七种寻址方式:①立即寻址②直接寻址③寄存器寻址④寄存器间接寻址⑤变址寻址⑥相对寻址⑦位寻址3-6MCS-51按功能分为哪几类?每类指令作用是什么?按功能可分为5类:数据传送类指令(共29条):把源操作数传送到目的操作数算数运算类指令(共24条):对八位无符号数进行算术运算逻辑运算及移位类指令(共24条):对两个操作数进行逻辑运算,操作结果送到累加器A或直接寻址单元地址。控制转移类指令(共17条):用于完成程序的转移、子程序的调用与返回、中断返回等功能。位操作类指令(共17条):进行位的变量传送、修改和逻辑操作。3-10、在片内RAM中,已知(30H)=38H,(38H)=40H,(40H)=48H,(48)H=90H,试分析下段程序中各条指令的作用,说出按顺序执行完指令后的结果:MOVA,40H;把40单元的内容送往累加器AMOVR1,A;把累加器A的内容送往R1MOVP1,#0F0H;把立即数F0送往P1口MOV@R1,30H;把30单元的内容送往以R1的内容为地址的单元MOVDPTR,#1234H;把立即数1234送往DPTRMOV40H,38H;把38单元的内容送往40单元MOVR1,30H;把30单元的内容送往R1MOV90H,R1;把R1的内容送往90单元MOV48H,#30H;把立即数30送往48单元MOVA,@R1;把以R1的内容作为地址送往累加器AMOVP2,P1;把P1口的内容送往P2口4-1用于程序设计的语言分为哪几类?他们各有什么特点?机器语言:直接用机器编码,能够为计算机直接执行的机器及语言。一般只用于简单的开发装置中使用,但程序的设计、输入、修改和调试都很麻烦,且不易看懂,不易记忆,容易出错。汇编语言:结构简单、执行速度快、程序易优化、编译后占用存储空间小。缺点可读性比较差,调试周期长。高级语言:可读性强,通用性好,适用于不熟悉单片机指令系统的用户,缺点是实时性不高,结构不紧凑,编译后存储空间较大。4-9试编写一个程序,将内部RAM中的45H单元的高4位清0,低4位置1.课件作业题答案:一、已知M1、M2单元中存有两个16位无符号数X1、X2(低位在前)。试写出X1+X2,并将结果放入M1、M1+1单元(低8位在M1单元)。设两数之和不会超过16位(65535)。【解】:MOVR0,#M1;x1指针赋初值MOVR1,#M2;x2指针赋初值MOVA,@R0;取x1低8位送AADDA,@R1;x1与x2低8位相加MOV@R0,a;低8位和送m1单元INCR0INCR1;修改指针MOVA,@R0;取x1的高8位送AADDCA,@R1;x1与x2的高8位和Cy相加MOV@R0,A;结果送M1+1单元二、已知:外部RAM的2000H开始有一个输入数据缓冲区,数据区以回车符CR表2-7工作寄存器组选择RS1RS0工作寄存器组地址寄存器00011011012300H~07H08H~0FH10H~17H18H~1FHR0~R7R0~R7R0~R7R0~R7(对应的ASCII码为0DH)为结束标志,试编程将正数送30H开始的单元、负数送40H开始的单元。ORG2000HMOVDPTR,#2000H;缓冲区指针赋初值MOVR0,#30H;正数区指针赋初值MOVR1,#40H;负数区指针赋初值NEXT:MOVXA,@DPTR;从外部RAM缓冲区取数CJNEA,#0DH,COMP;若A≠0DH转COMPSJMPDONE;A=0DH时,结束COMP:JBACC.7,LOOP;数据为负时转LOOPMOV@R0,A;正数处理INCR0;修改指针INCDPTRSJMPNEXT;返回继续LOOP:MOV@R1,A;负数处理INCR1;修改指针INCDPTRSJMPNEXT;返回继续DONE:RET;结束三、举例:利用单片机扩展5个外部中断源,中断的优先次序为X0~X4,其中X0接到外部中断上,X1~X4接到外部中断上;单片机的P1.4~P1.7接4个发光二极管用来作输出指示;(1)当有X1~X4其中一个外部中断发生时,相应的发光二极管D1~D4点亮;(2)当X0外部中断发生时,4个发光二极管全亮。ORG0000HAJMPMAINORG0003H;中断0服务程序入口地址AJMPZHD0ORG0013H;中断1服务程序入口地址AJMPZHD1ORG0030HMAIN:MOVSP,#70H;设置堆栈指针SETBIT0;外部中断0为边沿触发方式SETBIT1;外部中断1为边沿触发方式MOVIP,#00000001B;外部中断0为MOVIE,#10000101B;开放外部中断0,1MOVA,#0FFH;关闭发光二极管MOVP1,ALOOP:AJMPLOOPZHD0:PUSHPSW;保护现场PUSHAMOVA,#0FH;4个发光二极管全亮MOVP1,APOPA;恢复现场POPPSWRETI;中断返回ZHD1:PUSHPSW;保护现场PUSHAORLP1,#0FH;读取P1口的低4位JNBP1.0,IN1;中断源查询,并转向相应的中断服务程序JNBP1.1,IN2JNBP1.2,IN3JNBP1.3,IN4FH1:POPA;恢复现场POPPSWRETIIN1:MOVA,#11101111B;中断服务程序1MOVP1,A;D1发光二极管亮AJMPFH1IN2:MOVA,#11011111B;中断服务程序2MOVP1,A;D2发光二极管亮AJMPFH1IN3:MOVA,#10111111B;中断服务程序3MOVP1,A;D3发光二极管亮AJMPFH1MOVP1,A;D4发光二极管亮AJMPFH1END四、键盘接口举例KS:MOVDPTR,#7FFFH;键扫描程序CLRP1.0;先扫描第1列(即0~7号键)MOVXA,@DPTR;读入按键状态MOV37H,A;暂存按键状态CPLA;JZKSK1;0~7号键没有键操作,则跳LCALLDL20;0~7号键有操作,延时去抖MOVXA,@DPTR;再读键状态XRLA,37H;和延时前状态一样吗?JZKS1;一样,则转去查询键号KSK1:SETBP1.0;开始扫描第2列,8~F号键CLRP1.1MOVXA,@DPTR;读入按键状态MOV37H,A;暂存按键状态CPLAJZKSK2;8~F号键没有键操作,则跳LCALLDL20;8~F号键有操作,则延时去抖MOVXA,@DPTR;再读键状态XRLA,37H;和延时前的状态一样吗?JZKS1;一样,则转去查询键号KSK2:AJMPKS9;8~