单片机应用技术c语言版第版王静霞_习题答案_第1页
单片机应用技术c语言版第版王静霞_习题答案_第2页
单片机应用技术c语言版第版王静霞_习题答案_第3页
单片机应用技术c语言版第版王静霞_习题答案_第4页
单片机应用技术c语言版第版王静霞_习题答案_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、/ 函数名: delay/ 函数功能:实现软件延时/ 形式参数:无符号整型变量/ 返回值:无void delay(unsigned int i)unsigned int k;for(k=0;ki;k+);void main()while(1)P1=0x00;delay(20000);P1=0xff;delay(20000);2)参考程序:习题 11.1 单项选择题( 1) A( 2) C ( 3) C1.2 填空题( 1)硬件系统、软件系统( 2)时钟电路、复位电路( 3) XTAL1、 XTAL2、 RESET、 EA( 4)晶振1.3 问答题什么是单片机它由哪几部分组成什么是单片机应用系统

2、答:单片微型计算机( Single Chip Microcomputer )简称单片机,是指集成在一个芯片上的微型计算机,它的各种功能部件,包括 CPU( Central Processing Unit ) 、存储器(memory) 、基本输入/ 输出 (Input/Output ,简称 I/O) 接口电路、定时 / 计数器和中断系统等,都制作在一块集成芯片上,构成一个完整的微型计算机。单片机应用系统是以单片机为核心,配以输入、输出、显示等外围接口电路和控制程序,能实现一种或多种功能的实用系统。1.4 上机操作题1)参考程序:#include / 包含头文件reg51.h ,定义了 51 单片

3、机的专用寄存器i ,控制空循环的循环次数/ 延时函数/ 主函数/调用延时函数,实际参数为20000/调用延时函数,实际参数为20000#include /包含头文件reg51.h ,定义了 51 单片机的专用寄存器/函数名:delay/函数功能:实现软件延时/形式参数:无符号整型变量/返回值:无void delay(unsigned int i)unsigned int k;for(k=0;ki;k+);void main()while(1)P1=0x55;delay(20000);P1=0xff;delay(20000);2.1单项选择题(1) C (2) A (3) A (4) Ai,控制

4、空循环的循环次数/延时函数/ 主函数/ 调用延时函数,实际参数为/ 调用延时函数,实际参数为习题2(5) A(6) D C(8) A2000020000(9) A (10) C2.2 填空题(1)外部程序存储器、外部数据存储器、内部程序存储器、内部数据存储器(2)程序存储器(3)工作寄存器组、位寻址区、用户 RAM(4) 1us、2us(5)按键复位、上电复位(6) 2、高2.3 回答题(1) P3 口的第二功能是什么答:P3 口各引脚的第二功能如下表。第一功能第二功能第二功能信号名称P3.0RXD串行数据接收P3.1TXD串行数据发送P3.2外部中断0申请P3.3外部中断1申请P3.4T0定

5、时/计数器0的外部输入P3.5T1定时/计数器1的外部输入P3.6外部RAM或外部I/O写选通P3.7外部RAM或外部I/O读选通(2)画出单片机时钟电路,并指出石英晶体和电容的取值范围。答:单片机时钟电路单片机时钟电路如下图。一般地,电容 C和C2取30 pF左右;晶体振荡器,简称晶振,频率范围是1.212 MHz晶体振荡频率越高,系统的时钟频率也越高,单片机的运行速度也就越快。在通常情况下,使用振荡频率为6 MHz或12 MHz的晶振。如果系统中使用了单片机的串行口通信,则一般采用振荡频率为11.0592 MHz的晶振。(3)什么是机器周期机器周期和晶振频率有何关系当晶振频率为6MHzM,

