82C55A是高性能,工业标准,并行I/O的LSI外围芯片;提供24条I/O脚线。 在三种主要的操作方式下分组进行程序设计82C88A的几个特点:(1)与所有Intel系列微处理器兼容;(2)有较高的操作速度;(3)24条可编程I/O脚线;(4)底功耗的CHMOS;(5)与TTL兼容;(6)拥有控制字读回功能;(7)拥有直接置位/复位功能;(8)在所有I/O输出端口有2.5mA DC驱动能力;(9)适应性强。方式0操作称为简单I/O操作,是指端口的信号线可工作在电平敏感输入方式或锁存输出。所以,须将控制寄存器设计为:控制寄存器中:D7=1; D6 D5=00; D2=0。D7位为1代表一个有效的方式。通过对D4 D3 D1和D0的置位/复位来实现端口A及端口B是输入或输出。P56表2-1列出了操作方式0端口管脚功能。
上传时间: 2013-10-26
上传用户:brilliantchen
串行编程器源程序(Keil C语言)//FID=01:AT89C2051系列编程器//实现编程的读,写,擦等细节//AT89C2051的特殊处:给XTAL一个脉冲,地址计数加1;P1的引脚排列与AT89C51相反,需要用函数转换#include <e51pro.h> #define C2051_P3_7 P1_0#define C2051_P1 P0//注意引脚排列相反#define C2051_P3_0 P1_1#define C2051_P3_1 P1_2#define C2051_XTAL P1_4#define C2051_P3_2 P1_5#define C2051_P3_3 P1_6#define C2051_P3_4 P1_7#define C2051_P3_5 P3_5 void InitPro01()//编程前的准备工作{ SetVpp0V(); P0=0xff; P1=0xff; C2051_P3_5=1; C2051_XTAL=0; Delay_ms(20); nAddress=0x0000; SetVpp5V();} void ProOver01()//编程结束后的工作,设置合适的引脚电平{ SetVpp5V(); P0=0xff; P1=0xff; C2051_P3_5=1; C2051_XTAL=1;} BYTE GetData()//从P0口获得数据{ B_0=P0_7; B_1=P0_6; B_2=P0_5; B_3=P0_4; B_4=P0_3; B_5=P0_2; B_6=P0_1; B_7=P0_0; return B;} void SetData(BYTE DataByte)//转换并设置P0口的数据{ B=DataByte; P0_0=B_7; P0_1=B_6; P0_2=B_5; P0_3=B_4; P0_4=B_3; P0_5=B_2; P0_6=B_1; P0_7=B_0;} void ReadSign01()//读特征字{ InitPro01(); Delay_ms(1);//----------------------------------------------------------------------------- //根据器件的DataSheet,设置相应的编程控制信号 C2051_P3_3=0; C2051_P3_4=0; C2051_P3_5=0; C2051_P3_7=0; Delay_ms(20); ComBuf[2]=GetData(); C2051_XTAL=1; C2051_XTAL=0; Delay_us(20); ComBuf[3]=GetData(); ComBuf[4]=0xff;//----------------------------------------------------------------------------- ProOver01();} void Erase01()//擦除器件{ InitPro01();//----------------------------------------------------------------------------- //根据器件的DataSheet,设置相应的编程控制信号 C2051_P3_3=1; C2051_P3_4=0; C2051_P3_5=0; C2051_P3_7=0; Delay_ms(1); SetVpp12V(); Delay_ms(1); C2051_P3_2=0; Delay_ms(10); C2051_P3_2=1; Delay_ms(1);//----------------------------------------------------------------------------- ProOver01();} BOOL Write01(BYTE Data)//写器件{//----------------------------------------------------------------------------- //根据器件的DataSheet,设置相应的编程控制信号 //写一个单元 C2051_P3_3=0; C2051_P3_4=1; C2051_P3_5=1; C2051_P3_7=1; SetData(Data); SetVpp12V(); Delay_us(20); C2051_P3_2=0; Delay_us(20); C2051_P3_2=1; Delay_us(20); SetVpp5V(); Delay_us(20); C2051_P3_4=0; Delay_ms(2); nTimeOut=0; P0=0xff; nTimeOut=0; while(!GetData()==Data)//效验:循环读,直到读出与写入的数相同 { nTimeOut++; if(nTimeOut>1000)//超时了 { return 0; } } C2051_XTAL=1; C2051_XTAL=0;//一个脉冲指向下一个单元//----------------------------------------------------------------------------- return 1;} BYTE Read01()//读器件{ BYTE Data;//----------------------------------------------------------------------------- //根据器件的DataSheet,设置相应的编程控制信号 //读一个单元 C2051_P3_3=0; C2051_P3_4=0; C2051_P3_5=1; C2051_P3_7=1; Data=GetData(); C2051_XTAL=1; C2051_XTAL=0;//一个脉冲指向下一个单元//----------------------------------------------------------------------------- return Data;} void Lock01()//写锁定位{ InitPro01();//先设置成编程状态//----------------------------------------------------------------------------- //根据器件的DataSheet,设置相应的编程控制信号 if(ComBuf[2]>=1)//ComBuf[2]为锁定位 { C2051_P3_3=1; C2051_P3_4=1; C2051_P3_5=1; C2051_P3_7=1; Delay_us(20); SetVpp12V(); Delay_us(20); C2051_P3_2=0; Delay_us(20); C2051_P3_2=1; Delay_us(20); SetVpp5V(); } if(ComBuf[2]>=2) { C2051_P3_3=1; C2051_P3_4=1; C2051_P3_5=0; C2051_P3_7=0; Delay_us(20); SetVpp12V(); Delay_us(20); C2051_P3_2=0; Delay_us(20); C2051_P3_2=1; Delay_us(20); SetVpp5V(); }//----------------------------------------------------------------------------- ProOver01();} void PreparePro01()//设置pw中的函数指针,让主程序可以调用上面的函数{ pw.fpInitPro=InitPro01; pw.fpReadSign=ReadSign01; pw.fpErase=Erase01; pw.fpWrite=Write01; pw.fpRead=Read01; pw.fpLock=Lock01; pw.fpProOver=ProOver01;}
上传时间: 2013-11-12
上传用户:gut1234567
并行接口电路:微处理器与I/O设备进行数据传输时均需经过接口电路实现系统与设备互连的匹配。并行接口电路中每个信息位有自己的传输线,一个数据字节各位可并行传送,速度快,控制简单。由于电气特性的限制,传输距离不能太长。8255A是通用的可编程并行接口芯片,功能强,使用灵活。适合一些并行输入/输出设备的使用。8255A并行接口逻辑框图三个独立的8位I/O端口,口A、口B、口C。口A有输入、输出锁存器及输出缓冲器。口B与口C有输入、输出缓冲器及输出锁存器。在实现高级的传输协议时,口C的8条线分为两组,每组4条线,分别作为口A与口B在传输时的控制信号线。口C的8条线可独立进行置1/置0的操作。口A、口B、口C及控制字口共占4个设备号。8255A并行接口的控制字工作模式选择控制字:口A有三种工作模式,口B有二种工作模式。口C独立使用时只有一个工作模式,与口A、口B配合使用时,作为控制信号线。三种工作模式命名为:模式0、模式1及模式2。模式 0 为基本I/O端口,模式1为带选通的I/O端口,模式 2 为带选通的双向I/O端口。口A可工作在三种模式下,口B可工作在模式 0与模式 1下,口C可工作在模式0下或作为控制线配合口A、口B工作。
上传时间: 2013-11-07
上传用户:xitai
TKS仿真器B系列快速入门
上传时间: 2013-10-31
上传用户:aix008
可视化编程 经典诺基亚手机游戏。
上传时间: 2013-11-23
上传用户:urgdil
一个简单好用的B+树算法实现
上传时间: 2015-01-04
上传用户:缥缈
一个用Basic实现的B-Tree算法
上传时间: 2013-12-30
上传用户:ccclll
一个用Java applet实现的B-Tree算法
上传时间: 2013-12-25
上传用户:qiao8960
用C++实现的B-Tree算法
上传时间: 2014-01-20
上传用户:jiahao131
用Borland C写的B-Tree算法
上传时间: 2014-12-05
上传用户:xzt