单片机课后习题答案

更新时间:2023-11-26 09:35:02 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第1章 习题答案

1.什么是单片机?

答:将中央处理器(Central Processing Unit,CPU)、随机存储器、只读存储器、中断系统、定时器/计数器以及I/O接口电路等微型计算机的主要部件集成在一块芯片上,使其具有计算机的基本功能,就叫做单片微型计算机(Single Chip Micro Computer,SCMC),简称单片机。由于单片机的指令功能是按照工业控制的要求设计,所以单片机又称为微控制器(Micro Controller Unit,MCU)。

2.单片机有哪些特点?

答: (1)单片机的存储器ROM和RAM是严格区分的。ROM称为程序存储器,只存放程序、固定常数及数据表格。RAM则为数据存储器,用作工作区及存放用户数据。

(2)采用面向控制的指令系统。

(3)单片机的I/O引脚通常是多功能的。 (4)单片机的外部扩展能力强。

(5)单片机体积小,成本低,运用灵活,易于产品化。

(6)面向控制,能有针对性地解决从简单到复杂的各类控制任务,因而能获得最佳的性能价格比。

(7)抗干扰能力强,适用温度范围宽。

(8)可以方便地实现多机和分布式控制,使整个控制系统的效率和可靠性大为提高。

3.单片机的应用有哪些?

答: (1)工业控制。单片机可以构成各种工业控制系统、数据采集系统等。如数控机床、自动生产线控制、电机控制、测控系统等。 (2)仪器仪表。如智能仪表、医疗器械、数字示波器等。

(3)计算机外部设备与智能接口。如图形终端机、传真机、复印机、打印机、绘图仪、磁盘/磁带机、智能终端机等。

(4)商用产品。如自动售货机、电子收款机、电子秤等。

(5)家用电器。如微波炉、电视机、空调、洗衣机、录像机、音响设备等。 (6)消费类电子产品。 (7)通讯设备和网络设备。 (8)儿童智能玩具。

(9)汽车、建筑机械、飞机等大型机械设备。 (10)智能楼宇设备。 (11)交通控制设备。

4.常见的单片机有哪些类型?

答: 1.AVR单片机;2.Motorola单片机;3.MicroChip单片机;

4.Scenix单片机;5.EPSON单片机;7.GMS90单片机;8.华邦单片机 9.Zilog单片机;10.NS单片机;11.AX1001单片机

第2章 习题答案

1.MCS-51单片机内部包含哪些主要逻辑功能部件? 答:(1)1个8位的微处理器CPU。

(2)8KB的片内程序存储器Flash ROM(51子系列的Flash ROM为4KB),用于烧录运行的程序、常数数据。

(3)256B的片内数据存储器RAM(51子系列的RAM为128B),在程序运行时可以随时写入数据和读出,用于存放函数相互传递的数据、接收的外部数据、中间结果、最后结果以及显示的数据等。

(4)3个16位的定时器/计数器(51子系列仅有2个定时器),每个定时器/计数器可以设置为计数方式,用于对外部事件信号进行计数,也可以设置为定时方式,满足各种定时要求。

(5)有一个管理6个中断源(51子系列1是5个中断源)、两个优先级的中断控制器。

(6)4个8位并行I/O端,每个端口既可以用作输入,也可以用于输出。 (7)一个全双工的UART(通用异步接收发送器)串行I/O口,用于单片机之间的串行通信,或者单片机与PC机、其它设备、其它芯片之间的串行通信。 (8)片内振荡电路和时钟发生器,只需外面接上一晶振或输入振荡信号就可产生单片机所需要的各种时钟信号。

(9)有一个可寻址64KB外部数据存储器、还可以寻址64KB外部程序存储器的三总线的控制电路。

2.MCS-51单片机的EA引脚有何功能?信号为何种电平?

答: EA为片外程序存储器选择输入端。该引脚为低电平时,使用片外程序存储器,为高电平时,使用片内程序存储器。

