条分缕析看AD转化和外部储存器的相关知识
前言:由于本次实验运用的知识比较综合且夹杂了总线扩展的内容,导致proteus的原理图的内容看不懂以及代码为何修改的背景知识不明确,特此统一说明原理和试验箱电路图具体接法,供同学们参考,若有遗漏和错误请及时联系我补正。(估计期末考试会考。。。。。)
例程:
#include<reg52.h>
#include<absacc.h>
unsigned char code led Tab[]={Ox3F,Ox06,Ox5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0X77,0x7C,0x39,0x5E,0x79,0x71,0x40}
unsigned char codetabIndex[]={OXFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
unsigned char codeNum[8]={0x00,0x00,0x10,0x10,0x09,0x00,0x08,0x00};
unsigned char data0809;
#define LNUMXBYTE[0xa000]
#defineLBIT XBYTE[0xb000]
#define CS_0809 XBYTE[0x8000]
void Delay_us(unsigned int time)
{
while(time--);
}
void dynamicLed(unsigned charCounter,unsigned char Ligh)
{
unsigned char i;
for(i=0;i<Counter;i++)
{
Delay_us(Ligh);
LNUM=0X00;
LBIT=tabIndex[i%8];
LNUM=ledTab[Num[i]%20];
}
}
addc()interrupt 0
{
data0809=CS_0809;
Num[0]=data0809&0x0f;
Num[1]=data0809>>4;
CS_0809=0;
}
void main(void)
{
EA=1;
EX0=1;
IT0=1;
CS_0809=0;
while(1)
{
dynamicLed(8,100);
}
}
1.首先讲芯片布局
Proteus原理图:
其中我们可以发现有51主芯片,adc0809(图示的是0808基本功能相同),74ls273两片,,74ls373一片,74ls32或门两片,38译码器一片,74ls02或非门两片。
其中我们可以发现新增的adc0809,74ls273以及74ls373是主要构成部分并且是连接P0的部分,并且也依靠P0的地址和数据输出来控制其功能(位选,字形,38转换等等),所以逐一分析各个芯片的主要功能:
(1) c51(主芯片)
作为主芯片控制其他的芯片,但是这次实验中相较于以往的实验拉取新的端口使用,比如ALE和WR(P36)和RD(P37),这次实验元件使用比较多的根本原因,是因为C51的作为程序储存区仅有4kb,而本次实验的数据量比较大,c51本身存储不了(扩展的极限是64kb),所以希望扩展内存来达到程序的存储和运行,故而本次要用到扩展总线和地址寻址的知识。