STC单片机外扩RAM及8255需要注意的问题

因为一个小小的疏忽会让人陷入僵局(分享给用STC89C52单片机的同行们,不要再次在此类问题上浪费不必要时间):

今晚与以往一样,还是为那个一直解不开的问题愁眉苦脑着,其它的材料也已经搜了上百份,理论对的已经不能再对了,但是在做起来就是没反应。

以前花了10元买了一片8255,为了实现它的操作,搜了大量资料,终于明白原来是用到类似外扩的程序,于是慢慢的搞懂了外扩的时序以及程序,自己试写了一个,下载进去,令我出乎意料的时,竟然一点反应也没有,第一个怀疑的就是可能硬件设置出了问题了吧,于是重新设计了一个,继续把程序下载进去,令我失望的还是那个结局。

我不得不怀疑可能是程序出了问题了,于是到图书馆把所有用C语言编程的课本借回来,精读了所有外扩这一块。终于把程序搞的没问题了,很自信的又写了一个,下载进去,竟然还是那个结局,我又不得不怀疑难道这一块必须用汇编才行吗,我对汇编可是一点也不懂啊,可是看了很多资料这个程序,用汇编写的外扩程序都有对应的C语言代码,C语言代码百分之百可行啊,一时陷入了僵局,一僵就是两个月,每天开电脑的第一件事就是找资料找资料。

最后的一个月又开始按照原来的思路重新布置了一下硬件,希望能有奇迹发生,最后还是失望,每次都想撂下这一块但总是没舍得,几次试验,最后我怀疑应该是STC89C52有问题吧,但对自己的怀疑又很快作了否定。

为什么其他所有的51单片机都能实现这个功能,这个宏晶公司生产的STC就不行呢,难道有什么特殊地方吗。一时不知所措,还是绞尽脑汁来证明这类片子确实有问题,终于想了很多方法,最能确定额问题存在的就是用DAC0832双缓冲方式和用外部中断的负跳变沿方式来触发中断并确定有高向低的电平是否的存在,猜想与试验完全相符。

终于确定是片子的原因,既然找不出来,以后还是不想再研究这方面的原因了,还是继续安安稳稳的学我的AVR单片机吧,终于把这块放弃了,但今晚偶然的机会看了看STC89C52的官方中文资料,一个让人都不懂的地方,也经常被略过去的方引起了我的注意。

就是在文档的中部讲到“禁止内部扩展的EXTRAM”找到了答案,原来想现在AT89C5X和STC89C5X跟以前相比的51单片机都是增强型的,里面又增加了很多寄存器单元和功能,针对STC89C52内部有EXTRAM的扩展部分,默认时寄存器的值为零,不能访问外部64K空间,或者说访问的时候不对此进行设置,会发生冲突。造成工作的异常。

必须先对AUXR进行位定义,sfr AUXR=0x8e,然后赋值AUXR=0x02;将EXTRAM的控制位设置为1,禁止EXTRAM的访问,以防冲突。

写完程序下载到里面一看,期待已久的奇迹终于发生了,P0和P2口作为数据地址总线是终于有数据输出了。所谓的英特尔总线的操作终于实现了。

我的用STC89C52学习单片机的同学们,以后千万注意了不要忽视这一点,外扩设置一下寄存器,写上“sfr AUXR=0x8e;AUXR=0x02;”这两句。

并且用这种所谓英特尔总线的方法操作外部设备程序极为简便,同学们赶紧学学吧!

永不止步步 发表于11-16 09:24 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:306767个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号