6、机器周期是多少答:51单片机采用定时控制方式,有固定的机器周期。规定一个机器周期的宽度为6个状态,即12个振荡脉冲周期,因此机器周期就是振荡脉冲的十二分频。当晶振频率为6MHz时,机器周期是2us。(4) 51单片机常用的复位方法有几种画电路图并说明其工作原理。答:2种,上电复位和按键复位。单片机常见的复位电路下图所示。(a)为上电复位电路。它利用电容充电来实现复位,在接电瞬间,RST端的电位与VCc相同,随着充电电流的减少,RST的电位逐渐下降。只要保证 RST为高电平的时间大于两个机器周期,便能正常复位。(b)为按键复位电路。该电路除具有上电复位功能外,还可以按图2.5 (b)中的RESE

7、T键实现复位,此时电源 已经两个电阻分压,在RST端产生一个复位高电平。图 1.23中的信号灯控制电路就采用按键复位电路。(5) 51单片机片内RAM勺组成是如何划分的各有什么功能答:8051的内部RA帜有256个单元,通常把这 256个单元按其功能划分为两部分:低128单元(单元地址0x000x7F)和高128单元(单元地址 0x800xFF)。片内RAM勺低128个单元用于存放程序执行过程中的各种变量和临时数据,称为 DATA区。内部RAM勺高128单元地 址为0x800xFF,是供给专用寄存器 SFR(Special Function Register ,也称为特殊功能寄存器)使用的。(

8、6) 51单片机有多少个特殊功能寄存器它们分布在什么地址范围答:51单片机有21个可寻址的专用寄存器,它们不连续地分布在片内RAM勺高128单元中,尽管其中还有许多空闲地址,但用户不能使用。另外还有一个不可寻址的专用寄存器,即程序计数器PQ它不占据RAM单元,在物理上是独立的。(7)简述程序状态寄存器 PSW唇位的含义,单片机如何确定和改变当前的工作寄存器组。答:程序状态字PS悭一个8位寄存器,用于存放程序运彳f中的各种状态信息。PSW勺各位定义如下表所示。位地 址0xD70xD60xD50xD40xD30xD20xD10xD0位名 称CYACF0RS1RS0OVF1PCY ( PSW.7 :

9、进位标志位。存放算术运算的进位标志。AC (PSW.6:辅助进位标志位。存放算术运算中低4位向高4位进位或借位。F0 (PSW.5:用户标志位。供用户定义的标志位,需要利用软件方法置位或复位。RS1和RS0 (PSW.4, PSW.3:工作寄存器组选择位。上电或复位后,RS1 RS0=0QOV (PSW.2:溢出标志位。存放带符号数加减运算的溢出位。F1 (PSWJ:保留未使用。P (PSW.0):奇偶标志位。存放累加器 ACC数据的二进制形式中1的个数的奇偶性。一般用于异步串行通信中的奇偶校 验。(8) C51编译器支持的存储器类型有哪些答:单片机的存储器结构包括 4个物理存储空间,C51编

10、译器对这4个物理存储空间都能支持。常见的C51编译器支持的存储器类型如下表所示。存储器类型描 述data直接访问内部数据存储器,允许最快访问(128 B)bdata可位寻址内部数据存储器,允许位与字节混合访问(16 B)idata间接访问内部数据存储器,允许访问整个内部地址空间(256 B)pdata“分页”外部数据存储器(256 B)xdata外部数据存储器(64 KB )code程序存彳i#器(64 KB)(9)当单片机外部扩展 RAMF口 ROM寸,P0 口和P2 口各起什么作用答:P0 口可以分时复用作为 8位数据总线和低8位地址线,P2 口作为高8位地址线(10)在单片机的C语言程序

11、设计中,如何使用SFR和可寻址位答:采用 sfr 和 sbit 来定义专用寄存器和位。2.4 上机操作题( 1)修改程序ex2_1.c ,使得蜂鸣器发出有变化的报警声。提示:修改延时参数,声音就会有改变。( 2)利用单片机控制蜂鸣器和发光二极管,设计一个声光报警系统。提示:增加一个LED发光二极管,采用一个I/O 口来控制,当报警时,发出声音的同时,灯也闪动( 3)利用单片机控制按键和发光二极管,设计一个单键控制单灯亮灭的系统。参考电路如下图:参考程序如下:/ 功能:单键控制单灯程序#include sbit P1_0=P1A0; /sbit P3_0=P3A0; /定义 P1.0 引脚名称为

12、P1_0/ 主函数定义 P3.0 引脚名称为P3_0void main()bit led; / 定义位变量ledP3_0=1;/P3.0 作为输入口,置 1led=P3_0; / 读 P3.0if(led=1) P1_0=1; /判断按键是否按下, 没有按下,灯熄灭if()led=0 P1_0=0; /按键按下,灯点亮( 4)利用单片机控制4 个按键和 4 个发光二极管,设计一个4 人抢答器,要求当有某一参赛者首先按下抢答开关时,相应的LED灯亮,此时抢答器不再接受其他输入信号,需按复位按键才能重新开始抢答。参考电路如下图。参考程序如下。/ 功能:实用 4 路抢答器程序#include sbi

13、t P3_0=P3A0; /sbit P3_1=P3A1; /sbit P3_2=P3A2; /sbit P3_3=P3A3; /定义P3.0引脚名称为P3_0定义P3.1引脚名称为P3_1定义P3.2引脚名称为P3_2定义P3.3引脚名称为P3_3void main()/ 主函数bit flag; / 定义位变量 flagwhile(!flag)if(!P3_0)P1=0xfe;flag=1;else if(!P3_1)P1=0xfd;flag=1;else if(!P3_2)P1=0xfb;flag=1;else if(!P3_3)P1=0xf7;flag=1;while(flag);习题

14、 33.1 单项选择题( I) C (2) A (3) A (4) D (5) D (6) D (7) A (8) B (9) C (10) A( II) void delay (unsigned int i) 、 delay 、 delay3.2 填空题 1) main (2) sbit FLAG=P3A1;(3) sfr (4)顺序、选择和循环( 5)表达式和分号( 6) if 、 switch( 7) do-while 语句、 while 语句( 8)无限次 9) 9) 10000( 10) unsigned char( 11)指定该变量在51 单片机硬件系统中所使用的存储区域,并在编译

15、时准确的定位。( 12)0 3.3 上机操作题( 1)感应灯控制系统设计。实现当照明灯感应到有人接近时自动开灯,当人离开后自动关灯的功能。提示:采用热释电红外传感器模块和发光二极管模拟电灯( 2)自动滑动门开关控制系统设计。实现当滑动玻璃门感应到有人接近时自动开门,当人离开后自动关门的功能。提示:采用热释电红外传感器模块和电机模拟自动开关门习题 44.1 单项选择题( 1) C( 2 ) A( 3) C(4) B(5) B ( 6) D ( 7) B(8) C(9) D(10) D(11) C4.2 填空题( 1) ledk delay();( 2)0 ( 3 )程序存储器4.3 在任务 10

16、 的图 4.1 中,如果直接将共阳极数码管换成共阴极数码管,能否正常显示为什么应采取什么措施答:disp不能正常显示。 因为共阳极数码管和共阴极数码管的显示码不同, 二者是反相关系。 修改程序, 或者将显示码数组 中的显示码换成共阴极显示码,或者在程序中增加取反操作即可。4.4 七段LED静态显示和动态显示在硬件连接上分别具有什么特点,实际设计时应如何选择使用答:静态显示是指使用数码管显示字符时,数码管的公共端恒定接地(共阴极)或5 V 电源(共阳极) 。将每个数码管的1.1 个段控制引脚分别与单片机的一个8 位 I/O 端口相连。只要I/O 端口有显示字型码输出,数码管就显示给定字符,并保持

17、不变, 直到 I/O 端口输出新的段码。 数码管动态显示电路通常是将所有数码管的 8 个显示段分别并联起来, 仅用一个并行 I/O 端口控制,称为“段选端” 。各位数码管的公共端,称为“位选端” ,由另一个I/O 端口控制。实际应用时,当显示位数少于2 位时,可以采用静态显示方式;当显示位数较多时,建议采用动态显示方式。4.5 LED 大屏幕显示一次能点亮多少行显示的原理是怎样的答:LED大屏幕显示一次能点亮1行,采用逐行点亮的方式。显示原理:先给第1 行送高电平(行高电平有效) ,同时给 8 列送该行显示码(列低电平有效) ;然后给第2 行送高电平,同时给8列送显示码,最后给第8行送高电平,

18、同时给8列显示码。每行点亮延时时间为约1 ms,第8行结束后再从第 1 行开始循环显示。利用视觉驻留现象,人们看到的就是一个稳定的字符。4.6 机械式按键组成的键盘,应如何消除按键抖动答:按键的机械抖动可采用硬件电路来消除,也可以采用软件方法进行去抖。软件去抖编程思路:在检测到有键按下时,先执行 10 ms 左右的延时程序,然后再重新检测该键是否仍然按下,以确认该键按下不是因抖动引起的。同理,在检测到该键释放时,也采用先延时再判断的方法消除抖动的影响。4.7 独立式按键和矩阵式按键分别具有什么特点适用于什么场合答:在单片机应用系统中,如果系统需要按键数量较少,一般采用独立式按键接口,每个按键单

19、独占用一根I/O 端口线,按键的工作不会影响其他I/O 端口线的状态,独立式按键的电路配置灵活,软件结构简单,但每个按键必须占用一根I/O端口线,因此,在按键较多时, I/O 端口线浪费较大,不宜采用。为了节约单片机硬件接口资源,当系统需要按键数量较多时,一般采用矩阵键盘接口方式。由 4 根行线和 4 根列线组成,例如:P0.0P0.3控制行线,P2.0P2.3控制列线,按键位于行、列线的交叉点上,且行线通过上拉电阻接到十5 V电源上,构成了一个 4X4 (16个按键)的矩阵式键盘。习题55.1 单项选择题( 1) C ( 2 ) A( 3 ) D ( 4) A ( 5) A( 6) B (

20、7) A ( 8) A ( 9) C( 10) A ( 11) C ( 12) C ( 13 ) C ( 14 ) D5.2 填空题( 1) T0、T1、方式寄存器 TMO序口控制寄存器 TCON (2) GATE=0( 3) 0x50( 4 )设置定时器的工作方式( 5)控制定时器的启动、停止、标识定时器的溢出和中断情况( 6)中断标志寄存器 TCON串行口控制寄存器SCON中断允许控制寄存器IE和中断优先级控制寄存器IP( 7)中断标志寄存器TCOtf口串行口控制寄存器SCON中断允许控制寄存器IE和中断优先级控制寄存器IP( 8)电平触发方式( 9)软件方法、硬件方法、硬软结合( 10)

21、 05.3 问答题( 1) 51 单片机定时/ 计数器的定时功能和计数功能有什么不同分别应用在什么场合答:T0 或 T1 用做计数器时,分别对从芯片引脚T0( P3.4 )或 T1( P3.5 )上输入的脉冲进行计数,外部脉冲的下降沿将触发计数,每输入一个脉冲,加法计数器加1 。计数器对外部输入信号的占空比没有特别的限制,但必须保证输入信号的高电平与低电平的持续时间都在一个机器周期以上。一般用于需要计数的场合,对时间没有要求。用做定时器时,对内部机器周期脉冲进行计数,由于机器周期是固定值,故计数值确定时,定时时间也随之确定。如果51单片机系统采用12MHz晶振,则计数周期为:T机器周期=1/(

22、12 X106 /12)=1 s,这是最短的定时周期。适当选择定时器 的初值可获取各种定时时间。一般用于对时间有要求的场合。(2)软件定时与硬件定时的原理有何异同答:软件定时是靠CPU运行空操作实现的,CPUE定时时不能进行其它操作,白白占用CPU时间。硬件定时是指采用单片机内部定时器实现定时,当定时器进行计数操作时,CPUW以进行其它操作。(3) 51单片机的定时/计数器是增1计数器还是减1计数器增1和减1计数器在计数和计算计数初值时有什么不同答:51单片机的定时/计数器是增1计数器。增1计数器是在初值基础上加 1计数,直到翻转;减1计数器是在初值基础上减 1计数,直到翻转。计算初值时,增1

23、计数的初值需要用最大计数值(模值)减去计数值;减1计数的初值就是计数值。(4)当定时/计数器在工作方式 1下,晶振频率为 6 MHz,请计算最短定时时间和最长定时时间各是多少答:工作方式1的计数模值是65536,机器周期2us,所以最短定时时间为 2us,最长定时时间为:2us*65536=130ms。(5) 51单片机定时/计数器四种工作方式的特点有哪些如何进行选择和设定答:工作方式0是13位定时计数器,工作方式1是16位定时计数器,工作方式2是初值自动重载的8位定时计数器, 工作方式3下只有T0可以设置为工作方式 3, T1设置为工作方式3后不工作。可根据应用场合和定时时间来确定工作方式,

24、在TMO匿存器中设定。(6)什么叫中断中断有什么特点答:中断是指通过硬件来改变 CPU的运行方向。计算机在执行程序的过程中,外部设备向CPU发出中断请求信号,要求CPU暂时中断当前程序的执行而转去执行相应的处理程序,待处理程序执行完毕后,再继续执行原来被中断的程序。这种 程序在执行过程中由于外界的原因而被中间打断的情况称为“中断”。中断特点:同步工作、实时处理、异常处理等。(7) 51单片机有哪几个中断源如何设定它们的优先级答:中断源有5个,分别为外部中断 0请求INT0、外部中断1请求而、T0溢出中断请求TFQ T1溢出中断请求TF1和 串行口中断请求RI或TI。51单片机有两个中断优先级:

25、高优先级和低优先级。每个中断源都可以通过设置中断优先级寄存器IP确定为高优先级中断或低优先级中断,实现二级嵌套。同一优先级别的中断源可能不止一个,因此,也需要进行优先权排队。同一优先级别的中断源采用自然优先级。中断优先级寄存器IP,用于锁存各中断源优先级控制位。IP中的每一位均可由软件来置 1或清零,1表示高优先级,0表示低优先级。(8)外部中断有哪两种触发方式如何选择和设定答:外部中断有电平触发方式和下降沿触发方式。由TCO附的IT位设定,例如:当IT1 = 0时,外部中断1控制为电平触发方式;当IT1 = 1时,外部中断1控制为边沿(下降沿)触发方式。(9)中断函数的定义形式是怎样的答:C

26、51编译器支持在C源程序中直接以函数形式编写中断服务程序。中断函数的定义形式如下:void 函数名() interrupt n其中n为中断类型号,C51编译器允许031个中断,n的取值范围为031。5.4 操作题(1)设计时间间隔为1 s的流水灯控制程序。参考程序如下:/功能:间隔显示时间为1秒的流水灯程序#include REG51.H/ 包含头文件REG51.H,定义了 MCS-5俾片机的特殊功能寄存器/ 函数名:delay1s/ 函数功能:用 T1 工作在方式1 下的 1 秒延时函数,采用查询方式实现/ 形式参数:无/ 返回值:无void delay1s()unsigned char i

27、;for(i=0;i0x14;i+)/设置 20次循环次数TH1=0x3c;/ 设置定时器初值为3CB0HTL1=0xb0;TR1=1;/ 启动 T1while(!TF1);/查询计数是否溢出,即定时 50ms寸间到,TF1=1TF1=0;50ms定时时间到,将T1溢出标志位TF1清零void main()/ 主函数unsigned char i,w;TMOD=0x10;/设置T1为工作方式1while(1)w=0x01;/显示码初值为 01Hfor(i=0;i8;i+)P1=w;/w取反后送P1 口,点亮相应LED丁w=1;/点亮灯的位置移动delay1s();/调用 1 秒延时函数(2)用

28、单片机控制8个LED发光二极管,要求8个发光二极管按照 BCD码格式循环显示0059,时间间隔为1 s。 提示:BCD (Binary Coded Decimal )码是用二进制数形式表示十进制数,例如十进制数45,其BCM 形式为0x45。BCD码只是一种表示形式,与其数值没有关系。BCD码用4位二进制数表示一位十进制数,这4位二进制数的权为 8421,所以BCM又称为8421码。用4位二进制数表示一个十进制数,例如十进制数 56、87和143的BCM表示形式如下:0101 0110( 56)1000 0111(87)0001 0100 0011( 143)答:参考程序如下:/功能:采用BC

29、D格式显示的0 59简易秒表程序#include void delay1s() /1 秒延时函数,参见任务 7 程序 ex4_1.cvoid main()/ 置 T1 为工作方式1unsigned char i, t;TMOD=0x10;while(1) for(i=0;i60;i+) t=(i/10)4)|(i%10);/将i转换为BCDmP1=t;/ 计数值取反后送P1 口显示delay1s();/ 调用 1 秒延时函数( 3)可控霓虹灯设计。系统包括 8个发光二极管,连接在P3.2 引脚的一个按键,通过按键改变霓虹灯的显示方式。要求正常情况下8 个霓虹灯依次顺序点亮,循环显示,时间间隔为

30、 1 s 。按键按下后8 个霓虹灯同时亮灭一次,时间间隔为0.5 s 。 (按键动作采用外部中断0 实现)答: 参考程序如下:/ 功能:可控信号灯程序#include / 函数名: delay0_5s/函数功能:用T0的方式1编制0.5秒延时程序,假定系统采用12MHz晶振,定/时器1、工作方式1定时50ms,再循环10次即可定时到0.5秒/ 形式参数:无void delay0_5s()unsigned char i;for(i=0;i0x0a;i+)TH0=0x3c;TL0=0xb0;TR0=1;while(!TF0); /TF0=0;/ 返回值:无/ 设置10 次循环次数/ 设置定时器初值

31、/ 启动T0查询计数是否溢出,即定时50ms 时间到, TF0=0/ 50ms 定时时间到,将定时器溢出标志位TF0 清零/ 函数名: delay_t/函数功能:实现 0.5秒128秒延时/ 形式参数: unsigned char t;/延时时间为0.5秒xt/ 返回值:无void delay_t(unsigned char t)unsigned char i;for(i=0;it;i+)delay0_5s();/ 函数名: int_0函数功能:外部中断0中断函数,当CPU向应外部中断0的中断请求时,自动执行该/函数,实现八个信号灯闪烁/ 形式参数:无/ 返回值:无void int_0() i

32、nterrupt 0 /外部中断 0 的中断号为0P1=0x00;/熄灭八个信号灯delay0_5s();/调用 0.5 秒延时函数P1=0xff;/点亮八个信号灯delay0_5s();/调用 0.5 秒延时函数/ 主函数void main() unsigned char i,w;EA=1;/打开中断总允许位EX0=1;IT0=1;/打开外部中断0 允许位/设置外部中断为边沿(下降沿)触发方式TMOD=0x01;/设置 T0 为工作方式1while(1)/显示码初值为01Hw=0x01;for(i=0;i8;i+)P1=w;w=1;/ w取反后送P1 口,点亮相应/ 点亮灯的位置移动LED丁

33、delay_t(2);/ 调用延时函数 delay_t()2 ,延时 1 秒6.1单项选择题1) A9) C2) B ( 3) D10) A (11)4)C ( 5) B12) D( 6) C13) A7)8) C6.2问答题1)答:什么是串行异步通信有哪几种帧格式在异步通信中, 数据通常是以字符为单位组成字符帧传送的。字符帧由发送端一帧一帧地发送, 每一帧数据是低位在前, 高位在后, 通过传输线由接收端一帧一帧地接收。 发送端和接收端分别使用各自独立的时钟来控制数据的发送和接收, 这两个时钟彼此独立,互不同步。在串行通信中,两相邻字符帧之间可以没有空闲位,也可以有若干空闲位,这由用户来决定。

