怎样在程序中控制ALE?

怎样在程序中控制ALE?,第1张

ALE是自动运行的,这个不用你在程序里去管。

“顺问一下单片机往锁存器输出的地址数据有什么分别,不都是二进制数吗”

虽然都是进制数据,但是意义不一样,而且位置不一样,作为地址时,是作用于芯片的地址端的,作为数据时,是作用在数据端的,这里有个时序的问题,就像同一个男教师,对儿子和对学生来说,意义不一样,面对不同的人,在不同的时间,这个男人的角色就不一样。

这个涉及到数电知识,你是大一,估计没学到数电,等你学了,你就明白了。

我简单的讲一下,要想深入了解,你要看数电课本。

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,或用了,却不知道缺少脉冲的事,这也算不上智力欠缺。

但是,拿自己的浅薄经历,批评高校的教学,离弱智就不远了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8102063.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存