3.MCS-51单片机的ALE引脚有何功能?信号波形是什么? 答: ALE为地址锁存信号,每个机器周期输出两个正脉冲。在访问片外存储器时,下降沿用于控制外接的地址锁存器锁存从P0口输出的低8位地址。在没有接外部存储器时,可以将该引脚的输出作为时钟信号使用。

4.MCS-51单片机的存储器分为哪几个空间?如何区分不同空间的寻址?

答: MCS-51单片机有4个存储空间,它们是片内程序存储器和数据存储器,在片外可以扩展的程序存储器和数据存储器。这4个存储空间可以分成三类:片内数据存储空间(256B的RAM和128B的特殊功能寄存器)、片外数据存储空间(64KB)、片内和片外统一编址的程序存储空间(64KB)。不同的存储空间,它们有各自的寻址方式和访问指令。片内数据存储空间用MOV指令访问。片外数据存储空间用MOVX指令访问。片内和片外统一编址的程序存储空间用MOVC指令访问。 5.简述MCS-51单片机片内RAM的空间分配。内部RAM低128字节分为哪几个主要部分?各部分主要功能是什么?

答: 片内数据存储器按照寻址方式,可以分为三个部分:低128字节数据区,高128字节数据区间,特殊功能寄存器区。低128字节数据区分为三个区域:工作

寄存器区,位寻找区和通用数据区。工作寄存器区4组工作寄存器;位寻找区既可以做位操作,也可以字节操作;通用数据区用于堆栈和存放程序运行时的数据和中间结果。 6.简述MCS-51单片机布尔处理器存储空间分配,片内RAM包含哪些可以位寻址的单元。位地址7DH与字节地址7DH如何区别?位地址7DH具体在片内RAM中的什么位置?

答:低128字节数据区的位寻找区和高128字节数据区的某些可位寻址的特殊功能寄存器。位地址7DH与字节地址7DH可通过不同的指令来区别,位地址7DH用位寻址指令来访问,字节地址7DH用字节寻址指令来访问,位地址7DH在低128字节数据区的位寻找区的2FH字节。

7.MCS-51单片机的程序状态寄存器PSW的作用是什么?常用标志有哪些位?作用是什么?

答:PSW是一个8位寄存器,用于设定CPU的状态和指示指令执行后的状态。

CY(PSW.7):进位标志。在执行加减运算指令时,如果运算结果的最高位(D7)发生了进位或借位,则CY由硬件自动置1。

AC(PSW.6):半进位标志位,也称为辅助标志位。在执行加减运算指令时,如果运算结果的低半字节(D3)发生了向高半字节进位或借位,则AC由硬件自动置1。

F0、F1(PSW.5 和PSW.1):用户标志位。用户可以根据需要对F0、F1赋予一定的含义,由用户置1和清0,作为软件标志。

RS1、RS0(PSW.4 和PSW.3):工作寄存器组选择控制位。通过对这两位设定,可以从4个工作寄存器组中选择一组作为当前工作寄存器。

OV(PSW.2):溢出标志位,有两种情况影响该位。一是执行加减运算时,如果D7或D6任一位,并且只一位发生了进位或借位,则OV自动置1,

P(PSW.0):奇偶标志位。每条指令执行完后,该位都会指示当前累加器A中1的个数。如果A中有奇数个1,则P自动置1。

8.MCS-51单片机复位后,CPU使用哪组工作寄存器?它们的地址是什么?用户如何改变当前工作寄存器组?

答: MCS-51单片机复位后,CPU使用0组工作寄存器。它们的地址是08H~0FH。通过程序状态字PSW中的RS1、RS0标志位改变当前工作寄存器组。

9.什么叫堆栈?堆栈指针SP的作用是什么?

答: 堆栈是在RAM专门开辟的一个特殊用途的存储区。堆栈是按照“先进后出”(即先进入堆栈的数据后移出堆栈)的原则存取数据。堆栈指针SP是一个8位寄存器,其值为栈顶的地址,即指向栈顶,SP为访问堆栈的间址寄存器。

