《单片机资料xc866并行端口.ppt》由会员分享,可在线阅读,更多相关《单片机资料xc866并行端口.ppt(21页珍藏版)》请在三一办公上搜索。
1、英飞凌单片机XC866并行端口,概述,并行端口的定义 并行端口,简称并口。所谓“并行”,是指8位数据同时通过并行线进行传送,这样数据传送速度大大提高,但并行传送的线路长度受到限制,因为长度增加,干扰就会增加,数据也就容易出错。,XC866中的并口,XC866中的并口 XC866有27个端口引脚,可组织为四个并行端口,P0口、P1口、P2口及P3口。其中每个引脚都有一对可被使能或禁止的内部上拉或下拉器件。上拉就是指将不确定的信号通过一个电阻或等效电阻嵌位在高电平;下拉是指将不确定的信号通过一个电阻或等效电阻嵌位在低电平。上拉是对器件注入电流,下拉是输出电流。P0,P1 和P3是双向口,P2口是单
2、向输入口。,端口操作,XC866的每个引脚均可由一组控制位和数据位来单独配置,通过配置控制寄存器,可将每个引脚单独设置成输入或输出口(P2口只可设置成输入口)。通用寄存器 通过配置8位的控制寄存器和数据寄存器可以选择并口中任一引脚的工作状态。数据寄存器 Px_DATA 数据寄存器 Px_DATA,用于存储端口数据。,程序,端口操作,方向寄存器 Px_DIR 双向端口(P0,P1 和P3)引脚的方向由方向寄存器Px_DIR控制。对于单向输入端口引脚(P2),寄存器Px_DIR 用来使能或禁止输入。,程序,端口操作,开漏输出控制寄存器 Px_OD 每个输出引脚均可设置为开漏输出模式。如果选择为开漏
3、输出模式,且无上拉器件时,只有0可以有效输出。如果未选择开漏输出模式,0和1均可以有效输出。,程序,开漏输出,所谓开漏电路概念中提到的“漏”就是指MOSFET的漏极。开漏电路就是指以MOSFET的漏极为输出的电路。一般的用法是会在漏极外部的电路添加上拉电阻。完整的开漏电路应该由开漏器件和开漏上拉电阻组成。漏极开路是驱动电路的输出三极管的发射极开路,可以通过外接的上啦电阻提高驱动能力。这种输出用的是一个场效应三极管或金属氧化物管(MOS),这个管子的栅极和输出连接,源极接公共端,漏极悬空(开路)什么也没有接,因此使用时需要接一个适当阻值的电阻到电源,才能使这个管子正常工作,这个电阻就叫上拉电阻。
4、开漏输出,在使用时需接上上拉电阻,利用外部电路的驱动能力,减少IC内部的功耗。可以将多个开漏输出的脚,连接到一条线上,形成“与逻辑”,当任意一个变低后,开漏线上的逻辑就为0了。,开漏输出特点,组成开漏形式的电路有以下几个特点:1.利用 外部电路的驱动能力,减少IC内部的驱动。当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up,MOSFET到GND。IC内部仅需很下的栅极驱动电流。2.可以将多个开漏输出的Pin,连接到一条线上。形成“与逻辑”关系。当PIN_A、PIN_B、PIN_C任意一个变低后,开漏线上的逻辑就为0了。这也是I2C,SMBus等总线判断总线占用状态的
5、原理。3.可以利用改变上拉电源的电压,改变传输电平。IC的逻辑电平由电源Vcc1决定,而输出高电平则由Vcc2决定。这样我们就可以用低电平逻辑控制输出高电平逻辑了。4.开漏Pin不连接外部的上拉电阻,则只能输出低电平(因此对于经典的51单片机的P0口而言,要想做输入输出功能必须加外部上拉电阻,否则无法输出高电平逻辑)。5.标准的开漏脚一般只有输出的能力。添加其它的判断电路,才能具备双向输入、输出的能力。,端口操作,上拉/下拉器件寄存器 端口引脚可以选择使用内部上拉或下拉器件。从而输入端口可设置为:三态,带有弱上拉的高阻态及带有弱下拉的高阻态。输出端口可设置为:推挽,带有内部上拉的开漏输出及带有
6、外部上拉的开漏输出。端口x 上拉/下拉选择寄存器 Px_PUDSEL端口x 上拉/下拉使能寄存器 Px_PUDEN,程序,端口操作,寄存器映射 端口的特殊功能寄存器(SFR)在标准存储器区(RMAP=0),由四页构成。分页寄存器PORT_PAGE的地址为B2H,包含了分页值和页控制信息。,保存编号位 STNR:确定OP所定义操作的目标存储位置。00:选择ST0;01:选择ST1;10:选择ST2;11:选择ST3。,操作位 OP:0X:手动保存页模式;10:带有自动页保存的新页设;11:自动恢复页;,程序,分页位 PAGE:写入时,表示新页的值。读出时表示当前有效页的值。,端口操作,SFR地址
7、列表:,端口结构,双向端口,每个双向口(P0、P1、P3)都可以被设置成输入或输出口。输入模式下(复位后的默认模式),输入驱动器被激活、输出驱动器被关闭(高阻)。输出模式下,输出驱动器被激活、输出驱动器被关闭,将多选一输出选择器送出的值送至端口引脚。,设置为输入或输出口,设置为开漏输出或正常模式,多选一输出选择器,端口结构,单向输入端口,P2口的每一个引脚只能工作在输入模式。输入驱动器被使能时,引脚上的实际电压值由施密特触发器译成逻辑0或1,并可从寄存器P2_DATA读出。每个引脚还可编程设置以激活内部的弱上拉或下拉器件。,选择激活上拉或下拉器件,使能或禁止拉动器件,禁止或使能输入驱动器,输入
8、数据,端口其他功能,P0端口 P0 端口是一个6 位通用双向口端。除做双向并口外,在其他内部外设工作时,P0端口还可以用做内部外设的输入输出引脚。,端口其他功能,P1端口 P1口是一个5 位通用双向口。除做双向并口外,在其他内部外设工作时,P1端口还可以用做内部外设的输入输出引脚。,端口其他功能,P2端口 P2口是一个8位通用单向输入口。除做单向并口外,在其他内部外设工作时,P2端口还可以用做内部外设的输入输出引脚。,端口其他功能,P3端口 P3口是一个8位通用双向口。除做双向并口外,在其他内部外设工作时,P3端口还可以用做内部外设的输入输出引脚。,并行端口例程,下面以一个完整的C语言程序作为
9、实例:此程序使用P0端口输出数据,P0端口所有位被设置为上拉、下拉器件使能;选择上拉;非开漏输出模式;初始值均为1。程序如下:,并行端口例程,#include MAIN.H void MAIN_vInit(void)/端口及定时器初始化子程序 SFR_PAGE(_pp3,noSST);/将页选择为第3页 P0_OD=0 x00;/将P0端口所有位设置为非开漏输出模式 SFR_PAGE(_pp1,noSST);/将页选择为第1页 P0_PUDEN=0 xFF;/将P0端口所有位设置为上/下拉电阻使能 SFR_PAGE(_pp0,noSST);/将页选择为第0页 P0_DIR=0 xFF;/将P0
10、端口所有位设置为输出 P0_DATA=0 xFF;/将P0端口所有位的初始值设置为1 TMOD=0 x01;/选择定时器0的工作模式1 TL0=0 xA0;/对定时器设置初始值(低8位)TH0=0 x15;/对定时器设置初始值(高8位),void T01_viTmr0(void)interrupt 1/定时器中断服务程序 P0_DATA=P0_DATA;/将P0端口输出的电平反向 TL0=0 xA0;/重新对定时器设置初始值(低8位)TH0=0 x15;/重新对定时器设置初始值(高8位)void main(void)/主程序 MAIN_vInit();/调用端口及定时器初始化子程序 ET0=1;/开定时器0中断 EA=1;/开系统中断 TR0=1;/开定时器0 while(1)/循环执行,