微型机系统与接口全套教学课件

上传人:ni****g 文档编号:571915774 上传时间:2024-08-12 格式:PPT 页数:368 大小:7.40MB
返回 下载 相关 举报
微型机系统与接口全套教学课件_第1页
第1页 / 共368页
微型机系统与接口全套教学课件_第2页
第2页 / 共368页
微型机系统与接口全套教学课件_第3页
第3页 / 共368页
微型机系统与接口全套教学课件_第4页
第4页 / 共368页
微型机系统与接口全套教学课件_第5页
第5页 / 共368页
点击查看更多>>
资源描述

《微型机系统与接口全套教学课件》由会员分享,可在线阅读,更多相关《微型机系统与接口全套教学课件(368页珍藏版)》请在金锄头文库上搜索。

1、2024/8/121微型机系统与接口教材:单片机原理及应用杨恢先等杨恢先等,湘潭大学出版社湘潭大学出版社,2013年年1月版月版1.参考书单片机原理及接口技术,于凤明,中国轻工业出版社,1998年版2.参考书MCS-51单片微型计算机及其应用,薛均义,西安交大出版社3.参考书单片微型机原理及应用,丁元杰,机械工业出版社2024/8/122本课程的特性本课程的特性zz1)地位zz本课程是计算机科学与技术专业的必修课本课程是计算机科学与技术专业的必修课zz2)关系专业硬件基础课专业软件基础课微机原理与接口3)目的使同学们掌握微机电路设计原理及指令与电路的关系。4)机型INTEL8051系列单片微型

2、计算机2024/8/123学习要求掌握INTEL8051系列单片机内部主体结构及详细的位电路原理掌握C/T、INT、UART原理掌握存储器、I/O接口扩展原理掌握INTEL8051系列单片机指令系统尤其是特色指令(除特色指令外以自学为主)掌握指令与相关电路信号的关系掌握监控程序的设计原理及方法了解单片机处理问题的一些基本方法了解单片机获取、输出信息一些基本方法和原理2024/8/124实验及其要求实验教学是本课程教学内容的组成部分实验教材:MST-51单片机系统实验实验内容:7个必作题,1个选作题实验要求:独立完成,教师验收,创新奖励考试方法与成绩:指定程序,现场抽题,现场回答,现场打分特别声

3、明:因为此课实验内容要求高,实验过程抓得特别声明:因为此课实验内容要求高,实验过程抓得紧,成绩评定严格,所以不提供非计划时间的教学实验紧,成绩评定严格,所以不提供非计划时间的教学实验补课,有正当理由者在下一级的本课程实验课补做。补课,有正当理由者在下一级的本课程实验课补做。2024/8/125课外作业第1次:基础知识第2次:应用内容第3次:第4次:实验报告有抄袭现象,以有抄袭现象,以0分论处分论处2024/8/126成绩评定课外作业:10%实验:30%试卷考核:60%特别申明:不参加实验或实验考核不及特别申明:不参加实验或实验考核不及 格者不提供理论考试试卷,格者不提供理论考试试卷, 强行参考

4、者不予成绩评定强行参考者不予成绩评定。2024/8/127第一章单片机概述单片机:单片微型计算机一、单片机的发展第一阶段:预备阶段:19711974,intel4004,8008微处理器第二阶段:初级阶段:19741978,intelMCS-48系列,片内集成8位CPU,4个I/O并口,1个C/T,无S口,寻址范围4K第三阶段:高级8位机阶段:19781983,intelMCS-51,Motorola6801,ZilogZ8等系列2024/8/128MCS-51系列8位CPU4个I/O并行接口2个C/T一个全双工UART口二级中断源片内RAM,128位字节,特殊寄存器,128字节( 未 全 用

5、 ) , 片 内 ROM48K ( PROM或EPROM),可直接扩展的RAM,ROM为64K。fVRST约等于0V,D2截止,RAM完全由VCC供电。外部RAM保护电源接于RST/VPD,当VCC下降到某规定值时,外部电源将被自动切换加入到RST/VPD端。2024/8/1219(2)PSEN(29,O):扩展ROM专选信号,L有效。(3)ALE/PROG(30,I/O)第一功能:ALE功能,即将P0上输出的地址信息打入外部存储器低于8位地址锁存器。实现P0上输出的地址、数据分离。第二功能:对于内含EPROM的8751,作为编程脉冲的输入端。OSC,PSEN,ALE时序关系。fALE=1/6

6、fOSC,fPSEN=1/6fOSC,qALE=30%,qPSEN=50%,TALE=TPSEN=6TOSC2024/8/1220(4)EA/VPP(31,I)第一功能:作为访问ROM控制信号。=0时仅仅访问片外扩展的ROM,=1时,先访问片内的ROM,然后访问片外的ROM。例:当=1时,若采用片内的ROM为4K的8051,则机器寻址范围为00000FFFH。当超过此范围时,自动转向片外寻址ROM,也就是说扩展ROM从1000H开始编址。当=0时,仅仅访问扩展的ROM,即扩展的ROM编址从0000H开始(8031必须如此)。VPP第 二 功 能 输 入 端 : 对 于 8751( 内 含 8K

7、EPROM)。本引脚提供编程(固化)电压。2024/8/1221ROM(指令CP)IRID系列微操作控制信号完成指令执行(规定操作)指令系统有111条,分为单、双、三字节指令。指令周期以单,双机器周期为主:仅有乘除法指令是四周期指令。阅读指令时序图(图2-7)时应注意点:所有指令的操作码在指令周期第一个机器周期的前三个状态周期(S1P2S2P1P2S3P1P2S4P1)内完成取出剩下的时间用于执行指令(在片内完成)含取第二操作数在执行过程中除MOVX指令外,其余指令执行时-PSEN、ALE、P0、P2照样从片外ROM取指令,但因为在执行指令过程中(PC)不变,所以相当于重复或无用操作。2.22

8、.2时序与周期时序与周期 1 1振振荡荡器器与与时时钟钟信信号号:自自阅阅, ,注注意意点点: :机机周周是是指指令令周周期期的的单单位位时时间间长度长度,51,51机有机有1 1、2 2、4 4机周指令。机周指令。2 2 指令时序指令时序: 5151机指令执行过程:机指令执行过程:2024/8/1222S1S2S3S4S5S6S1S2P1P2P1P2P1P2P1P2P1P2P1P2P1P2P1P2机器周期OSCALEPSEN有效区有效区P2P0PCH(A815)PCH(A815)A07指令码A07指令码PCLD07PCLD07图2-7指令时序图定时(机周)脉冲1/12OSC2024/8/12

9、23S1S2S3S4S5S6S1S2P1P2P1P2P1P2P1P2P1P2P1P2P1P2P1P2机器周期OSCALEPSEN有效区有效区单字节单读操作码读操作码读操作码周期指令(废弃)双字节单读操作码读次字节读操作码周期指令图2-78051取指令,执行指令周期时序图2024/8/1224a.单字节单周期指令:前半个机器周期取指令操作码;后半个机器周期执行指令。同时由ALE、-PSEN、P0、P2第二次取指内容无效。如INCAb.双字节单周期指令:前半个机周期取指操作码。后半个机周读第二字节,读入CPU后即可完成指令的操作(由总线结构所决定)。如ADDA,#Data.c.单字节双周期指令:取

10、指令操作操作码后,剩下的1.5个机器周期全用于执行指令。如INCDPTR.外部RAM的工作时序(仅针对MOVX指令)。见P25图2-7第一个机周的前半个机周取指令;第二个半机周(以第二个ALE开始)用于产生扩展RAM的地址;第二机周的前半机周用于从扩展RAM中读写数据;此时-RD或-WR有效。后半机周恢复取指,但在半机周内无用。2024/8/1225特别注意特别注意:当取出操作码后,第二个ALE将DPL提供的扩展RAM地址打入锁存器后,P0出的内容将由地址变为工作于扩展RAM的数据。因此要暂停输入一次。同理由于进入扩展RAM操作。ROM的控制信号要停止输出两次(一机周内产生两次)。图中主要针对

11、MOVXA,DPTR(以DPTR作间址指针)的指令。对于MOVXA,Ri(以8位工作寄存器作间址指针)不需存8位地址。P2口将是P2口锁存器的内容,而P0口的地址由Ri间接寻址确定。2024/8/12262.3输入/输出(I/O口):P0、P1、P2、P3(P22、P98)1、P0、P1、P2、P3功能P0口(P0.0P0.7):8位双向I/O口。访问扩展存储器作为A70/D70复用线(V控制=H):A70由ALE同步提取到外部地址锁存器(常用的是74LS373)。如图所示:A70D70A70ALEP0393880513230D1Q1D2Q274LS373D8Q8GOEP0.0MA0P0.1M

12、A1P0.7MA7ALEP146图6-2(b)2024/8/1227作为通用的I/O口输出时:单片机内MOS管漏极开路(V控制=L)。每个引脚可驱动8个TTL负载.使用时应该外加上拉电阻,如幻灯片31图所示。输入时:由图可知,为保证“1”信号的正确读入,读前应先往锁存器写入“1”,确定各引脚在“1”状态,读入信息。对于8751在编程和校验时,用于数据的I/O口。2024/8/1228P1口口:(:(P1.0P1.7)是一个具有内)是一个具有内部上拉电阻的部上拉电阻的8位双向的位双向的I/O口。每一口。每一个可驱动个可驱动4个个TTL负载负载。输入时:需要向P1口锁存器写“1”。引脚由内部电阻拉

13、为高电平,实现正确的输入。对于EPROM型号芯片的编程和校验,用于接收低8位地址。2024/8/1229P2口口:(:(P2.0P2.7)内部具有上拉)内部具有上拉电阻的电阻的8位准双向的位准双向的I/O口。负载能力:口。负载能力:4个个LSTTL.访问扩展M时,作为A158对于EPROM型芯片的编程、校验,用于接受高8位地址。2024/8/1230P3口口(P3.0P3.7):内部具有上拉电):内部具有上拉电阻的准双向阻的准双向I/O口,负载能力:口,负载能力:4个个TTL。第一功能:作为I/O口与P1口相同。第二功能:(1)P3.0=RXD,串收;P3.1=TXD,串发。(2)P3.2=-

14、INT0,P3.3=-INT1,外中断.(3)P3.4=T0,P3.5=T1,计数/定时器输入。(4)P3.6=-WR,扩展的RAM写;P3.7=-RD,扩展的RAM读。2024/8/12312、P0、P1、P2、P3口位电路工作原理(P98)1、P0口,见P98图5-1。(1)端口电路由二个三态缓冲器和一个D触发器结构的锁存器构成。(2)输出控制电路由一个与门,反相器和多路转换开关组成。(3)输入引脚(端子)由2个MOS管构成。作为普通的I/O口:V控制=L,MUX连通-Q.T1因VT1-G=L而截止。所以,P0作I/O口时,需要在芯片的引脚上接上拉电阻。VCCP0.XDQCPQ读锁存器内部

15、总线写入读引脚地址/数据控制T1T2MUX图1-42024/8/1232A、输输出出原原理理:DBUSX(写入CP)锁存器-Q(反相输出)MUXT2(反相输出)P0.X特点特点:结果可在端口驻留,适宜输出控制电位信号。B、输入原理输入原理:注意点:输入信号在P0.X处与T2-D状态形成“线与线与”。若锁存器为“0”状态,则T2-D=L.根据“线与”0状态优先原理,所有输入到P0.X的信号都被强制变为“0”.因此为保证“1”状态的正常读入。在读入之前,要先将锁存器置为“1”,然后开始执行读入。这就是所谓的“准”口。具体实现过程为:(1)1(写入CP脉冲)锁存器-Q=0MUXT2-D=1。(2)P

16、0.X(读引脚CP)DBUSX(写入CP)锁存器(读锁存器CP)DBUSXCPU内部R。特特点点:读入结果时滞留于锁存器,可提供CPU再次使用,也可以作为本端口的对外输出状态。2024/8/1233作地址/数据口:用于向扩展M提供A70及输入/输出数据D70.关键动作:控制信号由LHMUX连于反相器输出与门输出由地址/数据状态决定工作原理:A.作为地址/数据输出时,单片机将地址、数据输出到扩展M,地址/数据经过反相器T1-D(再反相)P0.X地址/数据=01P0.X接收负载电流能力增强反相器MUXT2-D(反相)P0.X=L与门T1T1断断反相器MUXT2断P0.X=H与门T1T1通通P0.X

17、驱动负载能力增强B、输出地址、输入数据地址输出原理同上,数据输入同I/O口的数据输入。注注:地址、数据在地址、数据在P0口上是分时出现的,并由口上是分时出现的,并由ALE同步同步。2024/8/12342、P1口:见图5-1(c)(只是作为通用的I/O口使用,因此不需要MUX,内部有上拉电阻,为双向口,用户可直接使用,如图所示。VCCP1.XVCCP1.0P1.18051P1.6P1.7负载VCC1K100DQCPQ图图5-12024/8/12353、P2口:见图5-1(b)。由单T输出,内含上拉电阻、MUX,锁存器信号由Q端输出。作为通用的I/O口:MUX连于Q,输出时经反相器,MOS管T两

18、次反相,其余同P1口。作 扩 展 M的 A15A8使 用 时 :MUX在控制信号作用下,连于地址输出端,而锁存器内容不变。当地址输出后,多路开关自动重新与Q相连,使得Q的状态重现在P2.X上。注:操作扩展M期间,P2自动成为地址线,不操作时,又自动成为I/O端口。作地址输出时,不影响锁存器状态。8031(无无ROM单单片片机机)只只能能用用于地址线于地址线。如图所示。如图所示:地址控制MUXP2.XVCCDQCPQ读锁存器内部总线写入读引脚图5-1(b)P2.0P2.28031EAP2.7MA8MA9MA15A8A961162024/8/12364.P3口:如图5-1(d)所示。锁存器从Q端输

19、出。增加一个“与非”门及“第二输出功能”信道线,在输入线增加一个“是门”缓冲器,作为第二输入信道引出端.。由图可知,P3口存在通用、专用两种输入/输出功能。a、通用I/O口:“第二输出功能”=H,其余原理同上。读锁存器内部总线写入读引脚图5-1(d)VCCP0.X第2输出功能DQCPQ第2输入功能2024/8/1237b、专用I/O口(或者第二功能口)专专 用用 的的 I口口 : P3.0(RXD),P3.2(-INT0),P3.3(-INT1),P3.4(T0),P3.5(T1)“第二输出功能”=H,锁存器Q=H。输入过程中不提供“读引脚”及“读锁存器”信号,直接从“第二输入功能”点处接收信

20、号。专用的专用的O口口:P3.1(TXD),P3.6(-WR),P3.7(-RD)锁存器Q=H,来自“第二输出功能”线信号经过“与非门”到T到P3.x输出。注意注意:第二功能信号的I/O,不影响锁存器的状态。应用举例:如图为两台8031全双工通信电路连接.复位后,复位后,P0P3状态全是状态全是FFH,可,可 直接作为输入口用直接作为输入口用。P3.0P3.18031GNDP3.0P3.18031GNDRXDRXDTXDTXD2024/8/12382.4内部存储器(P29)1、程序存储器程序存储器ROM:用于存放程序、常数和表格等。寻寻址址范范围围:由PC长度确定,PC为16位,则最大寻址范围

21、片内、片外合为64K(0000HFFFFH)。例1:启用8051内部4KROM或者8751内部4KEPROM,则最多可以外扩指令一次性操作空间64K-4K=60K。片内ROM地址为0000H0FFFH。扩展的ROM的最大寻址范围为1000H0FFFFH。具体从片内转到片外由-EA状态控制,前面已述。例2:当8051、8751不使用片内ROM只使用片外ROM时,将-EA=0(-EA接GND)。此时片外ROM地址范围为0000H0FFFFH,即PC所有的值全部用于寻址扩展ROM。2024/8/1239例3:对于片内无ROM的8031/8032机器,必须使-EA=0,PC仅仅寻址片外ROM(0000

22、HFFFFH)。MCS-51单片机ROM存储器配置见P29图2-12所示。外部MFFFFH1000H内部M(4KB)-EA=10FFFH0000H图图2-112-11外部M(4KB)-EA=00FFFH0000HPSEN2024/8/1240ROM中特殊单元及其使用(ROM中存放的程序分为非中断服务与中断服务程序两类)(1)0000H单单元元:系统上电或复位(PC)=0000H,即单片机从该单元开始取指令执行程序。特特别别提提醒醒:0000H单元存放转移指令,转移目标为正式程序的首地址,如下所示:ORG0000HRESET:SJMPMAIN;占2个字节单元ORG*HMAIN:与0000H直接相

23、连有0001H,0002H两个单元,因为转移指令占23个字节。2024/8/1241(2)0003H(P107表表5-1):-INT0中断服务程序入口地址。后续7个单元,主要用于中断服务程序,其他程序也可使用。作为中断服务单元,有两种用法:A、若中断服务程序短(少于8个字节),则可在0003H000AH之间完成中断服务。如下所示:ORG0003HINT0:*(不超过8条指令)RETIB、若中断服务多于8个单元,则应该在0003H单元中,写入转移指令,转到服务程序的入口地址,如:ORG0003HINT0:AJMPSENDORG*HSEND:(3 3)000BH000BH:C/T0C/T0中断服务

24、程序入口地址,其余同上。(中断服务程序入口地址,其余同上。(4 4)0013H0013H:-INT1-INT1中断中断服务程序入口地址,其余同上。(服务程序入口地址,其余同上。(5 5)001BH001BH:C/T1C/T1中断服务程序入口地址,其中断服务程序入口地址,其余同上。(余同上。(6 6)0023H0023H:串行通信中断服务程序入口地址,其余同上。:串行通信中断服务程序入口地址,其余同上。2024/8/12422、数据存储器:存放数据和中间结果分片内、片外RAM,独立寻址(见P29图2-13)片内RAM:根据指令功能寻址方式丰富(后面专述)片外RAM:由专用片外数据存储器寻址寄存器

25、寻址。该寻址寄存器称为数据指针,用DPTR表示。外部MFFFFH0000H图图2-132-13FFH80H7FH00H专用寄存器区(SFR)通用寄存器区内部RAM2024/8/1243(1)片内RAM有256个单元:低低128字节字节(00H7FH),是可供用户直接使用的真正RAM区;高高128字节字节(80HFFH),为特殊寄存器或者专用寄存器。1.低128字节的作用以及分区A、工作寄存器区:00H1FH,共32字节,分为4组。每组有8个寄存器,分别记为R0,R1,R3,R7。组选信号是PSW中的RS1,RS0的组合状态。单元地址,RX(X=07),RS1,0三者之间的关系见P30表2-2。

26、例:当RS1RS0=00时,选择的是第一组R70,它们对应的地址码为分别是07H00H,其余类推。各组R70对应的地址见表2-3(P31)注注意意:当RS1RS0状态一定时,与其对应的单元便成为工作寄存器,其余24个单元仍可作一般单元使用;当作为一般单元使用时,可内装数据;当改变RS1RS0状态使该单元数据成为工作寄存器时,该单元内容维持不变。2024/8/1244例:当RS1RS0=00,(08H)=34H,RS1RS0由00B变 到 01B,有 (R0)=34H。 因 为 , 08H单 元 是RS1RS0=01B时的R0中内容。B、位位寻寻址址区区:字节地址20H2FH.共168=128位

27、。位地址(见P31表2-4)00H7FH,该区又称为位寻址空间,以配合MCS-51的位处理的功能(注:实际是用户RAM的位寻址区)。C、用户RAM区:30H7FH,共516=80个单元。堆栈区一般设置从堆栈区一般设置从30H开始开始。2024/8/12452.高128单元(80HFFH):为专用寄存器(SFR)区。MCS-51机共设立21个专用寄存器,见表2-5(P32)。11个特殊功能寄存器,即有字节地址,又有位地址,见表2-6(P34)。注注:每个可位寻址特殊功能寄存器的字节地址就是该寄存器LSB(最低位)的位地址。特殊功能寄存器的最低地址为80H,所以特殊功能寄存器区域的最小位地址也就是

28、80H,正好是用户RAM区位空间的最高地址的接续地址。特殊功能寄存器区域最高位地址是F7H,即为B寄存器的最高位地址。注:11个可以位寻址特殊功能寄存器之间的位地址不一定是连续的。例:PSW-MSB=D7H而ACC-D0=E0H。相对于MCS-51来说,特殊寄存器有5位未定义。见表中IP、IE斜杠位。2024/8/12461、ACC:累加器是应用最频繁的特殊寄存器。2、B:乘除法专用辅助计算寄存器,也可以作为通用的数据寄存器。3、PSW:D7HD6HD5HD4HD3HD2HD1HD0HCYAcF0RS1RS0OVPCY的作用:1)作进/借位标志。在加/减运算中,若产生进/借位。则CY=1,否则

29、为0;反映单字节无符号数的溢出。2)在乘/除运算时,CY总被清零。3)作为布尔处理器的位累加器(大部分位操作指令都与CY有关)。AC:半进位标志。主要用于BCD码的二-十进制调整。2024/8/1247F0:用户标志位。通过软件置位/复位,实现专门用途,也可利用其进行程序分支。RS1,RS0:工作寄存器组的选择控制位,见P30表2-2。OV:溢出标志位。进行带符号数的补码加法/减法运算时,运算结果超出范围(-128+127)时则OV=1,否则,OV=0.执行乘法指令(MULAB)时,积大于255,OV=1,否则OV=0。说明如果OV=0,则积只要取A内值便可.执行除法指令(DIVAB)时,B中

30、所放除数为0,OV=1,否则OV=0。P:奇偶校验标志位,每条指令执行后,累加器A中所含有“1”的个数为奇数时P=1,否则P=0。2024/8/12484)DPTR:16位数据指针寄存器,即作为访问片外数据存储器的地址指针,可分为二个8位寄存器单独使用,分别记为DPH,DPL。5)SP:堆栈指针(8位),指示栈顶,向上生长(先SP=SP+1)(通常将堆栈移到30H以上的RAM区)寄存器P03ACCBPSWSP复位初始值FFH00H00H00H07H与堆栈操作有关的指令:PUSHPOPCALLRETRETI与堆栈操作有关的硬件动作:响应中断之后,由硬件完成断点压栈保护。例1:执行PUSHAcc(

31、设现有(SP)=30H)过程spsp+1(sp)Acc结果(31H)=(Acc)。若Acc=05H,则有(31H)=05H2024/8/1249(2)片外数据存储器(64K),由DPTR间址,片内128单元地址与片外RAM的低128单元地址互为独立(由不同控制信号控制)(3)存储器配置及使用特点片内ROM片外存储器特殊片内工作R区RAM一般位区片外用户区zzMOVMOV片内片内RAM,MOVXRAM,MOVX片外片外RAMRAMzz片外片外MM与控制信号的对应关系与控制信号的对应关系zz-RD-RD、-WR-WR片外片外RAMRAM,-PSEN-PSEN片外片外ROMROMzz-EA-EA用于

32、片内、外用于片内、外ROMROM的使用控制的使用控制zz指令与指令与MM的对应关系的对应关系: :zz片内片内ROMROMzzMOVCMOVCzz片外片外ROMROM2024/8/12502.5MCS-51单片机工作方式(P26)复位复位、程序程序、单步单步、掉电、保护、节电、EPROM编程、校验1.复位方式:复位后片内专用寄存器处于特定状态,即复位状态,见P26表2-1,另外也使ALE=1、-PSEN=12.程序执行方式3.单步执行方式(P110,5.2.6节):借助-INT0或-INT1的外部中断功能,结合中断服务程序实现对主程序的单条执行。MCS-51机机中中断断系系统统规规定定,从从中

33、中断断服服务务程程序序返返回回主主程程后后,至至少少要要执行一条指令,才能响应新的中断申请执行一条指令,才能响应新的中断申请。单步执行电路如图所示8051INT0+5V1KK2024/8/1251主程单步运行控制程序即-INT0中断服务程序如下ORG0003H;转自身地址,或PCPCINT0:JNBP3.2,$;按下后未松开则等待松开JBP3.2,$;松开后未按下则等待按下RETI;按下后返主程。;主程执行完一条指令,再次响应-INT0=0的申请而进入4.其它方式自阅2024/8/1252第5章MCS-51单片机硬件资源及应用(P98)5.1计数器/定时器(C/T,P113)(单独模块为825

34、3)16位加法计数器一、C/T结构工作方式寄存器TMOD控制寄存器TCON加法计数器(增量计数器):每个C/T由2个8位专用寄存器组成TH0TH1C/T0,C/T1TL0TL18051TxS5P2S5P2S3P1i机周i+1机周i+2机周所以外加到Tx的计数脉冲频率fTx1/24fosc且TXH,TXLT机器=6TSzz(1)(1)作作定定时时器器使使用用时时:每每一一个个机机器器周周期期C/TC/T值值加加1 1,所所以以,加加法法计计数数器器的的计计数数频频率率 是是foscfosc的的1/121/12;zz(2)(2)作计数器使用时:由作计数器使用时:由TxTx(x=0x=0,1 1)引

35、入的外部脉冲提供计数信号)引入的外部脉冲提供计数信号. .zz Mcs-51Mcs-51机机对对TxTx的的采采样样是是在在每每个个机机器器周周期期的的S5P2S5P2进进行行的的, ,若若连连续续两两个个机机器器周周期期采采样样, ,发现发现TxTx由由1 10, 0,则在第三个机器周期的则在第三个机器周期的S3P1S3P1使加法器加使加法器加1, 1,如图所示如图所示: :2024/8/12532工作方式寄存器TMOD(89H)D7D6D5D4D3D2D1D0TMOD:GATE1C/T1M11M10GATE0C/T0M01M00低四位设置C/T0的工作模式,高四位设置C/T1的工作模式(1

36、)GATEX为定时/计数器信号之一,称为门控信号,用软件设置。另外的控制信号分别是TCON中的TRX(启动)、硬件控制端INTX。三者的关系为;C/TX启动=TRX(INTX+GATEX)TRXGATEXINTXC/TC/TX X启动启动由式和图知,当GATEx=0,C/Tx工作只与TRx有关,反之还与INTx有关,即也可通过INTx来控制C/Tx的启动工作。C/T工作控制函数图2024/8/12540定时方式(2)C/Tx:为定时计数器的方式选择控制端,C/Tx=用软件设置,如图所示.1记数方式(3)MX0,MX1为工作模式控制位:MX1MX0模式功能00013位C/TX01116位C/TX

37、1028位可自动重装初值C/TX113C/T0为两8位C/T,C/T1计数定时(机周)脉冲计数脉冲TXC/TXC/T工作控制函数C/TX=0C/TX=12024/8/1255(1)TFX为C/TX溢出标志位,可看作C/TX的最高位,如图所示,当C/TX全1后,再接收一个工作脉冲,则TFX由01,C/TX变全0.若允许C/TX记满后发中断请求,则由此位(TFX=1)向CPU发中断请求信号.在CPU响应,进入中断服务程序后,TFX由软件复位.未设置中断请求,也可作为查询标志,查询后,应及时用软件复位.(2)C/TX的工作控制位.0C/TX不工作TRX=1与GATEX,-INTX共同控制C/TX工作