10.PC与DPTR各有哪些特点?有何异同?

答: PC与DPTR都是16位的寄存器。PC由两个8位的计数器PCH和PCL组成。PC实际是程序的字节地址计数器,它的内容是将要执行的下一条指令的地址,具有自加1功能。改变PC的内容就可以改变程序执行的方向。DPTR的高字节寄存器用DPH表示,低字节寄存器用DPL表示。DPTR既可以作为一个16位寄存器使用,也可以作为两个独立的8位寄存器使用。DPTR主要用于存放16位地址,

以便对64KB的片外RAM和64KB的程序存储空间作间接访问。

11.测试哪个引脚,可以快捷地判断单片机是否正在工作? 答: 若要检查单片机是否工作,可以使用示波器查看ALE引脚是否有脉冲信号输出。

12.读端口锁存器和“读引脚”有何不同?各使用哪些指令? 答: 一种是读取锁存器原来的输出值,另一种情况是打开端口的缓冲器读取引脚上的信号,读端口锁存器,用MOV A,Pi指令。“读引脚”,要先用MOV Pi,#0FFH对相应端口写FFH,使输出场效应管T截止,才能够正确输入,再用MOV A,Pi指令。

13.MCS-51单片机的P0~P3口结构有何不同?用作通用I/O口输入数据时应注意什么?

答: P2口是一个双功能口,一是通用I/O口,二是以总线方式访问外部存储器时作为高8位地址口。其端口某一位的结构如图2-11所示,对比图2-10知,与P1口的结构类似,驱动部分基本上与P1口相同,但比P1口多了一个多路切换开关MUX和反相器3。P3口是一个多功能口,其某一位的结构见图2-12。与P1口的结构相比不难看出,P3口与P1口的差别在于多了“与非门”3和缓冲器4。正是这两个部分,使得P3口除了具有P1口的准双向I/O口的功能之外,还可以使用各引脚所具有的第2功能。P0多了一路总线输出(地址/数据)、总线输出控制电路(反相器3和与门4)、两路输出切换开关MUX及开关控制C,并且把上拉电阻换成了场效应管T1,以增加总线的驱动能力。用作通用I/O口输入数据时应注意要先用MOV Pi,#0FFH对相应端口写FFH,使输出场效应管T截止,才能够正确输入。

14.P0口用作通用I/O口输出数据时应注意什么?

答: P0口与其它端口不同,它的输出级无上拉电阻。当把它用作通用I/O口时,输出级是开漏电路,故用其输出去驱动NMOS输入时外接上拉电阻,这时每一位输出可以驱动4个LS型TTL负载。用作输入时,应先向端口锁存器写1。 15.什么叫时钟周期?什么叫机器周期?什么叫指令周期?时钟周期、机器周期与振荡周期之间有什么关系?

答: 时钟周期即振荡周期:为晶振的振荡周期,是最小的时序单位。状态周期:是振荡频率2分频后的时钟周期。显然,一个状态周期包含2个振荡周期。机器周期(MC):1个机器周期由6个状态周期、即12个振荡周期组成,是量度指令执行时间的单位。指令周期:是执行一条指令所需要的时间。一个指令周期由1~4个机器周期组成。

16.MCS-51单片机常用的复位电路有哪些?复位后机器的初始状态如何? 答: 复位电路有两种方式:上电自动复位电路和手动复位电路。复位后,程序计数器PC变为0000H,使单片机从程序存储器地址0000H单元开始执行。除P0~P3为FFH;SP为07H;SBUF为不确定。大部分特殊功能寄存器清零。

17.MCS-51单片机有几种低功耗工作方式?如何实现,又如何退出?

