《微机考试重点》PPT课件.ppt
1,名词解释,CPU、MPU(Micro processor Unit)存储器:ROM(只读,程序代码和常数)RAM:随机存储器(程序代码和数据)I/O Interface:连接外设(输入与输出)BUS:总线(体系结构:字长,容量,控制功能和构成 AB,DB,CB)MCU:微控制器(学名单片机,含CPU,ROM,RAM,I/O接口),2,MCS-51核的应用,基本的内核:8位CPUROM(264k),RAM(128/256字节)定时器(23个)串行通信数据口并行I/O口,扩展:16位CPU模拟信号输入/输出SOC发展方向(IP核),堆栈和堆栈指示器,堆栈是在存储器中分配的、具有连续地址的一片存储区域。FILO(First In Last Out)CPU按堆栈指示器SP访问堆栈中的内容压栈:先调整SP中的地址,在存入新的数据到栈顶位置;弹栈:先从栈顶取数,再反向调整SP地址内容.SP始终指向栈顶位置.,内存地址与高级语言变量的关系,变量(数组)依据其类型占据一定的字节数char/unsigned char 1字节int/unsigned int 2 字节long/unsigned long/float 4字节编址是按字节为单位,一个字节占一个地址数组所占的地址单元=数组长度数据类型字节数存储模式big endian 变量的最高位字节先行分配little endian 变量的最低位字节先行分配,ROM(Read Only Memory),只读指运行期间只读,信息不易挥发,掉电也不丢失按初始信息的写入方法和技术进步,可以分为以下几类:掩膜ROM:半导体制造过程的最后一道掩膜工艺,根据用户提交的存储内容决定MOS管的连接方式,制作成芯片后用户不能更改。掩膜适合于成熟大批量生产;PROM(Programmable Read Only Memory)出厂时空白,未存储信息,采用通用编程器,将程序或数据一次性写入,以后无法更改,现在PROM实际应用不多;EPROM(Eraseable Programmable Read Only Memory)是可擦除、可编程只读存储器。UVEPROM 紫外线擦除EEPROM 电擦除(目前实际应用较多),RAM(Random Access Memory),读取,原数不变;写入,原数被新数覆盖RAM存放数据,程序代码,也可分配为堆栈按存储原理RAM可以分为静态和动态两类SRAM(Static RAM)每一位是个触发器,双稳态结构 写入SRAM,如果电源正常,不会自行挥发 但在同样的芯片体积下,集成度较低DRAM(Dynamic RAM依靠MOS管的极间电容存储信息,集成度高,动态RAM的存储容量大.由于电荷容易泄漏,所以需要周期性刷新,刷新电路通过“读出写入”电路来再生极间电容上的电荷。一般2ms刷新一次。集成度高。,新型存储器,OTP ROMOne Time Programmble ROMFLASH ROM也即闪存,快速编程的EEPROM。在MP3,CF卡,U盘中的芯片基于FLASH的ISP(In System Program)和IAP(In Application Program)技术,可以远程升级嵌入式系统的程序。串行FLASH ROM控制简单、容量大,价格低廉,用来存储工作参数等。动态RAM方面(内存条技术)早期的快速页方式FPM(Fast Page Mode),70ns;可扩展数据输出方式EDO(Extended Data Output)可达60ns;同步DRAM,即SDRAM(Synchronous DRAM)能与系统总线时钟同步工作,读写速度可达10nS,甚至7nS。,中断,中断(Interrupt)因事件发生,程序中止正常的执行流程,转入到该事件的处理程序。中断服务例程(ISR,Interrupt service routine)完成事件处理的代码,称为中断服务过程ISR。中断返回 事件处理完毕(ISR执行完毕)返回正常的流程。与子程序调用的区别调用是程序主动的,响应事件是被动的。无法预知事件何时发生,与程序流程是异步的。都会形成断点,并需要保存,以便返回,中断的断点是随机的。,关于DMA的应用,MCS-51 CPU是否支持DMA?答:本身不支持。MCS-51的CPU不能放弃对其总线的控制权,自身也不能挂起;哪些场合使用DMA?答:当输入/输出为高速设备时,非DMA方式数据存取使用程序循环(每个数据的处理包含硬件操作、指针修改、结束判断等);DMA方式完成这些工作是依靠硬件的,能发挥高速设备的效率。以FIFO缓冲队列为媒介的DMA:1 硬件将高速设备连接到FIFO的一端,CPU为另一端。不要求CPU出让总线,CPU与DMA异步工作;2 ADI的BLACK Fin 系列MCU自带多媒体数据采集,具有DMA功能,每秒采集25帧图象,配备MP4图象压缩芯片,可以实现视频数字录象,复位与复位状态,复位:使CPU处于已知的初试状态;复位电路:高电平连续维持24个以上的时钟周期,使内部有关寄存器为默认值;图中PC等的初值意味着什么?(main高级语言运行之前,引导程序要做的若干工作与此有关)128/256字节内部RAM中的内容是否被复位到00H?没有说!理解为与复位无关。,程序存储器映像,PC是16位,所以能寻址64KB ROM。每个地址单元是8位的,所以是1字节宽:单字节指令占一个地址,多字节指令占多个字节 无论物理存储器是掩膜ROM/FLASH ROM,内部是否有ROM,程序存储器的映像是编程模型的一部分。,MCS-51系列微控制器的P0P3,P1口的结构(锁存器,三态门和驱动)写状态“1”或“0”到引脚;读引脚、读锁存器;“读修改写”操作;可以字节操作,也可位操作。,准双向I/O口,P1口是通用的准双向I/O口。输出高电平时,能向外提供拉电流负载,不必再接上拉电阻;当口用作输入时,须向口锁存器写入1。,P3的结构,类似于P1,P3也是准双向口;具有第二功能,其操作通过相应的特殊功能寄存器;剩余的第一功能用位操作。,P3口的第二功能引脚分布,P2口的结构,作为端口,与P1类似,准双向口;根据指令的需要,控制MUL开关;输出高8位地址A8A15,是总线功能(有些系统只需要低8位地址),P0口的结构,端口功能低8位地址功能数据总线功能,P0用作通用I/O口,当系统既不进行片外的ROM扩展,也不进行片外RAM扩展时,P0用作通用I/O口。在这种情况下,硬件自动使MUX开关接向锁存器的反相输出端。与门输出的“0”使输出驱动器的上拉场效应管T1处于截止状态。因此,输出级工作在漏极开路方式。外接上拉电阻可构成准双向口。,P0作地址/数据总线,在外部存储器访问周期,P0口分时传输低8位地址信息和数据信息,用作总线;在地址(或数据)的输出阶段,硬件自动将MUL开关接至反相器的输出端,T1,T2呈推挽方式驱动,引脚电平跟随内部地址线(或数据线)的状态;CPU读总线阶段,硬件自动将MUX开关拨向锁存器、自动向锁存器写入FFH并且置“读引脚”信号有效;P0.X引脚的状态经缓冲器进入内部数据总线。,作地址/数据总线时P0口是一个真正的双向口。,P1P3口的电平及驱动能力:,P0、P1、P2、P3口的电平与CMOS和TTL电平兼容。P0口的每一位口线可以驱动8个LSTTL负载。在作为通用I/O口时,由于输出驱动电路是开漏方式,由集电极开路(OC门)电路或漏极开路电路驱动时需外接上拉电阻;当作为地址/数据总线使用时,口线输出不是开漏的,无须外接上拉电阻。P1、P2、P3口的每一位能驱动4个LSTTL负载。它们的输出驱动电路设有内部上拉电阻,所以可以方便地由集电极开路(OC门)电路或漏极开路电路所驱动,而无须外接上拉电阻。由于单片机口线仅能提供几毫安的电流,当作为输出驱动一般的晶体管的基极时,应在口与晶体管的基极之间串接限流电阻。,指令分类 33种功能,111条指令 按指令字节数分:1字节、2字节、3字节。按指令的机器周期数分类:1、2、4个周期最频繁的指令为单周期,故 fosc=12MHz,Tm=1s。1.0 MIPS,7.1 指令系统概述,4 栈操作指令,进栈指令 PUSH direct;(SP)(SP)+1,(SP)(direct)功能:堆栈指针SP加1,然后将直接地址direct单元的内容送到SP所指向的栈顶。出栈指令 POP direct;(direct)(SP),(SP)(SP)1 功能:将SP所指向的堆顶的内容送到直接地址direct指向的单元中,然后堆栈指针SP减1。,关键词 存储空间 地址范围data 直接寻址片内RAM0 x00-0 x7fidata 间接寻址片内RAM0 x00-0 xffbdata 可位寻址片内RAM0 x20-0 x2F 按字节访问bit 在bdata空间定义0 x00-0 x7F 按位访问sfr 特殊功能寄存器0 x80-0 xff sbit 特殊功能寄存器中的可位寻址的位xdata 扩展 RAM 0 x0000-0 xffff pdata 页式寻址扩展RAM0 xPP00-0 xPPff PP=(P2)code 程序ROM 0 x0000-0 xffff 中的常数表,C-51数据的存储类型,存储模式,SMALL默认的存储类型是dataCOMPACT默认的存储类型是pdataLARGE默认的存储类型是xdata开发环境默认的初始状态是SMALL可以修改,C51的基本数据类型,C-51的常用头文件,reg51.h 定义特殊功能寄存器和位寄存器math.h 浮点运算库ctype.h 字符函数stdio.h 标准输入输出stdlib.h 标准库函数absacc.h 辅助宏,支持绝对地址说明例:I/O口定义#include#define port XBYTE0 x1000/扩展RAM区的端口,定时与计数的原理,MCS-51的计数是加;计数值+初值=容量;,没有位寻址功能只能使用字节传送MOV TMOD,#.,T0,T1的方式控制字,TMOD 89H,启用P3.2/P3.3(分别对应于T0/T1)作为外部控制引脚,0为定时1为计数,M1,M0为方式 0,1,2,3的编码,控制字寄存器,TCON 88H,语句TR0=0;TR0=1;分别表示开启或关闭定时器,方式0 13位计数,范围0213-1;方式1 16位计数,范围0-216-1;方式2,3为8位计数,范围0255;最小定时单位:fosc/12,T0/T1的初始化,计数,初值,范围,例,晶体频率为12MHz,欲每5ms能向CPU发出一个定时处理请求。试编程完成处始化任务。解:选T0,定时方式;硬件预分频是固定的1/12,计数频率是f=fosc/12=1M;即计数周期为tc=1/f=1us;5ms需要的计数值是 510-3/110-6=5000;可选方式0(13位方式),计算范围 213=8192初值为:8192 5000=31923192=0 x0C78h=01100011,11000(Binary)高8位0 xc3,低5位0 x18,另解,选用方式1(16位方式),计算范围为216=65536,计数初值为:655365000=61536=0 xF060初始化语句:TMOD=0 x01;/00000001;/T0 无GATE,Timer,Mode 0TH0=0 xF0;/低8位TL0=0 x60;/高8位TR0=1;思考:如果是采用T1,应该怎样做?,TMOD=0 x01;/00000001BTH0=0 x1Fh;TL0=0;TR0=1;COUNT=0;/计数清0,用MCS-51 MCU构成一个石英时钟,fosc=11.0592MHz,每秒需要计数921600次;1/16秒需要计数57600次,在T0或T1的允许范围之内;硬件计数每个周期57600个时钟,再用软件与之结合,对一个变量进行累加,计满16就是一秒;60秒为一分,60分为1小时,计数时间间隔初值的计算 65536-57600=7936=1F00h,高8位是1Fh,低8位是00h,方式1、定时、结合计数变量,例9-2,以P1.0,P1.1,P1.3分别控制三相步进电机的A,B,C三相依次通电,通电规律为“A-AB-B-BC-C-CA-A-”,换相时间间隔为0.5ms(CPU时钟为6MHz)。采用T0定时,查询方式工作。,解:,CPU时钟为6MHz,则计数频率为6MHz/12=0.5MHz,周期为2s;定时间隔为0.5ms=500s;计数值为500s/2s=250;只需要8位计数就够了,选用方式2。初值为28-250=6,程序,#includeunsigned char code Table6=1,3,2,6,4,5;/通电相序void main()P1=0;/步进电机各相断电TMOD=(TMOD/指针+1调整,例9-3,在某牛奶自动灌装线上,每检测到20瓶,产生一个装箱指令脉冲,使相关设备动作。试用MCS-51型微控制器的计数器实现该控制要求。检测信号从T1引脚(P3.5)输入,指令脉冲从P1.2输出。,解:,自动灌装线上装有传感装置,每检测到一瓶牛奶向T1引脚发送一个脉冲信号;使用计数功能,可实现该控制要求;选T1的方式2;初值为256-20=236=0 xEC。,程序:,sbit Out=P12;void main()T1=0;/清除输出TMOD=0 x60;/T1,无GATE/计数,方式2TL1=0 xEC;/初值TH1=0 xEC;/初值TR1=1;/启动while(1)while(!TF1)TF1=0;Out=1;/高电平Out=1;/重复送数,少许等待Out=1;Out=0;,更多定时器/计数器(T/C)应用的C语言编程,例:设fosc=12 MHz晶振,要求在P1.0脚上输出周期为2 ms的方波。解:设高电平时间与低电平时间各1 ms,每隔1msP1.0取反。预分频12,计数频率为1MHz,计数周期1 s(即机器周期),计数次数=1000,计数初值=-1000的补码;用定时器0的方式1编程,采用查询方式,程序如下:#include sbit P1_0=P10;,void main(void)TMOD=0 x01;/*设置定时器1,无门控,方式1*/TR0=1;/*启动 T/C0*/for(;)TH0=(-1000)/256;/*装载计数器初值*/TL0=(-1000)%256;do while(!TF0);/*查询等待TF0置位*/P1_0=!P1_0;/*定时时间到P1.0反相*/TF0=0;/*软件清 TF0*/,矢量中断,所谓矢量中断,就是一个中断对应一个入口地址;被开放的、且经过优先级判别而胜出的中断请求信号送到CPU;CPU用硬件的方法生成一条CALL指令,调用相关的矢量地址。隐含的工作:保留断点到堆栈;记录中断状态和当前优先级下一个机器周期 转ISR执行(事件的处理),中断的条件,无同级、或高优先级中断正在服务中;当前指令已执行到最后一个机器周期并将结束;当前正在执行的不是 RETI,IE,IP等指令可能导致改变中断系统状态的指令,C51的中断函数,void 函数名 interrupt 中断号 using 寄存器组号函数名由编译器使用,是形式上的,但要求唯一中断号0,1,2,3,4,对应于中断源;寄存器组号可以是03,但实际为1,2,因为0保留给正常程序;1为低优先级中断;2高低优先级中断;3为用户保留,初始化部分,#includeint rpm,m;unsigned char Tc;void main(void)TMOD=1;/方式1,16位计数TH0=0 x1F;/计数57600,初值7936=0 x1F00TL0=0;ET0=1;/T0 允许中断TR0=1;/T0走时开始IT0=1;/INT0中断为边沿触发方式EX0=1;/INT0允许中断EA=1;/CPU允许中断m=0;/转速脉冲计数初值清0rpm=0;/转速清0Tc=0;/1/16秒累计While(1)/add your other code here,单工通信,单工(Simplex)特点:仅能进行一个方向的数据传送,半双工通信,半双工(Half Duplex)特点:数据可以在两个方向上进行传送,但是这种传送绝不能同时进行。【双向,但不同时】,全双工通信,全双工(Full Duplex)特点:能够在两个方向同时进行数据传送。,通信速率,比特率每秒传输的二进制位数,单位为bps(bit per second)。波特率每秒传输的离散状态数(也称离散状态)。在一个信道上,如果只有高、低电平两种离散状态(分别代表“1”和“0”),则波特率与比特率刚好一致。如果在某个信道中可以传输多种不同的离散状态,则每个状态可以携带两位或两位以上的二进制数,此时,波特率就不等于比特率。波特率有标准值,MCS-51的串行控制器,相关资源TxD RxD 引脚 SBUF SCON寄存器波特率时钟发生器T1 or T2固定(相对于fosc)用途全双工串行通信串行方式I/O口扩展典型应用(实用),8255与MCS-51的接口和编程,MCS-51扩展8255控制打印机的C语言编程,例7 8255控制打印机。扩展8255与打印机接口的电路。8255的片选线为A7,打印机与MCS-51采用查询方式交换数据。打印机的状态信号输入给PC7,打印机忙时BUSY=1,微型打印机的数据输入采用选通控制,当-STB上负跳变时数据被输入。8255采用方式0由PC0模拟产生-STB信号。按照接口电路,口A地址为7CH,口C地址为7EH,命令口地址为7FH,PC7PC4输入,PC3PC0输出。方式选择命令字为8EH。,unsigned char xdata PortA _at_ 0 x007C;unsigned char xdata PortB _ar_ 0 x007D;unsigned char xdata PortC _at_ 0 x007E;unsigned char xdata CtrlW _at_ 0 x007F;void Init8255(void)/8255初始化子程序CtrlW=0 x8A;/方式控制字CtrlW=0 x01;/位控字,PC0置1,/STB置高Void CharPRN(unsigned char x4prt)/字符打印子程序unsigned char Tmp;do/检查是否忙Tmp=PortC;while(Tmp/PC0变高,(紧接前页),void main(void)unsigned char code Hello=“Hello,world!”,0 x0D,0 x0A,0 x00;unsigned char i=0;doCharPRN(Helloi+);while(Helloi!=0);,7.13.2 七段数码显示与MCS-51的接口,数码显示器有静态显示和动态显示两种显示方式。数码显示器有发光管的LED和液晶的LCD两种。LED显示器工作在静态方式时,其阴极(或其阳极)点连接在一起接地(或+5 V),每一个的端选线(a,b,c,d,e,f,g,dp)分别与一个8位口相连。LCD数码显示只能工作在静态显示,并要求加上专门的驱动芯片4056。LED显示器工作在动态显示方式时,段选码端口I/O1用来输出显示字符的段选码,I/O2输出位选码。I/O1不断送待显示字符的段选码,I/O2不断送出不同的位扫描码,并使每位显示字符停留显示一段时间,一般为15 ms,利用眼睛的视觉惯性,从显示器上便可以见到相当稳定的数字显示。,例18 8155控制的动态LED显示。,图 7.23 经8155扩展端口的6位LED动态显示,确定的8155片内4个端口地址如下:,命令/状态口:FFF0H口A:FFF1H口B:FFF2H口C:FFF3H,6位待显示字符从左到右依次放在dis_buf数组中,显示次序从右向左顺序进行。程序中的table 为段选码表,表中段选码表存放的次序为0F等。以下为循环动态显示6位字符的程序,8155命令字为07H。#include#include#define uchar unsigned char#define COM8155 XBYTE 0 xfff0#define PA8155 XBYTE 0 xfff1#define PB8155 XBYTE 0 xfff2#define PC8155 XBYTE 0 xfff3,uchar idata dis_buf6=2,4,6,8,10,12;uchar code table18=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71,0 x40,0 x00;void dl_ms(uchar d);void display(uchar idata*p)uchar sel,i;COM8155=0 x07;/*送命令字*/sel=0 x01;/*选出右边的LED*/for(i=0;i6;i+)PB8155=table*p;/*送段码*/,PA8155=sel;/*送位选码*/dl_ms(1);p-;/*缓冲区下移1位*/sel=sel 1/*左移1 位*/void main(void)display(dis_buf+5);,8255的特点,3个可编程的8位并行I/O口,可提供24个I/O控制引脚。控制分为两组:A组控制端口 A以及端口C的高4位,B组控制 端口B以及端口C的低4位。方式字寄存器。3个端口的特点各不相同:PA,包括数据输出锁存/缓冲器和一个8位的数据输入锁存器,可选方式0,1,2可选;PB,包括数据输出锁存/缓冲器和一个8位的数据输入锁存器,可作为数据输入或输出端口,有方式0和1可选;端口C,8位的数据输出锁存/缓冲器,一个8位的数据输入缓冲器,其高4位和低4位从属于不同的控制组,不能独立设置工作方式,