单片机课后习题答案 下载本文

是RD-232C。它包括了按位串行传输的电气和机械方面的规定,如适用范围、信号特性、接口信号及引脚说明等,适用于短距离(<15m)或带调制解调的通信场合。采用RS-422, RS-485标准时,通信距离可达1000m。 12、简述单片几多机通信的原理。

答:当一片89C51(主机)与多片89C51(从机)通信时,所有从机的SM2位都置1.主机首先发送的一帧数据为地址,即某从机机号,其中第9位为1,所有的从机接收到数据后,将其中第9位装

入RB8中。各从机根据收到的第9位数据(RB8中)的值来决定从机可否再接收主机的信息。若( 14/18页

RB8)=0,说明是数据帧,则使接收中断标志位RI=0,信息丢失;若(RB8)=1说明是地址帧,数据装入SBUF并置RI=1,中断所有从机,只有被寻 址的目标从机清除SM2(SM2=0),以接收主机发 来的一帧数据(点对点通信)。其他从机仍然保持SM2=1.13、当89C51串行口按工作方式1进行串行数据通信时。假定波特率为1200b/s,以中断方式传送 数据。请编写全双工通信程序。解:设系统时钟频率fosc=6.0MHZ。查教材表9-2可知,可取SMOD=0,T1的计数初值为F3H。程序如下: ORG 0000H AJMP MAIN ;上电,转向主程序 ORG 0023H ;串行口的中断入口地址 AJMP SERVE ;转向中断服务程序

ORG 0040H ;主程序MAIN: MOV SP,#60H ;设置堆栈指针 MOV SCON ,#50H MOV PCON ,#00HMOV TMOD,#20HMOV TH1,#0F3HMOV TL1,#0F3H SETB TR1 MOV R0 ,#20H ;置发送数据区首地址MOV R1 ,#40H ;置接收数据区首地址

MOV R7 ,#10H ;置发送字节长度MOV R6 ,#10H ;置接收字节长度 SETB ES ;允许串行口中断 SETB EA ;CPU允许中断 MOV A ,@R0 ;取第一个数据发送 MOV SBUF ,A ;发送第一个数据 SJMP $ ;等待中断

SERVE: JNB RI ,SEND ;TI=1,为发送中断CLR RI MOV A ,SBUF ;读出接收缓冲区内容

MOV @R1 ,A ;读入接收缓冲区DJNZ R6 ,L1 ;判断数据块发送完否SJMP L2 ;数据块接收完,转L2L1:INC R1 ;修改数据区指针L2:RETI ;中断返回SEND: CLR TI ;清除发送中断标志DJNZ R7 ,L3 ;判断数据块发送完否

SJMP L4 ;数据块接收完,转L4L3: MOV A ,@R0 ;取数据发送MOV SBUF ,A ;发送数据 INC R0 ;修改数据地址L4:

RETI ;中断返回 END14、以89C51串行口按工作方式3进行串行数据通

信。假定波特率为1200b/s,第9数据位作奇偶校验位,以中断方式传送数据。请编写通信程序。解:ORG 0000H AJMP MAIN ;上电,转向主程序 ORG 0023H ;串行口的中断入口地址 AJMP STOP ;转向中断服务程序 ORG 0040H ;主程序MAIN: MOV SP,#60HMOV TMOD,#20HMOV TH1,#0E8HMOV TL1,#0E8H SETB TR1 MOV SCON ,#0D0H MOV PCON ,#00H MOV R0 ,#20H ;置发送数据区首地址MOV R1 ,#40H ;置接收数据区首地址 SETB ES

;允许串行口中断 SETB EA ;CPU允许中断 MOV A ,@R0 MOV C, PSW.0 ;P→C CPL C MOV TB8 ,C

MOV SBUF ,A ;发送第一个数据 SJMP $STOP: JNB RI SOUT ;TI=1,为发送中

断CLR RI

MOV A ,SBUF ;读出接收缓冲区内容MOV C ,PSW.0 ;P→CCPL C ;形成奇校验JC LOOP1 ;判断接收端的奇偶值,C=1转LOOP1JNB RB8 ,LOOP2

;C=0,RB8=0,转LOOP2SJMP ERROR ;C=0,RB8=1,转出错处理LOOP1: JB RB8 ,LOOP2 片内256字节数据存储器RAM/SFR用来存放可以读

;C=1,RB8=1,转LOOP2/写的数据,片内4KB程序存储器FLASHROM用存放SJMP ERROR ;C=0,RB8=1,转出错处理程序、数据、表格,4个8位并行I/O端口P0-LOOP2:P3,两个16位的定时器/计数器,5个中断源、两 个中断个优先级的中断控制系统, MOV @R1 ,A