答: MCS-51单片机有空闲和掉电两种低功耗工作方式。当CPU执行完置IDL=1的指令后,系统就进入空闲方式。进入空闲方式之后,有两种方法可以退出。一种是任何中断请求被响应都可以由硬件将IDL位清0而结束空闲方式。另一种退出空闲方式的方法是硬件复位。当CPU执行完置PD=1的指令后,系统就进入掉电工作方式。对于一般的单片机来说,退出掉电方式的唯一方法是由硬件复位。

第3章 习题答案

1.简述MCS-51汇编指令格式。

答: MCS-51汇编语言指令由四部分组成,其一般格式如下: [标号:] 操作码 [操作数] [;注释]

格式中的方括号意为可以没有相应部分,可以没有标号、操作数和注释,至少要有操作码。其操作数部分最多可以是两项: [第1操作数] [,第2操作数]

2.何谓寻址方式?MCS-51单片机有哪些寻址方式,是怎样操作的?各种寻址方式的寻址空间和范围是什么?

答: MCS-51单片机有7种寻址方式:立即数寻址、寄存器寻址、直接寻址、寄存器间接寻址、变址寻址、位寻址和指令寻址。可以分为两类:操作数寻址和指令寻址。

立即数寻址的寻址空间和范围是:在程序存储空间,随指令读入MOV A,#46H 直接寻址的寻址空间和范围是:片内RAM中,低128字节和SFR MOV A,46H 寄存器寻址的寻址空间和范围是:使用R0~R7、A、B、C、DPTR MOV A,R2 寄存器间接寻址的寻址空间和范围是:片内RAM:使用@Ri,SP;范围为256B,不含SFR,片外RAM:使用@Ri,@DPTR;范围为64KB MOV A,@R0 MOVX A,@DPTR 变址寻址的寻址空间和范围是:使用@A+PC,@A+DPTR;在程序存储器中; 范围分别为PC之后256B之内和64KB全空间 MOVC A,@A+DPTR

位寻址的寻址空间和范围是:使用位地址;在位寻址空间;RAM的20H~2FH和SFR SETB 36H

指令绝对寻址的寻址空间和范围是:操作数是目标地址;在程序存储空间; 范围为2KB或64KB全空间 AJMP FIRST LJMP SECON

指令相对寻址的寻址空间和范围是:操作数是相对地址;在程序存储空间;范围﹣128~127 SJMP LOOP

3.访问片内RAM低128字节使用哪些寻址方式?访问片内RAM高128字节使用什么寻址方式?访问SFR使用什么寻址方式?

答: 访问片内RAM低128字节使用直接寻址,寄存器间接寻址,位寻址;访问片内RAM高128字节使用寄存器间接寻址;访问SFR使用直接寻址,位寻址。

4.访问片外RAM使用什么寻址方式? 答: 访问片外RAM使用寄存器间接寻址

5.访问程序存储器使用什么寻址方式?指令跳转使用什么寻址方式? 答: 访问程序存储器使用指令绝对寻址,指令相对寻址。指令跳转使用指令绝对寻址,指令相对寻址。

6.分析下面指令是否正确,并说明理由。 MOV R3,R7 错,两个操作数不能同时为工作寄存器 MOV B,@R2 对 DEC DPTR 错,不存在 MOV 20H.8,F0 错,位传送指令必须用C

PUSH DPTR CPL 36H 错,不存在 MOV PC,#0800H 错,PC不能访问

7.分析下面各组指令,区分它们的不同之处。 MOV A,30H 与 MOV A,#30H 前者表示:(30H)→A 后者表示:30H→A MOV A,R0 与 MOV A,@R0 前者表示:(R0)→A 后者表示:((R0))→A MOV A,@R1 与 MOVX A,@R1 前者表示:在片内数据存储器((R1))→A 后者表示:在片外数据存储器((R1))→A MOVX A,@R0 与 MOVX A,@DPTR 前者R0表示8位地址 后者DPTR表示16位地址 MOVX A,@DPTR 与 MOVC A,@A+DPTR 前者表示:((DPTR))→A 后者表示:((DPTR)+(A))→A