38、当GATEX,-INTX满足工作条件时,可直接单独用软件设置TRX,控制C/TX工作。TFXC/TXzz3. 3.TCON(88H)TCON(88H)TF1TR1TF0TR0IE1IT1IE0IT0TF1TR1TF0TR0IE1IT1IE0IT0控制控制C/TC/T控制外部中断(控制外部中断(-INT-INTX X)2024/8/1256二C/T工作模式(C/T0有4种,C/T1有3种)1.工作模式0:13位C/T器,如图5-10所示(P115)。计数范围18192。计数寄存器:THX,TLX的低5位.当fosc=12MHZ定时范围18192us(8ms),当fosc=6MHZ定时范围2163

39、84us(16ms)控制函数与GATEX有关,表达式见前述。测量外部脉冲宽度原理:(1)设C/TX=0,即将C/TX设为定时方式;(2)设TRX=1,GATEX=1;(3)外部脉冲从-INTX输入,当由-INTX由01时C/TX开始定时计数;当-INTX由10时C/TX停止计数,则-INTX的正脉冲宽度为C/TX计数值T机周=C/TX计数值Tosc12。定时(机周)脉冲计数脉冲TXC/T工作控制函数C/TX=0C/TX=1THXTLX(8位)(5位)TFX图5-102024/8/12572.工作模式1:将模式0中TLX由5位改为8位,其余相同。模式0,1在溢出时,计数器值为0。当计数器值小于C

40、/TX的最大值时,应以计数值的补码为初值写入C/TX。C/TX为一次性计数器,每次计数都要重新设置计数初值(在程序中可以中断或查询实现)。对于循环定时或计数一般采用中断方式重装。3.工作模式2:控制原理、信号源和方式0,1相同,但计数初值可重装,电路如图5-12。定时(机周)脉冲计数脉冲TXC/T工作控制函数C/TX=1TFXTLXTHX重装图5-122024/8/1258TLX为计数器;THX为重装寄存器。工作过程如下:(1)THX,TLX同时装入相同初值;(2)启动计数后,TLX计数,THX保持初值;(3)TLX计数溢出后,溢出脉冲一方面使溢出标志位TFX =1,另一方面同时将THX打入T

41、LX,实现计数初值自动重装。串行通信以方式串行通信以方式2,作波特率发生器。,作波特率发生器。4.工作模式3(P118图5-13):只有C/T0存在模式3,C/T1没有模式3。在工作模式3下,C/T0分成两个计数器:(1)由TL0构成8位计数器,控制原理和信号源同前述,由TF0作溢出标志位;(2)由TH0构成另一个8位计数器,仅用于定时,即信号源只有机器周期脉冲,计数器工作控制信号为TR1,溢出标志位为TF1(因被TH0占据TR1、TF1,所以C/T1不能工作)2024/8/12595.2串行接口(P121)一一串行通信(串行通信(异步(本书上只介绍异步)、同步)异步传送必须规定收发双方的字符

42、格式,波特率及波特率与时钟频率的关系。1.字符格式:异步串行通讯以字(字符,帧)为单位进行。帧与帧可以连续,也可以断续,收发是随机的。0/10/10/1100/1 0/10/10/10/10/10/10/10/1101/01/0停起L止始S位位B停起止始位位M校S验B位第n字符(幀)第n-1字符(幀)8位数据数据数据1111空闲位2024/8/1260一般格式p:可以设置也可以不设置,不设置时可作为其他控制位使用,进行多机通讯时,可用此位来标识数据内容是地址还是数字。接收端接收到停止位时,表示一个字符结束,同时为接收下个字符作好准备,只要在停止位(H电平)后接到“O”信号就是新的字符起始位.当

43、停止位后没有马上接着传递下一个字符,则插入“1”状态或空闲位,线路处于等待状态。空闲位的存在是异步通讯的特征之一空闲位的存在是异步通讯的特征之一.波特率:数据在串行通讯中的传递速率.具体为每秒钟传递二进制数码的位数波特率=(字符数/S)(位数/字符)=*(位/S)=*波特例:设字符传递速率为120字符/S,每字符10位,则波特率=12010=1200波特而Td=1/1200=0.8333mS串行通讯的传递方式(见P123):单工、半双工、全双工。起始位(1位)数据位(58位)校验(1位)停止(12位)2024/8/1261二MCS-51单片机串行接口结构双缓冲器的结构图5-23:(专用模块有8

44、250,8251)对于MCS-51,发送、接收缓冲器共端口地址(99H),分别记为发送SBUF,接收SBUF。MCS-51发送SBUF即作TBR(发送缓冲器),又作TSR(发送寄存器),为发送双缓冲器结构。MCS-51接收SBUF即作RSR(接收移位寄存器),又作RBR(接收缓冲器),为接收双缓冲器结构。发送SBUF(99)TXD串行输出8051内部总线TI移位脉冲RI接收SBUF(99)接收移位寄存器接收移位寄存器RXD串行输入2024/8/1262三串行口的控制寄存器(SCON,PCON,IEX)1SCON(98H)D7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIR

45、ISM0SM1:串行工作方式选择。SM0SM1方式功能波特率000同步移位fosc/1201110位异步由定时器控制10211位异位fosc/32或fosc/6411311位异位由定时器控制SM2:多机通信控制位,主用于方式2和方式3。0不管RB8的状态,将前8位数据送SBUF,置RI=1在方式2,3中SM2=1允许多机通信0丢弃本次接收的8位数据,具体不置位RI。判RB8=1将前8位数据送SBUF并置位RI,请求中断。方式1中若SM2=1,则只有接收到有效停止位时,RI才被置1.方式0中SM2=0.2024/8/1263REN:接收允许控制的信号,REN=0禁止接收,=1允许接收当RI=0,

46、REN=1时,串口进行接收过程,即进入识别起始位过程。TB8是发送数据的第九位,在方式2,3时由TB8提供要发送的第九位数据.0表示前8位为数据在多机通信中TB8=1表示前8位为通讯对象机的地址zz也可以协议成奇偶校验位。也可以协议成奇偶校验位。zzRB8RB8:用于方式:用于方式2 2,3 3存放所接收的第存放所接收的第9 9位数据。位数据。zz0 0接收到前接收到前8 8位位为数据数据zzRB8=1RB8=1接收到前接收到前8 8位的数据位的数据为发送机送来的寻机地址码发送机送来的寻机地址码zzXX协议的奇偶校验位协议的奇偶校验位2024/8/1264TI:发送的中断标志。a.方式0时,发

47、送完第8位数据后,由硬件置1。b.其它方式(方式1、2、3):在发送停止位之前由硬件置1,表示一帧发送结束。*其状态可供软件查询,也可申请中断其状态可供软件查询,也可申请中断。发送中断响应,发送中断响应,TI不会自动复位,必须由软件复位不会自动复位,必须由软件复位。利用查询方法发送的TI处理程序段:OUT1:MOVSBUF,AJNBTI,$CLRTI利用中断方法发送的TI处理程序段:ORG0023SINT:CLRTIRETI2024/8/1265RI:接收中断标志a.方式0时,接收完第8位数据被置为1。b.方式1、2、3,当接收到停止位时,被置为1,表示一帧接收结束。RI状态可用软件查询,也可

48、以请求硬件中断,必须软件复位:用于查询接收的程序段为REV:MOVSCON,#52HJNBRI ,$CLRRI用于中断接收的服务程序为ORG0023HREV:CLRRIRETI2024/8/12662.电源控制寄存器PCON(P28,2.3.4节):只用其第D7=SMOD位 , PCONSMOD位 为 波 特 率 倍 增 位 , 在 方 式 1、 2、 3时,SMOD=1波特率加倍,如图所示。发送波特率时钟接收波特率时钟SOMD=1SOMD=1C/T1溢出SOMD=0SOMD=023.中断允许寄存器IE*当串口通过中断方式进行接/发时,必须使用IE中关于串口的中断管理位EA、ES。0全禁止*E

49、A为所有中断源的总的允许为所有中断源的总的允许/禁止控制位禁止控制位.EA=0禁止TI、RI的中断申请1全允许*ES仅控制TI、RI的有效性。ES=1允许TI、RI的中断申请2024/8/1267四.串行口的工作方式(P127)1.方式0自己阅读2.方式1:10位通用异步接口。帧结构:181一帧发送的条件:a.TI=0;b.执行MOVSBUF,A启动发送时,串口自动插入起、停位,并在发送移位脉冲作用下,依次将数据从TXD端发出。8位数据发送完后,在停止位开始时,置TI=1,TXD在新的数据未发送完之前保持1状态。TI=1的作用:a.当允许串行中断(EA=1,ES=1)作为中断申请信号,cpu响

50、应自动进入以0023H为首地址的中断服务程序。b.当不开中断(EA=0或ES=0)TI=1可作为查寻信息而得知一帧数据发送完。2024/8/1268方式1的波特率的计算(P131)B1=(2SMOD/32)(C/T1溢出率)=2SMOD/(216)fosc/12(256-x)发送时钟接收时钟2TL1溢出12foscS SMMOD=1OD=1S SMMOD=0OD=01/161/16负跳变检测RXDfRXD的16倍接接收收时时:a.置SCON-REN=1;b.RI=0;c.从RXD端检测由10的负跳变;d.接收到负跳变,即接收起始,便开始一帧数据的接收。2024/8/1269e.1.若设置SM2

51、=0,则接收完8位数据,(不需等到接收到停止位)置RI=1;2.若没使SM2=0而是设之为1,则必须在接收到停止位后方可置RI=1;f.满足上述条件,在置RI=1的同时,将接收移位寄存器内容存入SBUF,停止位装入RB8。接收无效的条件接收无效的条件:a.RI一直为1(忘记复位);b.8位数据接收完后未顺利收到停止位(在SM2=1时);接收时钟接收时钟:a.接收移位脉冲频率=波特率b.接收字符的检测脉冲频率=16倍波特率2024/8/1270接收时序波形图如下:D0D1D2D3D4D5D6D7停止位起始位789789789789789789789789789789SM2=1SM2=0RXD数据

52、检测脉冲移位脉冲RIzz注注: :在接收中以第在接收中以第7 7、8 8、9 9脉冲三次采样中二次相同的结脉冲三次采样中二次相同的结果作为采样值。果作为采样值。2024/8/1271发送时序波形图如下D0D1D2D3D4D5D6D7停止位起始位执行MOVSBUF,A产生发送启动脉冲SENDTXDTI2024/8/12723.串行工作方式2(P136):帧结构:1,8+1,1在发送时要预先将第九位数值装入SCON-TB8,其意义由用户自定义(一般用途有3个,前已许述).执行MOVSBUF,A后,串口自动把TB8装入到SBUF的第九位形成一帧信息,逐一发送,如下图所示:SBUFDQCLKDBUST

53、B8写SBUF接收条件:接收条件:zzRI=0RI=0,REN=1REN=1zzSM2=0SM2=0或第或第9 9位数据为位数据为1 1发送门控TXD2024/8/1273满足以上条件,前8位数据(D7-0)存入SBUF。第9位(来自对方的TB8)装入RB8。置位RI。波特率波特率B2=(2SMOD/64)fosc=fosc(1/2)(1/2)2SMOD)(1/16)S SMMOD=1OD=1S SMMOD=0OD=02fosc2发送时钟接收时钟1/161/162024/8/12744.方式3。帧结构:1,8+1,1原理同方式2,而波特率选择方法同方式1为方便快速选择波特率,参考书1的P36例

54、举了一些常用波特率TH1,TL1的取值。特别提醒特别提醒:SM2=1为多机通信状态,主要用方式2,3完成。与PC机单机通信主要采用方式1,多机通信状态,主要用方式2,3完成。2024/8/1275方式2、3单机的通讯发送时序如图所示:执行MOVSBUF,A产生发送启动脉冲SENDTXDTID0D1D2D3D4D5D6D7TB8停止位起始位2024/8/1276方式2、3单机的通讯接收时序如图所示:RXD数据检测脉冲移位脉冲RID0D1D2D3D4D5D6D7RB8停止位起始位7897897897897897897897897897892024/8/1277方式1、3波特率计算举例例1:设fos

55、c=6MHZ,fB=2400波特,以T1作波特率发生器,则初值:fB=(2SMOD/32)(fosc/(12(256-X)X=256-(fosc2SMOD)/(384fB)例2:设fosc=11.059MHZ,SMOD=0,TL1,TH1初值为FDHfB=(1/32)(11.059106)/(12(256-FDH)=9600波特5.多机通信:联机结构如图,由图可用TTL电平直接通信(P133).TXDRXD8051(主机)RXDTXD(从机1#)RXDTXD(从机2#)2024/8/1278主机与从机通信内容是地址,还是数据,用TB8-RB8作为标志位,定义从机地址(编号)分设为00H,01H

56、,为区别作如下定义0表示前8位(D70)为数据TB8-RB8=1表示前8位(D70)为地址通信方式为方式2,3注意SM2的变化:先从机的SM2全1,某从机接收主机发送的地址与自己的地址相同时,则将自己的SM2由1变0,实现从机与主机的单机连通.2024/8/12795.3中断系统(P103)一.概述二.MCS-51中断系统与控制5个源,2个级,4个控制器(IE,IP,TCON,SCON)1.中断源1)外部:-INT0(P3.2),-INT1(P3.3),借用TCON低4位进行控制,IE1(TCON.D3),IT1(TCON.D2),IE0(TCON.D1),IT0(TCON.D0).0低电平申

57、请有效ITX=1下跳沿申请有效用户可用指令设置ITX,CPU在每个机周的S5P2对-INTX进行检测,发现相邻两个S5P2有状态变化则认为有申请.2)内部:C/T1,C/T0溢出(TF0,1),TI+RI(串口)2.TFX,TI,RI在控制字中介绍.2024/8/12802.中断控制1)TCON(88H)TF1TR1TF0TR0IE1IT1IE0IT0RIEXSQ外部中断条件电路S5P2-INTXTFX:C/TXTFX:C/TX溢出时溢出时, ,硬件置其硬件置其1, 1,中断响应由硬件复位中断响应由硬件复位; ;查询时查询时由软件复位由软件复位. .2024/8/1281硬件置1,软件清0(复

58、位).3)IE(A8H):EA/ESET1EX1ET0EX0为两级允许机制:EA为总禁/允;其余为对象禁/允.0禁止E?=1允许ORG0023H关中断TI=1?发送服务接收服务返回zz2)SCON(98H):D0=RI,D1=TI;2)SCON(98H):D0=RI,D1=TI;zz关系关系 RI+TI,RI+TI,共同对应共同对应ES,ES,即同为一个中断服务程序入口地址即同为一个中断服务程序入口地址( (应注意中断服应注意中断服务程序的结构务程序的结构). ).2024/8/12824)IP(B8H):/PSPT1PX1PT0PX0同级后同级先0低级P?=1高级优先级控制原则A.高级可中断

59、低级;B.同级不可互相中断;C.多级同时申请按查询顺序响应.2024/8/1283三.中断响应(P106)1.中断响应过程在每机周的S6查询中断申请标志位,若有标志位为1,则在下一个机周S1开始响应,响应条件为:1)CPU当前运行的程序不是高级或同级中断服务程序;2)查询中断请求的机周是当前指令的最后一个机周(原因是为确保一条指令完整执行).3)正在执行的指令不是RETI或访问IE或IP指令.否则必须再执行一条指令后才能响应中断。2024/8/1284CPU响应中断后,硬件完成如下工作:1)将断点地址压入堆栈;(SP)PCH,SPSP+1,(SP)PCL,SPSP+12)将中断源对应的服务入口

60、地址打入PC.(实际是硬件自动生成一条长调用指令LCALL实现的)。例:响应C/T0中断请求,生成的长调用指令为LCALL000BH(若8单元不够写服务程序,则在入口地址安排一条无条件转移指令)中断服务程序从最后一条指令必须是RETIRETI作用:1)将内部优先级状态触发器清零;2)从堆栈中弹出两个字节(断点地址)到PC,即返回原断点处执行被中断程序2024/8/12852中断响应时间:从查询请求标志位到转向中断服务程序入口地址所需的机器周期数,一般38个机器周期.。响应中断最短的时间:CPU查询中断标志的周期正好是一条指令的最后一个机器周期。硬件自动生成LCALL指令需2个机器周期,所以最短

61、响应周期为3个机器周期.最长的响应周期:CPU查询中断标志时,正好是开始执行RETI或询问IE、IP的指令。这类指令需2个机器周期,而紧随这类指令的指令又是乘、除指令,这类指令需4个机器周期,所以最长响应周期为2+4+2=8机器周期.。2024/8/12863中断请求的撤除当中断请求信号被设置成低电平有效时,(ITX=0),在响应后应及时将中断请求标志清0,否则仍有效,在每个机器周期的S5P2会被响应,造成中断系统混乱。对于中断服务,TFX、IEX作为内部申请标志信号,在中断响应后由硬件自动复位,但IEX对应的外部中断请求,必须考虑-INTX为低电平申请有效时的及时清除问题。若ITX=0,在响

62、应后未将-INTX变为1,当IEX被清零后,由于-INTX仍为L,则在紧接着的机器周期的S5P2又会被采样使得IEX不从LH而产生误申请。2024/8/1287外部中断申请信号经D触发器向-INTX发中断请求。触发器初态为1,当有外部中断请求时,请求信号经反相器变为高频脉冲,Q由HL(D=GND=0)。当中断被响应后,进入中断服务后,必须首先通过P1.0输出一个低电平信号,使触发器置1,即撤销低电平的中断请求,相应指令段为ANLP1,#0FEHORLP1,#01H-INTX8051P1.0QDSCP外部中断申请信号解决的办法如图所示:解决的办法如图所示:2024/8/1288四中断源的扩展(P

63、111)将TLX、THX初值设为FFH,并设C/TX=1,TRX=1,GATEX=0。外部中断源从TX输入,负跳变有效.当TX=“下跳沿”时,TLX产生溢出,溢出脉冲使TFX=1发中断请求脉冲,同时THX重新添入TLX,供下次申请。定时(机周)脉冲计数脉冲TXC/TX=1TFXTLXTHX重装TRXGATEXINTXC/TC/TX X启动启动1 1利用利用C/TC/TX X扩展外部中断源,如图所示:扩展外部中断源,如图所示:2024/8/1289此时的中断服务入口地址为C/TX的入口地址000BH,001BH。根据以上设置,相应的程序段为:MOVTMOD,#06H;00000110MOVTH0

64、,#0FFH;设置计数器的初值MOVTL0,#0FFH;SETBTR0;启动或允许记数SETBET0;允许C/T0中断或开C/T0中断SETBEA;开中断2查询式扩展中断源(自阅)GATE0=0,C/T0=1,M01M00=102024/8/1290第3章MCS-51指令系统与汇编设计(P36)本章学习提要1指令字段结构2指令寻址方式3指令字段数及代码结构4指令执行时间第一节概述第二节寻址方式第三节数据传送指令第四节算术运算类指令第五节逻辑运算及移位类指令第六节控制转移类指令第七节布耳变量操作类指令2024/8/12913.1指令格式3.1.1概述一台计算机所能识别、执行的指令集合就是它的指令

65、系统。指令系统是由计算机硬件设计所决定的。MCS51机指令系统使用的44种助记符、代表33种功能。助记符与寻址方式相配合、构造出111条寻址指令(实际上有256条寻址指令,如MovRn,data。实际为8条指令,分别是movR0,data;movR1,data,movR7,data,操作码分别对应“78H7FHDATA”)。2024/8/1292指令分类:单字节49条1.按字节双字节46条三字节16条12MHZ6MHZ单周期64条1us,2us2.按执行时间双周期45条2us,4us三周期2条4us,8us数值29条算术24条3.按功能逻辑24条位控17条控转17条2024/8/12933.1

66、.2指令格式1、字节指令:特点:操作码与操作数在同一个字节,或无需操作数功能实现。例1:MOVA,Rn;MOVRn,A:工作寄存器与累加器同在一字节,操作数在Rn或A中,具体指令结构为:11101rrr11111rrr操作码操作数操作码操作数操作码指明哪个寄存器传什么寄存器或本指令功能。rrr指明与A交换的Rn。rrr=000对应Ro,其余类推。例2:INCA04H;DECA14H、无操作只对指定的寄存器操作。2024/8/12942、二字节指令:第一字节为操作码,第二字节为操作数,例:MOVA,DATA3、三字节指令:第一字节为操作码,其余两个字节为操作数.例:CJNEA,DATA,rel;

67、B5Hdata,relORLdirect,#DATA;43Hdirect,DATA2024/8/12953.1.3汇编指令1汇编语言特点(自阅);2MSC51汇编指令符号:Rn:n=0,1,2,37,表示当前寄存器值。Ri:i=0,1用于间值寄存器的当前工作寄存器。Direct:8位片内RAM单元地址.可以是低128个单元 地址,也可以是专寄单元地址或符号,指令中direct表示直接寻址。Addr11:51机特有指令中地址段,仅限于ACALL,AJMP两种局部转向指令(转移范围为2k)。2024/8/1296Rel:8位带符号补码数,相对转移指令中的偏移量,即转移范围为128127,或在基址中

68、可倒退寻址。最大倒退单元数为128,可前进寻址最远为基址加127单元。DPTR:数据指针。专用于片外RAM寻址。指针宽度为16位。也可分为DPH,DPL分别作直接地址使用。Bit:内部可位寻址空间或专寄中的直接位。B:专寄,指令必用此寄存器。C:进位标志,或布尔处理器中作布尔累加器。:间址寄存器的前缀标志。如MOVXDPTR,A。其余自阅。2024/8/12973.1.4汇编语言的语句格式和伪指令编语言格式:,;伪指令:汇编语言源程序可以通过手工汇编或汇编系统汇编成为目标程序。伪指令是程序员发给汇编程序的命令。用来设置符号值、保留和初始化存储空间。控制用户代码的位置,所以也成为汇编指令的控制指

69、令。伪指令只出现在源程序中,不产生可执行目标码,即不影响程序执行。2024/8/129851机中常用的伪指令:1)ORG:规定目标程序的起始地址。2)END:放在源程序最后、表明结束。3)EQV:给符号名称赋予一个特定值。赋值后的字段名称可作为地址、立即数使用。4)DB:在程序存储器中定义字节数据。5)DW:在程序存储器中定义16位数据。DB、DW定义的数表不能超过80个数据。但可以分别定义多余80个数的数据表。6)DS:用于指令从指定单元开始。保留指定数目的字节单元。例:ADDRTAB:DS20表示从ADDRTAB到表的地址开始保留20个连续单元。7)BIT:用于给字符名称赋予位地址。格式:

70、(字符名称)BIT位地址。例:AQBITP1.0;以AQ代替P1.0或将P1.0对应的地址赋给AQ,其后程序中AQ作为P1.0的位地址使用。2024/8/12993.2寻址方式(P40)寻址:就是如何确定操作数或操作数地址问题。1.寄存器寻址:操作数在寄存器中,例如:MOVA,Ro;A(Ro)寻址范围:1)4组工作寄存器Rn(n=07),可由Rs1,Rs0组合状态选择。2)特寄:A,B,DPTR等。2.寄存器间址:寄存器中操作数地址如图所示:对应指令MOVA,Ro;A(Ro)注意点:1)、对内部RAM低128位单元寄存器间址只适用于Ro,R1。2)、对片外RAM超过低256单元必须用DPTR间

71、址,如:MOVXA,DPTR。在低256单元即可用DPTR,也可用R1,R0。如:MOVXR1,A。3)、堆栈操作指令(PUSH,PUP)实质是以堆栈指针Sp作为间址寄存器,可以说是寄存器间址方式的特例。F2H40HF2H40HR0A2024/8/121003.立即寻址方式操作数在指令中给出。立即数在前面加标识。两种立即数:a.#data8b.#data16。4.直接寻址直接给出操作数所在的存储器单元地址的方式。直接范围:(1)访问程序存储器:长转指令16位(LJMPLCALL),局部指令11位(AJMP.ACALL)。(2)访问片内存储器:8位2进制,低128单元直接给出地址;高128单元可

72、给特寄地址也可给符号。特寄只能直址访问。位访问也只能使用直址方式,称作直接位寻址。字节的直接访问称作直接字节寻址。2024/8/121015.位寻址方式(直接位寻址)以C作为位处理累加器,位寻址范围前已述。6.变址寻址方式以PC、DPTR寄存器为基础,A为变址寄存器,两者相加形成16位操作数地址(也是一种间址方式)变址地址只有三条:1、MOVCA,ADPTR;2、MOVCA,APC;A(A)+(PC)3、JMPADPTRMOVC为针对ROM(程序存储器)设置的指令.三条指令均为1字节指令。2024/8/121027.相对寻址方式具有相对转移功能指令采用,即指令中给出相对的地址偏移量rel,基址

73、为PC的当前值,转移的目标地址码由如下公式表示:目标地址转移指令地址该指令字节数relrel为8位二进制补码数,取值范围128127例:JC80H;C=0,(PC)值不变,C=1则转移的目标地址=(PC)+2+80H(80H=-80H)补码2024/8/121033.3指令系统3.3.1数据传输指令(P44)共29条助记符:MOV(内部RAM),MOVX(片外RAM),MOVC(用于ROM),XCH,XCHD,SWAP(交换)PUSH,POP(堆栈),一共8种。一.内部RAM数据传输指令1)立即数传输指令:一共5条:MOVA,#data;A#data.MOVdirect,#data;derec

74、t#dataMOVRn,#data;Rn#dataMOVRi,#data;(Ri)#dataMOVDPTR,#data16;DPTR#data16对于此3字节指令,在M中的存放如图所示1001000010010000立即数高立即数高8 8位位立即数低立即数低8 8位位2024/8/121042.内部RAM单元之间的传输指令共有5条MOVdirectRn;MOVdirectRiMOVdirect2,direct1;可实现RAM单元之间直接数据传输3累加器数据传输指令,共6条:MOVARn;MOVAdirect;MOVARi2024/8/12105二、外部RAM数据交换指令组MOVXADPTR;M

75、OVXARi;外部RAM只能与A交换例:将片外RAM0040H单元读入片内RAM40H号单元程序段如下:MOVDPTR,#0040H;也可以MOVR0,40HMOVXA,DPTR;MOVXA,R0MOV40H,AMOV40H,A注:执行MOVXA,DPTR或Ri,-RD(P3,7)有效MOVXDPTR,A或Ri,A,-WR(P3,6)有效2024/8/12106三、程序存储器数据传输指令(二条)MOVCA,A+DPTR;MOVCA,A+PC;两条指令的区别:1.A+PC是以PC为起点,寻找(A)+(PC)对应的单元地址,例如:BCD-DIP:INCA;MOVCA,A+PC;一字节指令,当前PC