一个全双工UART的串行口I/O口,片内振荡器和;将接收数据送入接收数据区 时钟产生电路,休闲方式和掉电方式。 INC R1 ;修改数据区指针 RETI6.89C51片内程序存储器容量为4KB,地址从000 0-SOUT: CLR TI

;是发送中断,清除发送中断标志 INC R0 ;修改数据区指针 MOV A ,@R0

MOV PSW.0, C ;P→C

CPL C MOV TB8 ,C MOV SBUF ,A ;发送第一个数据RETI

ERROR:…… 15、某异步通信接口,其帧格式由1个起始位(0),7个数据位,1个奇偶校验位和1个停止位(1)组成。当该接口每分钟传送1800个字符时,试计算出传送波特率。解:该异步通信接口的帧格式为10b/字符,当该接口每分钟传送1800个字符时:波特率=(10b/字符)×(1800字符/60s)=300b /s

16、串行口工作在方式1和方式3时,其波特率与 fosc、定时器T1工作模式2的初值及SMOD位的关 系如何?设fosc=6MHz,现利用定时器T1模式2 产生的波特率为110b/s。试计算定时器初值。 解:关系如下:

当波特率为110b/s,fosc=6MHz,令SMOD=0,有 :

17、设计一个单片机的双机通信系统,并编写

通信程序。将甲机内部RAM 40H--4FH存储区中去。 1.微处理器,RAM,ROM,以及I/O口,定时器,构

成的微型计算机称为单片机。2.指令寄存器(IR)保存当前正在执行的一条指令;指令译码器(ID)对操作码进行译码。3.程序计数器(PC)指示出将要执行的下一条指令地址,由两个8位计数器PCH及PCL组成。4.80C31片内没有程序存储器,80C51内部设有4

KB的掩膜ROM程序存储器,87C51是将80C51片内

的ROM换成EPROM,89C51则换成4KB的闪存FLASHR OM,51增强型的程序存储器容量是普通型的2倍。

5.89C51的组成:一个8位的80C51的微处理器,0FFFH开始,存放程序和表格常数,片外最多可扩展64KBROM地址1000-FFFFH,片内外统一编址。单片机的内部存储空间分为数据存储器和程序存储器。7.内部数据存储器:共256字节单元,包括低128个单元和高128个单元。低128字节又分成3个区域:工

作寄存器区(00H~1FH),位寻址区(20H~2FH)和用户RAM区(30H~7FH)存放中间结果,

数据暂存及数据缓冲。高128字节是供给特殊功能寄存器(SFR)使用的,因此称之为特殊功能寄存器区(80H~FFH),访问它只能用直接寻址。内部程序存储器:在8031片内无程序存储器,8051片内具有4KB掩模ROM,8751片内具有4KBEPROM。8. 引脚是片内外程序存储器的选择信号。当端保持高电平时,访问内部程序存储器,但在PC(程序计数器)值超过0FFFH(对于8051/8751/80C51)或1FFFH(对于8052)时,将自动转向访问外部程序存储器。当 端保持低电平时,不管是否有内部程序存储器,则只访问外部程序存储器。由于8031片内没有程序存储器,所以在使用8031时, 引脚必须接低电平。9.RST复位信号输入端,高电平有效。保持两个机器周期(24个时钟振荡周期)的高电平有效,完成复位,复位后,CPU和系统都处于一个确定的初始状态,在这种状态下,所有的专用寄存器都被赋予默认值,除SP=07H,P0~P3口为FFH外,其余寄存器均为0。ALE/ :ALE输出正脉冲,频率为振荡周期的1/6,CPU访问片外存储器时,ALE输出信号作为锁存低8位地址的控制信号,看芯片好坏可以用示波器看ALE端是否有脉冲信号输出。PSEN程序存储允许输出 信号端,也可以检查芯片好坏,有效即能读出片外ROM的指令,引脚信号RD/WR有效时可读/写片外RAM或片外I/O接口。10.P0作为输出口时,必须外接上拉电阻才能有高电平输出,作为输入口时,必须先向锁存器写 16/18页

“1”;作为普通I/O口使用或低8位地址/数据总线使用。

P1口有上拉电阻,对FLASHROM编程和校验是P1接收低八位地址;只用作普通I/O口使用。

P2口比P1口多了一个转换控制开关;作为普通I/O口使用或高8位地址线使用时访问外部程序存储器和16位地址的外部数据存储器。

P3口比P1口增加了与非门和缓冲器;具有准双向I/O功能和第二功能。P0,P1,P2,P3准双向口。上述4个端口在作为输入口使用时,应注意必须先向端口写“1”。 11.普林斯顿结构:一个地址对应唯一的存储单元,用同类访问指令。哈佛结构:程序存储器和数据存储器分开的结构。CPU访问片内外ROM用MOVC,访问片外RAM用MOVX,访问片内RAM用MOV.12. RS1RS0当前寄片内RAM地址 存器组

00第0组工00H~07H 作寄存器