8.在MCS-51单片机的片内RAM中,已知(30H)=38H,(38H)=40H,(40H)=48H,(48H)=90H。请说明下面各是什么指令和寻址方式,以及每条指令执行后目的操作数的结果。 MOV A,40H ;数据传送,直接寻址,(A)=48H MOV R0,A ;数据传送,寄存器寻址,(R0)=48H MOV P1,#0FH ;数据传送,立即数寻址,(P1)=0FH MOV @R0,30H ;数据传送,直接寻址,(48H)=38H MOV DPTR,#1234H ;数据传送,立即数寻址,(DPTR)=1234H MOV 40H,30H ;数据传送,直接寻址,(40H)=38H MOV R0,38H ;数据传送,直接寻址,(R0)=40H MOV P0,R0 ;数据传送,直接寻址,(P0)=40H MOV 28H,#30H ;数据传送,立即数寻址,(28H)=30H MOV A,@R0 ;数据传送,寄存器间接寻址,(A)=38H

9.已知(A)=23H,(R1)=65H,(DPTR)=1FECH,片内RAM(65H)=70H, ROM(205CH)=64H。试分析下列各条指令执行后目标操作数的内容。 MOV A,@R1 ;(A)=70H MOVX @DPTR,A ;(1FECH)=70H MOVC A,@A+DPTR ;(A)=64H XCHD A,@R1 ;(A)=65H

10.已知(A)=76H,(R1)=76H,(B)=4,CY=1,片内RAM(76H)=0D0H,(80H)=6CH。试分析下列各条指令执行后目标操作数的内容和相应标志位的值。 ADD A,@R1 ;(A)=46H,CY=1 SUBB A,#75H ;(A)=0D0H,CY=1 MUL AB ;(A)=40H,(B)=03H DIV AB ;(A)=15H,(B)=01H

ANL 76H,#76H ;(76H)=50H ORL A,#0FH ;(A)=1FH XRL 80H,A ;(80H)=73H

11.已知(A)=83H,(R0)=17H,(17H)=34H,试分析当执行完下面程序段后累加器A、R0、17H单元的内容。 ANL A,#17H ;(A)=03H ORL 17H,A ;(17H)=37H XRL A,@R0 ;(A)=34H CPL A ;(A)=0CBH

12.阅读下面程序段,说明该段程序的功能。 MOV R0,#40H MOV R7,#10 CLR A LOOP: MOV @R0,A INC A INC R0

DJNZ R7,LOOP SJMP $

答:把0,1,2,3??数列送到40H开始的10个单元中。

13.阅读下面程序段,说明该段程序的功能。 MOV R0,#40H MOV A,R0 INC R0 ADD A,@R0 MOV 43H,A CLR A

ADDC A,#0 MOV 42H,A SJMP $

答:40H加41H单元的数,结果送42H:43H

14.阅读下面程序段,说明该段程序的功能。 MOV A,30H MOV B,#5 MUL AB ADD A,31H MOV 33H,A CLR A ADDC A,B MOV 32H,A

SJMP $

答:(30H)×5+(31H)→(32H:33H)

15.编写程序,用位处理指令实现“P1.4=P1.0∨(P1.1∧P1.2)∨P1.3”的逻辑功能。 MOV C,P1.1 ANL C,P1.2 ORL C,P1.0 ORL C,P1.3 MOV P1.3,C

16.编写程序,若累加器A的内容分别满足下列条件,则程序转到LABLE存储单元。设A中存放的的无符号数。

(1)A≥10; (2)A>10; (3)A≤10。 (1)

CJNE A,#10,NEXT LJMP LABLE NEXT:

JNC LABLE (2)

CJNE A,#10,NEXT LJMP NEXT2 NEXT:

JNC LABLE NEXT2: (3)

CJNE A,#10,NEXT LJMP LABLE NEXT: JC LABLE