34、( 2)定时器 T1 做串行口波特率发生器时,为什么采用工作方式2答:实际上,当定时器T1 做波特率发生器使用时,通常是工作在定时器的模式2 下,即作为一个自动重装载的 8 位定时器, TL1 做计数用,自动重装载的值在 TH1 内。7.3 编程题要求4位LED每隔1 s交替显示“1234”和“5678”(1)利用串行口设计 4位静态LED显示,画出电路图并编写程序,参考电路在教材第207页图6.16的基础之上再添加两片74LS164和两个数码管即可参考程序如下:#include reg51.h / 包含头文件reg51.h ,定义 51 单片机的专用寄存器unsigned char da口=

35、0xF9,0xA4,0xB0,0x99; /定义 1 4 的共阳极字型显示码unsigned char da1=0x92,0x82,0x0F8,0x80; /定义 5 8 的共阳极字型void delay1s()unsigned char i;for(i=0;i0x20;i+)TH0=0x3c;TL0=0xb0;TR0=1;while(!TF0); /TF0=0; main() unsigned char i;P1=0xff;SCON=0x00;TMOD=0x01; while(1)for (i=0;i4;i+) SBUF=dai; TI=0;while(!TI);delay1s();for

36、(i=0;i4;i+)SBUF=da1i;TI=0;while(!TI);/ 设置 20 次循环次数/ 设置定时器初值/ 启动 T0查询计数是否溢出,即定时50ms 时间到, TF0=0/ 50ms定时时间到,将定时器溢出标志位TF0清零/P1.0 置 1,允许串行移位/ 设串行口方式0/ 设置 T0 为工作方式1/ 送显示数据1234/ 等待发送完毕/ 送显示数据5678/ 等待发送完毕(2)编程实现甲乙两个单片机进行点对点通信,甲机每隔 1 s发送一次 A”字符,乙机接“到以后,在LCD上能够显示出来。参考电路图略。参考程序如下:甲机发送程序:/ 功能:甲机发送数据程序,采用查询方式实现#