76、值与表格还差RET;一个单元(该单元存放差RET指令,TAB:DBC0H,F9H,;所以在执行前,先执行一条INCA.注:在执行MOVCA,A+PC时一定要数该指令与要找的数表的首地址差几个单元,差X个则在执行前作A+X.2A+DPTR是以DPTR为起点,查表前只要将表格首地址送入DPTR,执行此指令即可顺利查表.常用于查表常用于查表2024/8/12107四、数据交换指令组(五条)XCHA,Rn;(A)(Rn);XCHA,direct;(A)(direct)XCHA,Ri;(A)(Ri);XCHDA,Ri;(A)30(Ri)30SWAPA;(A)30(A)74五、堆栈操作指令组五、堆栈操作指

77、令组(二条二条)PUSHdirect;SP(SP)1,(SP)(direct)POPdirect;direct(SP),SP(SP)-1(自阅P47指令段例子)2024/8/121083.3.2算术运算类指令(共24条)(P48)注意该类指令运行结果对PSW-CY,AC,OV的影响一,加法指令组(注,均以A为目的操作数)Rn;A(A)+(Rn)direct;其余类推RidataRn;A(A)+(Rn)+(CY)Direct;其余类推RidataADDCA,ADDCA,ADDA,ADDA,2024/8/12109二.带借位减法指令(MCS-51减法指令均带借位)Rn;A(A)-(Rn)-(CY)

78、Direct;其余类推Ridata注:对于无符号数,若进行不带借位运算,则在执行减法指令时先运行CLRC,将CY清零;做无符号数的加减法时,若存在半进/借位,则PSW-Ac被置1,若存在字节进/借位,则PSW-CY被置1。做有符号数的加减法时,若存在溢出,则PSW-OV被置1。例:01111000两个正数相加11001001负正01101001010101001101110001110101变为负数,实际结果溢出,使OV=1.变为正数,实际结果也溢出,使OV=1.SUBBA,SUBBA,2024/8/12110三、四.加1,减1指令(不影响psw)A;A(A)-1A;A(A)-1Rn;其余类推

79、Rn;其余类推INCdirectDECdirectRiRiDPTR2024/8/12111五五.乘除指令乘除指令MULAB;(B)(A)(A)(B)DIVAB;A(A)/(B)的商,B(A)/(B)的余运算后总有PSW-CY0乘法运算乘法运算:积FFH使PSW-OV1,否则为0.除法运算除法运算:若余数为0,则PSW-OV0,否则为1.2024/8/12112六六.十进制调整指令十进制调整指令DAA:专为BCD码加法运算的结果调整而设立的.例:7+815按BCD码应为00010101若不调整,结果为7+8FH.调整原理调整原理:加法运算结果存于A中,然后运行DAA.DAA指令以PSWAC、CY

80、为依据进行调整,即当AC1,CY=0时(A30)+06H或A(A)+06HCY=1,AC=0时A(A)+60HCY=1,AC=1时A(A)+66H例:7+8FH+06H=15BCD注:(1)不影响PSW-OV位(2)不调整BCD码减法结果(3)借助CY,AC可实现多位BCD码运算调整形成向高形成向高位的进位,位的进位,并产生本并产生本位实际数位实际数据据2024/8/121133.3.3逻辑运算及移位类指令(24条)(P53)1.逻辑运算指令组ANLRn;A(A)RnORLA,direct;XRLRi;其余类推#data;ANLA;direct(A)(direct)ORLdirect,XRL#

81、data;其余类推2024/8/12114二.累加器清0,取反指令(2条)CLRA;A0CPLA;AA三.位移指令组(4条,仅限A)RLRRRLCRRCA;CA7A0CA7A0CA7A0CA7A02024/8/121153.3.4控制转移类(17条)(P58)一.无条件转移指令1.长转移:LJMPaddr16;PCaddr16,转移范围64K2.绝对转移:AJMPaddr11;PC(PC)+2,(PC100)addr11执行本指令转移的目标地址PC100addr11只能在PC当前高五位所指定的存储区内,否则出错。例例.当AJMPaddr11正好放在第M块的FFEH、FFFH单元时,执行时作PC

82、(PC)+2,高5位由M变成M+1,改变了块号,(A1511)+addr11希望是在M块,实际进到了M+1块。2024/8/121163.相对短转移(128127地址内转移)指令SJMPrel;PC(PC)+relrel为补码,可实现以(PC)为中点,前后各半员的相对寻址目的地址目的地址(PC)+2+rel4.相对长转移:JMPA+DPTR;PC(A)+(DPTR)利用此指令可实现程序散转.或B树分叉,因此也称此指令为散转指令.2024/8/12117例:根据R2内容,转向各个处理程序(P73)(R2)0,转向PRG0PRG0:(R2)1,转向PRG1PRG1:(R2)n,转向PRGnPRGn

83、:程序清单:MOVDPTR,#TABJ1MOVA,R2RLCAJNCNADDINCDPHNADD:JMPA+DPTRTABJ1:AJMPPRG0AJMPPRG1AJMPPRGn表内转移指令占2个字节所以乘2入口DPTR散转表地址A(R2),建立表内指针转移范围超页?建立新页地址N执行JMPA+DPTR(实现散转)(R2)=012n2024/8/12118二.条件转移指令组(8条)(P59)1累加器判0转移:JZrel;若(A)=0转,即PC(PC)+2+relJNZrel;若(A)=1转,即PC(PC)+2+rel2数值比较转移指令(4条)CJNZA,#data,rel;若(A)data则CJ

84、NZA,direct,rel;PC(PC)+3+relCJNZRn,#data,rel;其余类推CJNZRi,#data,rel;这里Ri指片内低128单元注:(1)此类操作影响CY:左操作数右操作数时,CY0,反之CY1(2)可利用此四条指令实现数值比较功能3.减一判非零转移(2条)DJNZRn,rel;Rn(Rn)1,direct(direct)1DJNZdirect,rel;若(Rn)或(direct)0则转即PC(PC)+(2or3)+rel;否则PC(PC)+(2or3)2024/8/12119三子程序调用与返回指令(P61)1.长调用:LCALLaddr16;pc(pc)+3,(s

85、p)(sp)+1,;(sp)(pc)70,(sp)(sp)+1,;(sp)(pc)158,pc150addr162.绝对调用:ACALLaddr11;pc(pc)+2,(sp)(sp)+1,;(sp)(pc)70,(sp)(sp)+1,;(sp)(pc)158,pc100addr11注:与AJMP指令相同,也存在调用范围问题。3.返回指令:(1)子程序返回RET;(pc)158(sp),(sp)(sp)-1,(2)中断服务程序返回RETI;(pc)70(sp),(sp)(sp)-1.另:NOP;PC(PC)+1,空操作指令,空耗一个机器周期时间,可用作软件延时软件延时.2024/8/12120

86、3.3.5布尔变量操作类指令(共17条)(P55)位地址表达方式:(1)直接地址方式。0D5H,34H,99H等(2)点操作符方式:PSW.5,A.7,IE.1等(3)位名称方式:TR0,TE1,IE1,TI,RI等(4)用户定义方式:DAIBITEX0注:共11种助记符。其中SETB,JC,JNC,JB,JNB,JBC为布尔变量操作专用.2024/8/12121一一.位传送指令组(位传送指令组(2条)条):MOVCbit与字节MOV指令区别:如果一个操作数为C,则为位传送指令例,将30H位内容送到05H位:MOVC,30HMOV05H,C二二.位逻辑操作指令组(共位逻辑操作指令组(共10条)

87、条)1.清、置、取反指令CLRC;SETBC;CPLCCLRBit;SETBbit;CPLbit2位逻辑运算ANLC,bit;ORLC,bitANLbit,C;ORLbit,C2024/8/12122例1:编程实现:L=AB=AB+ABABit10HBBit11HNABit12HNBBit13HLBit14HORG8000HCPLA;A不是ACCMOVC,AMOVNA,C;NAACPLACPLBMOVC,BMOVNB,CCPLBANLC,A;CABMOVA,CMOVC,NAANLC,B;CABORLC,A;CABMOVL,C2024/8/12123三位条件转移指令(5条)Jcrel;Jncre

88、l;Jbbit,rel;Jnbbit,rel;Jbcbit,rel;位状态为1转,并bit0。这里两个符号段的为二字节指令,三符号段为三字节指令。满足条件的指令使得pc(pc)(2或3)rel不满足条件的指令顺序执行,既有pc(pc)(2或3)注:本节所讲述指令的字节及机器周期数,请自行查表检查。2024/8/12124例2.将2001的ASCII代码转换为BCD码设ASCII码装于以ASC为起始地址的单元中,转换的BCD装于以BCD为起始的两个单元中。MOVR2,#4;MOVR0,#ASCMOVR1,#BCDSEND:MOVA,R0ANLA,#0FHMOVR1,AINCR0INCR1DJNZ

89、R2,#0,SENDMOVR1,#BCDMOVA,R1JWAPA;INCR1XCHDA,R1DECR1MOVR1,AINCR1INCR1MOVA,R1SWAPAINCR1XCHDA,R1DECR1MOVR1,AASC:DB32H,30H,30H,31H2024/8/12125例3:输入一个ASCII命令字符,要求按输入的命令字符转去执行相应的处理程序。设命令字符为“A”,“D”,“E”,“L”,“M”,“X”,“Z”七种,对应的处理程序入口标号分别为XA,XD,XE,XL,XM,XX和XZ,采用以0作为结束标志的表格结构。l程序入口条件:相应的命令字符由A提供。l本例的目的是通过命令字符使得(

90、PC)HXAsc码,(PC)L(命令字符)Asc码,结果如图所示:XA处理程序XD处理程序XZ处理程序读入命令字根据命令字查表本程序特点:采用改变基址而不改变偏移量办法查表.2024/8/12126入口从命令字表中读命令字DPTR(X)(命令字符)A0执行JMPA+DPTR实现(PC)H(X)ASC码,(PC)L(命令字符)ASC码转相应命令字符的处理程序命令字为“0”否?作查不到处理(A)A,D,Z改变指针程序原理框图:程序原理框图:2024/8/12127程序如下:程序如下:ORGCTAB3CTAB3:MOVDPTR,#TAB3;转向表首地址转向表首地址MOVB,A;命令字在;命令字在A中

91、,将命令字保护中,将命令字保护LOOP3:CLRA;取表中命令字取表中命令字MOVCA,A+DPTR;查表查表JZLEND;若等于零,说明已查完,而本次(若等于零,说明已查完,而本次(A)不)不;是规定的命令字符,结束;反之继续查。是规定的命令字符,结束;反之继续查。INCDPTR;查询下一个字符是否与命令字相同查询下一个字符是否与命令字相同CJNEA,B,LNF3;所取命令字与给定命令字是否相同,所取命令字与给定命令字是否相同,不相同转去作取下一个命令字的准备不相同转去作取下一个命令字的准备CLRA;相同说明已查到,进入取相应程序的入口地址相同说明已查到,进入取相应程序的入口地址MOVCA,

92、A+DPTR;取取“X”MOVB,A;B“X”INCDPTR;取入口地址的下一个;取入口地址的下一个ASC码码2024/8/12128CLRA;MOVCA,A+DPTR;取出下一个取出下一个ASC码码MOVDPL,A;入口低入口低8位由入口标号低字符位由入口标号低字符ASCII代码提供代码提供MOVDPH,B;入口地址高;入口地址高8位位,由入口标号高字符由入口标号高字符ASCII代码提供代码提供CLRA;JMPA+DPTR;PC(X)ASC码(命令字符)码(命令字符)ASCII码码LNF3:INCDPTR;进入下一个入口地址查找进入下一个入口地址查找INCDPTRSJMPLOOP3LEND:

93、(查不到处理程序)(查不到处理程序)TAB3:DB“A”;ASCII码码A命令字符命令字符DW“XA”;命令字符处理程序入口标号命令字符处理程序入口标号DB0;表格结束标志表格结束标志l l本例为查表无序转移实用例子本例为查表无序转移实用例子4.1 MCS4.1 MCS 5151与与C C语言语言 C51C51语言优点:语言优点:对单片机的对单片机的指令系统不要求了解指令系统不要求了解,仅要求,仅要求对对MCSMCS 5151的存储的存储器结构有初步了解器结构有初步了解;寄存器分配、不同存储器的寻址及数据类型等细节可由编寄存器分配、不同存储器的寻址及数据类型等细节可由编译器管理;译器管理;程序

94、有规范的结构,可分为不同的函数,可使程序有规范的结构,可分为不同的函数,可使程序结构化程序结构化;采用自然描述语言、以近似人的思维过程方式使用,改善采用自然描述语言、以近似人的思维过程方式使用,改善了程序的了程序的可读性可读性;编程及程序编程及程序调式时间显著缩短调式时间显著缩短,大大提高效率;,大大提高效率;提供的库函数包含了许多标准子程序,且具有较强的数据提供的库函数包含了许多标准子程序,且具有较强的数据处理能力;处理能力;程序程序易于移植易于移植。 用汇编语言程序设计用汇编语言程序设计MCSMCS 5151系列单片机应用程序时,编程系列单片机应用程序时,编程者必须者必须具体地组织、分配存

95、储器资源和处理端口数据具体地组织、分配存储器资源和处理端口数据。第第4章章MCS-51单片机的单片机的C语言简介语言简介 用用C C语言编写单片机程序与标准的语言编写单片机程序与标准的C C语言程序的语言程序的不同不同在于在于: :库函数不同。库函数不同。数据类型有一定区别,数据类型有一定区别,C51C51增加了几种增加了几种MCSMCS 5151系列单片系列单片机特有的数据类型。机特有的数据类型。 变量的存储模式不同,变量的存储模式不同,C51C51的存储模式与的存储模式与MCSMCS 5151系列单系列单片机的存储器紧密相关的片机的存储器紧密相关的 。 输入输入/ /输出处理不同,输出处理

96、不同,C51C51的输入的输入/ /输出是串行口来完成输出是串行口来完成的。的。 在函数使用方面也有一定的区别。在函数使用方面也有一定的区别。C51C51中有专门的中断中有专门的中断服务函数。服务函数。 对于在对于在MCSMCS 5151中使用的高级语言中使用的高级语言C C语言,虽然不像用汇语言,虽然不像用汇编语言那样要具体地组织、分配存储器资源和处理端口数编语言那样要具体地组织、分配存储器资源和处理端口数据,据,但对数据类型与变量的定义,必须要与单片机的存储但对数据类型与变量的定义,必须要与单片机的存储结构相关联结构相关联,否则编译器不能正确地映射定位。,否则编译器不能正确地映射定位。4.

97、2 C514.2 C51数据类型与存储方式数据类型与存储方式一、一、C51C51数据类型数据类型 Franklin C51Franklin C51编译器支持的数据类型有:位型(编译器支持的数据类型有:位型(bitbit)、)、无符号字符型(无符号字符型(unsigned charunsigned char)、有符号字符型()、有符号字符型(signed signed charchar)、无符号整型()、无符号整型(unsigned intunsigned int)、有符号整型)、有符号整型(signed intsigned int)、无符号长整型()、无符号长整型(unsigned longu

98、nsigned long)、有符)、有符号长整型(号长整型(signed longsigned long)、浮点型()、浮点型(floatfloat)、双精度浮)、双精度浮点型(点型(doubledouble)以及指针类型等)以及指针类型等. . 在在C C语言程序中的表达式或变量赋值运算中,有时会出语言程序中的表达式或变量赋值运算中,有时会出现现与运算对象的数据类型不一致与运算对象的数据类型不一致的情况,的情况,Franklin C51Franklin C51允允许任何标准数据类型之间的许任何标准数据类型之间的自动隐式转换自动隐式转换。隐式转换按以。隐式转换按以下优先级别自动进行:下优先级别

99、自动进行: bit char int long floatbit char int long float signed unsigned signed unsigned表表4 4 1 Franklin C511 Franklin C51编译器的数据类型编译器的数据类型数据类型数据类型长度长度(bitbit)长度长度(bytebyte)数据表示域数据表示域unsigned char810255signed char81 128127unsigned int162065535signed int162 3276832767unsigned long32404294967295signed long

100、324 21474836482147483647float3241.176E 383.40E+38(6位数字)位数字)double6481.176E 383.40E+38(10位数字)位数字)指针类型指针类型243存储空间存储空间065536bit10,1sbit10,1sfr810255sfr16162065535二、二、C51C51数据变量的存储方式数据变量的存储方式 位型变量位型变量用位型数据类型定义,位变量的值可以是用位型数据类型定义,位变量的值可以是1 1(truetrue)或)或0 0(falsefalse)。与)。与MCSMCS 5151特性操作有关特性操作有关的位变量必需定位在

101、的位变量必需定位在MCSMCS 5151片内片内RAMRAM的的位寻址空间位寻址空间中。中。 字符型变量字符型变量用无符号或有符号字符型数据类型定义,用无符号或有符号字符型数据类型定义,即字符变量长度为即字符变量长度为1 byte1 byte。整型变量整型变量用无符号或有符号整型数据类型定义用无符号或有符号整型数据类型定义 , 占用占用 2 byte2 byte存储空间。存储空间。 长整型变量长整型变量用无符号或有符号长整型数据类型定义,用无符号或有符号长整型数据类型定义,占用占用4 byte4 byte存储空间。存储空间。 浮点型变量浮点型变量用浮点型数据类型定义,占用用浮点型数据类型定义,

102、占用4 byte4 byte存存储空间。储空间。 egeg:整型数据的值为整型数据的值为0x12340x1234,在内存中的存放方式。在内存中的存放方式。egeg:长整型数据的值为长整型数据的值为0x123456780x12345678,在内存中的存放,在内存中的存放方式。方式。浮点数的取值为:浮点数的取值为:eg:eg: 浮点数浮点数+124.75+124.75在内存中的存储数据。在内存中的存储数据。+124.75=+1111100.11B=+1.111100112+110则符号位为:则符号位为:S=0S=08 8位阶码为:位阶码为: E-1111111=E-1111111=110110,则

103、为,则为1000010110000101B B尾数为:尾数为: 1111001 10000000 000000001111001 10000000 00000000SEEEEEEEEM.M数据为:数据为:0 010000101000010 1 11111001 10000000 000000001111001 10000000 00000000浮点数在内存中的浮点数在内存中的存储格式存储格式:MMMMMMMMMMMMMMMMEMMMMMMMSEEEEEEE内容内容+0+1+2+3地址地址 为了增强程序的可读性,为了增强程序的可读性,C51C51允许使用允许使用别名别名形式来定形式来定义,其方法

104、是在源程序开头位置使用义,其方法是在源程序开头位置使用#define#define或或typedeftypedef语句定义数据类型的别名形式。具体格式为:语句定义数据类型的别名形式。具体格式为:eg:eg: #define uchar unsigned char #define uchar unsigned char #define uint unsigned int #define uint unsigned int typedef unsigned int WORD typedef unsigned int WORD; 这样,在其后的程序就可以用这样,在其后的程序就可以用ucharucha

105、r代替代替unsigned unsigned charchar,用,用uintuint或或WORDWORD代替代替unsigned intunsigned int来定义变量,从来定义变量,从而节省书写时间、减少错误和增强可读性。如:而节省书写时间、减少错误和增强可读性。如: uchar xuchar x;/定义变量定义变量x x为无符号字符型变量为无符号字符型变量 uint yuint y;/定义变量定义变量y y为无符号整型变量为无符号整型变量 WORD zWORD z;/定义变量定义变量z z为无符号整型变量为无符号整型变量#define别名别名C51固有的数据类型固有的数据类型typed

106、efC51固有的数据类型固有的数据类型别名别名;4.3 C514.3 C51数据的存储类型与存储关系数据的存储类型与存储关系 一、一、C51C51数据的存储类型数据的存储类型存储类型存储类型与与MCS 51系列单片机存储空间的对应关系系列单片机存储空间的对应关系备备 注注data直接寻址片内数据存储区,直接寻址片内数据存储区,访问速度快访问速度快低低128字节字节bdata可位寻址片内数据存储区,可位寻址片内数据存储区,允许位与字节混合访问允许位与字节混合访问片内片内20H2FH RAM空间空间idata间接寻址片内数据存储区,可访问间接寻址片内数据存储区,可访问片内片内全部全部RAM片内全部

107、片内全部RAMpdata分页分页寻址寻址片外片外数据存储区,每页数据存储区,每页256字节字节由由MOVX Ri 访问访问xdata片外片外数据存储区,数据存储区,64KB空间空间由由MOVX DPTR 访问访问code程序存储区,程序存储区,64KB空间空间由由MOVC DPTR 访问访问存储类型存储类型长度(长度(bit)长度(长度(byte)值域范围值域范围data810255bdata810255idata810255pdata810255xdata162065535code162065535 带存储类型的变量定义变量定义的一般格式为: 数据类型数据类型 存储类型存储类型 变量名变量名

108、;egeg:charchar datadata var1var1;/字符变量Var1定义为data存储类型bitbit bdatabdata flagsflags; /位变量flags定义为bdata存储类型floatfloat idataidata x x; /浮点变量x定义为idata存储类型unsigned intunsigned int pdatapdata var2var2;/无符号整形变量var2为pdada存储类型unsigned charunsigned char xdataxdata vector104vector104;/无符号字符数组变量为xdata存储类型 定义data

109、 char xdata char x与定义与定义char data xchar data x是等价的,但是等价的,但应尽量使用后一种方法应尽量使用后一种方法。二、二、C51C51存储模式存储模式 C51 C51允许在变量类型定义之前指定存储模式。允许在变量类型定义之前指定存储模式。 有两种方法来指定存储模式,如指定有两种方法来指定存储模式,如指定COMPACTCOMPACT模式:模式: 方法方法1 1:在编译时指定。如使用命令:在编译时指定。如使用命令 C51 PROC.C COMPACTC51 PROC.C COMPACT 方法方法2 2:在程序的第一句加:在程序的第一句加预处理命令预处理命

110、令 # pragma compact # pragma compact C51 C51支持混合模式,一般在支持混合模式,一般在编程时很少指定存储模式编程时很少指定存储模式,而是在,而是在定义变量的同时指定存储模式定义变量的同时指定存储模式。如。如char data xchar data x,就表示为在片,就表示为在片内内RAMRAM中定义字符型变量中定义字符型变量x x。 存储器模式存储器模式说说 明明SMALL默认的存储类型为默认的存储类型为data,参数及局部变量放入可直接寻址的片内,参数及局部变量放入可直接寻址的片内RAM中。另外,所有对象(包括堆栈),都必须嵌入片内中。另外,所有对象(

111、包括堆栈),都必须嵌入片内RAM中。中。COMPACT默认的存储类型为默认的存储类型为pdata,参数及局部变量放入分页的外部,参数及局部变量放入分页的外部RAM,通过,通过R0或或R1间接访问,栈空间位于片内间接访问,栈空间位于片内RAM中。中。LARGE默认的存储类型为默认的存储类型为xdata,参数及局部变量放入外部,参数及局部变量放入外部RAM,使用数据指,使用数据指针针DPTR来进行寻址,用此指针访问效率较低。栈空间也位于外部来进行寻址,用此指针访问效率较低。栈空间也位于外部RAM中。中。4.4 4.4 特殊功能寄存器特殊功能寄存器(SFR)(SFR)及其及其C51C51定义方法定义

112、方法 Franklin C51Franklin C51编译器提供了一种编译器提供了一种与标准与标准C C语言不兼容语言不兼容,而,而只只适用于适用于对对MCSMCS 5151系列单片机进行系列单片机进行C C语言编程的语言编程的SFRSFR定义方法,其定义方法,其定义定义8 8位位SFRSFR语句的一般格式为:语句的一般格式为: sfr sfr-name = int constantsfr sfr-name = int constant; SFRSFR的地址不是任意设置的的地址不是任意设置的,它必须与,它必须与MCSMCS 5151系列单片机系列单片机内部定义的完全相同内部定义的完全相同 。

113、sfr SCON = 0x98sfr SCON = 0x98;/设置串行口寄存器地址为设置串行口寄存器地址为98H98H sfr TMOD = 0x89 sfr TMOD = 0x89;/定时器定时器/ /计数器方式控制地址为计数器方式控制地址为89H89H 在新的在新的MCSMCS 5151单片机中,有些单片机中,有些SFRSFR在功能上组合为在功能上组合为1616位值,位值,当当SFRSFR的高字节地址直接位于低字节之后时,这时对的高字节地址直接位于低字节之后时,这时对1616位的位的SFRSFR可以直接进行访问。用关键字可以直接进行访问。用关键字“sfr16sfr16”来定义来定义,“=

114、 =”后面的后面的地址必须用地址必须用1616位位SFRSFR的的低字节低字节地址地址,即,即1616位位SFRSFR的低地址作为的低地址作为“sfr16sfr16”的定义地址,其高位地址在定义中没有体现。的定义地址,其高位地址在定义中没有体现。 sfr16 T2 = 0xCCsfr16 T2 = 0xCC;/T2/T2的低的低8 8位为位为0CCH0CCH,高,高8 8位为位为0CDH0CDH sfr16 T0 = 0x8A sfr16 T0 = 0x8A;/错误错误,不能这样定义定时器,不能这样定义定时器/ /计数器计数器0 0 SFRSFR的的sfr-namesfr-name被定义后,就

115、可以被定义后,就可以像普通变量一样用赋值语像普通变量一样用赋值语句句进行赋值从而改变对应的进行赋值从而改变对应的SFRSFR的值。的值。 SFRSFR中地址为中地址为8 8的倍数的寄存器具有的倍数的寄存器具有位寻址能力位寻址能力,在,在Franklin C51Franklin C51中规定了中规定了支持支持SFRSFR位操作的定义位操作的定义,当然在也是,当然在也是与标与标准准C C语言不兼容语言不兼容的,使用的,使用“sbitsbit”来定义来定义SFRSFR的位寻址单元。定的位寻址单元。定义义SFRSFR的位寻址单元的语法格式有三种:的位寻址单元的语法格式有三种:sbitbit-name=

116、sfr-nameintconstantsfrPSW=0xD0;/定义定义PSW的地址为的地址为0D0HsbitOV=PSW2/溢出标志溢出标志OV为为PSW.2sbitCY=PSW7/进位标志进位标志CY为为PSW.7sbitbit-name=intconstantintconstantsbitOV=0xD02/溢出标志溢出标志OV是地址是地址0D0H的第的第2位位sbitCY=0xD07/进位标志进位标志CY是地址是地址0D0H的第的第7位位sbitbit-name=intconstantsbitOV=0xD2/溢出标志溢出标志OV,地址映象为,地址映象为0D2HsbitCY=0xD7/进位

117、标志进位标志CY,地址映象为,地址映象为0D7H4.5 MCS4.5 MCS 5151并行接口及并行接口及C51C51定义方法定义方法 MCSMCS 5151系列单片机片内有系列单片机片内有4 4个并行个并行I/OI/O口(口(P0P0P3P3),),这这4 4个并行个并行I/OI/O口的定义采用定义口的定义采用定义SFRSFR的方法。的方法。MCSMCS 5151系列单片机在片外可扩展并行系列单片机在片外可扩展并行I/OI/O口,因其口,因其外部外部I/OI/O口与口与外部外部RAMRAM是统一编址的是统一编址的,即把一个外部,即把一个外部I/OI/O口当作外部口当作外部RAMRAM的一个单

118、元来看待。的一个单元来看待。 对于片外扩展的对于片外扩展的I/OI/O口,根据硬件译码地址,将其口,根据硬件译码地址,将其看作片外看作片外RAMRAM的一个单元,使用语句的一个单元,使用语句 #define #define 进行定义。进行定义。 #include #include /必须要,不能少必须要,不能少 #define PORTA XBYTE0xFFC0#define PORTA XBYTE0xFFC0/定义外部定义外部I/OPORTAI/OPORTA地址地址当然也可把对外部当然也可把对外部I/OI/O口的定义放在口的定义放在一个头文件中,一个头文件中,然后在程序中通过然后在程序中通过

119、#include#include语句调用语句调用,一旦在头文件,一旦在头文件或程序中通过使用或程序中通过使用#define#define语句对片外语句对片外I/OI/O口进行了定口进行了定义,在程序中就可以自由使用变量名(如:义,在程序中就可以自由使用变量名(如:PORTAPORTA)来)来访问这些外部访问这些外部I/OI/O口了。口了。absace.habsace.h头文件中定义有头文件中定义有: :CBYTE、DBYTE、PBYTE、XBYTE,这四个函数的访,这四个函数的访问数据类型为问数据类型为char。CWORD、DWORD、PWORD、XWORD,这四个函数,这四个函数的访问数据类

120、型为的访问数据类型为int。CBYTE(访问(访问code区字符型)区字符型)DBYTE(访问(访问data区字符型)区字符型)PBYTE(访问(访问pdata区或区或I/O口字符型)口字符型)XBYTE(访问(访问xdata区或区或I/O口字符型)口字符型)4.6 4.6 位变量及其位变量及其C51C51定义方法定义方法 Franklin C51 Franklin C51编译器提供了一种对编译器提供了一种对MCSMCS 5151系列单片机进行系列单片机进行C C语言编程的语言编程的“bitbit”数据类型用来定义位变量:数据类型用来定义位变量:1 1、位变量的、位变量的C51C51定义的方法

121、定义的方法 C51C51通过通过“bitbit”关键字来定义位变量,一般格式为:关键字来定义位变量,一般格式为: bit bit-namebit bit-name; egeg:bit s-flagbit s-flag; /将将s-flags-flag定义为位变量定义为位变量 2 2、C51C51程序函数的参数及返回值程序函数的参数及返回值 函数可包含类型为函数可包含类型为“bitbit”的参数,也可作为返回值。例如:的参数,也可作为返回值。例如: bitbit func func(bitbit b0 b0,bitbit b1 b1)/b0/b0、b1b1为函数的参数为函数的参数 return

122、return(b1b1);); /b1/b1作为函数的返回值作为函数的返回值 使用编译器伪指令使用编译器伪指令#pragma disable#pragma disable或或包含明确的寄存器组包含明确的寄存器组切换(切换(using nusing n)的函数不能返回位值)的函数不能返回位值,否则编译器将会给出一,否则编译器将会给出一个错误信息。个错误信息。3 3、对位变量的限制、对位变量的限制 位变量不能说明为指针和数组位变量不能说明为指针和数组。例如:。例如: bit *ptrbit *ptr; /用位变量定义指针,用位变量定义指针,错误错误 bit b-array bit b-array