01第1组工08H~0FH 作寄存器

10第2组工10H~17H 作寄存器

11第3组工18H~1FH 作寄存器

SP总是初始化到内部RAM地址07H,堆栈的操作;PUSH、POP。DPTR是数据指针寄存器,是一个16位寄存器,用来存放16位存储器的地址,以便对64KB片外RAM作间接寻址。DPTR由高位字节DPH和低位字节DPL组成。

13.指令周期:执行一条指令所需要的时间。机器周期:CPU完成一个基本操作所需要的时间,6个状态周期和12个振荡周期。当晶振频率为12MHz时,一个机器周期为1μs;当晶振频率为6MHz时,一个机器周期为2μs,复位时间超过4μs。

14.复位操作有:电自动,按键手动,看门狗。

15.空闲方式是CPU停止工作而RAM,定时器/计数器,串行口及中断系统都工作。掉电一切功能都暂停,保存RAM中内容。退出空闲方式;硬件将PCON.0清0,硬件复位。当CPU执行PCON.1为1,系统进入掉电方式。推出

掉电只有硬件复位。16.保留的存储单元 存储单元保留目的0000H~0002H 复位后初始化引导程序地址

0003H~000AH外部中断0000BH~0012H定时器0溢出 中断

0013H~001AH外部中断1001BH~0022H定时器1溢出 中断

0023H~002AH串行端口中断002BH定时器2中断

17.单片机的寻址方式:寄存器寻址,直接寻址,立即数寻址,寄存器间接寻址,变址寻址,相对寻址,位寻址。

18.AJMP和SJMP的区别有: (1) 跳转范围不同。 AJMP addr1 ;短跳转范围:2KB 。SJMP rel ;相对跳转范围:-128~+127 (2) 指令长度不同。(3) 指令构成不同。AJMP、LJMP后跟的是绝对地址,而SJMP后跟的是相对地址。 不能用AJMP指令代替程序中的SJMP指令,因为如果改变的话,程序跳转到的新PC值指向的地址会不同,导致程序出现错误。

19.在89c51片内RAM中30H)=38H,38H=40H,40H=48H,48H=90H。情分析下面各是什么指令,说明源操作数的寻址方式以及按顺序执行每条指令后的结果?

MOV A,40H ;直接寻址 (40H)→A MOV R0,A ;寄存器寻址 (A)→R0 MOV P1,#0F0H ;立即数寻址 0F0→P1 MOV @R0,30H ;直接寻址 (30H)→(R0) MOV DPTR,#3848H ;立即数寻址3848H→DPTR MOV 40H,38H ;直接寻址 (38H)→40H MOV R0,30H ;直接寻址 (30H)→R0

MOV P0,R0 ;寄存器寻址 ( R0 )→P0 MOV 18H,#30H ;立即数寻址30H→18H

MOV A,@R0 ;寄存器间接寻址 ((R0)) →A MOV P2,P1 ;直接寻址 (P1)→P2最后结果:(R0)=38H,(A)=40H,(P0)=38H,(P1)=(P2)=0F0H,(DPTR)=3848H,(18H)=30H,(30H)=38H,(38H)=40H,(40H)=40H,(48H)=38H注意:→左边是内容,右边是单元 20.已知R3和R4中存放有一个16位的二进制数,高位在R3中,地位在R4中,请编程将其求补,并存回原处。 MOV A,R3 ;取该数高8位→A ANL A,#80H ;取出该数符号判断 JZ L1 ;是正数,转L1 MOV A,R4 ;是负数,将该数低8位→A

CPL A ;低8位取反 ADD A,#01H ;加1 MOV R4,A ;低8位取反加1后→R4 MOV A,R3 ;将该数高8位→A CPL A ;

高8位取反 ADDC A,#00H ;加上低8位加1时可能产生的进位 MOV R3,A ;高8位取反加1后→R3 L1: RET

21.已知30H和31H中村有一个16位的二进制数,高位在前,低位在后,请编程将他们乘以2,在存回原单元中。 CLR C ;清进位位C

MOV A,31H ;取该数低8位→A RLC A ;带进位位左移1位 MOV 31H,A ;结果存回31H MOV A,30H ;取该数高8位→A RLC A ;带进位位左移1位 MOV 30H,A ;结果存回30H

22.假设允许片内定时器/计数器中断,禁止其他中断。设置IE值。用字节操作指令: MOV IE #8AH 或MOV A8H,#A8H 用位操作指令:SETB ET0 SETB ET1 SETB EA23.设89

C51的片外中断为高优先级,片内为低优先级,设置IP值。 用字节操作指令:MOV IP,#05H或MOV 0B8H,#05H 用位操作指令:SETB PX0 SETB PX1 CLR PS CLR PT0 CLE PT1

24.89C51单片机内有两个16位定时器/计数器,即T0,T1.