版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章思考和练习解答1.1什麽是单片机?答:参阅教材书P.1。1.2单片机应用的主要领域有哪些?试举出10个以上的应用实例。答:参阅教材书任务1.11.380C51共有几个8位并行I/O口?各有什么功能?其中P3口的第二功能是什么?答:参阅教材书P.21。1.4试述80C51存储空间结构,各有什么功能?答:参阅教材书P.21~P.22。80C51存储空间配置如图2-1所示。图图2-180C51存储空间配置图(MOV指令操作域)(MOVX指令操作域)外部RAM(64KB)寄存器(21个)内部RAM(128B)RAM地址空间FFFFH0000H…FFH80H7FH00H……ROM地址空间(MOVC指令操作域)内部ROM(4KB)=1外部ROM(4KB)=0外部ROM(60KB)FFFFH1000H0FFFH0000H……0FFFH0000H…从组织结构上可以分为3个不同的存储空间,分别是:⑴64KB程序存储器(ROM),包括片内ROM和片外ROM;⑵64KB外部数据存储器(称为外RAM);⑶256B(包括特殊功能寄存器)内部数据存储器(称为内RAM)。3个不同的存储空间用不同的指令和控制信号实现读、写功能操作:⑴ROM空间用MOVC指令实现只读功能操作,用信号选通读外ROM。⑵外RAM空间用MOVX指令实现读写功能操作,用信号选通读外RAM,用信号选通写外RAM。⑶内RAM(包括特殊功能寄存器)用MOV指令实现读、写功能操作。1.580C51内RAM的组成是如何划分的,各有什么功能?答:从广义上讲,80C51内RAM(128B)和特殊功能寄存器(128B)均属于片内RAM空间,读写指令均用MOV指令。但为加以区别,内RAM通常指00H~7FH的低128B空间。80C51内RAM可以分成三个物理空间:工作寄存器区、位寻址区和数据缓冲区。参阅教材书P.22。1.6简述程序状态字寄存器PSW各位定义名、位编号和功能作用。答:参见教材书P.24。1.7在计算机中为什么要用二进制数和十六进制数?答:参阅教材书P.34。1.8在8位计算机中,数的正负号如何表示?答:在计算机中,数的正负在最高位分别用“0”和“1”表示。对于8位有符号数,微型计算机中约定,最高位D7表示正负号,其他7位表示数值,D7=1表示负数,D7=0表示正数。1.9试在KeilμVsion创建一个新项目key_ctr1,设置单片机工作频率fOSC=6MHz,需生成可执行Hex文件,输入如下源程序,并添加到目标项目组,存盘。答:参阅教材书任务2.1、任务2.2。1.10试重新打开题1.9创建项目key_ctr1,编译链接调试,并用全速运行、单步结合过程单步运行和断点运行3种操作方法,观测运行过程和结果(提示:全速运行时,为便于观测,调用延时子函数delay1实参可修改为110000)。答:参阅教材书任务2.3。1.11试在已经画好的图1-30所示ProteusISIS虚拟电路中,装入题1.9调试后自动生成的Hex文件,并仿真运行,观测运行过程和结果。答:参阅教材书任务3.2、任务3.3。第2章思考和练习解答参阅本书P.34。2.1C51编程与80C51汇编语言相比,主要有什麽优势?答:C51编程与80C51汇编语言相比,主要的优势是编程相对方便。具体如下:=1\*GB2⑴C51软件编程不需过多关注具体的存储单元。用汇编语言编程,几乎每一条指令(除NOP指令)操作都与具体的存储单元有关,80C51单片机的片内存储空间容量有限,编程之初即需安排好片内存储单元的用途,且一般不能重复使用。当一些应用项目较大时,片内存储单元有可能捉襟见肘,稍有不慎就将出错。因此,编程时,不但要注意用哪一条指令正确操作,而且要注意指令在哪一个存储单元操作,编程相对复杂。而C51编程能自动完成变量存储单元的分配和使用,且对函数内局部变量占用的存储单元,仅在调用时临时分配,使用完毕即行释放,大大提高了片内有限存储空间的利用效率。使用者只需专注于软件编程,不需过多关注具体的存储单元及其操作指令。因此,编程相对方便。=2\*GB2⑵便于实现各种复杂的运算和程序。C语言有丰富且功能强大的运算符,能以简单的语句方便地实现各种复杂的运算和程序。相比之下,汇编语言要实现较复杂的运算和程序,就比较困难。例如,双字节的乘除法,汇编语言要用许多条指令操作才能完成;而C51只需一条语句便能实现。又例如,循环、查表和散转等程序,C51语句实现起来也相对简单方便。=3\*GB2⑶可方便地调用各已有程序模块。已有程序模块包括C51编译器中丰富的库函数、用户自编的常用接口芯片功能函数和以前已开发项目中的功能函数。读者可能会说,汇编程序不也一样可以调用吗?不一样。汇编程序调用时,涉及到模块中具体的存储单元,这些存储单元很可能与主调用程序有重复,会引起冲突而出错。而C51程序函数中的变量一般为局部变量,主函数调用前不占用存储单元,仅在调用时由C51编译器根据空余情况临时分配,使用完毕即行释放,因而一般不会发生冲突而出错。因此,C51程序可方便地调用各已有程序模块,减少重复劳动,大大提高编程效率。=4\*GB2⑷编译生成的代码效率比汇编语言低一些;实时时效不如汇编语言快捷;一条C语言指令编译后,会转换成很多机器码,占用单片机片内资源较多。2.2C51基本数据类型有哪几种?其数据长度为多少?答:参阅教材书基础知识4.1,图2-32.3C51标识符命名有何要求?答:在C51程序中,数据、变量和函数等常用标识符表示。实际上,标识符就是一个代号或名字。C51规定:=1\*GB2⑴标识符只能由字母、数字和下划线三种字符组成,且须以字母或下划线开头。=2\*GB2⑵标识符不能与“关键词”同名。=3\*GB2⑶英文字母区分大小写。即标识符中的英文字母大小写不能通用。2.4怎样理解变量的存储器类型和编译模式?答:存储器类型和编译模式是确定变量存放在那一存储区域,不同的存储区域与访问速度有关。存储器类型是在变量定义时确定,而未定义存储器类型的变量由编译模式默认。存储种类与变量存放在那一存储区域基本无关(除寄存器类变量),与变量值的生存期和作用范围有关。中、小型程序一般可采用默认的存储种类auto。变量的存储种类与变量的存储器类型、编译模式是两个完全不同的概念,不能混淆。2.5为什么变量要尽量使用无符号字符型格式?答:C51变量的基本数据类型主要有字符型char、整型int和长整型long,又可分别分为有符号signed和无符号unsigned。80C51是8位机,本身并不支持有符号运算。若变量使用有符号格式,C51编译器要进行符号位检测并需调用库函数,生成的代码比无符号时长得多,占用的存储空间会变大,程序运行速度会变慢,出错的机会也会增多。80C51单片机主要用于实时控制,变量一般为8bit无符号格式,16bit较少,有符号和有小数点的数值计算也很少。因此,在已知变量长度和正整数的情况下,应尽量采用无符号格式:unsignedchar。2.6为什么变量要尽量使用局部变量?答:与80C51汇编语言相比,C51编程的突出优点是能自动完成变量存储单元的分配和使用,对函数内局部变量占用的存储单元,仅在调用时临时分配,使用完毕即行释放,大大提高了片内有限存储空间的利用效率。使用者只需专注于软件编程,不需过多关注具体的存储单元及其操作指令。因此,编程相对方便。使用全局变量的缺点:一是始终占用一个固定的存储单元,降低了内部存储单元的利用率;二是降低了函数的通用性。若函数涉及某一全局变量,该函数移植到其他文件时需同时将全局变量一起移植。否则,若全局变量名与其他文件中的变量同名,就会出现问题。三是过多使用全局变量,降低了程序的清晰度。若程序较大,人们较难清晰地判断程序执行过程中每个瞬间全局变量的变化状况,易出错。因此,应尽量减少全局变量的使用,能不用就尽量不用。2.7for循环语句括号内3个表达式分别表示什麽含义?能否缺位?答:第一个表达式是循环变量初值,第二个表达式是循环终止条件,第三个表达式是循环变量更新。3个表达式之间必须用分号“;”分隔,允许有一个或多个缺位。2.8while(1)和for(;;)表示什麽含义?答:while(1)和for(;;)均表示一个循环条件始终满足的无限循环。若后面有循环体语句,则反复无限执行循环体语句;若后面无循环体语句,则表示程序在原地踏步。2.9什麽是数组?如何定义和表示?答:数组是一组具有相同类型数据的有序集合。例如:inta[10]={10,11,22,33,44,55,66,77,88,99};上式表示:数组名为a,数组内的数据类型为int,元素个数(也称为数组长度,即数组内数据的个数)有10个。10个数组元素分别为:a[0]=10,a[1]=11,a[2]=22,a[3]=33,a[4]=44,a[5]=55,a[6]=66,a[7]=77,a[8]=88,a[9]=99。需要注意的是,数组定义时,方括号内是数组元素个数;数组元素引用时,方括号内是数组元素的序号。而且,数组元素序号是从0开始编号的。因此,上述数组a[10]中没有a[10]这个数组元素,其最后一个数组元素是a[9]。2.10函数参数传递,值传递与地址传递有什麽不同?答:函数的实参传递给形参,称为值传递。值传递是单向的,即不会影响主调用函数中实参值的变化。指针变量或数组作为实参传递给形参时,是将一个变量的地址传送到另一个函数中去,称为地址传递,其结果具有双向性。若在被调用函数中该地址存储单元中的内容发生了变化,在调用结束后这些变化将被保留下来,即其结果会被返回到主调用函数。2.11已知双键控3灯电路如图2-11所示,要求实现:=1\*GB3①S0单独按下,红灯亮,其余灯灭;=2\*GB3②S1单独按下,绿灯亮,其余灯灭;=3\*GB3③S0、S1均未按下,黄灯亮,其余灯灭;=4\*GB3④S0、S1均按下,红绿黄灯全亮。试按任务4.1中3种形式编写C51程序,画出ProteusISIS虚拟电路,并仿真调试。解:=1\*GB2⑴if-else语句=2\*GB2⑵if语句嵌套=3\*GB2⑶switch语句2.12求:sum=1+3+5+…+99。试用“while循环”编写、输入源程序并调试运行。解:2.13求:sum=2+4+6+…+100。试用“do-while循环”编写、输入源程序并调试运行。解:2.14求:sum=1!+2!+…+10!。试用“for循环”编写、输入源程序并调试运行。解:2.15电路如图2-5所示,按以下要求亮灯循环,间隔约1秒,试编写程序,并仿真调试。=1\*GB3①从两边到中心依次点亮,每次增加2个,直至全亮;=2\*GB3②从两边到中心依次暗灭,每次减少2个,直至全暗;=3\*GB3③重复上述过程,不断循环重复。解:2.16电路和亮灯循环同上题,要求用指针指向并输出数组元素,试编写程序,并仿真调试。=1\*GB3①从两边到中心依次点亮,每次增加2个,直至全亮;=2\*GB3②从两边到中心依次暗灭,每次减少2个,直至全暗;=3\*GB3③重复上述过程,不断循环重复。解:2.17电路如图2-5所示,按以下要求亮灯循环,间隔约0.5秒,试编写程序,并仿真调试。=1\*GB3①从上至下依次点亮,点亮灯先闪烁3次,后保持点亮,直至全亮;=2\*GB3②全亮全暗闪烁3次;=3\*GB3③重复上述过程,不断循环重复。解:2.18电路如图2-5所示,按以下要求亮灯循环,间隔约0.5秒,试编写程序,并仿真调试。=1\*GB3①全亮,保持2秒;=2\*GB3②从上至下依次暗灭,暗灭灯先闪烁3次,后保持暗灭,直至全暗;=3\*GB3③全暗,保持2秒;=4\*GB3④重复上述过程,不断循环重复。解:第3章思考和练习解答3.1什么叫中断?为什么要设置中断?答:CPU暂时中止其正在执行的程序,转去执行请求中断的那个外设或事件的服务程序,等处理完毕后再返回执行原来中止的程序,叫做中断。设置中断的优点和功能:=1\*GB2⑴可以提高CPU工作效率,CPU不必花费大量时间等待和查询外设工作。=2\*GB2⑵具有实时处理功能,对实时控制系统中的各种参数和状态做出快速响应、及时处理。=3\*GB2⑶具有故障处理功能,在掉电中断服务程序中将需要保存的数据和信息及时转移到具有备用电源的存储器中保护起来,待电源正常时再恢复。=4\*GB2⑷实现分时操作,控制多个外设同时工作。此外,中断系统还能用于程序调试、多机连接等方面。因此,中断系统是计算机中重要的组成部分。可以说,只有有了中断系统后,计算机才能比原来无中断系统的早期计算机演绎出多姿多彩的功能。3.280C51有几个中断源?答:参阅教材书P.85。增强型80C51单片机,例如,80C52系列单片机增加了一个定时/计数器,有6个中断源。3.3涉及80C51单片机中断控制的有哪几个特殊功能寄存器?各有什么作用?答:参阅教材书P.85、P.86、P.87。3.480C51中断优先控制,有什么基本原则?答:参阅教材书P.90。3.5中断初始化包括哪些内容?答:中断初始化内容包括:设置堆栈指针SP、定义中断优先级、定义外中断触发方式、开放中断和中断发生前主程序应完成的操作内容。3.680C51定时/计数器在什么情况下是定时器?什么情况下是计数器?答:80C51定时/计数器归根到底是一个计数器,基本功能是加1。对外部事件脉冲(T0必须从P3.4输入、T1必须从P3.5输入)计数,是计数器;对片内机周脉冲计数,是定时器。因为片内机周脉冲频率是固定的,是fOSC的1/12。若fOSC=12MHz,1机周为1s;若fOSC=6MHz,1机周为2s,机周脉冲时间乘以机周数就是定时时间。3.780C51定时/计数器有哪几种工作方式?各有什麽特点?答:80C51定时/计数器有四种工作方式,由TMOD中M1M0的状态确定。①方式0是13位计数器,最大计数值213=8192,计数范围比方式1小,计算定时初值比较麻烦,容易出错。②方式1是16位计数器,最大计数值为216=65536,计数范围大,适用于定时范围较大的应用场合。=3\*GB3③方式2是8位计数器,最大计数值为28=256,缺点是计数范围小,优点是定时初值可自动恢复,适用于需要重复定时,而定时范围不大的应用场合。=4\*GB3④方式3是8位计数器,仅适用于T0,T1无方式3。T0方式3时,被拆成二个独立的8位计数器TH0、TL0:TL0使用T0原有的控制寄存器资源组成一个8位的定时/计数器;TH0借用T1的TF1、TR1,只能对机内机周脉冲计数,组成另一个8位定时器。T0方式3时通常T1方式2用作串行口波特率发生器。3.880C51定时/计数器,当fOSC=6MHz和fOSC=12MHz时,最大定时各为多少?答:fOSC=6MHz时,最大定时131.072ms(方式1);fOSC=12MHz时,最大定时65.536ms(方式1)。3.9定时/计数器初始化应设置哪些参数?答:⑴设置TMOD。TMOD用于选择定时器或计数器、选择T0或T1、选择工作方式、选择门控位是否参与定时/计数器控制,应根据程序要求,合理选择。一般来讲,定时时间长,用方式1(尽量不用方式0);定时时间短(≤255机周)且需重复使用自动恢复定时初值,用方式2;串行通信波特率,用T1方式2。⑵设置定时/计数器定时初值:T初值=2N-其中,N与工作方式有关。方式0时,N=13;方式1时,N=16;方式2时,N=8;方式3时,N=8。⑶若定时/计数器采用中断方式,应设置中断参数:堆栈指针SP、中断允许控制IE、中断优先级控制IP以及安排好等待中断或中断发生前主程序应完成的操作内容。=4\*GB2⑷最后,启动定时/计数器开始运行。3.10已知P1.0端口接一个发光二极管,要求定时控制该发光二极管闪烁(亮暗各0.5秒)。解:可设置T0工作方式1,定时50ms,计数10次为0.5秒。定时初值计算:T0初值=216-50000s/1s=65536–50000=15536=3CB0H3.11已知fOSC=12MHZ,要求在80C51P1.0、P1.1、P1.2和P1.3引脚分别输出周期为500s、1ms、5ms和10ms的脉冲方波,试编制程序,画出ProteusISIS虚拟电路,并仿真调试。解:采用T1工作方式2,定时250s,正好是500s方波脉宽,再对250s计数,可得1ms、5ms和10ms的方波脉宽,计数值分别为2、10和20。定时初值计算:T1初值=28-250s/1s=256–250=6。因此,TH1=TL1=06HC51程序如下:KeilC51软件调试:编译(汇编程序扩展名用.asm,C51程序扩展名用.c)连接并进入调试状态后,打开P1对话窗口,全速运行,可看到P1对话窗口中的P1.0~P1.3端口状态不断跳变,从“√”到空白,再从空白到“√”,适当加大定时脉冲宽度,可更清晰观察。3.12已知fOSC=6MHz,要求80C51P1.7输出如图3-14所示连续矩形脉冲。40m40ms 360ms图3-14连续矩形脉冲波解:根据题目要求,设将T0用作定时器方式1,定时40ms。TMOD=00000001BT0初值=216-40000s/2s=65536–20000=45536=B1E0HC51编程如下:3.13乐曲播放电路如图3-5所示,世上只有妈妈好曲谱如图3-15所示,设fOSC=12MHz,试编制该歌曲程序,并仿真调试。图图3-15世上只有妈妈好歌谱 解:分析任务9.1程序,不难看到,只要编制音符序号数组s[]和音符节拍长度数组L[],同时修改音符节拍循环的中止条件(音符总数),即可实现播放新的乐曲。全速运行后,鼠标左键单击K0(不锁定),可听到播放世上只有妈妈好歌。播完后,再次单击K0,再次播放。C51编程如下:第4章思考和练习解答4.1什么叫串行通信和并行通信?各有什么特点?答:通信的基本方式可分为并行通信和串行通信:并行通信是数据的每位同时发送或同时接收;串行通信是数据的各位依次逐位发送或接收。8位数据并行传送,至少需要8条数据线和一条公共线,有时还需要状态、应答等控制线。长距离传送时,价格较贵且不方便,优点是传送速度快。串行通信只需要一到两根数据线,长距离传送时,比较經济,但由于每次只能传送一位,传送速度较慢,随着通信信号频率的提高,传送速度较慢的矛盾已逐渐缓解。4.2串行缓冲寄存器SBUF有什么作用?简述串行口接收和发送数据的过程。答:串行缓冲寄存器SBUF有两个:一个是串行发送缓冲寄存器,另一个是串行接收缓冲寄存器,用同一特殊功能寄存器名SBUF和同一单元地址99H。接收缓冲寄存器还具有双缓冲结构,以避免在数据接收过程中出现帧重叠错误。在完成串行初始化后,发送时只需将发送数据输入SBUF,CPU将自动启动和完成串行数据的发送;接收时CPU将自动把接收到的数据存入SBUF,用户只需从SBUF中读取接收数据。4.3如何判断串行发送和接收一帧数据完毕?答:串行发送一帧数据完毕,CPU会将串行控制寄存器SCON中的发送中断标志TI自动置“1”,用户可软件查询TI位标志,也可以请求中断。串行接收一帧数据完毕,CPU会将串行控制寄存器SCON中的接收中断标志RI自动置“1”,用户可软件查询RI位标志,也可以请求中断。需要说明的是,TI/RI必须由软件清0。4.4什么叫波特率?串行通信对波特率有什么基本要求?80C51单片机串行通信4种工作方式的波特率有什么不同?答:波特率是串行通信传输数据的速率。定义为每秒传输的数据位数,即:1波特=1位/秒(1bps)串行通信对波特率的基本要求是互相通信的甲乙双方必须具有相同的波特率。80C51单片机串行通信4种工作方式的波特率:方式0波特率固定为fOSC/12;方式1波特率可变:T1溢出率/n(n=32或16);方式2波特率固定:fOSC/n(n=64或32);方式3波特率可变:T1溢出率/n(n=32或16)。4.5为什么80C51单片机串行通信时常采用11.0592MHz晶振?答:采用11.0592MHz晶振,能得到波特率1200、2400、4800、9600、…等规范整数值。因为若采用晶振12MHz和6MHz等整数值,按80C51计算T1定时初值的公式,反而不是一个规范整数值,双方通信时会产生波特率误差而影响串行通信的同步性能。4.6I2C总线只有二根连线(数据线和时钟线),如何识别扩展器件的地址?又如何识别相同器件的地址?答:具有I2C总线结构的器件在器件出厂时已经给定了这类器件的地址编码。另外,I2C总线器件还有3位引脚地址A2A1A0,可用硬件连接方式对3位引脚接VCC或接地,形成相同器件地址数据,如教材书图4-20所示。4.7为什么80C51单片机I2C总线串行扩展只能用于单主系统,且必须虚拟扩展?答:由于80C51芯片内部无I2C总线接口,因此只能采用虚拟I2C总线方式扩展,并且只能用于单主系统,即80C51只能作为I2C总线主器件,不能作为从器件,从器件必须具有I2C总线接口,因此,80C51单片机不能用于多主系统。4.8I2C总线数据传送中,有哪些基本信号?一次完整的数据传送过程应包括哪些信号?答:有4个基本信号:起始信号S、终止信号P、应答信号A和。另外,还需要用于同步的检查应答信号。一次完整的数据传送过程应包括起始S、发送寻址字节(SLAR/)、应答、发送数据、应答、…、发送数据、应答、终止P。4.9说明AT24CXX系列E2PROM页写缓冲器的作用,如何应用?答:由于E2PROM的半导体工艺特性,对E2PROM的写入时间要5~10ms,但AT24CXX系列串行E2PROM芯片内部设置了一个具有SRAM性质的输入缓冲器,称为页写缓冲器。CPU对该芯片写操作时,AT24CXX系列芯片先将CPU输入的数据暂存在页写缓冲器内,然后,慢慢写入E2PROM中。因此,CPU对AT24CXX系列E2PROM一次写入的字节数,受到该芯片页写缓冲器容量的限制。例如,AT24C02页写缓冲器的容量为16B。写AT24CXX应用时,若CPU写入字节数超过芯片页写缓冲器容量,应在一页写完后,隔5~10ms重新启动一次写操作。其次,若不是从页写缓冲器页内零地址0000写起,一次写入不能超出页内最大地址1111。若超出,也应将超出部分,隔5~10ms重新启动一次写操作。4.10参照图4-1电路,用2片74HC164,扩展16位并行输出,驱动16个发光二极管,如图4-26所示,从左至右每隔0.5s移动点亮,不断循环。试编制程序,画出ProteusISIS虚拟电路,并仿真调试。解:4.11参照图4-2电路,用2片CC4094,扩展16位并行输出,控制16个发光二极管,如图4-27所示,要求按下列顺序每隔0.5秒驱动运行,不断循环。试编制程序,画出ProteusISIS虚拟电路,并仿真调试。=1\*GB3①从左向右依次点亮,每次2个;=2\*GB3②从左向右依次点亮,每次增加2个,直至全亮;=3\*GB3③从左向右依次暗灭,每次减少2个,直至全灭;=4\*GB3④返回=1\*GB3①,不断循环。解:C51编程如下:4.12参照任务11.2中4021“并入串出”程序,试编制4014“并入串出”程序,并在图4-8虚拟电路中仿真调试。解:参阅教材书任务11.2中提示:若选用CC4014,置入并行数据时需由TXD端CP脉冲上升沿触发,只需将“ps=1;ps=0;”程序行改为“ps=1;TXD=0;TXD=1;ps=0;”,其余相同。4.13参照图4-5电路,用2片74HC165,扩展16位键状态信号并行输入,如图4-28所示,要求将16位键信号数据存80C51内RAM30H、31H。试编制程序,画出ProteusISIS虚拟电路,并仿真调试。解:C51编程如下:需要注意的是,禁止接收REN=0指令必须紧跟在串行接收完毕RI=1后,否则将发生帧串收数据畸变错误。4.14参照图4-6电路,用2片CC4021,扩展16位键状态信号并行输入,如图4-29所示,要求将16位键信号数据存80C51内RAM40H、41H。试编制程序,画出ProteusISIS虚拟电路,并仿真调试。解:C51编程如下:4.15设甲乙机以串行方式2进行数据传送,fOSC=12MHz,SMOD=0。甲机共发送10帧数据(设为0~9共阳字段码,依次存在外ROM中),乙机接收后,存在以40H为首址的内RAM中,试分别编制甲乙机串行发送/接收程序,并在图4-9虚拟电路中仿真调试。解:串行方式2,波特率固定为fOSC/64。甲机发送子程序:乙机接收C51程序:4.16设甲乙机以串行方式3进行数据传送,ProteusISIS虚拟仿真电路如图4-30所示。fOSC=11.0592MHz,波特率为4800b/s,SMOD=1,TB8/RB8作为奇偶校验位。按如下要求双机通信,试分别编制甲乙机串行发送/接收程序,画出ProteusISIS虚拟电路,并仿真调试。=1\*GB3①甲机每发送一帧数据(设为0~9共阳字段码,存在外ROM中),同时在P1口显示发送数据;用P2.7(驱动LED灯)显示奇偶校验位(1亮0暗)。接到乙机回复信号后,再暗0.5秒(作为帧间隔);然后发送下一数据,直至10个数据串送完毕;显示再暗0.5秒(作为周期间隔),然后重新开始第二轮串送循环操作。=2\*GB3②乙机接收数据,送P2口显示;用P1.1显示第9位数据(1亮0暗);奇偶校验后,乙机发送回复信号,用P1.0显示校验标志(正确时亮灯,出错时灭灯)。解:串行方式3波特率取决于T1溢出率,计算T1定时初值:T=256-×=256-×=256-12=244=F4H甲机发送子程序:乙机接收C51程序:4.17已知I2C总线串行扩展AT24C02电路如图4-10所示,参照任务13.1,将80C51内RAM数组a[16]的16个数据(11H、22H、33H、44H、55H、66H、77H、88H、99H、AAH、BBH、CCH、DDH、EEH、FFH、0)写入AT24C02首址为30H的连续单元中;再将其读出,存在80C51首址为50H的连续单元中。试编制程序,并在图4-11虚拟电路中仿真调试。解:C51程序如下:KeilC51软件调试和ProteusISIS虚拟电路仿真见例9-16。建议读者试一试去除AT24CXX页写延时,会产生什麽后果?4.18已知电路及条件同上例,要求将该16个数据写入AT24C024AH~59H单元中;再将其读出,存在80C51内RAM中。解:AT24C02一次写入字节不能超出页写缓冲器最大地址,即不能超出页内地址1111,否则会引起地址翻卷,导致出错。因此,需分二次写入。第一次写入4AH~4FH单元,第二次写入50H~59H单元,中间还必须有页写延时。据此,C51主函数修改如下,其余与上题相同。第5章思考和练习解答5.1简述LED数码管的结构和分类。LED正向压降、额定电流和最大电流各是多少?答:参阅教材书P.143。5.2什么叫静态显示方式和动态显示方式?各有什么特点?答:参阅教材书P.144~145。5.3动态扫描显示电路如何连线?对数码管的驱动电流有什么要求?答:参阅教材书P.144~145。5.4LCD1602能显示多少字符?能显示汉字吗?答:LCD1602液晶显示屏能显示2行共32个字符。1602不能显示汉字(12864可显示汉字)。并且只能显示其内部已经固化了的160个5×7点阵字符和32个5×10点阵字符(参阅教材书图5-22点阵字符表)。其中,标点符号、阿拉伯数字和英文大小写字母等字符为ASCII码。若需显示自定义字符,有64字节RAM,可自定义8个5×8点阵字符或4个5×11点阵字符。5.5按键开关为什么有去抖动问题?如何消除?答:参阅教材书P.148~149。5.6试述矩阵式键盘判别键闭合的方法,有什麽问题?答:矩阵式键盘的I/O端线分为行线和列线,按键跨接在行线和列线上。按键按下时,行线与列线发生短路。根据这一特点,可按下列步骤操作:=1\*GB3①置列线为输入态,从行线输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合;=2\*GB3②置行线为输入态,从列线输出低电平,读入行线数据,若某一行线为低电平,则该行线上有键闭合;=3\*GB3③综合=1\*GB3①、=2\*GB3②两步的结果,可确定按键编号。矩阵式键盘电路在许多单片机教材和技术资料中被介绍,但实际上该电路连接存在问题,当同一行有多键同时按下,且该行其中一键所在列又有多键同时按下时,会发生信号传递路径出错。因此,这种矩阵式键盘电路适用于无锁按键并使用中断处理时相对合理。5.7什么叫BCD码?与二进制数有何区别?答:BCD码(BinaryCodedDecimalCode)也称为二-十进制数,属十进制数,即逢十进位。但每一数位采用二进制码对十进制数字编码,这种编码方式的特点是保留了十进制的权,数字则用二进制码表示。BCD码既适应了人们逢十进位的习惯,又适应了计算机对输入输出数据的要求。BCD码与二进制数都用二进制码表示,但是有区别的。BCD码是以4位二进制码表示一位十进制数,每4位以内按二进制进位;4位与4位之间按十进制进位。例如:二进制码01100111B=103,[01100111]BCD=67。显然两者是不一样的。5.8什么是ASCII码?答:参阅教材书P.151。5.9将项目6模拟交通灯的绿灯加上限行显示时间,P2口驱动横向绿灯限行时间,P3口驱动纵向绿灯限行时间,电路如图5-27所示。原换灯时间分别改为:绿灯9秒(最后2秒快闪),黄灯3秒,红灯12秒,反复循环。试编制程序,画出ProteusISIS虚拟电路,并仿真调试。解:可仿照任务6.1程序,加入显示语句,显示字段码直接从P2、P3口输出。5.10已知CC4094串行扩展3位静态显示电路如图5-28所示,3位显示字段码已分别存在32H~30H内RAM中(设为809),小数点固定在第二位,试编制程序,画出ProteusISIS虚拟电路,并仿真调试。解:C51编程如下:KeilC51软件调试:编译连接并进入调试状态后,打开串行口对话框,单步结合过程单步运行,可观察到串行口对话框中SBUF寄存器依次被输入908(先发送低位)转换后的共阳显示字段码:09、03、01。改变变量a或32H~30H中的数值(注意≤999),重新运行,转换结果随之改变。5.11已知由PNP型三极管与74377组成的共阳型3位LED数码管动态扫描显示电路如图5-29所示,显示字段码存在以40H(低位)为首址的3字节内RAM中,试编制3位动态扫描显示程序,画出ProteusISIS虚拟电路,并仿真调试。解:按图5-29电路,P1.0~P1.2分别输出低电平时,VT0~VT2分别导通,选通相应显示位。P0口输出的字段码也是低电平有效。输出高电平与输出低电平时的驱动能力不一样,输出高电平时,拉电流较小;输出低电平时,灌电流较大,因此,通常采用低电平有效输出控制。C51编程如下:5.12已知4位共阴型LED动态显示电路如图5-30所示,显示字段码存在以30H为首址的内RAM中,试编制循环扫描显示程序,画出ProteusISIS虚拟电路,并仿真调试。解:C51编程如下:5.13已知8位共阴型LED动态显示电路如图5-31所示,位码驱动由74LS138译码,段码驱动由74LS377并行输出,8位显示数字存在数组a中,试编制循环扫描显示程序,画出ProteusISIS虚拟电路,并仿真调试。解:C51编程如下:5.14已知8位共阴型LED动态显示电路如图5-32所示,位码驱动由74LS138译码,段码驱动由74LS164“串入并出”,8位显示数字存在数组d中,试编制循环扫描显示程序,画出ProteusISIS虚拟电路,并仿真调试。解:要求循环扫描显示数组d[8]={2,0,1,3,9,8,7,6}中的8位显示数字。C51编程如下:需要说明的是,由于80C51串行传送时低位在前高位在后,与164移位次序相反。因此,字段码数组采用逆序(a是高位)。这样,164Q0输出端(引脚编号3)就可接显示屏a端。KeilC51编译调试=1\*GB2⑴编译链接,语法纠错,并进入调试状态。=2\*GB2⑵打开变量观测窗口(鼠标左键单击调试工具图标“”),观测到数组d[]被存放在D:0x08单元(注意不同程序存储单元也不同)。=3\*GB2⑶打开存储器窗口(鼠标左键单击调试工具图标“”),在Memory#1窗口的Address编辑框内键入“d:0x08”。=4\*GB2⑷打开P1对话窗口(主菜单“Peripherals”→“I/O-Port”→“Port1”)。其中,上面一行(标记“Px”)为I/O口输出变量,下面一行(标记“Pins”)为模拟I/O口引脚输入信号。“√”为“1”,“空白”为“0”,左键点击可修改。=5\*GB2⑸打开串行口对话窗口(主菜单“Peripherals”→“Serial”),弹出串行口对话窗口,以便观察串行缓冲寄存器SBUF中的数据。=6\*GB2⑹单步运行,显示数组d赋值后,看到存储器窗口0x08及其后续7个单元已依次赋值数组d中的显示数字。=7\*GB2⑺继续单步运行,至输出位码“P1=0xf8+i;”语句行后,P1对话窗口输出数值变为“11111000”(“√”为“1”,“空白”为“0”),表明P1.2~P1.0输出“000”,138将译码驱动第0位显示。=8\*GB2⑻继续单步运行,至串行发送段码“SBUF=c[d[i]];”语句行后,串行对话窗口SBUF中数据变为“0xDA”,表明串行发送共阴逆序“2”的字段编码“0xDA”。=9\*GB2⑼继续单步运行(串行发送过程需单步8次),执行延时语句“for(t=0;t<1000;t++);”后,回到输出位码“P1=0xf8+i;”语句行后,看到变量观察窗口Locals页中的循环序数i变为“1”,执行后,P1对话窗口输出数值变为“11111001”(“√”为“1”,“空白”为“0”),表明P1.2~P1.0输出“001”,138将译码驱动第1位显示。继续单步,运行串行发送段码“SBUF=c[d[i]];”语句后,串行对话窗口SBUF中数据变为“0xFC”,表明串行发送共阴逆序“0”的字段编码“0xFC”。以此类推,循环输出数组d[]中的显示数字。=10\*GB2⑽改变程序中数组d[]的显示数字,重新运行,转换结果随之相应改变。=3\*GB1⒊ProteusISIS虚拟仿真=1\*GB2⑴画出Proteus虚拟仿真电路图如图5-32a所示。其中,80C51在MicroprocessorIcs库中。74LS138、74LS164在TTL74LSseries库中;8位显示屏在Optoelectronics→7-SegmentDisplays库中,选共阴型8位7段LED数码管7SEG-MPX8-CC-BLUE。=2\*GB2⑵鼠标左键双击图5-32a所示电路中AT89C51,装入在KeilC51编译调试时自动生成的Hex文件。全速运行后,虚拟电路中数码管显示屏会显示赋值显示数。图5-32aProteus虚拟仿真138位码图5-32aProteus虚拟仿真138位码选通+164段码串行传送的8位LED动态显示电路(运行中)5.15已知LCD1602显示电路如图5-15所示,要求显示屏上第一行显示“AT89C51--LCD1602”,第二行显示“Test--Program---”,试编制显示程序。解:C51程序如下:5.16已知电路如图5-33所示,10kΩ×8和0.1µF×8为RC滤波消抖电路,fOSC=6MHz,要求T1每隔100ms中断,定时掃描按键状态,并将键信号存入内RAM30H,试编制程序,画出ProteusISIS虚拟电路,并仿真调试。解:C51程序如下:5.17已知3×3矩阵式键盘中断扫描接口电路如图5-34所示,P1.4、P1.3另有他用,不能改变其端口状态(输入态),且其输入状态不定。要求即时判断闭合键序号,并送P2口显示。试编制程序,画出ProteusISIS虚拟电路,并仿真调试。解:C51程序如下:第6章思考和练习解答6.1什么叫A-D转换?为什么要进行A-D转换?答:将模拟量转换成数字量的过程称为A-D转换。在单片机应用系统中,被检测的信号往往是连续变化的模拟量,如电压、温度、压力、流量、速度等,对于这些模拟量,单片机不能直接进行处理,而必须将其转换成数字信号,才能为单片机所接受和处理。6.2一个8位A-D转换器的分辨率是多少?若基准电压为5V,该A-D转换器能分辨的最小电压变化是多少?10位和12位呢?答:A-D转换器分辨率=UREF/2N,它表示输出数字量变化一个相邻数码所需输入模拟电压的变化量,其中N为A-D转换的位数,N越大,分辨率越高,习惯上常以A-D转换位数表示。8位A-D转换器的分辨率是1/28=1/256≈3.9‰。基准电压5V时,能分辨的最小电压变化是5V/256≈20mV。10位A-D转换器的分辨率是1/210=1/1024≈0.98‰。基准电压5V时,能分辨的最小电压变化是5V/1024≈4.9mV。12位A-D转换器的分辨率是1/212=1/4096≈0.24‰。基准电压5V时,能分辨的最小电压变化是5V/4096≈1.22mV。6.3图6-1电路中,怎样启动0809A-D转换?答:参阅教材书P.158。C51程序中:XBYTE[0x7ff8+i]这条指令中包含3份信息,起到3种作用:3份信息:=1\*GB3①片选0809(0x7ff8=0111111111111000,高8位中,P2.7=0,有效);=2\*GB3②当前转换的通道地址(低3位)i(当前是000,通道地址随i递增);=3\*GB3③执行该指令(输出)时,片内硬件自动使有效。3种作用:=1\*GB3①DPTR=7FF8H最低3位地址A2A1A0(000)输入到0809模拟信号通道地址输入端CBA;=2\*GB3②P2.7有效和有效(均为低电平)或非后,全0出“1”,使0809ALE信号有效,锁存从CBA输入的通道地址000;=3\*GB3③同时使0809START信号有效,启动A-D转换。6.4图6-5电路中,ADC0832数据输入输出端DI、DO端连接在一起,会不会引起冲突?答:根据ADC0832串行A-D转换工作时序,DI端在接收主机起始和通道配置信号后关断,直至再次出现下跳变,DO端在DI端有效期间始终处于三态,因此DI端与DO端可与RXD端连接在一起,不会引起冲突。6.5什么叫D-A转换?基本原理是什么?若D=65H,UREF=5V,求D-A转换后输出电压多少?答:将数字量转换成模拟量的过程称为D-A转换。D-A转换的基本原理是应用电阻解码网络,将N位数字量逐位转换为模拟量并求和,从而实现将N位数字量转换为相应的模拟量。输出电压UO应与输入数字量D成正比:UO=(D0×20+D1×21+…+DN-1×2N-1)×UREF/2N=101×5/256≈1.973V(65H=101)6.6什么叫单缓冲和双缓冲工作方式?各有什么功能?答:参阅教材书P.173~174。6.7已知0809A-D转换中DPTR值,试指出其片选端和当前A-D的通道编号。=1\*GB3①DPTR=DFF9H =2\*GB3②DPTR=FDFFH答:=1\*GB3①DPTR=DFF9H;DFF9H=1101111111111001,片选端:P2.5;通道编号:1。=2\*GB3②DPTR=FDFFH;FDFFH=1111110111111111,片选端:P2.1;通道编号:7。6.8已知0809片选端和当前A-D的通道编号,试指出A-D转换中DPTR值。=1\*GB3①片选端:P2.4;通道编号:0 =2\*GB3②片选端:P2.0;通道编号:6答:=1\*GB3①片选端:P2.4;通道编号:0;DPTR=1110111111111000=EFF8H。=2\*GB3②片选端:P2.0;通道编号:6;DPTR=1111111011111110=FEFEH。6.9参照任务18.1,要求用查询方式实现A-D转换,试画出ProteusISIS虚拟电路,编制程序,并仿真调试。解:查询方式。0809EOC端可不必通过反相器与或相连,直接与80C51P1口或P3口中任一端线相连(设为P1.0),如图6-24所示,其余部分与图6-15电路完全相同。图图6-24ADC0808查询方式A-D转换并动态显示电路8+5V模拟量输入ALESTARTD0~D7ADC0808CBAIN0~IN7CLKOEUREF+UREF-EOC83A0~A274373D0~D7Q0~Q7G≥1≥18共阳数码管8CLKQ0~Q7D0~D774LS377Dpgfedcba+5VR2R1R0VT2VT1VT0Vt3R380C51P0ALEP2.7P0P1.4P1.5P1.6P2.6P1.7P1.0C51编程如下:画出Proteus仿真电路如图6-25所示。图图6-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度年福建省高校教师资格证之高等教育法规押题练习试卷B卷附答案
- 2023年航空辅助动力系统资金申请报告
- 三年级数学计算题专项练习汇编及答案集锦
- FOB条件下国际货物买卖协议模板
- 2025年人教版高考历史试题及答案指导
- 2024年度模具采购协议精简样本
- 2024年度矿权出让及转让专项协议
- 2024年矿泉水采购正式协议样本
- 2024年服务协议增补协议样本
- 2024年医疗机构医生劳动协议模板
- 混凝土浇筑及振捣措施方案
- 立体构成的基本要素及形式美法则备课讲稿课件
- 广东省房屋建筑工程概算定额说明及计算规则样本
- 汽车文化知识考试参考题库400题(含答案)
- 《水循环》-完整版课件
- 抗高血压药物基因检测课件
- 西游记 品味经典名著导读PPT
- 金坛区苏科版四年级心理健康教育第1课《我的兴趣爱好》课件(定稿)
- 心肌缺血和心肌梗死的心电图表现讲义课件
- 学历案的编写课件
- 旅游行政管理第二章旅游行政管理体制课件
评论
0/150
提交评论