123、; /用位变量定义数组,用位变量定义数组,错误错误 在定义位变量时,允许定义存储类型,位变量都被放入在定义位变量时,允许定义存储类型,位变量都被放入MCSMCS 5151系列单片机片内系列单片机片内RAMRAM中,中,存储类型限制为存储类型限制为datadata或或idataidata,如果将其定义成其它类型都将在编译时出错。如果将其定义成其它类型都将在编译时出错。 对位变量的操作也可以采用对位变量的操作也可以采用先定义变量的数据类型和存储先定义变量的数据类型和存储类型,其存储类型只能为类型,其存储类型只能为bdatabdata,然后采用,然后采用“sbitsbit”关键字来定关键字来定义可独

124、立寻址访问的对象位。例如:义可独立寻址访问的对象位。例如: bdata int ibasebdata int ibase; /ibase/ibase为为bdatabdata的的整型变量整型变量 bdata char bary4;bdata char bary4; /bary4 /bary4为为bdatabdata的的字符变量字符变量 sbit ibase0=ibase0sbit ibase0=ibase0; /ibase0/ibase0为为ibaseibase变量的第变量的第0 0位位 sbit bary07=bary07; /bary07sbit bary07=bary07; /bary07

125、为为bary0bary0元素的第元素的第7 7位位 对用这种方式定义的位变量对用这种方式定义的位变量既可位寻址又可字节寻址既可位寻址又可字节寻址。egeg: bary36 = 1bary36 = 1;/位寻址位寻址,给,给bary3bary3元素的第元素的第6 6位赋值为位赋值为1 1 bary3 = bary3 = a a ; /字节寻址字节寻址,给给bary3bary3元素赋值为字符元素赋值为字符a a 可独立寻址访问的对象位的位置操作符(可独立寻址访问的对象位的位置操作符(“ ”)后的取值依赖于位变量的数据类型,对于后的取值依赖于位变量的数据类型,对于char/unsigned char

126、char/unsigned char型为型为0 07 7,对,对int/unsigned intint/unsigned int型型为为0 01515,对,对long/unsigned longlong/unsigned long型为型为0 03131。 Franklin C51 Franklin C51编译器支持的基本数据类型有:位编译器支持的基本数据类型有:位型(型(bitbit)、无符号字符()、无符号字符(unsigned charunsigned char)、有符号)、有符号字符(字符(signed charsigned char)、无符号整型()、无符号整型(unsigned in

127、tunsigned int)、)、有符号整型(有符号整型(signed intsigned int)、无符号长整型)、无符号长整型(unsigned longunsigned long)、有符号长整型()、有符号长整型(signed longsigned long)、)、浮点(浮点(floatfloat)、双精度浮点()、双精度浮点(doubledouble),另外),另外C51C51还还提供了一些提供了一些扩展的数据类型扩展的数据类型,它们是由,它们是由C51C51支持的支持的基本基本数据类型按一定的规则组合成数据类型按一定的规则组合成的数据类型,称之为的数据类型,称之为构构造数据类型造数据

128、类型。C51C51支持的构造数据类型有:数组、结构、支持的构造数据类型有:数组、结构、指针、共同体、枚举等。指针、共同体、枚举等。4.7 C514.7 C51构造数据类型构造数据类型 因为因为MCSMCS 5151系列单片机的最大数据存储空间只有系列单片机的最大数据存储空间只有64KB64KB,一般在不用构造数据类型就能以较高效率解决,一般在不用构造数据类型就能以较高效率解决问题的情况下,问题的情况下,应尽量不用构造类型数据应尽量不用构造类型数据。 指针变量是指一个专门用来存放另一个变量地址指针变量是指一个专门用来存放另一个变量地址(指针)的变量(指针)的变量。指针实质上就是。指针实质上就是内

129、存中某项内容的内存中某项内容的地址地址,在,在C51C51中,不仅有指向一般变量的指针,还有指中,不仅有指向一般变量的指针,还有指向各种构造数据类型成员的指针。向各种构造数据类型成员的指针。Franklin C51Franklin C51编译编译器支持器支持“基于存储器基于存储器”的指针和的指针和“通用指针通用指针”两种指两种指针类型。针类型。 基于存储器的指针以存储类型为参量,在编译时基于存储器的指针以存储类型为参量,在编译时确定,可以高效访问指针指向单元的内容。指针的确定,可以高效访问指针指向单元的内容。指针的长长度为度为1 1个字节个字节(idata *idata *,data *dat

130、a *,pdata *pdata *)或或2 2个字个字节节(code *code *,xdata *xdata *)。)。 egeg:char xdata *pxchar xdata *px; 表示在表示在xdataxdata存储空间定义了一个指向字符型的指存储空间定义了一个指向字符型的指针变量针变量pxpx,指针变量名是指针变量名是pxpx,而不是,而不是* *pxpx。指针自身在。指针自身在默认存储区(具体在哪个存储区由存储器模式决定),默认存储区(具体在哪个存储区由存储器模式决定),长度为长度为2 2个字节(个字节(0 00xffff0xffff)。)。 char xdata *dat

131、a pxchar xdata *data px;或;或 data char xdata * data char xdata * pxpx; 这里明确了这里明确了指针自身位于内部存储区指针自身位于内部存储区datadata区区,与,与存储器模式无关。其它与上例相同。存储器模式无关。其它与上例相同。一、基于存储器的指针一、基于存储器的指针 在指针定义时未对指针指向的对象存储空间进行修饰在指针定义时未对指针指向的对象存储空间进行修饰说明的,编译器都使用说明的,编译器都使用3 3个字节的通用指针个字节的通用指针。通用指针可以。通用指针可以访问存储空间的任何变量。通用指针只在编译和连接访问存储空间的任何

132、变量。通用指针只在编译和连接/ /定位定位时才把存储空间代码和地址填入预留的时才把存储空间代码和地址填入预留的3 3个字节中。个字节中。 通用指针包括通用指针包括3 3个字节,个字节,其中其中1 1个字节为存储类型,另个字节为存储类型,另2 2个字节为偏移地址个字节为偏移地址。存储类型决定了对象所占用的存储空。存储类型决定了对象所占用的存储空间,偏移地址指向实际地址。通用指针的字节分配、存储间,偏移地址指向实际地址。通用指针的字节分配、存储类型编码以及通用指针到具体存储空间的定位如表类型编码以及通用指针到具体存储空间的定位如表4 4 5 5、表表4 4 6 6和图和图4 4 4 4所示。所示。

133、二、通用指针二、通用指针偏移地址低位字节偏移地址低位字节偏移地址高位字节偏移地址高位字节存储器类型存储器类型地址保存内容地址保存内容+2+2+1+1+0+0地地 址址 表表4 4 5 5 通用指针的字节分配通用指针的字节分配表表4 4 6 6 通用指针的存储器类型编码通用指针的存储器类型编码5 54 43 32 21 1编码值编码值codecodedatadatapdatapdataxdataxdataidataidata存储器类型存储器类型 使用以上存储器类型编码值以外的值可能会导致不可预测的程序动作使用以上存储器类型编码值以外的值可能会导致不可预测的程序动作 8 8位地址位地址0 01 1

134、低低8 8位地址位地址高高8 8位地址位地址2 28 8位地址位地址0 03 38 8位地址位地址0 04 4低低8 8位地址位地址高高8 8位地址位地址5 5HLidataxdatapdatadatacode图图4 4 4 4 通用指针定位到具体存储空间通用指针定位到具体存储空间 例如,以例如,以xdataxdata类型的类型的0x10300x1030地址为指针的通用指针的字节地址为指针的通用指针的字节分配如下:分配如下:30300x100x102 2地址保存内容地址保存内容+2+2+1+1+0+0地地 址址例如,将常数值例如,将常数值0x21写入地址为写入地址为1030H的外部的外部RAM

135、。#defineXBYTE(char*)0x20000L)XBYTE0x1030=0x21;XBYTE被定义为(被定义为(char*)0x20000L,0x20000L为一般指针,其存储类型为为一般指针,其存储类型为2(xdata类型),类型),偏移地址为偏移地址为0000H,这样,这样XBYTE成为指向成为指向xdata零地零地址的指针址的指针。而。而XBYTE0x1030则是外部则是外部RAM的的1030H绝对地址。绝对地址被定义为绝对地址。绝对地址被定义为“long”型常量,低型常量,低16位包含偏移地址,而高位包含偏移地址,而高8位是存储类类型定义,这种指位是存储类类型定义,这种指针必

136、须用长整型数来定义。针必须用长整型数来定义。4.8 C514.8 C51的绝对地址访问的绝对地址访问一、使用一、使用C51C51运行库中预定义宏运行库中预定义宏C51通过头文件通过头文件absace.h宏定义有宏定义有:#defineCBYTE(unsignedcharvolatilecode*)0x50000L)#defineDBYTE(unsignedcharvolatiledata*)0x40000L)#definePBYTE(unsignedcharvolatilepdata*)0x30000L)#defineXBYTE(unsignedcharvolatilexdata*)0x200

137、00L)#defineCWORD(unsignedintvolatilecode*)0x50000L)#defineDWORD(unsignedintvolatiledata*)0x40000L)#definePWORD(unsignedintvolatilepdata*)0x30000L)#defineXWORD(unsignedintvolatilexdata*)0x20000L)具体访问绝对地址的格式为:具体访问绝对地址的格式为:宏名宏名地址地址;注意注意absace.h一定要有一定要有。#include/必须要,不能少必须要,不能少#defineucharunsignedchar#de

138、fineuintunsignedintvoidmain(void)ucharvarl;uintvar2;var1=XBYTE0x0008;/访问片外访问片外RAM的的0008H字节单元字节单元var2=XWORD0x1002;/访问片外访问片外RAM的的1002H字单元字单元.while(1);二、通过指针访问二、通过指针访问#defineucharunsignedchar#defineuintunsignedintvoidmain(void)uchardatavarl;ucharpdata*dp1; /定义指向一个定义指向一个pdata区的指针区的指针dp1uintxdata*dp2;/定义

139、指向一个定义指向一个xdata区的指针区的指针dp2uchardata*dp3;/定义指向一个定义指向一个data区的指针区的指针dp3dp1=0x20;/赋赋地址地址值,指向值,指向pdata区的区的20Hdp2=0x1000;/赋赋地址地址值,指向值,指向xdata区的区的1000H*dp1=0x80;/片内片内RAM的的20H单元单元赋值赋值80H*dp2=0x2012;/片外片外RAM的的1000H单元单元赋值赋值2012Hdp3=&var1;/指针指向指针指向data区的区的var1变量,变量,取地址取地址*dp3=0x60;/给变量给变量var1赋值赋值60H.while(1);三

140、、使用三、使用C51C51扩展关键字扩展关键字_at_at_访问访问C51用用_at_对存储器绝对地址访问的一般格式为:对存储器绝对地址访问的一般格式为:存储器类型存储器类型数据类型数据类型变量名变量名_at_地址常数地址常数;#defineucharunsignedchar#defineuintunsignedintdataucharvar1_at_0x40;/data区字节变量区字节变量var1的的地址为地址为40Hxdatauintvar2_at_0x2000;/xdata区字变量区字变量var2的的地址为地址为2000Hvoidmain(void)var1=0x90;/片内片内RAM地

141、址地址40H赋值赋值90Hvar2=0x2012;/片外片外RAM地址地址2000H赋值赋值2012H.while(1);4.9 C514.9 C51的输入输出的输入输出 C51 C51本身不提供输入和输出语句,其输入输出操作本身不提供输入和输出语句,其输入输出操作是通过是通过MCSMCS 5151的的串行口来实现的串行口来实现的。一、格式输出函数一、格式输出函数printf() 格式输出函数的作用是通过串行口输出符合格式格式输出函数的作用是通过串行口输出符合格式控制要求的特定类型的数据,格式为:控制要求的特定类型的数据,格式为: printf(格式控制,输出参数表)(格式控制,输出参数表);

142、 ; 格式控制为用格式控制为用双引号双引号括起来的括起来的字符串字符串,也称转换,也称转换控制字符串,它包括三种信息:控制字符串,它包括三种信息:格式说明符、普通字格式说明符、普通字符和转义字符符和转义字符。 格式说明符格式说明符:由:由“%”和格式字符组成,其作和格式字符组成,其作用是指明输出数据的类型和格式用是指明输出数据的类型和格式。表表4 7C51中的中的printf()函数的格式字符及功能函数的格式字符及功能指向一个带结束符的字符串指向一个带结束符的字符串指针指针s单个字符单个字符charc自动选择自动选择e或或f格式中更紧凑的一种输出格式格式中更紧凑的一种输出格式floatg,G带

143、符号十进制浮点数,形式为带符号十进制浮点数,形式为dddd ddfloate,E带符号十进制浮点数,形式为带符号十进制浮点数,形式为dddd.ddddfloatf无符号十六进制数数,用大写字母无符号十六进制数数,用大写字母“AF”表示表示intX无符号十六进制数数,用小写字母无符号十六进制数数,用小写字母“af”表示表示intx无符号八进制数无符号八进制数into无符号十进制数无符号十进制数intu有符号十进制数有符号十进制数intd输出格式输出格式数据类型数据类型格式字符格式字符普通字符普通字符,按原样输出,用来输出某些提示信息,按原样输出,用来输出某些提示信息 转义字符转义字符,用来输出特