17.编写程序,查找片内RAM的30H~50H单元中是否有55H这一数据,若有,则51H单元置为FFH;若未找到,则将51H单元清0。 MOV R0,29H NEXT: INC R0

CJNE R0,#51H,NEXT2 MOV 51H,#0FFH AJMP OVER NEXT2:

CJNE @R0,#55H,NEXT MOV 51H,#0 OVER:

18.编写程序,查找片内RAM的30H~50H单元中出现0的次数,并将查找的结果存入51H单元。 MOV R0,30H MOV 51H,#0 NEXT:

CJNE @R0,#00H,NEXT2 INC 51H NEXT2: INC R0

CJNE R0,#51H,NEXT

19.在片外RAM中有一个数据块,存有若干字符、数字,首地址为SOURCE要求将该数据块传送到片内RAM以DIST开始的区域,直到遇到字符“$”时结束($也要传送,它的ASCII码为24H)。 MOV DPTR,#SOURCE MOV R0,#DIST NEXT:

MOVX A,@DPTR MOV @R0,A INC DPTR INC R0

CINE A,#24H,NEXT

20.片内RAM的30H和31H单元中存放着一个16位的二进制数,高位在前,低位在后。编写程序对其求补,并存回原处。 CLR C MOV A,#0 SUBB A,31H MOV 31H,A MOV A,#0 SUBB A,30H MOV 30H,A

21.片内RAM中有两个4字节压缩的BCD码形式存放的十进制数,一个存放在30H~33H单元中,另一个存放在40H~43H单元中。编写程序将它们相加,结果的BCD码存放在30H~33H中。 CLR C

MOV R0,#30H MOV R1,#40H MOV R2,#4 NEXT:

MOV A,@R0 ADDC A,@R1 MOV @R0,A

sbit EXF2=T2CON^6; sbit TF2=T2CON^7; (3)

sbit T2=P1^0; sbit T2EX=P1^1; sbit ET2=EI^5; sbit PT2=IP^5; (4)

sbit P0_0=P0^0; sbit P0_1=P0^1; sbit P0_2=P0^2; sbit P0_3=P0^3; sbit P0_4=P0^4; sbit P0_5=P0^5; sbit P0_6=P0^6; sbit P0_7=P0^7; 19.编写一C51函数,把从键盘输入的5位十进制数数转换成一个无符号整型数(假设未超出整型数范围)。设从键盘输入的数存放在一无符号数组中,低位数为低下标元素。

unsigned char data key_buffer[5]; unsigned int trans_int(void) {

unsigned char data i; unsigned int data temp=0; for(i=0;i<5;i++) {

temp=temp*10+key_buffer[i]-0x30; }

return temp; }

20.编写一C51函数,把一整型数按十进制数将其各位分离,分离后放在一无符号数组中,便于显示。要求把低位数作为低下标元素。 unsigned char data shu[5]; void main(unsigned int x) {

unsigned int temp; unsigned char i; for(i=0;i<4;i++) {

shu[i]=temp; temp=temp/10;

}

shu[4]=temp;

}

21.编写一C51函数,使用专用指针,把片外数据存储器中从0x100开始的30个字节数据,传送到片内从0x40开始的区域中。 void main() {

unsigned char data i,*dpt; unsigned char xdata *xdpt; dpt=0x40; xdpt=0x100;

for(i=0;i<30;i++)

*(dpt+i)=*(xdpt+i); }

22.编写一C51程序,实现从P1口输出产生的流水灯,要求用汇编语言函数实现数据左移或右移。 #pragma src

#include void main() {

unsigned char temp,i; while(1) {

temp=0x55; P1=temp; delay();

#pragma asm MOV A,temp RR A

MOV temp,A

#pragma endasm

P1=temp; delay(); } }

