精品-单片机原理课件_第1页
精品-单片机原理课件_第2页
精品-单片机原理课件_第3页
精品-单片机原理课件_第4页
精品-单片机原理课件_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

精品单片机原理课件单片机原理与接口技术嵌入式微控制器的开发入门参考资料1单片机原理及其接口技术胡汉才清华大学出版社32元2MCS5196系列单片机原理及应用孙涵芳徐爱卿北京航空航天大学出版社35元3MCS51系列单片机实用接口技术李华北京航空航天大学出版社40元4电子世界中国电子学会主办期刊600元期本课主要内容及课时安排总讲课课时24学时第一章MCS51系列单片机的基本硬件结构8课时介绍51单片机内部硬件结构数据寄存器程序存储器输入输出端口定时计数器串行口及中断等第二章MCS51单片机的指令系统4课时51单片机的111条指令的分类寻址方式伪指令及使用中的注意事项第三章MCS51单片机的系统扩展及应用12课时程序与数据存储器的扩展定时计数器的应用串行口的应用及ADDA转换器与单片机的接口和键盘扫描动态显示接口电路硬件基本概念微型计算机由CPU存储器定时计数器并行输入输出接口电路中断控制器等大规模IC芯片安置在一个电路板上加上键盘显示器等构成了微型计算机的硬体部分单片机将微型计算机系统所用的大多数IC芯片集成到一个芯片中可以认为单片机就是将微型计算机的CPU存储器IO端口中断控制器等全部做在一个芯片中去美国INTEL公司生产的MCS51单片机就是一种典型的按照微型计算机的框架采用大规模IC工艺制造的单片机也是目前世界上使用量最大的一种较典型的产品嵌入式微控制器是单片机发展的一个高级形式也是单片机发展的必然趋势它的设计理念不再停留在模仿微型计算机的结构而是面向应用加大功能减少功耗精简指令系统提高运行速度为出发点来设计单片机的框架这种处理器的最大特征是不仅包含了一般单片机的所有硬件电路还集成了放大器比较器AD转换器和PWM电路等等用它来设计一个智能化的产品可以进一步简化外围电路降低开发成本甚至完成一般的单片机所不能完成的任务美国MICROCHIP公司生产的PIC单片机等产品就是这类产品的代表实际上PIC单片机也称为嵌入式微控制器如PIC16F877等嵌入式计算机系统人们在工业控制家电产品智能仪表汽车电子等领域进行智能化设计时将嵌入到被控制对象如家电汽车机床等中的已经失去了原有的计算机形态及功能的专用计算机称之为嵌入式计算机系统在这些被控制对象中往往要求嵌入式计算机系统要有极小的体积和极低的成本要有极小的功耗和较高的可靠性而这些又恰恰是通用计算机无法作到的因此以单片机为代表的嵌入式计算机系统也称嵌入式微控制器极大的满足了这种市场的需求反过来市场的需要也迫使单片机去不断完善发展使其分类越来越细品种越来越多微型计算机与单片机在硬件结构上的比较微型计算机单片机第一章MCS51系列单片机的基本硬件结构11MCS51单片机的主要性能和特点内部程序存储器ROM以89C51为例4K的存储容量内部数据存储器RAM256B128B的RAM21B的SFR寄存器区设有4个寄存器区每一个区有R0R7八个工作寄存器8位并行输入输出端口P0P1P2和P3定时计数器2个16位的定时计数器串型口全双工的端口RXD接收端TXD发送端中断系统设有5个中断源系统扩展能力可外接64K的ROM和64K的RAM堆栈设在RAM单元中可以浮动既通过堆栈指针SP来确定堆栈的位置布尔处理机配合布尔运算的指令进行各种逻辑运算指令系统111条指令按功能可分为数据传送算术运算逻辑运算控制转移和布尔操作5大类12MCS51单片机内部方框图MCS51系列芯片及制造工艺13MCS51单片机的引脚定义MCS51单片机有两种封装形式A40脚的双列直插DIP封装B44脚的PLCC1主电源引脚VCC5V40脚和VSSGND20脚2外接晶体引脚XTAL119脚XTAL218脚只要在这两脚之间接入一个晶体震荡器单片机就可以以此晶体的频率开始工作常用的晶体频率有024M频率越高单片机的工作速度就越快但单片机的功耗就要增加3控制或与电源复用引脚RSTVPDALEPROGPSEN和VDDRSTVPD9脚在系统上电震荡器开始工作时在内部加在此引脚上有一个两个时钟周期的高电平使单片机复位但为了使系统复位可靠建议外加一个上电复位电路延长复位的时间当单片机掉点时此引脚可以接入备用电源向单片机内部的RAM供电以防止RAM中的数据丢失在复位状态下所有SFR的内容全变为0端口输出1RAM内容不变使用555电路构成的掉电保护电路掉电保护原理及过程电源监控电路对电源VCC进行监控当VCC的电源开始下降时向单片机的INT0或INT1发一个中断申请信号单片机收到中断信号立即进入中断程序在电源消失前1迅速将一些重要的信息送RAM保存2从P10引脚输出负脉冲触发单稳进行电源切换外部单稳电路进入但稳态后由于VCC的消失使电路无法对单稳电容充电所以单稳电路一直处于休眠状态当VCC电源恢复后VCC对电容充电经后脱离单稳态ALEPROG30脚以一个不变的频率系统时钟FOSC6周期性输出正脉当单片机使用外部存储器时此信号可作为低八位地址的锁存信对于EPROM型的单片机此脚还是用于写程序时输入编程脉冲PSEN29脚外部程序程序存储器的选通信号当单片机使用外部程序存储器时此脚在一个机器周期内产生两次负脉冲注意访问外部数据存储器时此信号无效EAVDD31脚外部程序存储器的选择端控制端当此脚加入1电平是单片机使用内部的程序存储器当EA加入低电平时系统只使用外部的程序存储器但要特别注意如果EA1既使用单片机内部的程序存储器时如果程序计数器PC的值超过0FFFH时单片机将自动转向外部程序存储器1000H开始的单元对于EPROM型的单片机此脚还是用于写程序时加入21伏的编程电压4并行输入输出端口引脚P0P3P00P07P0端口线3932脚输出能力最强的端口可以带动8个TTL负载驱动一个MOS负载时应接一个10K左右的上拉电阻如果系统使用外接存储器时该口还作为地址低八位总线和数据总线注意在这种情况下P0口就不能通用的IO端口P10P17P1端口线18脚负载能力为4个TTL负载P20P27P2端口线2128脚通用IO端口除了做通用IO端口外当系统使用外接存储器时该口还作为地址高八位总线在这种情况下P0口就不能通用的IO端口负载能力为4个TTLP30P37P3端口线1017脚P3口除了做通用的IO端口外同时它还有第二功能负载能力为4个TTLMCS51单片机外型图DIP封装MCS51单片机的逻辑符号图14MCS51单片机的存储器的配置140MCS51单片机的存储器的配置特点89C51在MCS51单片机的内部集成了4K的程序存储器和256B的数据存储器同时还可以使用片外的程序存储器和数据存储器其扩展能力都是64K从物理结构的角度讲51单片机的存储系统可以分为四个存储空间既片内ROMRAM和片外ROMRAM从逻辑上讲既用户编程的角度讲51单片机的存储系统又可分为三个存储空间既片内RAM片外RAM和片内外的程序存储器ROM从物理结构上单片机系统的存储器结构图四个部分141程序存储器片内与片外程序存储器是用来存放编好的程序常数和表格的在MCS51单片机中当引脚EA1时系统使用片内的4KROM来存储程序EA0时系统使用片外的ROM无论是使用片内还是使用片外的ROM既EA1或EA0其起始地址都是从0000H单元开始如果EA1使用片内的程序存储器时程序从0000H开始执行注意在这种情况下如果程序计数器的指针PC值超过0FFFH4K时单片机就要自动的转向片外的ROM存储器尽管EA1且从片外ROM的1000H单元开始执行程序但单片机是无法使用片外ROM的0000H0FFFH这4K单元MCS51单片机片内外程序存储器的使用示意图程序存储器六个特殊的单元在程序存储器中有六个单元是具有特定功能编程者是不能随便使用的0000H单元上电时程序计数器PC所指向的单元0003H单元外部中断INT0的入口地址000BH单元定时器T0的溢出中断入口地址0013H单元外部中断INT1的入口地址001BH单元定时器T1的溢出中断入口地址0023H单元串行口接收传送的中断入口地址142内部数据存储器RAM数据存储器无论在物理上还是逻辑上都分为两个地址空间既一个内部和一个外部的数据存储空间访问内部数据存储单元时使用MOV指令而访问外部数据存储器时使用MOVX指令内部数据存储器从功能上又将256B空间分为二个不同的块1低128B的RAM块2高128B的SFRSPECIALFUNCTIONREGISTER块在低128B的RAM存储单元中又可划分为工作寄存器区可位寻址区通用存储数据的便签区高128B的专用寄存器区中仅仅使用了21寄存器51系列其它单元未定义不能使用MCS51片内片外数据存储器示意图片内RAM低128B字节功能分配图片内RAM20H2FH中的位寻址区结构图位寻址区内的地址是位地址共有007FH共128个位要区分字节地址和位地址这两个不同的地址概念从物理的角度每一个字节地址内包含了8个位既D7D6D5D4D3D2D1D0在一般情况我们提到的RAM地址都是字节地址从逻辑的角度讲字节地址和位地址是靠不同类型的指令来区分的如MOVA20H将RAM的20单元内容送累加器AMOVC20H将RAM位寻址区中20H位送CY中在这二个例子中第一条指令为字节传送指令所以20H为字节地址第二个例子中的指令为位操作指令所以20H为位地址有关详细内容将在第二章中描述0区工作寄存器区结构图特殊功能寄存器SFR特殊功能寄存器SFRSPECIALFUNCTIONREGISTER特殊用途寄存器的集合用来设定单片机内部各个部件的工作方式存放相关部件的状态定时器初值寄存器并行端口的锁存器等等尽管特殊功能寄存器与RAM在同一个单元中但不能作为普通的RAM存储单元来使用只有在编程中根据需要进行一些特定功能的设定或者是从中查寻相关部件的状态时才能进行读写操作如中断方式的设定定时器工作模式的设定查询串行口发送或接收是否结束等等SFR表二特殊功能寄存器SFR说明程序计数器PC用来存放下一条要执行的指令地址长度为16位所以寻址范围为06553564K在物理上是独立于SFR累加器A最常用的专用寄存器大多数的指令操作数都来自累加器A所有的算术运算指令的运算结果都存放在A中B寄存器乘除法指令使用的寄存器数据指针DPTR一个16位的寄存器由高八位DPH和低八位DPL构成DPTR主要用来存放片内ROM的地址和片外RAMROM的地址这样单片机可以通过间址的方式来访问片内ROM或片外的RAMROM例如片外RAM的2000H单元中有一个数X试将其送到累加器A中MOVDPTR2000HDPTR2000HMOVXADPTRAX程序状态字PSW8位寄存器表征程序执行的状态信息CYPSW7进位标志在加减法运算中累加器A的最高位A7有进位则CY1否则CY0同理在减法运算中如果A7有借位则CY1因此CY往往作为无符号数运算是否有溢出的标志ACPSW6辅助进位位用来判断加减法运算时低四位是否向高四位进位或借位既A3的进位或借位往往用来判断压缩的BCD码的运算处理F0PSW5用户标志位完全由用户来定义和使用RS1RS0工作寄存器区选择位确定工作寄存器R0R7在哪个区中单片机在上电或复位后RS1RS000当需要人为的修改RS1RS0的值来改变工作寄存器区的位置OVPSW2溢出标志位判断符号数加减法运算时是否有溢出OV的结果可以用一个算法来表示OVCP异或CS其中CP为A7的进位CS为A6的进位OV1表明有溢出PPSW0奇偶标志位用来标志累加器A中运算后1的个数当P1时表明A中1的个数为奇数个反之为偶数个举例有两个数0FH和F8H试将两数相加MOVA0FH将立即数0FH送累加器AADDA0F8HA的内容与立即数0F8H相加结果送A00001111运算结果A07HCY1既CP111111000CS1OV0因为CP1CS1CY100000111AC1P1如何根据PSW来分析运算结果是否正确是否有溢出1若数据为无符号数既CY1A07H2若数据为有符号数既15加8707HOV0表明无溢出SP堆栈指针8位寄存器用来指示堆栈的位置可由软件修改在MCS51单片机的设计中片内RAM区为堆栈的可用空间上电或复位时SP被初始化为07H既堆栈底部被确定在RAM的07H单元堆栈操作过程进栈PUSHACC指令设SP07H1SP1送SP此时SP08H2ACC送RAM的08H单元出栈POPACC设SP08H1将RAM中08H单元内容送A2SP1送SP此时SP07H并行端口P0P3SFR中的P0P3实际上就是IO端口的数据锁存器与RAM中的任意一个单元一样P0P3都有自己的RAM地址80H90HA0HB0H所以在51单片机中的输入输出操作实际上就是个普通的RAM单元操作一样如输出指令MOV80HA将累加器中的数据送到P0口输出输入指令MOVA90H将P1口的数据输入到累加器A中既MCS51的指令系统中没有专用的输入输出INOUT指令而是把P0P3作为普通的内存单元来使用上面的第一个例子实际上就是MCS51的输出指令同理后者是MCS51的输入指令串行数据缓冲器SBUF它是专门用来存放发送或接收的数据实际上它是两个独立的寄存器尽管在SFR中的RAM地址只是99H但根据指令发送或接收两种不同的操作硬件会自动的区分将数据送如对应的缓冲单元定时计数器T0T1无论是定时还是计数对于MCS51单片机的定时计数器来说都是一个计数器在计数这个计数器是由两个8位寄存器高位和低位构成的16位计数器分别是TH0TL0T0TH1TL1T1TH和TL中的数据直接与定时操作或计数操作有关因此在使用定时计数器之前要对它进行初始化其中就要对THTL赋初值如MOV8CH01HMOV8AH20H大家试分析上面两条指令的作用有关SFR中其它寄存器的说明将相关的章节中作介绍143外部数据存储器在片内RAM不能满足需要时就要外接RAMP0P1作为外部RAM的地址和数据总线MCS51对外部数据存储器的扩展能力为64KB除了硬件电路外系统主要是靠专门的指令来访问外部数据存储器如MOVR020H将外部RAM单元地址20H送R0寄存器MOVXAR0从外部RAM20H单元取数据到累加器A这里使用了R0做间址寄存器所以寻址范围为256KB同理MOVDPTR2000H将外部RAM单元的地址的2000送DPTRMOVXADPTR从外部RAM2000H单元中取数据到A这里使用了16位的寄存器DPTR所以寻址范围为64KB第一章第四节内容小结14MCS51单片机的存储器的配置片内4K的程序存储器ROM和256B的数据存储器RAM片外可以扩展64K的ROM和RAM从用户编程的角度可以将它们分为3个存储空间1片内RAM2片外RAM3片内片外的ROM141程序存储器片内与片外当引脚EA1时单片机上电复位后从片内ROM的0000H单元运行程序若引脚EA0时单片机上电复位后从片外ROM的0000H单元运行程序当引脚EA1且PC值大于1FFFH时单片机就自动转到片外ROM的2000H单元继续运行程序无论是使用片内还是片外的ROM有六个单元是有特定意义的10000H单元上电复位后的启动地址20003H单元外部中断INT0的入口地址3000BH单元定时器T0的中断入口地址40013H单元外部中断INT1的入口地址5001BH单元定时器T1的中断入口地址60023H单元串行口中断的入口地址142内部数据存储器RAM内部RAM的256B分为低128B和高128B其中低128B中有1工作寄存器区2位寻址区3便笺区高128B中仅仅使用了小部分做特殊功能寄存器SFR用注意1SFR不同于一般的数据RAM它不是用于存储数据而是用来存储和表征单片机内部几个逻辑部件的特征状态等重要信息2在使用RAM时要注意字节地址和位地址的概念3访问内部RAM的指令为MOV指令143外部数据存储器在硬件具备的条件下MCS51单片机可以使用64KB的外部数据存储器如果要访问外部数据存储器RAM时只能使用间址的寻址方式间址寄存器有R0R1或DPTR前者寻址范围为256KB00HFFH后者为64KB0000HFFFFH使用的指令是MOVX15震荡器时钟电路和CPU的时序151震荡器与时钟电路MCS51内部有一个用于构成震荡器的高增益反相放大器在单片机引脚的XTAL1和XTAL2分别是此放大器的输入和输出端与作为反馈元件的晶体或陶瓷谐振器一起构成了一个自激震荡器见右上图如果使用外部震荡器信号其外来的信号加在XTAL1的引脚上见右下图152MCS51单片机的时序时钟周期T时序中最小的时间单位其值由外接晶体或外输入时钟来决定其值为石英振荡器频率的倒数例如在单片机外接1MH的晶体则单片机的系统时钟的频率为1M时钟周期为1US机器周期完成特定功能所需要的时间在MCS51单片机中机器周期由12个时钟周期构成并分为6个状态S1S6每个状态又分为P1和P2两拍这样一个机器周期的12个震荡周期可以表示为S1P1S1P2S2P1S2P2S3P1S3P2S6P1S6P2将12个震荡周期用6个状态和2拍来替代指令周期这是时序图中最大的时间单位既执行一条指令所需要的时间在MCS51系统中不同的指令它所包含的机器周期数不同它们分别是1单机器周期指令2双机器周期指令3四机器周期指令我们知道一个机器周期包含了12个震荡周期如果我们使用一个12M的晶体震荡器那么一个机器周期为1US两个机器周期为2US四个机器周期为4US可见一条指令的运算速度与它所包含的机器周期数有关机器周期数越少执行的速度就越快在MCS51单片机的指令系统中除了乘除法指令为四个机器周期外其余都是单周期和双周期指令指令的字节数与指令周期之间的关系在MCS51单片机的指令系统中有单字节双字节三字节指令在MCS51的111条指令中可以分为六种基本的时序1单字节单周期指令4双字节单周期指令2单字节双周期指令5双字节双周期指令3单字节四周期指令6三字节双周期指令单字节单周期指令的时序指令特点在程序存储器ROM中仅占一个存储单元在ALE第一次有效S2P1时从ROM中读取指令的操作码送入指令寄存器IR中并译码执行在ALE第二次有效时封锁PC加一使第二次读数无效可见1ALE信号对应这从ROM中读指令所以在一个机器周期中CPU可以读两次指令2对于单字节单周期的指令CPU通过译码后封死PC实际上指令的后半部不做任何工作双字节单周期指令时序指令特点一条指令长度为两个字节并存储在ROM相邻的两个单元中要想完整的将这样的指令执行完必须从ROM中读两次操作码在ALE第一次有效时CPU从ROM的N单元中取出指令的第一个字节OP11并送入IR译码通过译码CPU知道这是一条双字节指令所以使PC加一并在ALE第二次有效时从ROM的N1单元取出指令的第二个字节OP12送入IR进行译码并产生对应的操作最后在S6P2时完成本条指令的运行单字节双周期指令的时序指令特点单字节需要两个机器周期运行如INCDPTRDPTR为两个8位的寄存器加一时必须分两步完成既第一步DPL加一如果DPL加一有进位则还要进行第二步对DPH加一在指令周期的第一个ALE时将ROM中的操作码OP取出经IR译码后得知为单字节双周期指令所以一面执行该指令同时封锁后面三次ALE有效时的PC1在第二个机器周期的S6P2时完成操作153访问外部程序存储器ROM的时序设单片机使用片外ROM且要执行的是一条MOVCAADPTR指令设ADPTR2000H1在S2P1时刻P2口输出外部ROM的高八位地址A15A8P0口输出低八位地址A7A0这时地址是由程序计数器PC提供的ROM中的指令地址2在ALE的下降沿P0口的数据低八位地址被锁存到74LS373中3在S3P2到S4P1期间PSEN变低电平时外部程序ROM被选中数据输出端的三态门被打开被选中单元中的指令MOVC送到P0口上且在S4P2时指令经P0口送至CPU的IR中4CPU对指令译码后在S4P2时进行常数地址计算并由P0P2口输出5在S5P2时ALE将常数地址的低八位锁存6在S6P1时外部ROM被再次选种打开按照单片机所提供的16位常数地址将外部ROM中的常数经P0口在S6P2时刻送入累加器A154读外部数据存储器RAM的指令时序设外部RAM2000H单元中有一个数X且DPTR中已存有该数地址2000H则CPU执行外部ROM中的指令MOVXADPTR将外RAM的X送A1在S2P2时ALE的第一个下降沿将P0口输出的外程序ROM的低八位地址锁存到74LS373锁存器中2在S3P2的PSEN为低电平时选中外ROM并根据单片机P0P2口输出的16位地址选中MOVX指令单字节通过P0口送至单片机内部IR中译码经译码后产生下列的一系列操作3CPU将DPTR中的高8位20H送P2口输出低八位00H经P0口输出节在S5P1时ALE第二次下降沿时将P0口的低八位地址锁存4在第二个机器周期的S1S3中单片机输出RD信号低电平选中外部RAM并根据单片机提供的2000H这16位地址中取出数据X5CPU在S2S3期间将外部RAM2000H单元送到P0口上的数据送入累加器A中上述过程可以分成两个指行的阶段1根据PC所指定的程序存储器的地址将MOVX指令从片外ROM中取出2经译码后将DPTR提供的外数据存储器RAM中的数据地址取出数据经P0口送累加器A在第一阶段CPU产生PSEN信号用来选通外部程序存储器ROM在第二阶段CPU输出RD信号低电平用来选通并读取外部数据存储器RAM的数据16输入输出端口在MCS51单片机的四个端口都是具有输出锁存功能的双向端口这些锁存器的位置都在SFR中其地址分别为80H90HA0HB0H出于系统的考虑在硬件设计上对每一个端口都有不同的要求所以每一个端口又具有不同的特点161P0口特点通用数据IO端口和地址数据复用总线端口1在作为通用数据IO端口时具有较强的驱动能力8个TTL负载与MOS负载连接时需要外接一个上拉电阻2作为地址数据复用总线使用时P0口首先输出外部存储器的低八位地址然后再变为数据总线进行数据的输入或输出此时P0口不能再作为通用IO口P0口的位结构图1P0口的IO操作通用IO端口在P0口作为通用IO端口时控制电路中的控制为0电平多路开关MUX接入下方的锁存器的Q端由于与门的一个输入端为0所以它使上端的FET截止这就是P0口在做IO口时输出为漏极开路的结构原因输出操作在执行以口为目标的指令时数据送到锁存器的D端经Q端送场效管应输出极如送1时Q0使下端的FET截止这样出现输出极的两个FET全部截止在这种情况下必须在端口线上外加上拉电阻这样在上拉电阻的作用下使端口为高电平同理若总线向口送0时锁存器的Q1使下端的FET导通上面的FET仍然截止这样端口呈现0电平输入操作读引脚读锁存输入前写一A读引脚读外部送到端口引脚的电平即通常所说的输入操作如MOVAP0此时单片机控制读引脚的三态门使引脚处的外部电平经三态门送入内部总线B读锁存器将进行读锁存器并进行处理最后再写回锁存器的操作称之为读修改写操作在这种情况下读入的数据不是来自引脚而是端口内部的锁存器的内容当前面完成一次端口的输出后要再将前面输入的状态取回来进行再处理然后重新输出在MCS51的指令系统中这种读修改写的操作有ORLXRLJBCCPLINCDECDJNZMOVPXYCLRPXY和SETPXY如ORLP0AP0AP0C输入时应先写1在端口电路中可以发现一个问题端口在输入读引脚时原来锁存器的状态可能要影响引脚电平的输入例如原来锁存器的状态为0态既输出极的下端FET是饱和状态这样如果外电路向引脚输入高电平时电路将不能正确读入要解决的方法就是让下端的FET截止既事先向端口写一个1请注意下面的一段程序MOVA0FFH0FFH送累加器AMOVP0A向P0口写1MOVAP0从P0口输入数据到A你能正确的分析出指令的操作吗2P0口的总线方式系统使用外存储器时控制电路的控制1此时与门打开MUX接向地址数据信号在这种情况下输出极的两个FET都处于正常的工作状态访问外部存储器的指令MOVXMOVC就是使用P0口来输出外部存储器的低八位地址和输入输出存储器的数据可以从访问外部程序存储器ROM的时序读外部数据存储器RAM的指令时序中来清楚的观察P0口作为地址数据复用总线的工作特点在进行单片机的硬件系统的设计中如果使用了外部存储器或使用MOVX指令来访问外部接口电路时P0口成为整个系统的地址数据复用总线换句话P0口不能再作为通用的IO端口的形式直接与外部连接P0口特点小结1做通用数据IO端口时输出级上端的FET处于截止状态所以与MOS器件连接时必须接上拉电阻否则不能正确的输出高电平2在输入操作前为了保证输入正确必须先向端口写13读引脚与读锁存器是不同的两个数据通道凡是读修改写的操作CPU读的都是端口锁存器中的数据4为了提高电路的可靠性端口引脚不要直接与三极管一类的器件直接连接应加隔离电路或与三极管之间加一个电阻5在总线方式时P0口不能再做通用的IO端口它分时输出地址数据总线的信息此时引脚不用外接上拉电阻特点单纯的通用IO端口负载能力为3个TTL输入与P0口的区别在于内部具有上拉电阻所以输出时不用外接上拉电阻162P1口的位结构图163P2口特点通用数据IO端口和高八位地址总线端口与P0口一样P2口在系统使用外部存储器时做高八位的地址总线应当注意的是仅使用外部数据存储器时P2口分两种情况1仅仅使用256B的外部RAM时既使用MOVXAR0指令访问外部RAM此时用8位的寄存器R0或R1作间址寄存器这时P2口无用所以在这种情况下P2口仍然可以做通用IO端口2如果访问外部ROM或使用大于256BRAM时P2口必须作为外存储器的高八位地址总线如MOVXADPTR访问外部数据存储器MOVCAADPTR访问外部程序存储器这里使用了16位的寄存器DPTR164P3口特点通用IO端口多用途端口在多用途情况下P3口分别作为串行口外中断输入外部计数输入和系统扩展时使用的WR和RD信号的端口在这种情况下锁存器Q端为1电平以保证与门是打开的在通用IO模式下替代输出功能端为1电平以保证与门打开165并行端口在使用时应注意的几个问题拉电流还是灌电流与大电流负载的连接我们以美国ATMEL公司生产的AT8951为例1使用灌电流的方式与电流较大的负载直接连接时端口可以吸收约20MA的电流而保证端口电平不高于045V见右上图2采用拉电流方式连接负载时AT89C51所能提供拉电流仅仅为80A否则输出的高电平会急剧下降如果我们采用右下图的方式向端口输出一个高电平去点亮LED会发现端口输出的电平不是1而是0当然不是所有的单片机都是这样PIC单片机就可以提供30MA的拉电流和灌电流单对于大多数IC电路最好还是使用灌电流去推动负载单片机与继电器等大电流负载的接口我们知道AT89C51的端口可以吸收约20MA的电流对于继电器等大于20MA的负载单片机可以采用右图的接法用一个三极管来承担负载所需的大电流若于负载电流易造成干扰单片机的环境应采用右下图光电隔离的方式其中AB两处没有任何电的联系17MCS51单片机的定时计数器定时计数器工作方式与原理定时计数器是一种应用非常广泛的逻辑电路它可以完成两种不同的方式工作定时计数定时计数器工作方式与原理1定时产生一个标准的时间间隔如20MS100MS或1000MS等单片机使用这种方式可以产生一个符合某一要求的脉冲方波如下图2计数对外部的事件脉冲进行统计很明显外部事件的发生是随机的单片机不可能预知外部事件何时发生但可以进行统计当达到所要求的数值时单片机进行相应的操作3定时计数器的工作原理用一个简单的框图构造它的模型N位计数器构成了电路的核心定时计数两种方式的区别在于计数器的脉冲来源初值寄存器是用来设定定时计数的具体参数1何时控制启动计数2如何控制定时还是计数3如何控制定时计数的长短171定时计数器的四种工作模式1模式013位计数器模式当计数器计满为全1时再来一个计数脉冲时就产生一个溢出中断信号TF112模式1既16位计数器模式以T1为例GATE0时TR11开始定时计数GATE1时门控方式TR1且INT11时开始工作此种方式主要用于测量加在INT1脚上一个正脉冲的脉宽3模式2自动重装初值模式由TL1做计数器TH1做初值寄存器工作前TL1TH1分别预置相同的初值计数器TL1工作时每当溢出产生中断的同时将TH1中的初值自动重装此模式主要用于做串行口波特率发生器使用4模式3组合扩展模式在这种模式中单片机将T0和T1重新进行拆分组合将T0变为由TH0TL0组成的两个独立的8位定时计数器注意模式3时T0TH0TL0及T1的各自特点1TH0计数脉冲来自内部FOSC所以它只能处于定时方式2TH0分别借用了定时器T1的TR1和TF1来为自己工作使TH0能象TL0那样用TR1启动定时并用TF1来作为TH0的溢出中断的标志3由于T1缺少了启动控制信号TR1和溢出中断标志TR1那么在模式3时T1是如何工作没有溢出中断标志TF1则T1就不用中断方式工作实际上连查询也不行没有启动控制信号TR1可以让它在模式3之前就开始工作并且让它事先设定为自动重装模式4模式3就是将单片机原有的T0T1两个计数器变成三个独立的计数器其中T1要事先设定为模式2串行口的波特率发生器并启动起来在模式3时T0T1的电路结构图定时计数器4种模式比较172MCS51定时计数器的控制和状态寄存器GATE选通门GATE0时只要TR1计数器就开始工作GATE1时只有INT脚和TR同时为1时计数器才开始工作主要用于测量INT脚上高电平脉冲的宽度CT计数定时方式选择位CT0时计数方式既计数器的计数脉冲来自T0或T1引脚的外部事件CT1时定时方式计数脉冲来自内部震荡频率FOSC的12分频M1M0模式选择分别对应四种模式2控制寄存器TCONSFR地址88HTF1TF0定时器T1T0的溢出标志计数器溢出时硬件自动置位即TF1进入中断后再由硬件自动清除TR1TR0计数器T1T0的控制位由软件置位计数器开始工作或清零计数器停止工作IE1IE0外部中断INT1INT0的请求标志当单片机检测到INT引脚上有下降沿时IE1申请中断进入中断服务程序时硬件自动清除IE标志IT1IT0外中断触发类型控制IT1时外中断信号的下降沿出发IE标志IT0时外中断信号的低电平引发IE标志关于中断部分将在后面相关章节中再做详细介绍18MCS51单片机的串行接口第八节目录二单片机系统中的串行接口既特点串行口的设计使MCS51单片机的功能大大增加可以用串行通讯的方式实现单片机与单片机或者是单片机与微机等设备之间的数据交换串行通讯电路简单成本低可以实现远距离的数据传输缺点是传输速度低于并行数据传输在一个嵌入式系统中往往采用多单片机构成一个完整的控制系统它们之间以串行通信的方式进行数据交换多机通讯如图串行通讯应用示意图关于串行通讯中的基本概念字符帧也称数据帧它是由起始位数据位和停止位构成如下图所示波特率每秒钟传输二进制数据的个数波特率使用的单位是BPSBITPERSCOND既位秒异步通讯数据是以字符或字节为单位组成字符帧传送的数据是从发送端一帧一帧的发送通过传输线为接收端一帧一帧的接收发送与接收相互独立互不同步181数据缓冲寄存器SBUFSBUF是用来存放串行口发送和接收数据的寄存器在SFR的地址为99H在物理上它对应两个不同的单元发送寄存器和接收寄存器CPU写SBUF就是开始发送数据MOVSBUFACPU读SBUF就是接收数据到AMOVASBUF由于发送SBUF与接收的SBUF是两个不同的逻辑部件所以在硬件设计上保证了51单片机串行口是一个可以同时发送与接收的全双工接口182串行口控制寄存器SCON地址98HSM0SM1串行口操作模式选择位可以确定串行口的四种模式之一如下表SM2RI完成一帧数据接收的标志原始应清零接收完成RI1并申请中断TI完成一帧数据发送的标志原始应清零发送完成TI1同时申请中断RB8在9位数据传送的模式23时接收到的第9位数据TB8在9位数据传送的模式23时将要发送的第9位数据REN允许接收位REN1时允许接收由软件置位或清零SM2多机通信使能位1模式01时SM2不用应设为0时RI才能被正常激活并引发中断2模式23时若SM20时无论RB8如何RI都能被激活RI1但是RI1并不能引发中断所以只能用查询的方式接收数据若SM21收到的第9位RB80时则RI不会被激活若SM21且RB81时RI才能被激活1并引发中断如何使用RITI标志中断和查询CPU与串行口之间不是同步工作的两者之间的数据交换通过SBUF何时交换必须借助于标志信号进行RISCON0接收完一帧数据的标志如果系统中断是开放的则RI1时会自动引发中断用户可以通过中断服务程序将SBUF中的数据取出送累加器AMOVASBUF也可以使用查询的方式对RI进行检测如果RI1则执行MOVASBUFTISCON1发送完一帧数据标志如果系统中断是开放的则TI会自动引发中断用户可以通过中断服务程序向SBUF输送下一个数据MOVSBUFA也可以使用查询的方式对TI进行检测如果TI1则执行MOVSBUFA使用查询RITI标志方式进行发送与接收N个数据183串行口的模式0特点串行口做同步移位寄存器用其波特率为FOSC12在这种模式下RXDP30做数据口TXDP31做移位脉冲输出端在移位过程中先移数据的低位注意移位脉冲的频率就是模式0的波特率模式0的主要功能是可以使用一个串行口来扩展出8位16位等并行口且理论上可以扩展N8位的并行口模式0电路框图串行口模式0的时序信号发送模式0的工作原理发送单片机执行MOVSBUFA指令的S6P2时出现写SBUF信号1打开总线三态门使累加器中的数据送到SBUF中2使D型触发器置一触发器的输出构成了SBUF的第9位3启动发送控制器开始发送在写SBUF信号有效相隔一个机器周期后发送控制器的SEND1使RXDTXD端的与门打开使数据和移位脉冲输出在TXD端每一个机器周期中发出一个同步脉冲同时在SEND1期间每一个S6P2时控制器发出一个SHIFT移位信号将SBUF中的数据右移一次同时D型触发器清零这样每当SBUF中的数据右移发送一位时SBUF的左端便移入1个0当SBIUF中的数据右移7次后检零器的7个输入端全为0向控制器发出一个信号通知控制器作最后一次移位然后控制器的SEND0停止发送数据和同步信号TI被置位模式0的工作原理接收在满足REN1且RI0的条件下实际上是一条写SCON指令就会引发一次接收过程在下一个机器周期的S6P2时刻接收控制器将11111110写入移位寄存器在下一个周期的S1P1使RECEIVE1从而使TXD端的与门打开同发送的过程类似在后面的每一个机器周期从TXD端发出同步移位脉冲在每一个S5P2时刻对RXD线进行采样在S6P2时刻控制器对寄存器进行移位每左移一次右端就补进一位由RXD端输入的数据当从RXD端输入7位数据时开始最右端的0被移到寄存器的最左端寄存器向控制器发信号通知控制器做最后一次接收并将完整的8位数据装入SBUF中最后清RECEIVESCON中的RI置位向CPU发中断申请模式0的时序信号接收184串行口模式1特点10位传输格式1个起始位8个数据位1个停止位波特率可变波特率由定时器T1的溢出率来确定所以在此种模式下首先要对T1进行初始化以确定串行口的波特率发送操作在TI0执行MOVSBUFA指令后从TXD端开始发送数据当发送完8位数据后自动的添加一个高电平的停止位并将TI置位接收操作在REN1且RI0的条件下进行串行口的接收控制器对RXD线进行采样其采样频率是接收时钟的16倍当连续8次采集到RXD线上为低电平时检测电路便认定RXD线上有了起始位在此后便开始在每次第789三个脉冲时进行RXD采样采取三中取二的原则来确定接收的数据如图所示当接收到停止位时必须满足RI0且SM20才能把接收的数据送到SBUF中停止位送SCON的RB8中并使RI1否则数据丢失串行口模式1时数据帧格式及接收采样示意图185串行口模式23特点模式23都是11位传输格式1个起始位9个数据位1个停止位不同处是波特率波特率模式2固定为FOSC64或FOSC32具体由PCON中的SMOD位来确定模式3由定时器T1的溢出波特率来确定模式23的发送过程类似于模式1唯一的区别在于数据帧中数据是9位这样在发送一帧数据时CPU除了要把8位数据送SBUF外MOVSBUFA还要把第9位数据送到SCONTB8中SETSCONTB8或CLRSCONTB8但注意要先设定好SCONTB8然后再向SBUF送数因为MOVSBUFA指令一执行串行口就开始发送例如SETSCONTB8或CLRSCONTB8MOVSBUFAMOVSBUFA模式23的接收过程类似于模式1不同的是模式1时SCON中的RB8是接收到的停止位1而模式23时RB8是接收到的第9位在模式1接收操作只有在RI0且REN1时数据才能接收而模式23的接收条件是ARI0且SM20或BRI0且RB81只有满足A或满足B的条件时接收到的数据才能送到SBUF并使RI1激活否则接收无效且RI不能置位RI0是保证SBUF空每次取走数据时通过软件复位RI如果没有取走数据则RI1以保证接收到的数据不丢失后一个条件是由SM2和RB8共同来控制接收令SM20可以保证RB8正确的接收奇偶校验位令SM21可以利用接收到的RB8控制接收是否有效即RB81时接收有效RB80时接收无效串行口模式23时数据帧格式发送时将SCON中的TB8作为第9位数据发送接收时将接收来的第9位送到SCON中的RB8中1851模式23的应用之一带奇偶校验位的数据传送奇偶校验接收到的第9位数据是发送方送来的奇偶校验位在这种情况下必须令SM20否则接收的校验位RB80时将影响数据的接收因为RB8是根据8位数据进行奇偶校验的结果来设定有时为1而有时为0当接收到数据后用指令对PSWP位进行判断将此结果与RB8中的数据进行异或看结果是否与约定的相符合例如发送接收双方约定为奇校验若发送的数据和第9位分别是000110100第9位数据是发送方用根据奇校验自动生成的若接收后SBUF送A的数据是00011010这时PSWP1且RB80则进行P异或RB81满足约定条件既接收正确反之若SBUF送A00011011使PSWP0且RB80P异或RB80表明不符合约定条件接收出错总之使用模式23发送带奇偶校验位的数据时1一定要使SM202又因为SM20所以尽管RI能够激活但不会引发中断所以只能采用查询的方式接收数据利用模式23进行带奇校验的串行通讯程序流程图1852模式23的应用之二多机通讯在传统的多路数据采集系统中存在着许多缺点使它在采集的点数和引线长度都受到限制采用多CPU的方式可以构成一个多机通讯系统如在一个生产线上要对许多参数温度压力流量等进行采集检测并且要对这些数据进行处理显示打印或保存我们可以将这些单片机进行分工选一台单片机作为主机专门负责接收其他单片机传回的数据并进行数据的后期处理如保存显示等而其它的单片机则完成对传感器的信号检测AD转换最后将数据上传给主机我们称这些单片机为从机传统方式的多路数据采集系统采用智能传感器组成的多路数据采集系统主从式多机通讯原理主机发送的数据可以传送到各个从机从机发送的数据只能为主机接收从机之间不能直接通讯主机和从机的设置为模式2或3其中主机的SM20从机的SM21主机首先通过发送地址码来寻找从机地址码的特征是第9位数据为1且被从机接收为RB8所以所有的从机都能接收到主机发出的地址码因为RI0SM21RB81并使RI1引发中断从机在中断服务程序中将接收到地址码与自己的地址进行比较被选中的从机将自己的SM20而未被选中的从机仍保持SM21当主机找到从机后开始向从机发数据命令其特征为第9位0由于从机SM20所以尽管接收到的RB80同样可以激活从机的RI使其以查询的方式接收主机发出的数据或命令当主机与从机的通讯完成后从机再将其SM21主机重新发出另一个从机的地址所有从机可以马上响应并接收地址信息多机通讯原理在模式23中1SM20时RB81或RB80都可以激活RI但不能引发中断2SM21时RB81才能激活RI并引发中断而RB80时RI不能激活小结1主机的SM20从机的SM212主机向从机发送的地址码第9位为13所有的从机SM21RB81RI0接收主机的地址进入中断服务程序在程序中比较确认是否为被寻从机4被寻从机将SM2清零以保证能以查询的方式接收主机的数据命令同时向主机返回地址供主机核实没有被选种的从机保持SM21并退出服务程序5被寻中的从机以查询RI的方式与主机之间进行数据交换注意因为SM20时RI虽然能被激活但不能引发中断完成后重新将SM2置11853模式23使用时要注意的问题在模式23中可以实现较为特殊的通讯方式如带校验位的9位传送多机通讯注意当SM20时只能采用查询方式186波特率及定时器T1的设定在串行口的异步通讯中发送方与接收方是两个互相独立的系统它们的系统时钟可以各不相同如图所示在这种条件下使通讯正确的条件是1要有相同的字符帧格式2要有相同的波特率MCS51单片机的串行口四种模式其波特率各不相同其中模式13的波特率就是由定时器T1的溢出率来决定的另外PCON中的SMOD位起着波特率加倍的作用如何设定波特率在编制串行口通讯模式13程序时在程序的初始化中必须进行波特率的设定既对T1进行初始化T1初始化的主要任务就是1设置T1的工作方式为定时CT0工作模式为模式2自动重装2计算定时常数并分别送给TH1TL1波特率计算公式BT1溢出率计数速率256TH1FOSC12256TH1波特率初值TC计算公式BFOSC96X256THSMOD1时或BFOSC192X256THSMOD0时其中FOSC为系统时钟频率TH为定时器T1的初值所以可以推出TH256FOSC384XBSMOD0时或TH256FOSC192XBSMOD1时举例设系统时钟为11059MHZ要求波特率为1200HZ求TH解用上述公式TH25611059MHZ384X12002320E8H设SMOD0参考资料PC机及单片机数据通信技术李朝青北京航空航天大学出版社280019MCS51的中断系统中断CPU中止正在运行的程序转向为外部设备服务的过程称为中断当完成中断后CPU再回到原来的断点继续原来的程序中断源是由外部产生具有随机性不可知性MCS51的中断系统结构图MCS51单片机共有5个中断源如图所示191中断允许寄存器IE0A8HEA总允许位EA0禁止一切中断EA1中断开放ES串行口中断允许位ES1允许RITI引发中断ES0禁止中断ET1ET0定时器T1T0允许位ET1允许0禁止EX1EX0外中断INT1INT0允许位ET1允许0禁止192中断优先级寄存器IP0B8HPS串行口中断优先级设定位PT1PT0定时器T1T0中断优先级设定位PX1PX0外中断INT10中断优先级设定位193优先级结构由于IP寄存器的设定将5个中断源分为两个级别中断的发生将遵循下面的3条基本原则1低级中断在响应执行中可以被高级中断所中断反之则不能2一个中断不论是什么优先级一旦得到响应与它同级的中断则不能在中断它3当CPU同时收到几个同一级别的中断要求时CPU响应哪个中断源取决于硬件的查询顺序见图如何改变中断源的优先级顺序从中断系统的硬件结构图可以清楚地看出同一级别中5个中断源的查询顺序很明显要改变这种顺序只能通过IP的设置如要想将串行口的级别设为最高时将IP中的PS置一既使用指令SETBIPPS或MOV0B8H10H完成对IP设置194中断查询与响应协议在每

温馨提示

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

评论

0/150

提交评论