144、定的不可显示的控制信,用来输出特定的不可显示的控制信息和字符。在其前面加反斜杠息和字符。在其前面加反斜杠“ ”组成转义字组成转义字符。符。表表4 8C51中的常用的转义字符及含义中的常用的转义字符及含义5CH反斜杠反斜杠22H双引号双引号”27H单引号单引号0CH换页符(换页符(FF)f08H退格符(退格符(BS)b09H水平制表符(水平制表符(HT)t0DH回车符(回车符(CR)r0AH换行符(换行符(LF)n00H空字符(空字符(null)0对应对应ASCII码码含义含义转义字符转义字符二、格式输入函数二、格式输入函数scanf()scanf()函数的作用是通过串行口实现数据输入,函数的作

145、用是通过串行口实现数据输入,其使用方法与其使用方法与printf()类似,其格式为:类似,其格式为:scanf(格式控制,地址列表)(格式控制,地址列表);空白字符空白字符,包含空格、制表符、换行符等,这,包含空格、制表符、换行符等,这些字符在输出时被忽略。些字符在输出时被忽略。普通字符普通字符,是除了以,是除了以“% %”开头的格式说明符外开头的格式说明符外的所有非空白字符,在输入时会原样显示。的所有非空白字符,在输入时会原样显示。格式说明格式说明,由,由“% %”和格式说明符组成,其作用和格式说明符组成,其作用是指明输入数据的格式是指明输入数据的格式 。 格式控制为用双括号括起来的字符串,

146、包括三种格式控制为用双括号括起来的字符串,包括三种信息:信息:空白字符、普通字符和格式说明空白字符、普通字符和格式说明。#include#include/一般一般I/O函数库函数库,必须有必须有voidmain(void)intx,y;SCON=0x52;/串行口工作于方式串行口工作于方式1TMOD=0x20;/定时器定时器/计数器计数器1选择模式选择模式2TH1=0xF3;/设定波特率设定波特率TL1=0xF3;TR1=1;printf(“Inputx,y:n”);/输出提示输出提示Inputx,y:,换行,换行scanf(“%d%d”,&x,&y); /输入输入x,y的值的值printf(

147、“n”);/输出并换行输出并换行printf(“%d+%d=%d”,x,y,x+y); /按十进制输出按十进制输出printf(“n”);printf(“%xH+%xH=%xH”,x,y,x+y);/按十六进制输出按十六进制输出while(1); C51 C51编译器对函数的定义进行了扩展,增加了一个扩展关键编译器对函数的定义进行了扩展,增加了一个扩展关键字字interrupt,C51C51编译器在编译时对申明为中断服务程序的函数编译器在编译时对申明为中断服务程序的函数自动舔加了相应的现场保护、阻断其它中断、返回时恢复现场自动舔加了相应的现场保护、阻断其它中断、返回时恢复现场等处理的程序段等处

148、理的程序段,中断服务函数的一般形式为:,中断服务函数的一般形式为:4.10 C514.10 C51中断服务函数的定义方法中断服务函数的定义方法函数类型函数类型函数名(形式参数表)函数名(形式参数表)interruptn1usingn2n1是中断号,取值范围为是中断号,取值范围为031。编译器从。编译器从8*n13处产生处产生中断向量,基本中断源和中断向量如表中断向量,基本中断源和中断向量如表4-9所示:所示:n1中中 断断 源源中断向量中断向量0外部中断外部中断00003H1定时器定时器0000BH2外部中断外部中断10013H3定时器定时器1001BH4串行口串行口0023H其它值其它值保留

149、保留8 * n1 + 3C51编译器扩展了一个编译器扩展了一个关键字关键字using,专门用来选,专门用来选择择MCS 51系列单片机中不同的系列单片机中不同的工作寄存器组工作寄存器组。using后面的后面的n2是一个是一个03的整型常数,分别选中的整型常数,分别选中4个个不同的工作寄存器组。在定义一个函数时不同的工作寄存器组。在定义一个函数时using是一个是一个选项,如果不用该选项,则由编译器选择一个寄存器组选项,如果不用该选项,则由编译器选择一个寄存器组作绝对寄存器组访问。需要注意的是,关键字作绝对寄存器组访问。需要注意的是,关键字using和和interrupt的后面都不允许跟一个带运

150、算符的表达式的后面都不允许跟一个带运算符的表达式。关键字关键字using对函数目标代码的影响如下:在函数的入对函数目标代码的影响如下:在函数的入口处将当前工作寄存器组保护到堆栈中,指定的工作寄口处将当前工作寄存器组保护到堆栈中,指定的工作寄存器内容不会改变,函数返回之前将被保护的工作寄存存器内容不会改变,函数返回之前将被保护的工作寄存器组从堆栈中恢复。器组从堆栈中恢复。带带using属性的函数原则上不能属性的函数原则上不能返回返回bit类型的值类型的值,并且关键字,并且关键字using不允许用于外部不允许用于外部函数,关键字函数,关键字interrupt也不允许用于外部函数也不允许用于外部函数

151、。 编写编写MCSMCS 5151系列单片机中断程序时应遵循的规则:系列单片机中断程序时应遵循的规则:中断函数不能进行参数传递中断函数不能进行参数传递,如果中断函数中包含任何参数声,如果中断函数中包含任何参数声明都将导致编译出错。明都将导致编译出错。中断函数中断函数没有返回值没有返回值,如果企图定义一个返回值将得到不正确,如果企图定义一个返回值将得到不正确的结果。在定义中断函数时应将其定义为的结果。在定义中断函数时应将其定义为voidvoid类型类型,以明确说,以明确说明没有返回值。明没有返回值。任何情况下都任何情况下都不能直接调用中断函数不能直接调用中断函数,否则会编译出错。,否则会编译出错

152、。如果中断函数中用到如果中断函数中用到浮点运算浮点运算,必须保存浮点寄存器的状态,必须保存浮点寄存器的状态,当没有其它程序执行浮点运算时可以不保存。当没有其它程序执行浮点运算时可以不保存。C51C51编译器的数学编译器的数学函数库函数库math.hmath.h中,提供了保存浮点寄存器状态的库函数中,提供了保存浮点寄存器状态的库函数pfsavepfsave和恢复浮点寄存器状态的库函数和恢复浮点寄存器状态的库函数fprestorefprestore。如果在中断函数中如果在中断函数中调用了其它函数调用了其它函数,则,则被调用函数所使用的寄被调用函数所使用的寄存器组必须与中断函数相同存器组必须与中断函

153、数相同。由于中断的产生不可预测,中断。由于中断的产生不可预测,中断函数对其它函数的调用函数对其它函数的调用可能形成递归调用可能形成递归调用,需要时可将被中断,需要时可将被中断函数所调用的其它函数函数所调用的其它函数定义成重入函数定义成重入函数。4.11 4.11 汇编语言与汇编语言与C51C51的混合编程的混合编程 在一个应用程序中,按模块用不同的编程语言编在一个应用程序中,按模块用不同的编程语言编写源程序,最后通过编译器写源程序,最后通过编译器/ /连接器生成一个可执行的连接器生成一个可执行的完整程序。这种编程方式称为混合编程。完整程序。这种编程方式称为混合编程。 由于由于C51C51语言语

154、言对函数的参数、返回值传送规则、段对函数的参数、返回值传送规则、段的选用和命名都做了严格规定的选用和命名都做了严格规定,因而在混合编程时汇,因而在混合编程时汇编语言要编语言要按照按照C51C51语言的规定来编写语言的规定来编写。这也是一般高级。这也是一般高级语言与低级语言混合编程的通用规则。当采用语言与低级语言混合编程的通用规则。当采用C51C51与汇与汇编语言混合编程时,在技术上有两个问题:编语言混合编程时,在技术上有两个问题: 在在C51C51中如何调用汇编语言程序;中如何调用汇编语言程序; C51C51程序如何与汇编语言程序之间实现数据的交换。程序如何与汇编语言程序之间实现数据的交换。

155、当采用混合编程时,必须约定这两方面的规则,当采用混合编程时,必须约定这两方面的规则,即即命名规则和参数传递规则命名规则和参数传递规则。 在在C51C51中被调用函数要在主函数中说明,在汇编语中被调用函数要在主函数中说明,在汇编语言程序中,要使用伪指令使言程序中,要使用伪指令使CODECODE选项有效并申明为可选项有效并申明为可再定位段类型,并且根据不同情况对函数名作转换,再定位段类型,并且根据不同情况对函数名作转换,函数名的转换原则如表函数名的转换原则如表4 4 1010所示。所示。一、命名规则一、命名规则表表4 4 10 10 函数名的转换函数名的转换对于对于重入函数重入函数的函数名加入的函

156、数名加入“_?_?”字符串前字符串前缀以示区别,它表明该函数包含栈内的参数缀以示区别,它表明该函数包含栈内的参数传递传递_?FUNC_?FUNCvoid funcvoid func(voidvoid) reentrantreentrant带寄存器参数的函数名带寄存器参数的函数名加入加入“_ _”字符前缀字符前缀以示区别,它表明该函数包含寄存器的参数以示区别,它表明该函数包含寄存器的参数传递传递_FUNC_FUNCvoid funcvoid func(charchar)无参数传递或不含寄存器参数无参数传递或不含寄存器参数的函数名不作的函数名不作改变转入目标文件中,改变转入目标文件中,名字只是简单

157、地转为名字只是简单地转为大写形式大写形式FUNCFUNCvoid funcvoid func(voidvoid)解解 释释符号名符号名说说 明明 在在汇编语言汇编语言中,变量、子程序或标号与其它模块共享时,中,变量、子程序或标号与其它模块共享时,必须在定义它们的模块开头说明为必须在定义它们的模块开头说明为PUBLICPUBLIC(公用),(公用),使用使用它们它们的模块必须的模块必须在模块的开头包含在模块的开头包含EXTERNEXTERN(外部)。(外部)。 egeg:用汇编语言编写函数用汇编语言编写函数“touppertoupper”,参数传递发生在寄,参数传递发生在寄存器存器R7R7中,以

158、供中,以供C51C51函数调用。函数调用。 PUBLICPUBLIC _ _TOUPPERTOUPPER;入口地址;入口地址 UPPERUPPER SEGMENT SEGMENTCODECODE;定义;定义UPPERUPPER段段 为再定位程序段为再定位程序段 RSEGRSEG UPPER UPPER;选择;选择UPPERUPPER为当前段为当前段 _ _TOUPPERTOUPPER: MOVMOVA A,R7R7;从;从R7R7中取参数中取参数 CJNECJNEA A,# # a a ,$+3$+3 JC JCUPPERETUPPERET CJNE CJNEA A,# # z z ,$+3$

159、+3 JNC JNCUPPERETUPPERET CLR CLRACC.5ACC.5 UPPERET UPPERET: MOVMOVR7R7,A A;返回值放在;返回值放在R7R7中中 RETRET;返回到;返回到C51 C51 当采用混合语言编程时,关键是入口参数和出口参当采用混合语言编程时,关键是入口参数和出口参数的传递,两种语言必须使用数的传递,两种语言必须使用同一规则同一规则,否则传递的,否则传递的参数在程序中取不到。参数在程序中取不到。二、参数传递规则二、参数传递规则表表4 4 11 11 参数传递的寄存器选择参数传递的寄存器选择R1,R2,R3无无R2,R3R3第第3个参数个参数R

160、1,R2,R3R4R7R4,R5R5第第2个参数个参数R1,R2,R3R4R7R6,R7R7第第1个参数个参数一般指针一般指针long,floatintchar参数类型参数类型FranklinC51编译器可使用编译器可使用寄存器传递参数寄存器传递参数,也可以,也可以使用使用固定存储器或使用堆栈固定存储器或使用堆栈,因堆栈深度有限,因此多用寄,因堆栈深度有限,因此多用寄存器或存储器来传递。存器或存储器来传递。利用寄存器最多只能传递三个参数利用寄存器最多只能传递三个参数,选择固定的寄存器,这种参数传递方法能产生高效率代码,选择固定的寄存器,这种参数传递方法能产生高效率代码,参数传递的寄存器选择如表

161、参数传递的寄存器选择如表4 10所示。例如所示。例如,func1(inta),整型变量),整型变量a是第一个参数,在是第一个参数,在R6,R7中传递。中传递。func2(intb,intc,int*d),整型变量),整型变量b是第一个参是第一个参数,在数,在R6,R7中传递,整型变量中传递,整型变量c是第二个参数,在是第二个参数,在R4,R5中传递,指针变量中传递,指针变量d是第三个参数,在是第三个参数,在R1,R2,R3中传中传递。递。func3(longe,longf),长整型变量长整型变量e是第一个参数,是第一个参数,在在R4R7中传递,长整型变量中传递,长整型变量f是第二个参数,只能在

162、参数段是第二个参数,只能在参数段中传递(第二个参数的传递寄存器中传递(第二个参数的传递寄存器R4R7已被占用)。已被占用)。func4(floatg,charh),单精度浮点变量),单精度浮点变量g是是第一个参数,在第一个参数,在R4R7中传递,字符变量中传递,字符变量h是第二个参是第二个参数,只能在参数段中传递(第二个参数的传递寄存器数,只能在参数段中传递(第二个参数的传递寄存器R5已被占用)。已被占用)。参数传递段给出了汇编子程序使用的固定存储区,参数传递段给出了汇编子程序使用的固定存储区,就像参数传递给就像参数传递给C函数一样,参数传递段的首地址通过函数一样,参数传递段的首地址通过名为名

163、为“?函数名?函数名?BYTE”的的PUBLIC符号确定。当传递符号确定。当传递位值时,使用名为位值时,使用名为“?函数名?函数名?BIT”的的PUBLIC符号确符号确定。所有传递的参数放在以首地址开始递增的存储区定。所有传递的参数放在以首地址开始递增的存储区内,函数返回值放入内,函数返回值放入CPU寄存器中,如表寄存器中,如表4 12所示。所示。R3中放存储器类型,高位地址在中放存储器类型,高位地址在R2中,低位地址在中,低位地址在R1中中R1、R2、R3指针指针32位位IEEE格式,指数和符号位在格式,指数和符号位在R7中中R4R7float返回值高位字节在返回值高位字节在R4中,低位字节

164、中,低位字节在在R7中中R4R7(unsigned)long返回值高位字节在返回值高位字节在R6中,低位字节中,低位字节在在R7中中R6、R7(unsigned)int在在R7中返回中返回R7(unsigned)char在进位标志中返回在进位标志中返回Cbit说说明明返回的寄存器返回的寄存器返回类型返回类型表表4 4 12 12 函数返回值的寄存器函数返回值的寄存器 注意:在汇编程序中,当前选择的寄存器组及寄存器注意:在汇编程序中,当前选择的寄存器组及寄存器ACCACC、B B、DPTRDPTR和和PSWPSW都可能改变。当汇编程序被都可能改变。当汇编程序被C51C51调用时,必须无条调用时,

165、必须无条件地假设这些寄存器的内容已被破坏。件地假设这些寄存器的内容已被破坏。2024/8/12172第6章MCS-51单片机的并行扩展接口(P145)6.1总线并行扩展(P145)51系列机的外总线结构A158A70D70CBUSABUSDBUSROM 64KRAM 64K8位地址锁存器(74LS373)P2MCS-51P0ALEPSENRDWRINT0INT1T0T1EARESET2024/8/12173MCS51系统基本扩展图程序存储器(EPROM,EEPROM)数据存储器(SRAM,EEPROM)并行I/O口扩展C/T扩展A/D转换D/A转换PSENP0,P2WRRD注:扩展后由于片内片

166、外RAM指令不同,所以均可以从0地址开始而不会重叠扩展ROMRAM用的控制信号不同-EA=0,系统仅用于扩展ROM。-EA=1时,ROM0000H0FFFH单元在片内从1000H开始为扩展ROM地址。2024/8/12174系统地址空间分配线选法:直直接接以以系系统统空空闲闲的的高高位位地地址址线线作作为为芯芯片片的的片片选选信信号号的的扩扩展存储器或展存储器或I/O接口的芯片寻址法接口的芯片寻址法.例1:以线选法扩展4K片外RAM,RAM芯片采用2K容量芯片。试设计扩展电路。补充:RAM芯片知识:单片机扩展RAM以SRAM为主当前的SRAM主要容量有6116(容量16/8=2KB)6264(

167、容量64/8=8K)等。SRAM引脚结构见P299第一排左起第一图,信号分类为:a.地址线:2KA100(11位),8KA120(13位)b.数据线:8位I/O70(可输入输出),O70(仅输出)c.控制线:-WE写入允许,-OE输出允许,-CE片允许d.单电源:单电源VCC=+5V,GND=地2024/8/12175解:根据补充知识及扩展原理图示意图。可采用2种方案。1.用小于要求容量的RAM芯片,即6116,用2片。电路设计如下:P0.0P0.1P0.2P0.3P0.4P0.5P0.6MCS-51P0.7ALEP2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7D1Q1D2Q2

168、D3Q3D4373Q4D5Q5D6Q6D7Q7D8GOEQ8A0I/O0A1I/O1A2I/O2A3I/O3A4I/O4A5I/O5A6I/O6A7I/O76116(1#)A8A9A10CEWEOEA0I/O0A1I/O1A2I/O2A3I/O3A4I/O4A5I/O5A6I/O6A7I/O76116(2#)A8A9A10CEWEOEMA0MA1MA2MA3MA4MA5MA6MA7MA8MA9MA10MA11MA12MA13MA14MA152024/8/12176根据电路及地址分配,可得如下结论:(1)参与线选的地址线中,在操作扩展存储器时,只能有一根为规定的片选信号电平状态。即不能同时有两根

169、及其以上线选信号为有效工作电平状态。(2)每片RAM存储地址区域与其他片是不连续的.(3)当存在闲置地址线时,则出现一个实际单元存在多个地址码现象,例本例,当1芯片工作时(MA12MA11=10)MA15MA14MA13的的任任何何一一个个状状态态选选择择的的是是1芯芯片片中中同同一一个个单单元元,或或者者说说本本系系统统中中每每个个扩扩展展存存储储单单元元有有8个个地址码地址码。地址范围计算:MA1513MA12MA11MA1001#任意组合10000H7FFH2#任意组合01000H7FFH2024/8/121771芯片各单元地址为:MA1513MA120MA1513MA120000100

170、017FFH100900097FFH001300037FFH101B000B7FFH010500057FFH110D000D7FFH011700077FFH111F000F7FFH2芯片各单元地址为:MA1513000:08000FFFH88008FFFH重叠地址有:28002FFFHA800AFFFH48004FFFHC800CFFFH68006FFFHE800EFFFH(4)RAM的-WE,-OE由单片机的-WR,-RD控制.思思考考题题1:当当分分别别用用MA14,MA15作作1芯芯片片,2芯芯片片的的线线选选信信号号时,各自地址范围是多少?时,各自地址范围是多少?7组重重叠地叠地址址2

171、024/8/121782.使用大于要求容量的芯片,电路设计如下:MA0MA1MA2MA3MA4MA5MA6MA7MA8MA9MA10MA11MA12MA13MA14MA15A0I/O0A1I/O1A2I/O2A3I/O3A4I/O4A5I/O5A6I/O6A7I/O76164(1#)A8A9A10A11A12CE2CE1WEOED1Q1D2Q2D3Q3D4Q4D5Q5D6Q6D7Q7D8GOEQ874LS373P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7ALEP2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.72024/8/12179当A120时,RAM地址范围

172、:0000H0FFFH8000H8FFFH重叠地址范围:2000H2FFFHA000HAFFFH4000H4FFFHC000HCFFFH6000H6FFFHE000HEFFFH注注:当RAM芯片上出现多余地址线时,多余地址线的组合状态数目,将该片容量分成若干个区域(或段,或块,或页)多多余余地地址址线线一一般般不不能能NC,一旦给定状态,所用区域就属于该给定状态所指的区域。2024/8/12180例例2:将将扩扩展展RAM中中以以1000H为为首首地地址址的的100个个单单元元的的内内容容送送到到以以08FFH为为首首地址的地址的100个单元中个单元中解:根据题意解:根据题意,1000H在在1

173、芯片中,芯片中,08FFH在在2芯片中。芯片中。ORG2000HMAIN:MOVR1,#00HMOVDPL,R3MOVR2,#10HMOVDPH,R4MOVR3,#0FFHMOVXDPTR,AMOVR4,#08HINCDPTRMOVR0,#100MOVR3,DPLLOOP:MOVDPL,R1MOVR4,DPHMOVDPH,R2DJNZR0,LOOPMOVXA,DPTRINCDPTRMOVR1,DPLMOVR2,DPH2024/8/121812.译码法:使用译码器对系统空间的高位地址线进行译码。以其输入作为各芯片的片选信号。 常见译码器为1:2,2:4,3:8,4:16AXAXAX1:2Y0AY

174、1BY2GY3AXAX+12:4AXAX+1000110112024/8/12182AX+2AX+1AX000001010011100101110111D1Q1D2Q2D3Q3D4Q4D5Q5D6Q6D7Q7D8GOEQ8简化表达D18Q18GOED18Q18GOEY0AY1B74LS138Y2CY3E1Y4E21Y5E22Y6Y7AXAX+1AX+23:82024/8/121836.2存储器接口扩展(P149)1.程序存储器扩展典型的程序存储器:EPROM2716(或2732)如图.其它型号见P299第一排.数据线符号:O70地址线:A100-OE:允许输出-CE:片允许VPP:编程电源输入

175、端1242233224215271620619718817916101511141213A7A6A5A4A3A2A1A0O0O1O2GNDVCCA8A9VPPOEA10CEO7O6O5O4O32024/8/12184例3:利用译码法设计一个具有6K扩展ROM的单片机系统解 : 目 前 市 场 无 6KROM芯 片 , 现 用 3片 2KROM芯 片EPROM2716组建。和6116引脚基本相同,由此非常方便27166116(2816)等联合布线.与8051相联,-PSEN为取信息的控制信号,连接线路如图所示D81Q81G74LS373P0MCS-51ALEP2EAPSENMA07D70MA11

176、MA12MA13A07O70A8101#2716CEOEA07O70A8102#2716CEOEA07O70A8103#2716CEOE1AY0BLS138Y1CY2E1E21E22MA8102024/8/12185由图可知ROM采用译码片选法,各芯片占用的地址范围(注意到MA1311=000,Y0=0;MA1311=001,Y1=0,MA1311=010,Y2=0)如下:1:0000H07FFH(基本地址)重叠地址:4000H47FFH8000H8FFFHC000HC7FFH2:0800H0FFFH(基本地址)重叠地址:4800H4FFFH8800H8FFFHC800HCFFFH3:1000

177、H17FFH(基本地址)重叠地址:5000H57FFH9000H97FFHD000HD7FFH译码法特点:译码法特点:(1)不同芯片使用的空间可以成为连续空间。不同芯片使用的空间可以成为连续空间。(2)同样的地址线数产生的片选信号比线选法多。同样的地址线数产生的片选信号比线选法多。思考题2:若利用除存储器占用的地址线外的所有地址线进行全译码方式产生片选信号,则各单元地址码会呈现何特点?(此题为5:32译码)2024/8/12186S1S2S3S4S5S6S1S2P1P2P1P2P1P2P1P2P1P2P1P2P1P2P1P2机器周期OSCALEPSEN有效区有效区P2P0PCH(A815)PC

178、H(A815)A07取指令A07取指令PCLD07PCLD07执行MOVC指令(1字节,2周期)时的1/2机周CPU时序:应该是第一个周期取指令,第二个周期取数据(一般书上都回避讨论此问题).2024/8/12187例6:设计具有128K扩展ROM的单片机系统,并写出各芯片地址范围。解:电路图如下:P0MCS-51ALEP2EAP1.0PSEN14373GMA152-4译码G27256CE27256CE27256CE27256CE1414142024/8/12188地址范围:1:P1.0=0,00007FFFH2:P1.00,8000FFFFH3:P1.01,00007FFFH4:P1.01,

179、8000HFFFFH结论:除具有专用地址功能的I/O端口外,其他I/O端口也可作为扩展存储器地址线,达到超范围扩展。对于超范围扩展存储系统,要进行多次寻址操作才能找到要寻址单元。如本例,若要在3或4芯片中执行程序或取数据,必须先执行一条SETBP1.0指令。本原理同样适用超范围扩展RAM。2024/8/121892最小系统概念:能使计算机运行的最小配置.对于80518751,若启用片内ROM,则最小系统在单片机内。对于8031,由于无片内ROM,所以程序只能存在于外接ROM中。所以其最小系统.如图68(P150)所示3.电可写ROM即EEPROM应用 l最常见的是2816A/2817A,286

180、4A(见P299第一行)等。特点改EPROM的紫外光擦除为电擦除改写 l2816A引脚信号基本和6116相同,只是写时间明显加长. lEEPROM作扩展RAM使用时,由-RD、-WR控制,按扩展RAM操纵。写入时要求延时程序。一般写入时间为10ms左右。2024/8/12190(1)按RAM操控电路如图所示:EEPROM写的基本程序格式MOVR1,#10;TIME:MOVR2,#0FFH;DJNZR2,$;DJNZR1,TIME;8051RDWR2816OEWECE(2)EEPROM也可仅当ROM管理。如图所示:(3)EEPROM在电路中既当RAM又当ROM,用法如图所示:8051PSEN28

181、16OECEWE18051WRRDPSEN2816WEOECE2024/8/121912数据存储器扩展RAM扩展基本原理扩展基本原理典型的程序存储器:SRAM6116如图.其它型号及引脚见P299.数据线符号:I/O70地址线:A100-OE:允许输出-CE:片允许-WE:输入允许1242233224215611620619718817916101511141213A7A6A5A4A3A2A1A0I/O0I/O1I/O2GNDVCCA8A9WEOEA10CEI/O7I/O6I/O5I/O4I/O32024/8/12192-RD/-WR-RD/-WRS1S2S3S4S5S6S1S2S3S4S5S

182、6S1扩展RAM的工作时序(实际是MOVX的时序)-PSENALE传送数据时停送-PSEN.扩展扩展RAM各信号关系各信号关系对扩展对扩展RAM操作时,在指令周期内操作时,在指令周期内ALE停发停发1个,个,-PSEN停发停发2个。个。取指PCL取指PCL数据I/OPCL取指P0P2/PCHPCHPCH/P2PCHP22024/8/12193扩展电路结构D81Q81G74LS373MA07D70MA810AY0BLS138Y1CY2E1E21E221MA11MA12MA13A07O70A8101#6116CEWEOEA07O70A8102#6116CEWEOEA07O70A8103#6116C

183、EWEOEP0MCS-51ALEP2EAWRRD思考题:试用线选法完成6K选址.2024/8/121943、存储器综合扩展举例(P152)例5:设计具有2K扩展RAM,8K扩展EPROM的单片机系统为8031的单片机系统。并写出各扩展存储器地址范围。解:电路如下:D81Q81G74LS373MA07P0MCS-51ALEP2PSENEAWRRDA07O70A8106116CEWEOEA07O70A8122764CEOEMA812MA810MA152024/8/12195RAM:0000H07FFH重叠地址:(由重叠地址:(由MA1411引起)引起)ROM:0000H1FFFH重叠地址:(由重叠

184、地址:(由MA1513引起)引起)注:对于单片存储芯片,其注:对于单片存储芯片,其CE可接地。可接地。例7:设计一个具有2kRAM,2KEEPROM,8KEPROM的单片机存储系统。EEPROM按RAM操控。并写出各片占用的地址范围。解:电路图为:6116地址:0000H07FFH重叠地址:15个2816地址:0800H0FFFH重叠地址:15个2764地址:0000H1FFFH重叠地址:7个2024/8/12196D81Q81G74LS373A010O706116CEWEOEA010O702816CEWEOEA012O702764CEOEP0MCS-51ALEP2PSENEAWRRD三种存储

185、器综合扩展的电路示例MA012D70MA010MA010MA11MA0152024/8/121976.3输入/输出并行接口扩展(P153)l常见方法:总线扩展法(应用最广泛);串行扩展法;I/O口扩展法。l总线扩展法常用器件为可编程芯片82558155及TTL芯片等。一.8255原理及其扩展功能l8255结构如图所示:DBUS接口读写控制逻辑A组控制B组控制A组A口A组C口B组C口B组B口D70RDWRA0A1RESETCSPC74PA70PC30PB70A组B组2024/8/12198由图可知:由图可知:8255有有3个个8位位I/O通道,分别为通道,分别为PA,PB,PCPAPBPC被被分

186、分为为二二组组进进行行控控制制,PA口口与与PC74合合为为A组组,PB口口与与PC30合为合为B组。组。片内设有控制字寄存器。片内设有控制字寄存器。A1A0可分别寻址可分别寻址PA,PB,PC口及口及CWRCWR只写不读,操作状态见只写不读,操作状态见P155表表61(或(或P156续表第续表第1行)行)引脚引脚40P地线地线电源引脚位置不符合电源引脚位置不符合TTL规范,即规范,即40脚不等于脚不等于GND外部引芯见外部引芯见P299第第2行左数第行左数第1芯片芯片l l各通道说明各通道说明PA口口:可可编编程程(通通过过用用程程序序改改变变控控制制字字实实现现传传递递方方式式变变化化)实

187、实现现8位位输输入入、输输出或双向传递。出或双向传递。PB口:可编程实现口:可编程实现8位输入、输出,但是不能实现双向传递。位输入、输出,但是不能实现双向传递。PC口口:按按高高低低4位位分分别别控控制制方方法法,可可用用于于输输入入、输输出出。PA、PB口口作作为为选选通通口口时时,PC口口部部分分端端子子被被作作为为PA、PB口口的的选选通通的的信信号号(固固化化而而失失去去I/O通通道道功功能能)。2024/8/121998255工作方式:三种(方式0,1,2)方式0:基本输入/输出方式即本方式不使用任何联络信号以PA、PC74、PB、PC30各有I/O状态、各组成16种配合。a:做输出

188、口时,输出数据被锁存;b:做输入口时,输出数据不被锁存。PAPC74PBPC30OOOOOOOIOOIOOOIIIIII2024/8/12200方式1:选通输入/输出方式。分两组实现:A组:PA口为数据通道,PC74及PC3为联络信号。输输入入时时:pc5=IBFa:输出H有效,表示输入缓冲区满。或输入缓冲区已经接受到数据。PC4=-STBA:输入L有效,外设通过发出信号将数据选入或送入缓冲器中。PC3=INTRA:输出H有效,当输入缓冲器接受数据后发出8255发出此信号向主机提出中断请求。希望主机拿走外设中PA缓冲器的数据。输出时输出时:pc7=-OBFA:输出L有效,输出缓冲器满。PC6-

189、ACKA:输入L有效,外设接到8255提供的数据后给8255回答信号。PC3=INTRA:同时输入。2024/8/12201B组组:PB口为数据通道。PC20为联络信号输输入入时时:PC2=-STBB、PC1=IBFB、PC0=INTRB输出时:PC2=-ACKB、PC1=-OBFB、PC0=INTRB注记:(1).未用于联络的信号仍可用于一般的I/O通道端子。如PA一旦输入时,PC6,PC7未用于选通仍可作为I/O通道端子。(2).凡状态信号即可作为查询也可作为中断申请信号。如IBF、INTR等信号。2024/8/12202方方式式2:双向传送信号.仅有PA口有此工作方式。此时PC73用于联

190、络。而B组仍可用于方式0、1。实际上是PA口在方式1下的输入/输出合为一体。在方式在方式2下下:INTRA(PC3)=STBIBFRDINT(PC4)ACKOBFWRINT(PC6)方式1、2下中断申请信号的允/禁位(INTE)分配。I:PC4IPC2方式1PB口:方式1O:PC6OPC2I:PC4方式2O:PC6PAPA口口2024/8/122038255控制字设置控制字设置:8255的的各各种种工工作作方方式式的的设设置置,PC口口各各位位的的位位操操作作,都都是是通通过过控控制制字字设设置置来来实实现的。现的。1、控制字的两种类型:、控制字的两种类型:a:方式控制字类型。方式控制字类型。

191、b:PC口位操作控制字类型。口位操作控制字类型。2、控制字结构、控制字结构a:方式控制字结构:方式控制字结构:CWD6D5A组方式组方式D4PA口方向口方向D3PC74方向方向0000输出输出0输出输出0111输入输入1输入输入1X2D2B组方式组方式D1PB口方向口方向D0PC30方向方向000输出输出0输出输出111输入输入1输入输入注注:在在方方式式1、2时时,未未用用于于联联络络的的C口口位位,此此设设置置仍仍有有效效。而而对对应应于于联联络络的的C口位,本设置无效。口位,本设置无效。1D6D5D4D3D2D1D0A组方式设置B组方式设置2024/8/12204b:PC口位操作控制字:

192、CWD0PCX状态操作PC00000复位或清0操作PC10011置位或置1操作PC2010操作PC7111A1A0与PA、PB、PC、CW的关系:A1A000011011操作PAPBPCCW0/D3D2D1D02024/8/12205MCS-51机与机与8255的连接及编程设置的连接及编程设置理解要领:1、按扩展按扩展RAM操作,即与扩展操作,即与扩展RAM联合编址。联合编址。2、8255的DBUS与系统DBUS相联,即按总线扩展方式连接。3、欲使8255按要求工作,必须通过程序对8255进行初始化,初始化主要内容是设置好所要求的工作方式。4、若使8255工作在选通方式(方式1、2),则要与外

193、设接好相应联络线,即与单片机的中断联络线或查询线联接。5、可以在程序运行过程中,用程序随时改变控制字。2024/8/12206例例 1: 按 8255占 据 扩 展 RAM的 7FFCH, 7FFDH, 7FFEH,7FFFH单元地址(以后凡是I/O扩展地址称作端口地址),设计8051与8255的连接电路并且使8255各通道工作在方式0,且PA口为输入,PB口为输出。解:(1)电路设计如下D70A0A18255CSWRRDRESETP0MCS-51ALEP2.7WREARDRESETD81Q81G74LS373D70MA0MA1MA152024/8/12207(2)控制字设置:CW:91H(3

194、)程序设计:汇编程序段IO8255:MOVA,91HMOVDPTR,#7FFFHMOVXDPTR,A相应的C51程序段#defineCONT0x91#defineADDR8DXBYTE0x7FFF/定义8255A控制端口地址ADDR8D=CONT;/输出控制字10010001A组方式0B组方式0PA输入PC74输出PB输出PC30输入2024/8/12208例例2:在例1基础上若PA口输入的是8个开关,而PB输出连接的是一位LED数码管,试编程将开关状态变成LED显示状态。解:(1)电路如图所示D81Q81G74LS373P0MCS-51ALEP2.7WREARDRESETD70MA0MA1M

195、A15D70PA0A0PA1A18255PA7CSWRPB0RDPB1RESETPB7abdp2024/8/12209(2)控制字与例1同.(3)程序设计如下ORG8000HK-LED:MOVA,91HMOVDPTR,#7FFFH;MOVXDPTR,ALOOP:MOVDPTR,#7FFCHMOVXA,DPTR;从PA口读开关状态MOVDPTR,#7FFDHMOVXDPTR,A;将PA口读开关状态送PB口AJMPLOOP此方法可用于检测LED的好坏.C51C51参考程序如下:参考程序如下:#include#include#defineuncharunsignedchar#defineCONT0x

196、91#defineADDR8DXBYTE0x7FFF /定义8255A控制端口地址#defineADDR8BXBYTE0x7FFD/定义8255APB通道端口端口地址#defineADDR8AXBYTE0x7FFC/定义8255APA通道端口地址unchariofunc(void)/8255A输入输出控制函数uncharmid;ADDR8D=CONT;/输出控制字mid=ADDR8A;/读A口信息ADDR8B=mid;/输出信息到B口returnmid;voidmain(void)uncharb;b=iofunc();/调用8255A芯片控制程序2024/8/122102024/8/12211

197、例例3:以8255PA工作在选通输入方式下向设备A采用中断方式获取数据;以PB口工作在选通输出方式设备B采用中断方式输送数据。解:电路如图所示D81Q81G74LS373D70PAA0PC4A1PC58255CSPC3(INTRA)WRPBRDPC1PC0(INTRB)PC2D70MA0MA1MA15P0MCS-51ALEP2.7INT0WREARDINT1外围设备A外围设备B8STBAIBFA8OBFBACKB2024/8/12212(2)控制字设置CW0:BCH(方式)CW1:PC4置1CW2:PC2置1(3)程序设计#include#include#defineuncharunsigne

198、dchar#defineCONT0xBC#defineADDR8DXBYTE0x7FFF/定义8255A控制端口地址#defineADDR8BXBYTE0x7FFD/定义8255APB通道端口端口地址#defineADDR8AXBYTE0x7FFC/定义8255APA通道端口地址101111000000100100000101voidINT0_ISR(void)interrupt0using1/外部中断外部中断0中断服务函数中断服务函数uncharmid;/保护现场保护现场mid=ADDR8A;voidINT1_ISR(void)interrupt2using1/外部中断外部中断1中断服务函数

199、中断服务函数uncharmid;/保护现场保护现场ADDR8B=mid;voidmain(void)IT0=1;/-INT0设置成负沿有效IT1=1;/-INT1设置成负沿有效EX0=1;/开开0号外部中断号外部中断EX1=1;/开开1号外部中断号外部中断EA=1;/允许中断允许中断2024/8/122132024/8/12214ADDR8D=CONT;/设置设置PA,PB口为方式口为方式1,并分别为输入、输出并分别为输入、输出ADDR8D=0x09;/使使PC4=1,允许,允许PC3发中断请求发中断请求ADDR8D=0x05;/使使PC2=1,允许,允许PC0发中断请求发中断请求2024/8

200、/1221518155简介(P160)可编程接口芯片。内含256各字节RAM(内涵RAM地址锁存器)。2个8位,1个6位可编程并行I/O口。1个14位定时器。40脚,双列直插。内部结构如图所示2568RAM控制逻辑定时器PAPBPC886IO/MAD70CEALERDWRRESETT/CCLKINTIMEROUT6.3.2利用可编程并行接口8155扩展2024/8/12216PC50特殊用途:PC0:INTRA;PC1:IBFA;PC2:-STBA;PC3:INTRB;PC4:IBFB;PC5:-STBB8155工作方式CW:TM2TM1IEBIEAPC2PC1PBPA0A口I0B口IPA=P

201、B=1A口01B口0PC2PC1功能00PA,PB为基本I/O口,PC输入01PA,PB为基本I/O口,PC输出10PA为选通输入输出,PB为基本I/O口。PC0=INTRA;PC1=IBFA;PC2=-STBA11PA,PB均为选通I/O,PC口功能如前述。2024/8/12217IEA,IEB:分别为PA,PB口中断的允/禁位(1允0禁)TM2TM1功能00空操作,不影响计数01停止定时器计数10若定时器正在计数,计数长度减为0停止计数11启动,置方式和长度后立即启动,若正在运行表示置新的方式和定时器长度,计数结束后,按新的方式和长度计数Sw:XTIMERINTEBBBFINTRBINTE

202、AABFINTRATIMER:定时器中断标志,定时/计数器计数溢出后,被置锁于高电平,即由此发出定时器的中断请求。当执行读状态(认为中断请求被响应),或定时器重新计数时被复位成低电平。INTEA、B,INTRA、B及A、BBF产生与CW操作相应的状态有关,如当使IEA=1时,则读SW时应有INTEA1,其余类推2024/8/12218T/C可用于定时或对外部事件计数CPU可通过程序对C/T置计数初值及计数方式如图所示:TH(05H)TL(04H)M2M1输出方式计数满时-TIMEROUT波行00单个方波01连续方波10单个脉冲11连续脉冲CW,SW共一个端口地址,CW只写不读,SW只读不写。M

203、2M1T13T12T11T10T9T8T1T0T13T12T11T10T9T8T1T0CLK或事件计数脉冲TIMEROUT2024/8/12219各端口的编程地址由A2A1A0在IO/-M=1配置下实现:IO/-MA2A1A0端口1000SW,CW1001PA1010PB1011PC1100TL1101TH当IO/-M0,A20与A73共同选择8155片内RAM地址,无论对IO端口还是对片内RAM操作都用ALE将A70打入片内地址锁存器,无ALE工作时,AD70为D70。 例例6-5:6-5: 图图6 6 2424是是81558155与与MCSMCS 5151单片机的一种接口逻辑。要求编写单片

204、机的一种接口逻辑。要求编写C51C51语言程序将语言程序将MCSMCS 5151单片机内部单片机内部RAM 30HRAM 30H开始的开始的3232个单元内容转移到个单元内容转移到8155 RAM8155 RAM的的80H80H开始的单元中。开始的单元中。2、MCS-51和和8155的接口方法的接口方法RAM地址:011111100000000001111110111111117E00H7EFFH8155命令状态寄存器地址:命令/状态:0111111100000000PA:0111111100000001PB:0111111100000010PC:0111111100000011T/C低字节:

205、0111111100000100T/C高字节:0111111100000101C51C51参考程序如下:参考程序如下:#include#include#defineuncharunsignedcharxdataunchar8155_RAM32_at_0x7E80;/设置8155中RAM的地址idataunchartext32_at_0x30;/单片机内部RAM数据数组voidmain(void)unchari;for(i=0;i32;i+)texti=i+0x30;/初始化text数组for(i=0;i32;i+)8155_RAMi=texti;/将text中的字符传送到8155A指定的RAM

206、中while(1);2024/8/122226.3.3利用TTL芯片扩展并行I/O口(P166)主要是利用多位的TTL缓冲器(如74LS244等)、锁存器(74LS377、374等)等完成外设与MCS-51机P0(DBUS)的多位数据的并行交换。例4.利用74LS374(TTL芯片)扩展8位并行输出口.解(1)电路如图D81Q81G74LS373D81Q81CLKOE74LS374P0MCS-51ALEINT0RDEAWRINT1P2.6外设MA702024/8/12223(2)74LS374是脉冲打入式8位三态锁存器,按图占用的端口地址为BFFFH.74LS374工作原理:DiOE=LCLK

207、=Qi内QiOE=LCLKZOE=HCLK=Xi=1,2,8(3)输出操作程序段:MOVDPTR,#BFFFHMOVA,“输出内容”MOVXDPTR,ADi内QiclkQiOEDiCLK2024/8/12224例5利用74LS373扩展并行输入电路设计。解:(1)电路如图所示。373位结构与374相同,但373的打入信号是电位.D81Q81G74LS373Q81D81GOE74LS373P0MCS-51ALERDEAWRINT1P2.6INT0外设数据数据进入锁存器数据被锁存并发中断请求STBMA70D702024/8/12225工作原理:74LS373为高电平输入有效,因此数据采用正脉冲选通

208、方式.在正脉冲宽度内,外部数据从74LS373的D70进入内部锁存器,若此时-E=H,则D70只进入内部锁存器而不能从Q70输出;当选通信号由HL后,外设提供的数据被锁入内部锁存器(STB不变高,则内部锁存器内容不变);同时该信号向8031的-INT0端发出中断请求,在中断服务中,8031针对P2。6L读入74LS373提供的数据(指令为MOVXA,DPTR)。(2)端口地址:BFFFH2024/8/12226(3)操控程序:C51C51参考程序如下参考程序如下#include#define_PORT_1XBYTE0xBFFF#defineuncharunsignedcharuncharida

209、taIDA0x20_at_0x30/置内部RAM数据地址30H,数据长度20Huncharkk;voidmain(void)kk=0;IT0=1;/外部中断0选为边沿触发方式EA=1;/开中断EX0=1;/允许外部中断0中断while(1);voidservice_INT0(void)interrupt1using1IDAkk=_PORT_1;kk+;if(kk0x20)kk=0;2024/8/122276.6.3键盘与接口(P194)键盘分为编码编码和非编码非编码键盘两种。一.键盘工作原理1.键盘的输入处理键盘:一组按键开关的集合.按键:触点式(机械),非触点式(电容,电感)对键头信号的处理

210、过程:(1)键动作识别用软件代替硬件扫描识别.(2)消抖硬件方式:采用双稳态、单稳态或滤波电路等,如图所示软件方式:触点接触,一般有约20ms的磨合时间,如图所示RSQVcc单稳Vcc20ms2024/8/12228采用此原理,对非编码键盘或键头采用软件消抖的方法,原理如图所示(3)键头译码求键值或判断键位置。(4)键义分析根据键值或键位码,通过一定的方法,如查表确定动作的键头含义,如键头是字母还是数字或者代表某一功能。2独立连接式或非编码键盘有键按下?延时20MS有键按下?键处理NNYYP1.0P1.18031P1.7VCC查询式非编码键盘编码键盘 2024/8/12229P1.0P1.18

211、031P1.7INT0VCC中断式非编码键盘编码键盘 2024/8/122303矩阵联接式或非编码键盘P1.0P1.18031P1.2P1.3P1.4P1.5P1.6P1.70123456789ABCDEFVCCVCC44键阵2024/8/12231按键设置在行,列交点上.行列线分别接在按键的两端.m根行线,n根列线,则可设置mn个键头。键头矩阵的按键识别(1)扫描法:将行或者列的每一位线依次变为0,随后读入不设0的行或列值.若读入的信息中有哪位为0,则相应于0值列、0值行位线的交叉点键头在动作。例:若6键动作,以行线依次输出0为例,则当P1.5对应的行线为0时,从列线读入的信息中P1.10,

212、说明P1.5对应的行线与P1.1对应的列线,两线的交点6在动作。(注:在找具体键之前,首先要判键盘中是否有键按下.判法为:将所有列(或行)变低,再读入行(列)值,读入值不全1,则有键按下.)2024/8/12232(2)线反转法第第一一步步:将行线(列线)作为输入(输出)线,列(行)线为输出线,并使输出线输出为全零电平,则行(列)线中电平由高变低或者为按键所在行.第第二二步步:将行(列)线作为输出(输入)线,列(行)线为输入(出)线,并使输出线输出为全0电平,则列(行)线中电平由高变低者为按键所在列(行).综析两次读入结果,可知动作按键位置综析两次读入结果,可知动作按键位置。2024/8/12

213、233二.对非编码键盘控制方式(编程,定时,扫描)原则原则:能及时响应按键操作,又不过多占用CPU时间。1.编程扫描方式CPU对键盘扫描采用程序控制方式.一旦进入键扫描状态,则反复扫描键盘等待用户从键盘上输入命令或数据,而在执行键入命令或处理键入数据过程中,CPU将不再响应键入要求,直到CPU返回重新扫描键盘为止,程序框图如图所示:参考程序如下(以上图为例)KB:MOVP1,#0FH;将P1.71.4变为全0MOVA,P1ANLA,#OFHORLA,#FOHCJNEA,#OFFH,KB1AJMPKB2024/8/12234KB1:LCALLPLA20msMOVP1,#0FH:将P1.71.4变

214、为0CJNEA,#OFFH,KB2AJMPKBKB2:MOVR0,#OEFH;以行作为依次扫描线MOVR1,#4KB3:MOVP1,R0;P1=11101111(初值)MOVA,P1ANLA,#0FH;读入P1.31.0ORLA,#0F0HCJNEA,#OFFH,KB4RLR0DJNZR1,KB3确定按键位置有键按下?延时20MS有键按下?NNYY开始键值送A键松开?延时20MS键松开?NNYY2024/8/12235KB4:MOV40H,A;行、列位置合并在一个单元MOVR1,40HMOVA,R0XCHDA,R1;A:MOVR3,A判按键是否松开判按键是否松开MOVA,R3;实际工作中应通过

215、位置值求按键键值或序号RET键的行值键的列值2024/8/122362中断方式(见P200图664)当有键头动作时,键盘向CPU发出中断请求,进入中断服务进行消抖,按键识别与处理工作.服务内容和编程扫描基本相同,除中断服务外要进行键阵初始化,必须将键阵的输入线全部初始为0状态。优优点点:CPU对键盘的监视是被动的,在没有键头动作时CPU可做其工作,从而提高了CPU的工作效率.2024/8/122376.6.1显示器与接口(P186)单片机系统常采用LED,LCD作为显示器一、LED以及接口1LED显示器的结构,有7、8、“米“字常见三种,现常采用8段,每段为一个发光二极管,如图所示:gfabe

216、dcdpcomcomagdfbecdp共阴极abdpabdpVcc共阳极2024/8/12238共阴:当阳极为1时,发光管亮共阳:当阴极为0时,该发光管亮。按排序,共阴,共阳LED的常用字符和字形码如下:显示字符共阴共阳(共阳,共阴互为反码)03FHC0H106HF9H例:5BH,6DH,63H,39H dp g f e d c b a dp g f e d c b a2024/8/122392LED显示器以及显示方式COM:位线;a,b,dp:段线。显示方式分为静态静态和动态动态两种方式。(一)静态:a.各位com连在一起;b.每一位段线和一位输出锁存器相连;C.占用线较多。agdfbecd

217、pagdfbecdpagdfbecdpagdfbecdpGND/5VI/O口(4)I/O口(3)I/O口(2)I/O口(1)2024/8/12240静态显示器接口静态显示方式就是当显示器显示某一个字符时,相应的发光二极管恒定地导通或截止恒定地导通或截止,直到显示另一个字符为止直到显示另一个字符为止。静态显示时的亮度较高亮度较高,编程容易,管理也较简单,但占用占用I/OI/O口资源较多口资源较多,因此在显示位数较多时,一般采用动态显示方式。设8255的PA、PB、PC三个8位I/O口输出分别显示字符“1”、“2”、“3”的程序如下(设8255控制口地址为7FFFH):abcdefgdpPC0PC

218、7COMabcdefgdpPB0PB7COMabcdefgdpPA0PA7COM+5V8255MCS 51图6523位静态七段LED显示器接口2024/8/12241C51C51参考程序如下参考程序如下:#include#include#define_8255A_ConXBYTE0x7FFF /8255A控制口地址#define_8255A_PAXBYTE0x7FFC/8255A的PA口地址#define_8255A_PBXBYTE0x7FFD/8255A的PB口地址#define_8255A_PCXBYTE0x7FFE/8255A的PC口地址voidmain(void)_8255A_Con=

219、0x80;/PA、PB、PC都为输出_8255A_PA=0xF9;/显示字符1_8255A_PB=0xA4;/显示字符2_8255A_PC=0xB0;/显示字符3while(1);2024/8/12242(二)动态静态的主要缺点就是占线太多,成本太高,尤其位数越高,此缺点越突出.动态方法可完全克服此不足,但是编程复杂.一个四位LED的动态连线如图所示agdfbecdpagdfbecdpagdfbecdpagdfbecdpCOM1COM2COM3COM4abdp2024/8/12243工作时:位线只能一位一位地成为有效状态,段线提出要显示字符的字形码.位码和段码可同时发出,也可以先发段码后发位码

220、,也可以先发位码后发段码段码只送到位码有效的那个LED,其余都不亮利用发光二极管的余辉效应,当对每一位扫描周期小于余辉时间时,尽管在显示其他位时而将本位关闭,给人的感觉仍然是连续显示或者不会感到闪烁点亮时间:发光二极管从导通到发光有一定的延时,太短发光弱,人眼无法看清;导通太长,占用CPU时间太多,影响其他位的显示周期,容易发生闪烁.一般导通延时1ms左右,可解决两者之间的问题.2024/8/12244例2:利用8255设计一个8位LED的动态显示器(LED为共阴极数码管).解.(1)电路如图D81Q81G74LS373D70D70PA70A0A18255CSPB7WRPB6RDRESETPB

221、0P0MCS-51ALEP2.7WREARDRESETMA0MA1MA1582024/8/12245CW口:7FFFHPA口:7FFCHPB口:7FFDH(2)编程:MOVDPTR,#7FFFHMOVA,#10000000bMOVXDPTR,ADISP:MOVRO,#40H;以40H47H为显示缓冲区MOVR3,#80H;建立位指针,先指向最高位DISS:MOVDPTR,#7FFCHMOVA,R0;取缓冲区内容ADDA,“MOV指令与字型表间距单元数”MOVCA,A+PC;将显示缓冲区内容变为字型码MOVXDPTR,A;将字型码输出到PA口MOVA,R3;INCDPTR;输出位选码到PB口。M

222、OVXDPTR,A;ACALLDEL;延时1MS2024/8/12246INCR0;指向下一个显示单元指向下一个显示单元MOVA,R3;带进位右移指向下一位带进位右移指向下一位CLRCRRCAMOVR3,AXRLA,#00H;为判显示缓冲区是否全部扫描完毕作准备;为判显示缓冲区是否全部扫描完毕作准备JNZDISS;未显示完毕(未显示完毕(A0)转转DISS,继续扫描,继续扫描AJMPDISP;显示完从头开始进行下轮扫描显示完从头开始进行下轮扫描DEL:MOVR2,#83H;延时;延时1msDELL:NOPNOPDJNER2,DELLRETTAB:DBC0H,F9H,B0H,99H,92H,82

223、H,F8H;09字型码字型码DB80H,90H;DB39H,73H,3EH,40HCPU-注:设计注:设计C,P,U,-字符时,缓冲内容应分别为字符时,缓冲内容应分别为11,12,13,142024/8/12247例3:图653中设6位显示器的显示缓冲器单元为内部RAM79H7EH,分别存放6位显示器的显示数据。解:(1)电路如图所示:1008图653用8155I/O口的6位动态显示器接口8155+5VCOM0COM1COM2COM3COM4COM5共共 阴阴 极极显显 示示 器器PA5PA4PA3PA2PA1PA0PB0PB1PB2PB3PB4PB5PB6PB7MCS5174LS0774LS

224、062024/8/12248(3) C51 C51参考程序参考程序如下:如下:#include#include#idefineuncharunsignedchar#define_8155A_CmdXBYTE0x7F00/8155A命令端口地址#define_8155A_PAXBYTE0x7F01/8155APA端口地址#define_8155A_PBXBYTE0x7F02/8155APB端口地址idatauncharD_Data6_at_0x79;/需显示的数据地址,数据24constuncharsegtab24=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,

225、0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x73,0x3E,0x31,0x6E,0xFF,0x23,0x03,0x00;voidmain(void)unchari,j;_8155A_Cmd=0x03;/设置8155APA、PB口为输出口while(1)for(i=0;i6;i+)/LED动态显示_8155A_PA=(1i);j=D_Datai;_8155A_PB=segtabj;/取显示数据并输出delay();/延时子程序2024/8/12249二.LCD显示器结构与接口(P189)1LCD的基本结构与工作原理液晶特点液晶特点:(1)在一定的温度范围内

226、既有液体的流动性和连续性,又有晶体的各向异性.(2)分子呈长棒形,长宽之比较大.(3)分子不能歪曲,是一个刚性体.(4)分子两头有极性.(5)经一定方式放置,对入射光具有旋转90度的功能.2024/8/12250LCD器件结构正极背极正极背极旋转90度平视上偏振片上电极基板(正)封接剂液晶材料下电极基板(背)下偏振片反射板电极背极正极俯视图正背液晶分子成90度2024/8/12251液晶分子在正、背玻璃电极上显水平排列,排列方向互为正交.玻璃间的分子呈连续扭转过渡,这样的构造能使液晶对光产生旋转作用,使光的偏转方向旋转90度.液晶显示器工作过程:光源上偏振片液晶盒下偏振片反射板2024/8/1

227、2252(1)当外部光线(自然光也可以)经上偏振片时,符合该偏振方向的光可以通过,不符合的不能通过。(2)a.当电极不加电压时,由上偏振片出来的光线正好与电极的液晶排列方向相同,此光线由正极旋转排列的液晶分子进入背极(到这里已经旋转了90度)。旋转90度后的光线正符合下偏振片的偏振方向而通过下偏振片,进入反射板,该光线经反射板按原路返回,从而使得液晶呈现透明状态;b.当电极加上电源后,靠电极的液晶分子由水平排列变成垂直排列,从而失去旋光性,所以上偏振片来的光线经液晶盒到达下偏振片时,而不符合下偏振片的偏振光线,因而不能通过下偏振片,而被下偏振片吸收,使得加了电压的电极在入射光照射下呈现黑色。利

228、用上述原理,将电极按要求进行排列,放置,如利用上述原理,将电极按要求进行排列,放置,如7段,米段,段,米段,点阵等排列,而获得各种要求的显示点阵等排列,而获得各种要求的显示.2024/8/122532LCD驱动方式(静态,时分割)静态驱动静态驱动如图为一个字段的电路原理图实用时,当前、背两极之间电压为0V时,该字段不亮,当两极电压为2倍幅值时,该字段呈现黑色显示。极间电压极间电压0V产生的原理产生的原理:当Vb0V,因是异或门,所以总有VcVa,即前背两电压相等,从而电位差为0或VaVc0。ABC背极前极(正极)2024/8/12254极间极间2倍幅值产生原理倍幅值产生原理:当Vb1,异或门V

229、c-Va,反相,即当Va1时,Vc0,VaVcVa01,当Va由10时,Vc也01,则Vc-Va1,VcVa1Va,也就是说,当Va由10时,VcVa变的幅值为1(1)2AB=C的真值表ABC000011101110由此分析可知,(1)可以B作为液晶段的显示控制端,0不显示B=1显示(2)为保证两极间产生两倍的幅度电压,A必须是恒定的交互波信号.2024/8/12255七段LCD显示电路如图所示当电极按7段字形排好后,其控制原理与字形码与LED完全一样,例,当ABCD0000时,液晶字形码为3FH,其余类推。七段译码器ABCDABaBbBgCaCbCgCOM(背极)abcdfeg2024/8/

230、1225628155扩展显示器与键盘(P196)例4利用8155与MCS-51构一个键盘(32键头位置)、显示器(8位)监控系统,要求首端口地址为7F00H,8155内RAM首地址为7D00H.解:(1)电路如图所示:(结合P164图6-24与P197图6-63)P0P2.1MCS-51ALEP2.7WREARDRESET88位驱动器876543215VPBAD70IO/-MALE8155CEPC0PC1WRPC2RDPC3RESETPA2024/8/12257(2)据电路,a.因P2.1=IO/-M=1.所以8155端口地址分别为:CW/SW:7F00H;PA:7F01H;PB:7F02H,

231、;PC:7F03Hb8155内部RAM地址:由于此时P2.1IO/-M0,所以RAM地址为7D00H7DFFH(3)控制字CW设置:电路表明PA,PB口输出,pc口输入,所以Pc2Pc1PBPACw:00000011(4)程序设计a.主程序流程图如图所示:调显示子程调键盘扫描子程数键处理功能1功能2功能n启动初始化有键按下?是数据键?NNYY2024/8/12258ORGMAIN0MAIN0:MOVA,#03HMOVDPTR,#7F00HMOVXDPTR,AMAIN1:ACALLDISPLYACALLKEYIBJNBKF,MAIN1;KF由KEYIB带出的有否键按下标志CJNEA,#10H,M

232、AIN2;键值由A带出仅用其比较功能MAIN2:JCMAIN3;按功能键处理(A)10H)MAIN3:;按数字键处理(键值为0FH)注:(1)各环节处理完后,均转MAIN0.(2)在各环节处理过程中,也要以保证正常显示的时间为依据不定时调用显示子程.2024/8/12259b.显示子程;因有8位LED,所以要设置8个显示缓冲单元,定为70H77H,即构成显示缓冲区.为寻找缓冲区,设置一个显示缓冲区指针寄存器,用R0承担,初值为(R0)70H.为按位扫描LED,以R3作为位扫描寄存器,初值(R3)=01H,工作时循环左移.以R6,R7作为1ms显示延时计时器.程序框图如图所示开始R070H(显缓

233、区首址)R301H(扫描字)DISP08155-PA口01H(R3)取显缓区内容查字形表形成字符段数据8155-PB口段数据DISP1延时1MSR0R0+1R3(D7)=1?RETR3左移一位NY2024/8/12260程序如下:程序如下:DISPLY:MOVR0,#70HMOVR3,#01H;MOVA,R3DISP0:MOVDPTR,#7F01HMOVXDPTR,A;点亮某位点亮某位LEDINCDPTR;指向;指向PBMOVA,R0:从显示缓冲区取出显示内容:从显示缓冲区取出显示内容ADDA,#ODH;MOVCA,A+PC;该指令离字形表里一致该指令离字形表里一致DH个单元个单元,所以加所以

234、加0DHDISP1:MOVXDPTR,A;字形码送显示器信号端;字形码送显示器信号端LCALLDELAY;延时延时1msINCR0;指向下一个显示内容;指向下一个显示内容MOVA,R3;判;判8位是否显示完毕位是否显示完毕JBAcc.7,DISP2RLA;未显示完左移再显;未显示完左移再显MOVR3,ASJMPDISP02024/8/12261DISP2:RET;显示代码对应的字符为DISEG:DB3FH,06H,.;0,1,2,3,4,5,6,7,DB60H,7DH,.;8,9,A,B,C,D,E,F,DB77H,.;P,U,T,Y,DB71H,.DB1CH,23H,.DB38H,00H.D

235、ELAY1:MOVR7,#2H;延时1msDELAY5:MOVR6,#0FFH;延时0.5msDELAY6:DJNZR6,DELAY6DJNZR7,DELAY5RET2024/8/12262C键盘及扫描程序将图中32个键分成2部分,一部分作为数字键占据16个,对应键值为000FH,一部分为命令键,占据16个,对应键值为101FH,列线用Y7Y0表示,分别对应PA70,为输出和显示器共享,行线用X30表示,分别对应PC30为输入.Y0Y1Y2Y3Y4Y5Y6Y7X0X1X2X30123456789101112131415161718192021222324252627282930312024/8

236、/12263键值(键号)计键值(键号)计算公式算公式N行号8列号行号0,1,2,3;列号0,1,7;N(键号)0,1,2,3,4,31。键盘扫描程序流程图计算(识别)动作键键号,并将其压栈A键号RET开始有键闭合吗?有键闭合吗?调用DISPLY两次调用DISPLYNNYY键释放了吗?两次调用DISPLY调用DISPLY键释放了吗?NNYY2024/8/12264程序设计如下:R2为列扫描寄存器;R4为列号计数器.KEYIB:ACALLKS;调KS(在后,键动作识别标志从A带出),判是否有键按下JNZBK1;(A)=1有键按下BN1:ACALLDISPLY;(A)=0SJMPKEYIBBK1:A

237、CALLDISPLY;ACALLDISPLY;ACALLKSJNZBK2;(A)=1SJMPBN1;(A)=0BK2:MOVR2,#01H;(A)=1,建立列扫描码MOVR4,#00H;列号计数器初值为0BK3:MOVDPTR,#7FO1H;输入PA口址MOVA,R2;PA口列扫描码。MOVXDPTR,A2024/8/12265INCDPTR;指向PC口INCDPTR;MOVXA,DPTR;找键所在的行号JBAcc.0,KLONE;Acc.01则0行无键MOVA,#00H;Acc.00则0行有键,将0行首键号ASJMPKBP;转求键号KLONE:JBAcc.1,KLTWO;1行无键按下转2行M

238、OVA,#08H;1行首键号ASJMPKBP;;转去求键号KLTWO:JBAcc.2,KLTHR;2行无键闭合则转3行MOVA,#10H;2行首键号ASJMPKBP2024/8/12266KLTHR:JBAcc.3,KNEXT;本列无键按下,转下列MOVA,18H;3行首键号AKBP:ADDA,R4;行首键号加列号,得该键在键盘中得键号(序号,键值)PUSHAcc;KBP1:ACALLDISPLY;延时,等待键释放ACALLKSJNZKBP1;A0,键已经弹起POPAcc;按键键号从Acc带出。RETKNEXT:INCR4;扫描下一列,列号加1;MOVA,R2;JNBAcc.7,KEND;判第

239、八列扫描完否,Acc.70则所有列扫描完,转本次扫描结束2024/8/12267RLA;未扫描完继续,形成下一列扫描码MOVR2,ASJMPBK3KEND:SJMPKEYIBKS:MOVDPTR,#7F01H;全“0”PA口MOVA,#00HMOVXDPTR,A;列线全置0INCDPTR;INCDPTR;指向PC口MOVXA,DPTR;读行线CPLA;取反AANLA,#0FH;屏蔽高4位RET键处理过程见前述主程序#include#include#defineuncharunsignedchar#define_8155A_CmdXBYTE0x7F00/8155A命令端口地址#define_81

240、55A_PAXBYTE0x7F01 /8155APA端口地址#define_8155A_PBXBYTE0x7F02 /8155APB端口地址#define_8155A_PCXBYTE0x7F03 /8155APC端口地址#defineKEY_STATE11/是否有键值#defineKEY_STATE22/消除抖动并确认#defineKEY_STATE33/等待释放uncharkey;/键值uncharstate;/状态uncharbuffer8;/显示数组bitEnter_flag=0;/确认有键标志constuncharsegtab12=0x3F,0x06,0x5B,0x4F,0x66,0x

241、6D,0x7D,0x07,0x7F,0x6F,0x77,0x7F; /0、1、2、3、4、5、6、7、8、9、A、bvoidmain(void)state=KEY_STATE1;TMOD=0x01;/定时器0,方式1TH0=0xB1;/定时20msTL0=0xE0;_8155A_Cmd=0x03;/PA输出,PB输出,PC输入ET0=1;EA=1;TR0=1;while(1)if(Enter_flag=1)Left_Shift();/有键按下则左移buffer数组中的数据Enter_flag=0;EA=0;Display();/动态扫描EA=1;voiddelay_ms(uncharu_ms)

242、/延时程序unchari;while(u_ms)for(i=0;i0;i)bufferi=bufferi1;buffer0=segtabkey;voidDisplay(void)/LED动态显示unchari;for(i=0;i8;i+)_8155A_PA=(1i);_8155A_PB=bufferi;delay_ms(3);voidTimer0_ISR(void)interrupt1using0/定时器中断0unchartemp;unchari;TH0=0xB1;TL0=0xE0;switch(state)caseKEY_STATE1:/判断是否有键按下_8155A_PA=0xFF;temp

243、=_8155A_PC;if(temp&0x03) state=KEY_STATE2;break;caseKEY_STATE2:/确认有键按下,取键值_8155A_PA=0xFF;temp=_8155A_PC;if(temp&0x03)state=KEY_STATE3;for(i=0;i6;i+)/键盘扫描_8155A_PA=(1i);temp=_8155A_PC;temp&=0x03;if(temp=0x02)/PC1行有键按下key=i;elseif(temp=0x01)/PC0行有键按下key=i+6;Enter_flag=1;break;caseKEY_STATE3:/等待键释放_815

244、5A_PA=0xFF;temp=_8155A_PC;temp&=0x03;if(temp=0)state=KEY_STATE1;break;2024/8/122736.5A/D转换器接口扩展(P177)一、传感器:换能器,变换器主要作用:将非电量的物理量变化为与此相对应的线性(非线性)电量,如电势(电压),电流,电阻,频率等.常见的非电物理量:温度,速度,位移,转速,湿度等.传感器的分类:(1)温度传感器:ABeAB(t)a.热电偶t:温度b.热电阻铂电阻传感器:随着温度的变化,铂电阻的阻值表现出一定的变化规律。2024/8/12274如在2000之间时:Rt=R01+At+Bt2+C(t-1

245、00)t3在0800时:Rt=R0(1+At+Bt2),R0为0时铂电阻的电阻值铜电阻传感器:Rt=R0(1+at)热敏电阻传感器C.半半导导体体集集成成温温度度传传感感器器:最常见的是AD590,二端式集成温度传感器电流型传感器。如图为AD590常用的单点温/压变换电路电气特性:温度与输出电流成线性关系,即每变化1,电流变化1uA,所以当外接1k电阻时,可在电阻上产生1uA1K1mV电压,所以又写为1uA/K(灵敏度)。温度测试范围:55150,在温度高端存在一定的非线性变化值。参照值:在常温25时,当R1K,AD590输出电流为298.2uA或者输出298.2mV。由图可以知道AD590为

246、恒流源传感器。在此基础上,温度每变化一度,电流也变化1uA。1K1K10K_+VCCUOUTAD5902024/8/12275(2)光电传感器利用半导体材料受到光照射后发生变化的原理,即光电效应,将光信号转换成电信号的装置。光电传感器包括:光敏电阻(模拟型),光敏二、三极管(开关型),红外对管.VCC2024/8/12276二、模拟信号采集二、模拟信号采集传感器或者变送器输出的信号,或信号太小,或与A/D输入范围不符,必须经过放大,幅值规范后才可以送A/D转换器,以供计算机分析。一般A/D转换的电量标准:15V,420mV.放大器可采用程控(可编程)放大器,也可用自行搭接.放大后经被测对象的性

247、质决定是否采用采样/保持手段,以保证A/D转换的准确性。A/D转换器与接口技术1.A/D转换器的分类直接型将模拟量直接转换为数字量间接型先将模拟量转换为某种中间物理量(时间,频率,脉冲带宽等),然后将这个中间量转变成为数字量。具体分类如图所示。2024/8/12277A/D直接间接非反馈比较型电荷再分配反馈比较型V/TV/F逐次逼近型跟踪计数型串联方式并联方式串并联方式单、双、四、五重积分脉宽调制积分型(按转换原理分类)A/D2进制位:4、6、8、10、12、14、16BCD位:3、4、5121212(按位分类)A/D低1s中1ms高1us超高1ns(按速度分类)2024/8/12278三、A

248、/D转换器的主要技术指标(P177)(1)分辨率:表示输出数字量变化一个相邻数码所需输入模拟电压的变化量,也叫做满刻度电压(最大值)与2n的比值,即每一刻度对于的电压量是V,n为位数。例,满刻度为5v,n8,则V(50)/(2n0)5/256或(1/256)100%.(2)量化误差:是由A/D的有限分辨率而引起的误差,或有限分辨率的A/D阶梯状转换特性曲线与无限分辨率的A/D转换特性曲线(直线)之间的最大偏差。如图所示:无限有限所谓LSB之+:从平台的左起点到右终点,相应的模拟量不变;-:从右起点到左终点,相应的模拟量不变|量化误差值|=(Umax/2n)100%2024/8/122793偏移

249、误差:输入信号为0时,输出信号不为0的值,又称为0值误差,主要由放大器或比较器的输入电压或电流引起,在A/D外部加一个电位器可以将偏移误差调至最小。4满刻度误差:又成为增益误差,指满刻度输出数码对应的实际输入电压与理想输入电压之差。5线性度:有时又称为非线性度,指转换器实际的转移函数与其理想直线的最大偏移,其典型值为1/2LSB。6绝对精度:数码实际对应模拟电压与其理想的电压值之差,常用1/2LSB或1LSB等来表示。7相对精度:最大绝对偏差与满刻度模拟电压之比。8转换时间和转换速率:完成一次A/D转换所需时间称为转换时间,其倒数即为转换速率(次数/秒)。2024/8/12280四、逐次逼近式

250、A/D转换器(ADC0816/0809)及接口A计数逼近法如图所示,首先由RESET复位计数器,被转换的信号由Uin输入,初始时D/A输出为0,D/A的输出Ui与Uin用比较器比较,UiUin,比较器输出为高电平,允许CLK进入计数器计数。开始UiUin,CLK被允许进入计数器。当启动结束时,计数器开始技术。D/A器将计数器提供的计数值实时转换成Ui与Uin比较,当计数值对应的Ui等于Uin时,比较器输出的信号由高变低,禁止CLK继续进入计数器。此时计数器值便为A/D转换之值,该值数据经系统DBUS被送入主机的采样数据存放区。工作波形如图,逐次法多采用此法。CLK启动UIN比较器UID/A转换

251、计数器UREFD0D1DN-1RESETUINUI、D每一个台阶计数器+12024/8/12281B逐次取值逼近法与计数法比较仅为取值方法不同,计数法从低位开始取值,取值法从高位开始。如图所示,本例取值三次,再往下取,直到UiUin,即取值锁存器的值便是D/A转换值。此方法的弱点就是必须借助计算机取值。UINUI、D第一步取最高位为1,UiUin,此位1不保留,(取值锁存器)=100.00第三步取N-3位为1,UiUin,此位1保留,(取值锁存器)=101.002024/8/12282C.ADC0816及其接口设计1)内部结构如P196图523所示。由图可知ADC0816为计数式逐次逼近式16

252、路8位A/D转换器。内含:一个16通道多路模拟开关(0809为8路)一个比较器一个逐次逼近计数器一个8位D/A转换器,采用RT型网络一个三态输出锁存器,用于存放A/D转换的输出结果后四部分0809与此完全相同.2)主要技术特性分辨率8位转换精度1/2LSB转换时间100us单电源5V输入电压Uin范围05V锁存三态输出,符合TTL电平规范封装形式40脚双列直插式功耗15mW温度范围40852024/8/122833)主要引脚功能REF(),REF():参考电压输入端,一般情况下REF()Vcc;REF()GND,取值范围05VIN015:16个模拟通道输入端(0809为IN07)A、B、C、D