23.某单片机系统的P2口接一数模转换器DAC0832输出模拟量,现在要求从DAC0832输出连续的三角波,实现的方法是从P2口连续输出按照三角波变化的数值,从0开始逐渐增大,到某一最大值后逐渐减小,直到0,然后再从0逐渐增大,一直这样输出。试编写一函数,使从P2口输出的值产生三角波,并且使三角波的周期和最大值通过入口参数能够改变。 #include #define DAC0832 XBYTE[0x7FFF]

void san(unsigned char max1,unsigned char zhou1) {

unsigned char i,j,max,zhou; max=max1; zhou=zhou1;

while(1) {

for(i=0;i<=max,i++) {

DAC0832=i;

for(j=0;j

}

for(i=max-1;i>0,i--) {

DAC0832=i;

for(j=0;j

}

}

24.在数字滤波中有一种叫做“中值滤波”技术,就是对采集的数据按照从大到小或者从小到大进行排序,然后取其中在中间位置的数作为采样值。试编写一函数,对存放在片内数据存储器中从0x50开始的20个单元的采样数据用冒泡法排序进行中值滤波,把得到的采样数据存放到0x4f单元中。 void midf() {

unsigned char data temp,i,j,*ptr,*ptr1; ptr=0x50;

ptr1=0x4f;

for(j=20;j>1,j--)

{

for(i=0;i

if(*(ptr+i)>*(ptr+i+1)) {

temp=*(ptr+i+1); *(ptr+i+1)=*(ptr+i); *(ptr+i)=temp;

}

} }

*ptr1=*(ptr+20/2); }

25.在数字滤波中有一种叫做“去极值平均滤波”技术,就是对采集的数据按照从大到小或者从小到大进行排序,然后去掉相同数目的极大值和极小值,对中间部分数据求算术平均值作为采样值。试编写一函数,对存放在片外数据存储器中从0x150开始的16个单元的采样数据,用选择法进行“去极值平均滤波”,把得到的采样数据存放到0x14f单元中。 void teaf() {

unsigned char xdata *ptr;

unsigned char data temp,i,j,*ptr1; ptr=0x150;

ptr1=0x4f;

for(j=16;j>1,j--)

{

for(i=0;i

if(*(ptr+i)>*(ptr+i+1)) {

temp=*(ptr+i+1); *(ptr+i+1)=*(ptr+i); *(ptr+i)=temp;

}

} }

temp=0;

for(i=0;i<16-2;i++)

temp=temp+*(ptr+i+1);

*ptr1=temp/(16-2); } 26.利用库函数_getkey编写一函数,实现从单片机串行口接收数据的C51程序,把接收的数据存放在片内数据存储器从0x40开始的区域,遇到回车符CR(ASCII码是0x0d)结束。 include void main() {

unsigned char data *dpt; unsigned char i=0,temp; dpt=0x40;

while(1) {

temp=_getchar(); if(temp==0x0d)

break;

*(dpt+i)=temp; i++; }

}

27.利用库函数scanf编写一函数,实现从单片机串行口接收数据的C51程序,把接收的数据存放在片外数据存储器从0x240开始的区域,遇到回车符CR(ASCII码是0x0d)结束。 include void main() {

unsigned char xdata *xdpt; unsigned char i=0,temp; xdpt=0x240;

while(1) {

scanf(“%c”,&temp); if(temp==0x0d)

break;

*(xdpt+i)=temp; i++; } } 28.利用库函数putchar编写一函数,实现从单片机串行口发送数据的C51程序,发送的数据存放在片内数据存储器从0x50开始的区域,遇到回车符CR(ASCII码是0x0d)结束。 include void main() {

unsigned char data *dpt; unsigned char i=0; dpt=0x50;

while(*(dpt+i)!=0x0d) {

putchar(*(dpt+i)); i++; } } 29.利用库函数printf编写一函数,实现从单片机串行口发送数据的C51程序,发送的数据存放在片外数据存储器从0x100开始的区域,遇到回车符CR(ASCII码是0x0d)结束。 include

本文来源:https://www.bwwdw.com/article/dxnt.html

Top