37、include /void main()unsigned char i;TMOD=0x20; /TL1=0xf4;/TH1=0xf4;TR1=1;while(1)SCON=0x40; /SBUF=0x41; /while(TI=0); /TI=0;/delay1s(); /1乙机接收程序略。包含头文件reg51.h ,定义 51 单片机的专用寄存器/ 主函数定时器 T1 工作于方式2波特率为 2400bps定义串行口工作于方式1发送 A查询等待发送是否完成发送完成, TI 由软件清 0秒延时函数参见7.3(1) 题(3)编写一个实用的串行通信测试软件,其功能为:将PC机键盘的输入数据发送给单片

38、机,单片机收到PC机发来的数据后,回送同一数据给 PC 机,并在屏幕上显示出来。只要屏幕上显示的字符与所键入的字符相同,说明二者之间的 通信正常。通信协议:第1字节,最高位(MSB为1 ,为第1字节标志;第2字节,MS明0,为非第1字节标志,依次类推,最后 1 字节为前几字节后7 位的异或校验和。单片机串行口工作在方式1 ,晶振为 11.0592 MHz ,波特率为 4800 bps 。通信程序略。题77.1 单项选择题( 1) D ( 2) A( 3) C ( 4 ) D( 5) A7.2 填空题( 1)模拟,数字,数字,模拟( 2)分辨率、建立时间7.3 问答题( 1)判断 A/D 转换是

39、否结束,一般可采用几种方式每种方式有何特点答:查询方式,CPUS过查询转换结束标志位确认转换结束后,再执行后面的操作,占用CPU寸间;中断方式,转换结束后向CPU申请中断,CPUfe中断服务函数中读取转换值,不占用CPU寸间;延时方式,如果知道 A/D转换时间,可以在转换开始后直接延时超过该时间的时间,占用CPU时间7.4 应用题( 1)设计一个锯齿波发生器系统。提示:程序ex7_3.c 中修改数组 sin 据即可。(2) EEPRO总片AT24C02采用的也是I2C总线接口,请设计 51单片机扩展EEPROMU软硬件系统提示:请查阅 AT24C02资料,参考电路(AT24C0Q/功能:EEP

40、ROM写程序,从AT24C0缶勺4个连续存储单元中读出4个字节的数据,然后将4/个新的数值写入AT24C0的对应4个存储单元中,再重新读出。#include #include /*#define AddWr 0xa0#define AddRd 0xa1sbit SDA= P3A4;sbit SCL= P3A3;bit ack_bit;/*/_nop_() 函数所在的头文件位定义及预定义*/ 器件地址选择及写数据地址0xa0/ 器件地址选择及读数据地址0xa1/ 串行数据输入 / 输出位定义/ 串行时钟位定义/ 应答标志函数声明 */ 延时函数声明/ 开始函数/ 停止函数/ 应答函数/ 反向应答

41、函数/ 串行输出数据函数/ 串行输入数据函数void mDelay(unsigned char ms);void Start(void);void Stop(void);void Ack(void);void NoAck(void);void Shout(unsigned char Data); unsigned char Shin(void);void WrByte(unsigned char Data,unsigned char Address,unsigned char Num);/ 写字节函数void RdRadom(unsigned char Data,unsigned char A

42、ddress,unsigned char Num);/ 随机地址读函数/*主函数 */unsigned char R1data4= 0,0,0,0;unsigned char R2data4= 0,0,0,0;unsigned char Wdata4=1,2,3,4;RdRadom(R1data,4,4);WrByte(Wdata,4,4);mDelay(20);RdRadom(R2data,4,4);/*void main()/ 初始化读数据数组1 为全0/ 初始化读数据数组2 为全0/ 初始化写数据数组/读AT24C01中的4个字节数据到读数据数组 1/ 将初始化后的数值写入 AT24C0

43、1/ 重新读出写入的数据到读数据数组 2写字节 */ 函数名: WrByte/函数功能:向AT24C*器件的指定地址按字节连续写入数据/ 形式参数:待写入的数据Data ,起始地址 Address ,待写入的字节数Num/ 返回值:返回为 0表示操作成功,否则操作有误void WrByte(unsigned char Data,unsigned char Address,unsigned char Num) unsigned char i;unsigned char *PData;PData=Data;for(i=0;iNum;i+)Start();Shout(AddWr);Ack();Sho

44、ut(Address+i);Ack();Shout(*(PData+i);Ack();Stop();mDelay(20);/连续写入Numt字节数据/ 发送启动信号/ 发送写操作器件地址AddWr, 0xa0/接收AC侬答/ 发送地址/接收AC侬答/ 发送待写入的数据/接收AC侬答/ 发送停止信号/ 等待内定时写入周期结束/*随机地址读 */ 函数名: RdRadom/函数功能:从AT24C*器件的指定地址按字节读入数据/ 形式参数:起始地址 Address ,待读入的字节数Num/ 返回值:读出的字节放入 data ,如果操作成功返回为0,否则操作有误 void RdRadom(unsign

45、ed char Data,unsigned char Address,unsigned char Num)unsigned char i;unsigned char *PData;PData=Data;for(i=0;iNum;i+)Start();/ 开始Shout(AddWr);/ 发送写操作器件地址 AddWrAck();shout(Address+i);/ 发送字节地址Ack();Start();/ 开始shout(AddRd);/ 发送读操作器件地址 AddRdAck();*(PData+i)=shin();/ 调用读数据函数SCL=0;NoAck();/ 反向应答Stop();/

46、停止/*开始函数 */ 函数名: Start/函数功能:发送STARTS态,定义为当SC西高时SDAA高至ij低/ 形式参数:无/返回值:返回时SCL, SDAJ低void Start(void) SDA=1;/ 升高SDASCL=1;/ 升高SCL_nop_();_nop_();_nop_();_nop_();/ 保持数据建立延迟及周期延迟SDA=0;/ 降低SDA_nop_();_nop_();_nop_();_nop_();保持 SDAM氐,保持时间 hold delaySCL=0;/ 降低SCL/*停止函数 */ 函数名: Stop/函数功能:发送STO献态,定义为当SC西高时SDAM氐变高/ 形式参数:无/返回值:返回时SCL, SD的高void Stop(void)SDA=0;_nop_();_nop_();/保持SCLM氐及数据稳定SCL=1;_nop_();_nop_();_nop_();_nop_();/ 保持建立延迟SDA=1;_nop_();_nop_();_nop_(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论