253、(0809为A、B、C)通道地址输入端ALE、START、EOC、CLOCK(典型值为640kHz)f频率A/D转换时间640kHz 100us典型值1.28MHz50us最高值1MHz64usCOMIN:比较器输入端.COM:多路开关输出EXP输入通道扩展控制端.等于0时,COM无内部输出;等于1时,COM由多路开关提供。D07转换数据输出端.OE输出允许控制端4)工作时序自己阅读,注意ALE与START之间的时序关系多路开关COMCOMIN比较器2024/8/12284例1设计8031与ADC0816的连接电路,并进行分时对IN150进行A/D转换。解:1).电路设计如图:ALEP0.0P

254、0.78031WRP2.7RDINT1IN150MA0MA1MA2MA374LS373+AGNDCLKADC0816ABCOMCDCOMIND07STARTALEOEOECVCCREF(+)REF(-)EXP2024/8/122852)程序设计a.IN150对应的端口地址是7FF0H7FFFHb结果存入C000HC00FH(外部RAM,未画)START:MOVR0,#00H;外部RAM地址初值(低位)MOVP2,#0C0H;(高位)MOVR6,#10H; 设置通道数MOVDPTR,#7FF0H;建立IN0通道地址AD1:MOVXDPTR,A;启动A/D转换,仅借此指令启动,不考虑(A)的具体内

