
并行IO操作.ppt
22页单片机C语言--IO操作邬志锋,,4.3 IO操作,常识:IO的数量/名称难点:IO口的特点,P0结构,,D,CP,Q,Q,,,,,,,&,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,读引脚,读锁存,写控制信号,DB0.0,地址/数据控制线,+5V,,,P0.0,转换开关,锁存器,作用:1、外扩芯片时,P0口不再做I/O口使用,而是作为地址/数据总线2、没有外扩芯片时,P0口可以直接作为IO口使用P0输出0,P0口直接做输出口时,输出信息的过程:(将0送到P0.0的过程),,D,CP,Q,Q,,,,,,,&,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,读引脚,读锁存,写控制信号,DB0.0,地址/数据控制线,+5V,,,P0.0,转换开关,锁存器,0,0,0,1,,,0,注意: P0口做输出口时,内部数据经过锁存器送到P00---P07上由于上管始终截止,而当下管也截止时,P00—P07被架空,没有标准的高电平,所以P0口作输出口使用时,必须外接上拉电阻P0输入1,,D,CP,Q,Q,,,,,,,&,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,读引脚,读锁存,写控制信号,DB0.0,地址/数据控制线,+5V,,,P0.0,转换开关,锁存器,0,0,,1,注意: 1、P0口作输入口时,P00—P07上的信号经过缓冲器送到内部数据总线上。
在读引脚之前,要先将锁存器置1,否则总是读到02、CPU对P0口的读操作有2种:读引脚和读—改—写锁存器1,P0总结,1 、P0口具有地址/数据总线和双向IO口两种功能2 、P0作为IO口使用时,必须外置上拉电阻3 、P0口作输入口时,P00—P07上的信号经过缓冲器送到内部数据总线上在读引脚之前,要先将锁存器置1,否则总是读到04、CPU对P0口的读操作有2种:读引脚和读—改—写锁存器5 、P0作为IO口时,最多能驱动或者吸收8个TTL负载P88,P1结构,,D,CP,Q,Q,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,读引脚,读锁存,写控制信号,DB0.0,+5V,P1.0,锁存器,作用:P1口只能可以直接作为输入口或输出口使用P1输出1,,D,CP,Q,Q,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,读引脚,读锁存,写控制信号,DB0.0,+5V,P1.0,锁存器,1,0,0,1,注意:P1口做输出口时,内部数据经过锁存器送到P10---P17上由于内部有上拉电阻,所以P1口作输出口使用时,不用外接上拉电阻P1输入0,,D,CP,Q,Q,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,读引脚,读锁存,写控制信号,DB0.0,+5V,P1.0,锁存器,0,0,注意: 1、P1口作输入口时,P10—P17上的信号经过缓冲器送到内部数据总线上。
在读引脚之前,要先将锁存器置1,否则总是读到02、CPU对P1口的读操作有2种:读引脚和读—改—写锁存器P1总结,1 、P1口只有IO功能2 、P1口作输入口时,P10—P17上的信号经过缓冲器送到内部数据总线上在读引脚之前,要先将锁存器置1,否则总是读到03、CPU对P1口的读操作有2种:读引脚和读—改—写锁存器4 、P1作为IO口时,最多能驱动或者吸收4个TTL负载P90,P2结构,,D,CP,Q,Q,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,读引脚,读锁存,写控制信号,DB0.0,地址控制线,+5V,,,P2.0,转换开关,锁存器,,,,作用:1、外扩芯片时,P2口不再做I/O口使用,而是传送高8位地址2、没有外扩芯片时,P2口可以直接作为IO口使用P2输出0,,D,CP,Q,Q,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,读引脚,读锁存,写控制信号,DB0.0,地址控制线,+5V,,,P2.0,转换开关,锁存器,,,,0,0,0,,1,,0,注意:P2口做输出口时,内部数据经过锁存器送到P20---P27上由于内部有上拉电阻,所以P2口作输出口使用时,不用外接上拉电阻。
P2输入0,,D,CP,Q,Q,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,读引脚,读锁存,写控制信号,DB0.0,地址控制线,+5V,,,P2.0,转换开关,锁存器,,,,0,0,,0,注意: 1、P2口作输入口时,P20—P27上的信号经过缓冲器送到内部数据总线上在读引脚之前,要先将锁存器置1,否则总是读到02、CPU对P2口的读操作有2种:读引脚和读—改—写锁存器P2总结,1 、P2口具有IO口和高8位地址总线两种功能2 、P2口作输入口时,P20—P27上的信号经过缓冲器送到内部数据总线上在读引脚之前,要先将锁存器置1,否则总是读到03、CPU对P2口的读操作有2种:读引脚和读—改—写锁存器4 、P2作为IO口时,最多能驱动或者吸收4个TTL负载P91,P3结构,,D,CP,Q,Q,,,,&,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,读引脚,读锁存,写控制信号,DB0.0,+5V,P3.0,锁存器,,,,,第二功能输出,第二功能输入,作用:1、P3口可以直接作为IO口使用2、P3口的引脚又具有第二功能P3输出1,,D,CP,Q,Q,,,,&,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,读引脚,读锁存,写控制信号,DB0.0,+5V,P3.0,锁存器,,,,,第二功能输出,第二功能输入,1,0,0,1,注意:P3口做输出口时,内部数据经过锁存器送到P30---P37上。
由于内部有上拉电阻,所以P2口作输出口使用时,不用外接上拉电阻P3输入0,,D,CP,Q,Q,,,,&,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,读引脚,读锁存,写控制信号,DB0.0,+5V,P3.0,锁存器,,,,,第二功能输出,第二功能输入,0,0,注意: 1、P3口作输入口时,P30—P37上的信号经过缓冲器送到内部数据总线上在读引脚之前,要先将锁存器置1,否则总是读到02、CPU对P3口的读操作有2种:读引脚和读—改—写锁存器P3总结,1 、P3口具有IO口和第二功能两种功能2 、P3口作输入口时,P30—P37上的信号经过缓冲器送到内部数据总线上在读引脚之前,要先将锁存器置1,否则总是读到03、CPU对P3口的读操作有2种:读引脚和读—改—写锁存器4 、P3作为IO口时,最多能驱动或者吸收4个TTL负载P92,IO口直接做输出口,例1:用89C51的P1口驱动8个发光二极管,使8个发光二极管由左向右轮流点亮试画出连接图,编制驱动程序其中:R=(5-1.75)/Id部分程序:void Lamp(void){//记录当前LED灯状态的变量unsigned char led=0xfe;//循环变量unsigned char i;,//P1从低到高点亮LED等for(i=0;i<8;i++) { //将当前状态输出到P1口 P1 = led; //延时1s //Delay(1000); //LED当前变量左移 led = led << 1; //低位补1 led = led | 0x01; }},IO口直接做输出口,思考:① 如果用P0口驱动发光二极管,则如何修改?② 如果使8个发光二极管由右向左轮流点亮,则如何修改?③ 如果使8个发光二极管闪亮,则如何修改?④ 如果使8个发光二极管由内向外轮流点亮,则如何修改?⑤ 如果使8个发光二极管由右向左依次点亮,则如何修改?⑥ 如果使延时时间延长或缩短,会出现什么现象?,IO口直接做输入输出,例1:用89C51实现单键控制LED扫描,即当键按下时,LED开始扫描闪亮。
其中P1口驱动8个发光二极管,P0.7口连接开关试画出连接图,编制驱动程序void CtrlLamp(void){//当前键盘的状态unsigned char Key;//P0.7写1,初始化引脚P0 = P0 | 0x80;//读入P0状态Key = P0;//判断P0.7状态if(!(Key&0x80)) { Lamp(); }},IO口直接做输出口,思考:① R9有什么作用?没有R9可以吗?②如何实现用键盘控制扫描的方向,如何改?,。
