“顺问一下单片机往锁存器输出的地址和数据有什么分别,不都是二进制数吗”
虽然都是进制数据,但是意义不一样,而且位置不一样,作为地址时,是作用于芯片的地址端的,作为数据时,是作用在数据端的,这里有个时序的问题,就像同一个男教师,对儿子和对学生来说,意义不一样,面对不同的人,在不同的时间,这个男人的角色就不一样。
这个涉及到数电知识,你是大一,估计没学到数电,等你学了,你就明白了。
我简单的讲一下,要想深入了解,你要看数电课本。
51单片机与别的单片机不一样,他的数据端口和地址端口的低8位是同一个端口,都是P0口,那么,如何区分P0此时是数据还是地址?方法就是引入一个锁存器。
比如说,我向地址 是 0xEE55的地址里写入一个数据 “0xAA"
步骤过程是这个样子的:
1 ALE控制锁存器,允许锁存器跟踪
2 P2和P0口联合输出地址0xEE55,其中P2输出0xEE,P0输出0x55
3 ALE电平翻转,禁止锁存器跟踪,即此时,锁存器的输出端不在发生任何变化,所以,芯片地址不变,依旧是“0xEE55"
4 P0口输出数据 "0xAA",此时,芯片的数据端就出现"0xAA",
经过以上步骤,0xAA就被存入到地址0xEE55里去了。
以上过程是单片机自动进行的,不用程序特意干扰,如果执行:
unsigned char xdata *p = (unsigned char xdata *)0xEE55
*p = 0xAA
单片机自动进行以上4步骤的过程,ALE,P0,P2口都自动变化。
一般来说,51 单片机 ALE 的频率,是晶振频率的六分之一。即,在一个机器周期中,共有两个 ALE 的脉冲。
但是,在访问单片机外部的程序、数据存储器时,ALE 会少一个脉冲。
这是一个正常的现象,Intel 公司,当年就是这么设计的。
为什么?
intel 公司没有公布原因,应该是行业机密。
当使用 ALE 当做频率源的时候,能够注意到这个问题,就行了,不用深究原因。
高校老师讲这个内容,是正确的。
有人,没有用过 ALE,或用了,却不知道缺少脉冲的事,这也算不上智力欠缺。
但是,拿自己的浅薄经历,批评高校的教学,离弱智就不远了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)