255、容。MOV30H,#0AH; 延时数据AD2:DJNZ30H,AD2; 延时等待(DJNZ30H,$;)AD3:JBP3.3,AD3;查询-INT1,如P3.3=1,则未转换完,转本身,继续查询MOVXA,DPTR;转换结束,取转换结果,端口地址中只要有P2.7=0MOVXR0,A; 送入缓冲区INCDPTR;指向下一通道INCR0;指向下一地址DJNZR6,AD1;判断通路是否全采样一次,即R6不为0,则转AD1,ACALLPDATA;R6=0,16个通道全采样了一次,调数据处理程序AJMPSTART;循环采样C51C51参考程序如下参考程序如下:#include#include#defin

256、euncharunsignedcharsbitP1_0=P10;/P1_0=0;启动AD转换sbitP3_3=P33;uncharxdataADC0809_IN8_at_0x7FF8;/8路模拟输入uncharpdataextern_RAM0x800_at_0xB000;/外部RAM地址voidmain(void)unchari,j;while(P1_0);/等待启动转换for(i=0;i256;i+)for(j=0;j8;j+)/每一路采样一次数据ADC0809_INj=0;/启动AD转换while(P3_3);/查询AD是否转换完毕extern_RAMj*256+i=ADC0809_INj

257、;while(1);2024/8/12287一、D/A转换器结构特性1数字量输入特性:二进制代码,并行,TTL或CMOS电平2模拟量输出特性:电流,配以外围运算放大器转换成模拟电压3锁存及转换控制:转换需要时间,所以要驻留,可加控制端,一旦有转换控制信号,才开始转换。4参考电源(UREF):直接影响输出结果的模拟参量D/A转换器的性能指标1分辨率:当数字量发生单位数码变化时,输出模拟信号的变化量=输出模拟量的满量程值/2N2建立时间Ts:输入数字量变化后到输出模拟量稳定至相应的数值范围内所需的时间。一般分为如下几档:超高速Ts100ns;较高速100nsTs1us高速1usTs10us;中速1

