kmsj 发表于 2020-3-31 14:04 不是实用不实用的问题, 是因为现在高校设计都是要用这些旧芯片,我就是设计被要求扩展6116并使用的。 |
f556 发表于 2020-3-31 16:40 你说的也非常精辟,51单片机通过6116外扩2K×8位的RAM,要用掉十几个IO口,按现在主流的非总线单片机而言,绝对是一件大亏本的事情,现在的主流单片机,内部资源已经非常丰富了,IO口反而显得比较珍贵。 |
kmsj 发表于 2020-3-31 14:04 非常精辟,精单的事情不要复杂化。当用了6116后,发现IO不够了,是否再加一片IO扩展!另外csmyldl的回答也有道理,我一般大的数组放在DATA 或者const。 |
| 都什么年代了?还研究6116?6116是总线型单片机的产物,以后设计电路,用到6116的可能性几乎为零,没有特殊要求,就不要研究6116了,上个世纪80年代左右,单片机基本只有一种,就是51单片机,51单片机就是典型的总线型单片机,为了扩展使用,就用总线扩RAM、IO口等,优点是是在当时的技术下,可以设计出比较复杂的电路,缺点还是电路复杂、成本太高、抗干扰差。6116好像是2K×8的RAM,很早以前研究过6264、2764之类的东西,好像还需要一片74LS373,汇编语言和C语言都有专门读外部RAM的指令和语句。现在的单片机都是以非总线型单片机为主,像AVR或者STM32,片内达到2K×8的RAM或者EEPROM多得是。 |
| 不用考虑,只要不超过范围即可 |
| 数组用xdata定义,不需要 |
|
电路里的6116的地址范围是0x0000~0x07ff。存储在外部ram的数组或变量,使用xdata进行定义,注意不要超过6116地址范围。使用时,可以像正常的内部变量进行读写即可,不用考虑硬件的地址。 例如: xdata char buf[10];//定义外部数组buf[] char a; //定义内部变量a buf[0]=1;//外部数组buf[]写 a=buf[0];//外部数组buf[]读 |