258、0usTs100us6.4D/A转换器接口扩展(转换器接口扩展(P171)2024/8/12288二、T型电阻D/A转换原理常见方法:T型电阻网络(P172图632).d3离Vi最近,被分流的次数最少,因而提供的电流最多,d2其次,d0离Vi最远,分流的次数最多,对Vi点的电流贡献最小。用贡献电流少的输入端子对权值小的位,贡献大的对应权值高位,因而在电流的汇聚点Vi电流的总值为各数位点电压对应的电流经按权值分流后在Vi点的电流之和。为了达到按权值分配电流的目的,在同等的基准电压UREF下,将各位起点与Vi点之间电阻值按2倍关系(二分法)配置。2024/8/12289如D0=1时,到达够A-点的

259、等效电路。AR2R2R2R2R2RRRR2RA-S0S1S2S3VSSAACDAABCDBUREFUREF2A-2RDDVSSUREF16RUAA=UREF2R2R+2RBRA等效电路(2R/2R)UE2024/8/12290也就是说对于4级D/A转换器,d0位提供电流汇聚量的电流从UREF开始,经过了24的分流后到达,即是贡献最少。而d1处电流只经过了23的分流,贡献是d0的2倍。同理d2是d1的2倍,是d0的4倍。当四个点同时工作时,利用叠加原理,最后一级的等效电路电压为UE=UREF2UREF4+UREF8+UREF16+加入还是不加由d3,d2,d1,d0分别的开关取值决定。例如,当d

260、0=0时,UREF/16不加入,d0=1时则加入。于是UE=UREF(d0/16+d1/8+d2/4+d3/2)用d3,d2,d1,d0对应数据有UE=(D020+D121+D222+D323)UREF242024/8/12291由从UE出来到A-接有3R电阻,所以反馈电阻也接3R,如图所示:U0UT=-3R(UE/(2R+R))=-UE=-(UREF/24)(D020+D121+D222+D323)UOUTUER2R3R-+一般有N位T型网络,则D/A转换器有U0=-(UREF/2N)(DN-1 2N-1+DN-2 2N-2+.+D0 20)2024/8/12292三、DAC0832的结构和

261、应用特性1.DAC0832的结构与管脚功能(见P173图6-33所示)内部结构:(1)8位输入锁存器;(2)8位DAC寄存器(通常被称为双锁存器结构);(3)8位D/A转换电路;(4)三个门电路构成转换控制电路2.引脚功能:DI07:8位转换数据输入端;ILE:数据输入锁存允许信号,高电平有效;-CS:输入寄存器选择信号,低电平有效;-WR1:输入寄存器写选通信号,低电平有效如图所示LE1=ILE(CS+WR1)控制选通第一级锁存器ILEILECSCSWR1WR12024/8/12293-XFER,-WR2:相互成负与非关系,作为第二级锁存器的选通控制信号.IOUT1:电流输出端1,其值随DA

262、C内容线性变化.IOUT2:电流输出端2,IOUT1+IOUT2=常数.RFB:反馈电阻端.AGND,DGND:模拟地和数字地.RFBTOUT1GNDUREFR2R2R3R-+UOUTDN-13.DAC0832的应用特性(1)多个控制端供计算机控制,可形成单、双锁存器控制方式;(2)需外接参考电压电路;(3)电流输出型D/A转换器,需外加二级运算放大电路,获得与电流同相的模拟电压(运算放大器工作电压为5、10、12、15等双极性工作电压,可使模拟量为双极型模拟量,也可以只产生单极模拟电压。)2024/8/12294四、DAC0832与MCS-51机的接口方法上图0832为单缓冲连接方式。设以P

263、2.7作为-CS(不经74LS138译码,见P174图6-35),则相应的转换启动程序段为:MOVDPTR,#7FFFHMOVA,#DATA(待转换的数据)MOVXDPTR,A-+-5K10K10KLM324LM32410V10V-10V-10V+5VUOUTILEVccUREFRFBCS 0832D0-7IOUT1WR1IOUT2WR2XFER+5P289S51P0WR74LS1382024/8/12295几种锯齿波转换结果编程:MOVDPTR,#7FFFH;WW:MOVR0,#00H;初始值WW1:MOVA,R0;MOVXDPTR,A;INCR0;NOP; NOP;可用于调整周期CJNER

264、0,#0FFH,WW1;判断一个周期是否结束AJMPWW;UOUT、DD=255D=0,0V+5V特点:将D=0对应UOUT=0V,D=255对应UOUT=+5V2024/8/122962.双极锯齿波D=255D=128D=0+5V-5V0V特点:将D=0对应-5V,将D=128对应0V,D=255对应+5V,程序同前.3.将初始值量为#FFH,则为倒置的锯齿波C51C51参考程序如下:参考程序如下:#include#include#defineDAC0832_ADRXBYTE0x7FFF/DAC0832寄存器地址#defineuncharunsignedchar#defineMAX0xA0;

265、/定义锯齿波的高度uncharcount=0;voidmain(void)while(1)DAC0832_ADR=count;count+;if(countMAX)count=0;2024/8/122974.调整初始值以及结尾值,可改变波形相位和周期+5V+5V-5V-5V0V2.5V0V+5V2.5V0V改变尾值,调节周期5.演变演变不同初始值,相位不同三角波台波或阶梯波:只要插入符合要求的延时程序就可,可以控制直流电机调速;用两路D/A转换器可构成X-Y绘图仪系统.矩形波可用于控制直流电机,步进电机以及电炉加温等等。相比并行接口,串行外设接口具有接线灵活、占用单片机资源少、结构简单、容易形

266、成模块化结构、抗干扰能力强等特点。目前单片机应用系统越来越多地采用串行外设接口技术,且目前已有不少串行接口芯片甚至在速度和精度上也已超过了同等功能的并行接口芯片。目前串行外设接口技术主要有:第七章第七章 MCS 51单片机的串行外设接口技术单片机的串行外设接口技术4线(SPISpecial Peripheral Interface);3线(MicroWire );2线(IIC Inter-Integrated Circuit Bus);1线(1Wire)。7.1 SPI总线外设接口 SPI(Special Peripheral Interface)是Freescale公司推出的同步串行扩展接口

267、。该接口共有4条信号线: 主机输出片选信号线SS; 主机输出时钟信号线SCLK; 主机输出/从机输入数据线MOSI; 主机输入/从机输出数据线MISO。一、SPI从机与单片机接口的数据/控制信号SCLKSPI从机SSMOSIMISO图71 SPI从机的典型连接图在单片机应用系统中,SPI从机一般采用右图连接方法。数据线MISO不仅用于SPI从机向系统主机返回数据,还可以用作多个SPI从机之间的级联。 SPI串行接口设备既可以工作在主机模式下,也可以工作在从机模式下。在系统主机与SPI从机之间进行通信时,命令和数据都以串行方式传送。且高位在前,低位在后。SPI从机使用了2根数据线(MOSI、MI

268、SO)和2根控制线(SS、SCLK) 。控制线的作用为:SS用来控制外围设备的选通(低电平有效)。如果一个SPI从机没有被选中,它的数据传输端MISO将处于高阻状态,从而与当前处于激活状态的隔离开。SCLK则用来为数据通信提供同步时钟。不论SPI从机是否处于选通状态,系统主机都会为所有的SPI从机提供SCLK信号。 二、SPI总线系统的组成 SCLKMOSIMISOMCU(主)I/OI/OI/OI/OSCLKMOSIMISOMCU(从)SSSCLKMOSIMISO外围器件1#SSSCLKMOSIMISO外围器件2#SSSCLKMOSIMISO外围器件n#SS. 图72 SPI外围扩展示意图在扩

269、展多个SPI外围器件时,单片机应分别通过I/O口线来分时选通外围器件,其它同名端相连 。当SPI工作时,主机移位寄存器中的数据逐位从输出引脚(MOSI)输出,同时从输入引脚(MISO)接受的数据逐位移到寄存器中。主SPI的时钟信号(SCLK)使传输同步。 三、SPI总线时序SPI串行扩展系统中作为主机的单片机在启动一次传送时便产生了8个时钟传送给接口芯片,作为同步时钟,控制数据的输入与输出。MSBD6D5D4D3D2D1LSB图73 SPI数据传送格式SSSCLKMOSI/MISO四、MCS51单片机串行扩展SPI外设接口的方法+5VMOSISCLKSSMISOP1.0P1.1P1.2P1.3

270、E2PROM5863MCM28141724没有SPI接口的MCS51单片机,可用单片机的I/O口通过软件方法来模拟SPI操作。对于在SCLK的上升沿输入(接收)数据和在下降沿输出(发送)数据的器件,一般可以用如图74所示的连接方法通过软件来实现SPI操作。 MCS51图74MCS51单片机模拟SPI总线方法7.2IIC总线外设接口IIC总线英文全称为Inter-Integrated Circuit Bus,即内部集成电路总线。它是一种由PHILIPS公司推出的两线式串行总线,既可发送数据,也可接受数据。包括: 一条串行数据线(Serial DATA,SDA) 一条串行时钟线(Serial CL

271、OCK ,SCL)一、IIC总线外设接口方法IIC总线可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送。各种被控制电路均并联在这条总线上,每个电路和模块都有唯一的地址,在标准的IIC规范中从机地址是7位(扩展IIC允许10位地址)。在信息的传输过程中,IIC总线上并接的每一模块电路既是主机(或从机),又是发送器(或接收器)。CPU发出的控制信号分为地址码和控制量两部分: 地址码用来选址,即选通控制的对象 控制量决定该控制的类别如图77所示为最典型的IIC总线连接方式。 RRMCU主机SDASCLSCL从机1SCLSDASCLSCLSDASDA从机2从机3+5V上拉电阻二、I

272、IC总线的数据传输过程 IIC总线上数据的传送过程如下图所示。SP1-7891-7891-789ADDRDATAR/W ACKACKACKDATASTARTConditionSTOPConditionSDASCLIIC总线的数据传送格式是:在IIC总线开始信号后,送出的第一个字节数据用来选择从机地址,其中前7位为地址码;第8位为读写位(R/W),该位为“0”表示发送,即主机把信息发送到所选择的从机,该位为“1”表示主机读取从机读信息。开始信号后,各器件将自己的地址与主机送到总线上的地址进行比较,如果与主机发送到总线上的地址一致,则该器件即为被主机寻址的器件,其是接收信息还是发送信息则由第8位(

273、R/W)确定。 在IIC总线上每次传送的数据字节数不限,但每一个字节必须为8位,而且每个传送的字节后面必须跟一个应答位(第9位,ACK)。包括四个步骤: 开始:主设备产生启动信号,数据传输开始。地址:发送地址信息,包含7位的从设备地址和1位的数据方向指示位(R/W) 。数据:数据一般以8位传输,接收器产生1位的ACK表明收到了这个字节。传输过程可以被中止和重新开始。停止:产生停止信号,结束数据传输。 SDA线上的数据必须在时钟的高电平周期保持稳定,数据线的状态只有在SCL线的时钟信号是低电平时才能改变。三、IIC总线的时序与协议1、总线上数据的有效性 数据线稳定数据有效允许改变数据周期SCLS

274、DA2、四种类型信号 IIC总线在传送数据过程中有四种类型信号:开始、停止和应答(ACK)和无应答(NACK)信号。开始信号停止信号SDASCL发送数据接收数据发送时钟应答时钟1289开始信号不应答应答3、发送IIC总线数据与接收IIC总线数据只有在SCL线为低电平期间,SDA上的电平才允许变化。因此需在SCL线为低电平期间将数据赋值给SDA。SCL线呈现高电平期间,SDA线上的电平必须保持稳定,因此应在SCL线为高电平时读取SDA数据状态。4、IIC总线器件寻址 IIC 总线的寻址在开始信号后的第一字节决定主机选择哪一个从机。 IC的从机地址由8位(7位地址)组成,第8位为R/W位。此后,系

275、统中每个器件都在开始信号后将头7位与自己的地址比较,如一样,器件就会被寻址并响应一个应答信号。有两种方法分配地址:含CPU的智能器件,地址可自行定义,不能与其它器件冲突;非智能器件,地址在器件内部固化,不可改变。四、IIC总线数据的读写在对IIC总线器件进行读写操作时,需要按以下步骤进行:初始化总线;写器件地址数据,高位在前低位在后。R/W位为读/写控制,“0”代表写,“1”代表读;等侍应答信号;写入想读/写的字地址,也就是存储器单元地址;收到应答信号后,读/写数据;收到应答信号后,就可以停止总线,完成操作。程序开始开始IIC总线图713 IIC写总线操作写器件地址等待ACK发送单元地址等待A

276、CK写器件数据ACK程序结束图714 IIC读总线操作开始IIC总线程序开始程序结束写器件地址发送单元地址等待ACK开始IIC总线写器件地址ACK读取器件数据NOACK等待ACK五、EEPROM芯片AT24C08的应用MCS51单片机没有IIC总线接口功能,需要利用单片机I/O口通过软件模拟IIC总线的工作时序。 1、AT24C08的特性 24C08是ATMEL公司生产的一个8KB位串行CMOS EEPROM芯片。A0A1A2VSSVCCWPSCLSDA12348765管脚名称管脚名称功能功能功能描述功能描述A0、A1、A2器件地址选择选择芯片内部ROM地址SDA串行数据串行数据/ /地址地址

277、用于器件所有数据的发送或接收数据的发送或接收。SDA是一个开漏输出管脚,可与其它开漏输出或集电极开路输出进行线或SCL串行时钟串行时钟串行时钟输入管脚,用于产生数据发送或接收的时钟WP写保护当WP接高电平高电平,所有的内容都被写保护只能读只能读;当WP接低低电平或悬空电平或悬空,允许器件进行正常的读读/ /写写操作VCC+1.8V6.0V工作电压VSS低2、AT24C08与MCS51单片机接口没有IIC接口的MCS51单片机,可用单片机的I/O口来模拟IIC操作。如用单片机的P1.0模拟IIC的串行时钟线SCL,用P1.1模拟IIC的串行数据线SDA。eg:如将数字0到255写入AT24C08

278、,再从AT24C08中读出数据,并显示在LCD1602上。C51参考程序请自行阅读。2024/8/12315第八章单片机应用系统的设计单片机应用系统的设计第一节第一节单片机应用条件单片机应用条件第二节第二节单片机系统设计单片机系统设计要领要领第三节第三节单片机系统的设计过程单片机系统的设计过程第四节第四节单片机与软盘驱动器接口技术及应用单片机与软盘驱动器接口技术及应用第五节第五节MCS-51单片机用于电子配料秤单片机用于电子配料秤第六节第六节在单片机控制系统中实现可控硅过在单片机控制系统中实现可控硅过0控制控制2003-8-263168.1.1单片机可应用场合的确定单片机可应用场合的确定单片机

279、并不是万能的,面向一个对象是否采用单片机应进行可行性分析。一般来说分析内容可归为如下几类:(1)单片机的最高工作速度能否满足对象的实时性要求;(2)单片机的最大存储空间能否满足关于对象的软件长度要求;(3)单片机的指令系统、寻址功能、运算能力等能否胜任对象的复杂度;(4)单片机的接口规程是否适用对象的信息交换方式;(5)系统引入单片机后是否能产生更好的性价比。2003-8-263178.1.2 8.1.2 单片机应用层次的确定单片机应用层次的确定单片机应用层次可分为普通民用品、耐用民用品、优良环境工业现场品、恶劣环境工业现场品和军用品等。不同的应用层次,所选择的单片机的品质是不尽相同的,而系统

280、的硬件、软件体系也会各有千秋,所以人们在设计单片机应用系统之前必须要搞清楚所设计系统属于哪个层次,以便按所在层次的要求进行器材选择、电路设计、软件开发等。2003-8-263188.1.3单片机应用地位的确定单片机应用地位的确定单片机应用系统可分为单片单片机、多片单片机和子系统等多种类型。单片机在系统中处在不同地位,相应的硬件、软件配置是有区别的。应用系统只含一片单片机则整个系统以其为核心进行设计;若含多片单片机,必须先确定各单片机在系统中的地位,即谁是主片,谁是从片,或地位相等,然后确定各片之间的信息交换方式;如果该系统是某个系统的子系统,主要考虑的问题有二个,一是作为子系统的任务,二是与主

281、系统的信息交换方式。2003-8-263198.2.1对象特性分析要领对象特性分析要领对象的特性分析包括对象存在形式的认定,逻辑形式对象的特性分析包括对象存在形式的认定,逻辑形式认定,数学关系的认定及单片机介入的可能性确定等。认定,数学关系的认定及单片机介入的可能性确定等。对象存在形式可分为电量和非电量两大类。对象存在形式可分为电量和非电量两大类。电量的主要形式是电压、电流、电功率等,对于交流电量的主要形式是电压、电流、电功率等,对于交流电有频率、周期,对于脉冲信号有脉冲形状和宽度等电有频率、周期,对于脉冲信号有脉冲形状和宽度等内容。内容。非电量的常见形式有温度、速度、湿度、粘度、压力、非电量

282、的常见形式有温度、速度、湿度、粘度、压力、张力、流量、位移等。张力、流量、位移等。逻辑形式是指对象的能量转换方法及其条件。逻辑形式是指对象的能量转换方法及其条件。数学关系是对象处理的基本依据。数学关系是对象处理的基本依据。2003-8-26320有些对象的数学描述不是唯一的,不同的数学模型对有些对象的数学描述不是唯一的,不同的数学模型对系统的成功与否、系统的测控精度等都有至关重要的系统的成功与否、系统的测控精度等都有至关重要的影响影响. .建立的数学模型即要反映对象的特性又要适宜于单片建立的数学模型即要反映对象的特性又要适宜于单片机处理。可以说大多数对象的测控,单片机都有用武机处理。可以说大多

283、数对象的测控,单片机都有用武之地之地. .也有些情况不适宜单片机介入或直接介入,如也有些情况不适宜单片机介入或直接介入,如(1)(1)数据过多以至于单片机超容量扩充也无法容纳的对数据过多以至于单片机超容量扩充也无法容纳的对象;象;(2)(2)数据采集速度要求过高以至于无法通过单片机运行数据采集速度要求过高以至于无法通过单片机运行程序来正常采集的对象;程序来正常采集的对象;(3)(3)单片机最快的程序运行速度也不能满足对象的实时单片机最快的程序运行速度也不能满足对象的实时性要求等。性要求等。2003-8-263218.2.2硬件体系设计要领硬件体系设计要领对于确定的对象,单片机应用系统的硬件体系

284、设计的总要求可归纳为“满足功能,降低成本,压缩体积”。满足硬件功能的基本方法为选择合适的通道结构、单片机的扩展内容;降低成本主要体现在单片机应用层次上的器材选择、工艺要求,此外在满足功能的前提下尽可能提高元器件的共用程度及以软件代替硬件;压缩体积主要体现在电路板上的元件布局的合理性及组件布局的合理性。在满足电路消除燥声、散热正常的前提下,元件安排的越近越有利于电路板面积缩小和连线缩短,有条件的可将调试好的电路做成非标准的集成电路可大幅度压缩系统体积、降低成本。2003-8-263228.2.3算法设计及其优化要领算法设计及其优化要领算法考虑原则:结合对象的数学模型与系统的硬件体系。面向一个确定

285、的数学模型或某一可处理关系设计算法时,应从单片机的指令功能及其特点、存储器结构及其特点、输入输出接口及其特点等方面出发,建立与所用单片机应用系统的硬件体系相适用的计算机制。算法优化方法有两种,一是根据算法内容与某种经典算法的相似程度,创造条件将经典算法用于本系统;二是以降低算法结构复杂程度和算法运行时间为依据设计新算法。算法优化的总目标是使得按此算法设计出来的程序运行效果达标,符号量大幅度下降,存储器开销减小,运算速度加快。2003-8-263238.2.4软件设计及其优化要领软件设计及其优化要领软件设计首先要注重软件系统的结构设计。面向基本定型的硬件环境和对象的处理算法要选用适当的程序结构去

286、迎合对象及用户的要求。对象要求主要包括精度、速度、分时等方面;用户要求主要包括输入方式、输出形式等方面。常见程序结构有:(1)纯主程序;(2)主程序子程序;(3)主程序中断服务程;(3)主程序子程序中断服务程序;(4)主程序I/O口查询服务子程;(5)主程序I/O口查询服务子程序中断服务程序,。软件设计的宗旨是在满足对象算法及系统控制要求的前提下,简化程序结构,提高程序的使用效率。优化软件的主要手段之一是最大限度的抽取公共模块,缩短调用距离。2003-8-26324编写程序程序编译,部分软件调试加工组装样机样机静态测试插上器件软件结构分析确定算法,程序流程设计硬件逻辑框图设计选择器件,完成逻辑

287、设计开始确定任务,系统功能,技术指标选择机型,划分软硬件功能2003-8-26325N仿真运行目标程序调整硬件,修改软件有错误否?YN测试样机硬件调整样机硬件有故障否?Y联机仿真调试2003-8-26326目标程序固化到EPROMEPROM插入到目标样机仿真运行EPROM中目标程序YN检查故障原因排除样机硬件故障软件固化错误?有错误否?NYN调整硬件,修改软件Y测试系统动态性能系统达到设计指标否?目标机脱离开发系统插CPU系统研制完成2003-8-263278.3.1应用系统的总体设计应用系统的总体设计1确定功能技术指标确定功能技术指标单片机应用系统的研制首先是从确定目标任务开始的。即根据系统

288、应用场合,工作环境,具体用途提出合理的,详尽的功能技术指标,这是系统设计的依据和主要出发点,也是决定产品前途的关键。其次是可靠性,通用型,可维护性,先进性以及成本等进行综合的考虑,参考国内外同类产品的有关资料,使确定的技术指标合理而且符合国际标准。2机型的选择机型的选择有货源;根据系统的要求和各种单片机的性能,选择最容易实现产品技术指标的机种,而且能达到较高的性/价比。2003-8-263283器件选择器件选择系统中一些环节的器件和设备应符合系统的精度、速度和可靠性等方面的要求。在总体设计阶段,应对市场情况有个大体的了解,对器件的选择提出具体要求。4硬件和软件功能划分硬件和软件功能划分系统硬件

289、的配置和软件的设计是紧密联系在一起的,而且在某些场合,硬件和软件具有一定的互换性。即有些硬件电路和功能可用软件来实现,反之亦然。由于软件是一次性投资,因此在一般情况下,如果所研制的产品生产批量比较大,则能够由软件实现的功能都由软件来完成,以便简化硬件结构,降低生产成本。在总体设计时,必须权衡利弊,仔细划分好硬件和软件的功能。2003-8-263298.3.2应用系统的硬件设计应用系统的硬件设计硬件设计的任务就是根据总体设计要求,在所选择的机型基础上,具体确定系统中所要使用的元器件,绘出系统的电路原理图,必要时做一些部件环节实验,以验证电路的正确性,以及印制电路板设计与制作和样机的组装等。1 1

290、程序存贮器程序存贮器视系统的程序量选择:视系统的程序量选择:程序量小于程序量小于4K的可选用内有的可选用内有EPROM的的单片机如8751,可以压缩电路板面积。程序量大于程序量大于4K可采用可采用片内不带ROM/ EPROM的单片机,以扩展EPROM作为程序存储器,便可灵活方便使用,仍然保持单片机的各种优点,性能价格比较高。由于容量不同的EPROM芯片价格相仿,一般应选用速度高,容量大的芯片。为软件的扩展留有余地。 2003-8-263302数据存储器和数据存储器和I/O接口接口对数据存储器容量的需求,不同系统之间差别较大,对于常规测量仪器和控制器,片内RAM(128256个字节)已能满足要求

291、。若需扩展少量的RAM时,宜选用RAM/IO扩展芯片8155,其片内部资源比较丰富,接口方便,特别适用于单片机系统。单片机应用系统一般需扩展I/O接口,选择I/O接口电路时应从体积,价格,负载,功能等几个方面考虑。 2003-8-263318.3.3应用系统的软件设计应用系统的软件设计1.1.软件研制过程软件研制过程图8.2单片机软件研制过程绘制程序流程图汇编生成目标程序编制源程序开始问题定义软件结构设计建立数学模型在线仿真调试程序有错?修改程序固化到EPROM中结束2003-8-263322.问题定义问题定义问题定义的基础是对系统应用场合的了解程度和正确的工程判断,它对软件设计及硬件设计提供

292、指导。首先要定义输入输出,确定数据的传输方式。数据的传输方式要考虑的问题包括(1)串行和并行通讯;(2)异步或同步通讯方式;(3)选通或非选通输入输出;(4)数据传输的速度;2003-8-26333(5)数据格式;(6)校验方法以及所用的状态信号等。它们必须和硬件逻辑相协调一致,同时还必须设想对输入数据应进行哪些处理。将输入数据变为输出结果的基本过程,主要取决于对算法的确定。对实时系统,测试和控制有明确的时间要求,例如对模拟信号的采样频率,何时发送数据,何时接收数据,有多少延迟。同时必须考虑到可能产生错误类型和检测方法,在软件上作何种处理,以减少错误对系统的影响。2003-8-263343.软

293、件结构设计软件结构设计(1)顺序程序设计方法对于简单的单片机应用系统,通常采用顺序设计方法,这种系统软件由主程序和若干个中断服务程序所构成。根据系统每个操作的性质,制定那些操作由中断服务程序完成,哪些操作由主程序完成,并指定各个中断的优先级。主程序是一个顺序执行的无限循环的程序,不停地顺序查询各种软件标志,以完成对日常事务的处理。中断服务程序对实时事件请求作必要的处理,使系统能实时地并行完成各个操作,中断处理程序必须包括现场保护,中断服务,现场恢复,中断返回等四个部分。主程序和中断服务程序之间的信息交换,一般采用数据缓冲器和软件标志(置位或清零位寻址区的某一位)方法。 主程序的结构如下图所示2

294、003-8-26335开始软件标志,指针计数器初始化扩展I/O口初始化堆栈、定时器、串行口初始化事件1处理事件2处理事件3处理YYYNNN图8.3主程序框图事件1处理,清事件1标志事件2处理,清事件2标志事件3处理,清事件3标志2003-8-26336(2)采用实时多任务操作系统由于对单片机应用系统的功能要求越来越高,往往要求对多个任务同时进行实时控制,对各个对象的实时信息以足够高的速度进行处理并作出快速响应。例如,对于主从式的多级控制系统,主机一般是功能较强的计算机系统,从机采用单片机,从机完成数据的定时采集,计算,打印,显示以及和主机的通讯,这些操作都要并行地进行。2003-8-26337

295、4. 4. 程序设计技术程序设计技术(1)模块程序设计模块程序设计是单片机应用中常用的一种程序设计技术,它是把一个功能完整的较大的程序分解为若干功能相对独立的较小的程序模块,各个程序模块分别进行设计,编制程序和调试,最后将各个调试好的模块联成一个大的程序。模块程序设计的优点是单个功能明确的程序模块的设计和调试比较方便,容易完成。一个模块可以为多个程序所共享,还可以利用现成的程序模块(如各种现成的子程序)。模块程序设计的缺点是各个模块的连接有时有一些难度。程序模块的划分没有一定的标准,一般可以参考以下原则:每个模块不宜太大;模块接口参数不宜过多,结构尽可能简化;力求使各个模块之间界限明确,在逻辑

296、上要相对独立;尽量利用现成的程序模块。2003-8-26338(2)自顶向下的程序设计自顶向下程序设计时,先从主程序开始设计,从属程序或子程序用符号来代替。主程序编好后再编制各从属程序和子程序,最后完成整个系统软件的设计。自顶向下程序设计的优点是比较符合人们的日常思维,设计,调试和连接同时按一个线索进行,程序错误可以较早的发现;其缺点是上一级的程序错误将对整个程序产生影响,一处修改可能引起对整个程序的全面修改。2003-8-263395.5.程序设计程序设计(1)建立数学模型根据问题的定义,描述出各输入变量和各输出变量之间的数学关系,此过程即为建立数学模型。为了消弱或消除干扰信号的影响选择什么

297、样的数字滤波方法等。 (2) 绘制程序流程图 所谓程序流程图,就是把程序应完成的各种分立操作,表示在不同的框格中,并按一定的顺序把它们连接起来的框图。程序流程图也称为程序框图。(3) 编写程序 编写程序时,应采用标准的符号和格式来书写,必要时作若干功能性注释,以利于以后的调试。6.6.程序的汇编,调试和固化程序的汇编,调试和固化源程序编辑以后,进行汇编或编译、调试,当满足设计要求后,即可将目标程序固化。 2003-8-263408.3.4单片机系统的可靠性设计单片机系统的可靠性设计可靠性是指在规定的条件下,在规定的事件内完成规定功能的能力。由于单片机应用系统在实际工作过程中,可能会受到各种内部

298、和外部的干扰而发生异常状态,因此抗干扰设计是系统研制中不可忽视的一个重要内容。单片机应用系统中应重点防止供电系统与过程通道的干扰。1.供电系统干扰与抑制供电系统干扰与抑制来自供电系统以及通过导线传输,电磁耦合等产生的电磁干扰,是单片机系统工作不稳的重要原因。采用的抗干扰方法是:(1)加装电源低通滤波器,并采用带屏蔽层的电源变压器;交流电引线尽量短,引进接口靠近变压器和低通滤波器;采用分散独立功能块构成性能优良的直流稳压电路,增大输入输出滤波电容,减小电源的纹波系数等。2003-8-263412.过程通道的干扰和抑制过程通道的干扰和抑制过程通道是指前向接口,后向接口与主机或主机相互之间进行信息传

299、输的路径。(1)光电耦合器的隔离措施采用光电耦合器可将主机与前向,后向以及其他主机部分切断电路的联系,能有效地防止干扰从过程通道进入主机。(2)双绞线传输在单片机实时系统的长线传输中,双绞线是较常用的一种传输线。与同轴电缆相比,双绞线虽然频带较差,但波阻抗高,抗共模噪声能力强。在数字信号传递的长线传输中,根据传输距离不同,双绞线使用方法亦不同。当传输距离在5m以下时,发送、接收端装负载电阻,如图8-4所示。55m以上时见图8-5、图8-6。2003-8-26342VccABR11kVcc图8.4双绞线长度5m以下时端部连接方法470330VccABR1Vcc2003-8-26343(3)长线传

300、输的阻抗匹配长线传输时,阻抗不匹配的传输线会产生反射,使信号失真,其危害程度与系统的工作速度及传输线的长度有关。为了对传输线进行阻抗匹配,必须估算出它的特性阻抗Rp。1.利用示波器观测的方法,见图8-7.AR图8.7传输线特征阻抗测试VccA图8.8终端并联阻抗匹配RpBR122003-8-263442.终端并联阻抗匹配如图8.8.3.始端串联电阻匹配如图8.9终端并联隔直流匹配如图8.10所示终端接钳位二极管匹配 如图8.11 A图8.9始端串联电阻匹配RpBBAR图8.10终端并联隔直流匹配RpCDBARp图8.11终端接钳位二极管匹配2003-8-26345(4)长线的电流传输长线传输时

301、,用电流传输代替电压传输,可获得较好的抗干扰能力。如图8.12当传感器直接以010mA(420mA)电流在长线上传输,在接收端可并上500(或250)的精密电阻。将此电流转换成05V(或15V)电压,然后送入A/D转换器即可。来自传感器的输出010mAI(420mA)0.01F5001kA/D图8.12传感器的长线电流输入2003-8-263463.3.印刷电路板及电路的抗干扰设计印刷电路板及电路的抗干扰设计印制电路板是单片机系统中器件、信号线、电源线等高度密集的一个综合体,设计得好坏对抗干扰能力影响很大,所以印制电路板设计决不单是器件、线路的简单布局安排,还必须符合抗干扰的设计原则。通常应采

302、取如下的抗干扰措施。(1)地线设计 单片机系统中地线结构一般有系统地、数字地、模拟地和屏蔽地(机壳地)等。在实时控制系统中,接地是抑制干扰的重要办法,如能将接地和屏蔽正确结合起来使用可以解决大部分干扰问题。 正确选择单点接地与多点接地。在低频电路中,信号的工作频率小于1MHz时,它的布线和器件的电感影响较小,而接地电路形成的环流对干扰影响较大,因而屏蔽线采用一点接地。当信号频率大于10MHz时,地线阻抗变得很大,此时应尽量降低地线阻抗,采用就近多点接地法。当工作频率在110MHz之间时,如果用一点接地,其地线长度不应超过波长的1/20,否则宜采用多点接地。2003-8-26347数字、模拟电路

303、应分开。电路板上既有高速逻辑电路,又有线性电路,应使它们尽量分开,而两者的地线不要相混,要分开与电源端的地线相连,并要尽量加大线性电路的接地面积。接地线应尽量加粗。若接地用线很细,接地电位则随电流的变化而变化,致使定时信号不稳,抗噪声性能变差。因此应将地线加粗,使他们能通过三倍于印制电路板上的允许电流。如有可能,接地用线应在23mm以上。接地线应构成闭合环路。只用数字电路组成的印制电路板接地时,根据经验,将接地电路做成闭环路大多能明显地提高抗噪声的能力。其原因时:一块印制电路上有很多的集成电路。尤其是有耗电多的元件时,因受到地线粗细的限制,地线产生电位差,引起抗噪声能力下降,若结成环路,则其差

304、值将缩小。2003-8-26348(2)去耦电容配置在印制电路板的各个关键部位配置去藕电容应视为电路板设计的一项常规做法。电源输入端跨接10100F的电解电容器原则上每个集成电路芯片都应安置一个0.01F的陶瓷电容器;亦可每410个芯片安置一个110F的限噪声用电容器钽电容器。这种器件的高频阻抗特别小,在500kHz20MHz范围内抗阻小于1,且漏电流很小(0.5A以下)。对抗噪声能力弱,关断时电流变化大的器件和ROM、RAM存储器件,应在芯片的电源线(Vcc)和地线(GND)间直接接入去藕电容。2003-8-26349(3)印制电路板尺寸与器件布置印制电路板大小要适宜,过大时,印制线条长,阻

305、抗增加,不仅抗噪声能力下降,成本也高;过小时,则散热不好,同时易受邻近线的干扰。在器件布置时,若将相互有关的器件尽量靠近些,能获得较好的抗噪声效果。如时钟发生器,晶振和CPU的时钟输入端都易产生噪声,要互相靠近布置。易产生噪声的器件,小电流电路,大电流电路等应尽量远离计算机的逻辑电路,如有可能,应另置于一个电路板上。这一点十分重要。2003-8-263502003-8-263514.软件的可靠性设计当系统受到干扰侵害,致使PC值改变,造成程序运行失常,导致程序的PC值指向操作数,将操作数作为指令执行;或PC值超出应用程序区,将非程序区中的随机数作为指令执行。这些情况,都将造成程序的无序运行,最

306、后由偶然巧合进入死循环.当数据区及工作寄存器中数据被破坏,程序盲目地运行,将随机数作为指令运行结果,不可避免地会盲目执行一些存储器读写命令,而造成其内部数据的破坏。例如MCS51单片机,当PC超出芯片地址范围(当系统扩展小于64k),CPU获得一些虚假数据FFH,相当于执行“MOVR7,A”指令,进而造成工作寄存器R7的内容变化。2003-8-26352对于程序运行失常的软件对策主要是发现失常状态后及时引导系统恢复原始状态。设置监视跟踪定时器使用定时中断来监视程序运行状态。定时器的定时事件稍大于主程序正常运行一个循环的时间,而在主程序运行过程中执行一次定时器时间常数刷新操作。这样,只要程序正常

307、运行,定时器不会出现定时中断;而当程序失常,不能刷新定时器时间常数而导致定时中断时,利用定时中断服务程序将系统复位。设置软件陷阱当PC失效时,则可用“LJMP#0000H”和“JBbit,rel”指令,在非程序区反复用“02000002000002H”填满。这样,不论PC失控后指向哪一字节,最后都能导致程序返回到复位状态。2003-8-26353控制状态失常的软件对策在大量的开关量控制系统中,例如PLC,人们关注的问题是能否确保正常的控制状态。如果干扰进入系统,会影响各种控制条件造成控制输出失误,或直接影响输出信号造成控制失误。为了确保系统安全,可采取下述软件抗干扰措施:软件冗余对于条件控制系

308、统,对控制条件的一次采样,处理控制输出改为循环地采样,处理控制输出。这种方法对于惯性较大的控制系统,具有良好抗偶然因素的干扰作用。设置当前输出状态寄存单元当干扰侵入输出通道,造成输出状态破坏时,系统能及时查询寄存单元的输出状态信息,及时纠正输出状态。设置自检程序在处理器内的特定部件或某些内存单位设置状态标志,在开机后,运行中不断循环测试,以保证系统中信息存储、传输、运算的高可靠性。2024/8/12354课程复习绪论8位CPU4个I/O并行接口2个C/T一个全双工UART口二级中断源片内RAM为128字节,特殊寄存器占128字节(未全用),片内ROM48K(PROM或EPROM),可直接扩展的

309、RAM,ROM为64K。f=12MHZ2024/8/12355MCS-51系列单片机三个基本型产品:8051,8031,8751三者主要区别:8751内有4KEPROM,8031内无无ROM,8051内有4K PROMMCS-51系列的扩展型MCS52系列:8052,8752,8032扩展改进内容:片内RAM增加到256字字节节,ROM增加到8K,C/T增加到3个个,中断源增加到6个个。2024/8/12356第一章MCS-51单片机硬件结构第一节概述第二节硬件结构一、MCS-51单片机的基本组成1、ALU:可进行算/逻辑运算具有一位布尔处理器,直接实现对可位寻址空间的操作,如:置位,清零,求

310、补,与,或,测试等。位处理器累加器采用位处理器累加器采用PSWCY2、控制器:、控制器:由PC,TR,TD,OSC等组成片内RAM:256字节低128字节,数据RAM,用户可用高128字节,特殊功能寄存器,专用寄存器(不作寄存数据使用)4、片内RAM:4K掩膜ROM5、并行I/O口:4个8位并行I/O口,分别用P0,P1,P2,P36、2个16位C/T:具有多种计数,定时功能7、1个全双工串行口:可采用多种方式进行串行传送8、5个中断源:分为两个优先级2024/8/12357二、MCS-51单片机1、控制信号及其引脚(1)RST/V(复位/备用电源)(2)-PSEN(29,O):扩展ROM专选

311、信号,L有效。(3)ALE/PROG(30,I/O)OSC,-PSEN,ALE时序关系。fALE=1/6fOSC,fPSEN=1/6fOSC,qALE=30%,qPSEN=50%,TALE=TPSEN=6TOSC(4)EA/VPP2、输入/输出(I/O口):P0、P1、P2、P3(1)P3.0=RXD,串收;P3.1=TXD,串发。(2)P3.2=-INT0,P3.3=-INT1,外中断.(3)P3.4=T0,P3.5=T1,计数/定时器输入。(4)P3.6=-WR,扩展的RAM写;P3.7=-RD,扩展的RAM读2024/8/12358三、并行I/O端口与结构地址、数据在地址、数据在P0口上

312、是分时出现的,并由口上是分时出现的,并由ALE同步同步。P1口:在读入之前,要先将锁存器置为“1”,然后开始执行读入。这就是所谓的“准”口。P2口:口:8031(无(无ROM单片机)只能用于地址线单片机)只能用于地址线P3.0(RXD),P3.2(-INT0),P3.3(-INT1),P3.4(T0),P3.5(T1)P3.1(TXD),P3.6(-WR),P3.7(-RD)复位后,复位后,P0P3状态全是状态全是FFH,可直接作为输入口用,可直接作为输入口用。四、存储器配置1、程序存储器寻寻址址范范围围:由PC长度确定,PC为16位,则最大寻址范围片内、片外合为64K(0000HFFFFH)

313、。2024/8/12359ROM中特殊单元及其使用( 1) 0000H单单 元元 : 系 统 上 电 或 复 位(PC)=0000H,即单片机从该单元开始取指令执行程序。(2)0003H:-INT0中断服务程序入口地址。后续7个单元,主要用于中断服务程序,其他程序也可使用。(3)000BH:C/T0中断服务程序入口地址,其余同上。(4)0013H:-INT1中断服务程序入口地址,其余同上。(5)001BH:C/T1中 断 服 务 程 序 入 口 地 址 , 其 余 同 上 。(6)0023H:串行通信中断服务程序入口地址,2024/8/123602、数据存储器:存放数据和中间结果(1)片内RA

314、M有256个单元:低低128字字节节(00H7FH),是可供用户直接使用的真正RAM区;高高128字节字节(80HFFH),为特殊寄存器或者专用寄存器1.低128字节的作用以及分区A、工作寄存器区:00H1FHB、位位寻寻址址区区:字节地址20H2FHC、用户RAM区:30H7FH堆栈区一般设置从堆栈区一般设置从30H开始开始2.高128单元(80HFFH):为专用寄存器(SFR)区11个可以位寻址特殊功能寄存器之间的位地址不一定是连续的2024/8/12361PSW:D7HD6HD5HD4HD3HD2HD1HD0HCYAcF0RS1RS0OVPDPTR:16位数据指针寄存器,即作为访问片外数

315、据存储器的地址指针,可分为二个8位寄存器单独使用,分别记为DPH,DPL。5)SP:堆栈指针(8位),指示栈顶,向上生长(通常将堆栈移到30H以上的RAM区)寄存器P03ACCBPSWSP复位初始值FFH00H00H00H07H2024/8/12362(2)片外数据存储器(64K),由DPTR间址,片内128单元地址与片外RAM的低128单元地址互为独立(由不同控制信号控制)指令与M的对应关系:MOVC:片内ROM、片外ROMMOV片内RAM,MOVX片外RAM片外M与控制信号的对应关系:-RD、-WR片外RAM,-PSEN片外ROM-EA用于片内、外ROM的使用控制五时序与有关电路:a、单字

316、节单周期指令b.双字节单周期指令c.单字节双周期指令六MCS-51单片机工作方式:复位复位、程序程序、单步,单步, 2024/8/12363第三节计数器/定时器(C/T)一、C/T结构:16位加法计数器,工作方式寄存器TMOD,控制寄存器TCONTMOD:D7D6D5D4D3D2D1D0GATE1C/T1M11M10GATE0C/T0M01M00二C/T工作模式:C/T0有4种,C/T1有3种串行通信以方式串行通信以方式2,作波特率发生器。,作波特率发生器。第四节串行接口1.字符格式,波特率=(字符数/S)(位数/字符)=*(位/S)=*波特二MCS-51单片机串行接口结构双缓冲器的结构三串行

317、口的控制寄存器(SCON,PCON,IEX)SCON(98H)D7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRI发送中断响应,发送中断响应,TI不会自动复位,必须由软件复位不会自动复位,必须由软件复位RI状态可用软件查询,也可以请求硬件中断,必须软件复位2024/8/12364第五节中断系统5个源,2个级,4个控制器(IE,IP,TCON,TCON)外部:-INT0(P3.2),-INT1(P3.3)内部:C/T1,C/T0溢出(TF0,1),TI+RI(串口)TFX,TI,RI在控制字中TCON(88H)TF1TR1TF0TR0IE1IT1IE0IT0SCON(98

318、H):D0=RI,D1=TI;关系RI+TI,共同对应ES,即同为一个中断服务程序入口地址3)IE(A8H):EA/ESET1EX1ET0EX0为两级允许机制:EA为总禁/允;其余为对象禁/允IP(B8H):/PSPT1PX1PT0PX0同级后同级先MCS-51机机中中断断系系统统规规定定,从从中中断断服服务务程程序序返返回回主主程程后后,至至少少要要执执行行一一条条指指令,才能响应新的中断申请令,才能响应新的中断申请。2024/8/12365第6章单片机系统扩展技术系统地址空间分配线选法:直直接接以以系系统统空空闲闲的的高高位位地地址址线线作作为为芯芯片片的的片片选选信信号号的的扩扩展存储器

319、或展存储器或I/O接口的芯片寻址法接口的芯片寻址法.2.译码法:使用译码器对系统空间的高位地址线进行译码。以其输入作为各芯片的片选信号。译码法特点:译码法特点:(1)不同芯片使用的空间可以成为连续空间。不同芯片使用的空间可以成为连续空间。(2)同样的地址线数产生的片选信号比线选法多同样的地址线数产生的片选信号比线选法多.2最小系统概念:能使计算机运行的最小配置.对于80518751,若启用片内ROM,则最小系统在单片机内。对于8031,由于无片内ROM,所以程序只能存在于外接ROM中。2024/8/12366例例3:利用译码法设计一个具有:利用译码法设计一个具有6K扩展扩展ROM的单片机系统的

320、单片机系统 zz解解:目目前前市市场场无无6KROM6KROM芯芯片片,现现用用3 3片片2KROM2KROM芯芯片片EPROM2716EPROM2716组组建建。和和61166116引引脚脚基基本本相相同同,由由此此非非常常方方便便2716271661166116(28162816)等等联联合合布布线线. .与与80518051相相联联,-PSEN-PSEN为为取取信信息息的的控控制制信信号号,连连接接线线路路如图所示如图所示D81Q81G74LS373P0MCS-51ALEP2EAPSENMA07D70MA11MA12MA13A07O70A8101#2716CEOEA07O70A8102#

321、2716CEOEA07O70A8103#2716CEOE1AY0BLS138Y1CY2E1E21E22MA8102024/8/12367zz由由 图图 可可 知知 ROMROM采采 用用 译译 码码 片片 选选 法法 , ,各各 芯芯 片片 占占 用用 的的 地地 址址 范范 围围 ( (注注 意意 到到MA1311=000,Y0=0,MA1311=000,Y0=0, MA1311=001,Y1=0,MA1311=001,Y1=0, MA1311=010,Y2=0)MA1311=010,Y2=0)如如 下下 : 1 1 :0000H0000H07FFH(07FFH(基本地址基本地址) )zz

322、重叠地址:重叠地址:4000H4000H47FFH8000H47FFH8000H8FFFHC000H8FFFHC000HC7FFHC7FFHzz22:0800H0800H0FFFH(0FFFH(基本地址基本地址) )zz 重叠地址:重叠地址:4800H4800H4FFFH8800H4FFFH8800H8FFFHC800H8FFFHC800HCFFFHCFFFHzz33:1000H1000H17FFH(17FFH(基本地址基本地址) )zz 重叠地址:重叠地址:5000H5000H57FFH9000H57FFH9000H97FFHD000H97FFHD000HD7FFHD7FFHz8255工作方

323、式工作方式:三种(方式:三种(方式0,1,2)zz方方式式0 0:基基本本输输入入/ /输输出出方方式式即即本本方方式式不不使使用用任任何何联联络络信信号号以以PAPA、PC7PC74 4、PBPB、PC3PC30 0各有各有I/OI/O状态、各组成状态、各组成1616种配合。种配合。zz方式方式1 1:选通输入:选通输入/ /输出方式。分两组实现:输出方式。分两组实现:zzA A组:组:PAPA口为数据通道,口为数据通道,PC7PC74 4及及PC3PC3为联络信号为联络信号zz方方方方式式式式2 2:双双向向传传送送信信号号. .仅仅有有PAPA口口有有此此工工作作方方式式。此此时时PC7

324、PC73 3用用于于联联络络。而而B B组组仍可用于方式仍可用于方式0 0、1 1。zz实际上在实际上在PAPA口在方式口在方式1 1下的输入下的输入/ /输出合为一体。输出合为一体。2024/8/12368zz例例例例2 2:在在例例1 1基基础础上上若若PAPA口口输输入入的的是是8 8个个开开关关,而而PBPB输输出出连连接接的的是是一位一位LEDLED数码管,试编程将开关状态变成数码管,试编程将开关状态变成LEDLED显示状态。显示状态。zz解解:(1):(1)电路如图所示电路如图所示D81Q81G74LS373P0MCS-51ALEP2.7WREARDRESETD70MA0MA1MA15D70PA0A0PA1A18255PA7CSWRPB0RDPB1RESETPB7abdp

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号