在单片机上,主存与CPU之间有有两根数据线连通。现编写一C语言程序,找出是哪两根数据线。

来源:百度知道 编辑:UC知道 时间:2024/06/24 18:23:51
我们的课程设计,希望有高人帮助!
假设在一个嵌入式CPU的外部扩展了64KB的SRAM,CPU访问SRAM的地址范围是0x80000000~0x80010000,且访问的数据宽度是16位(D0~D15),由于该嵌入式平台在焊接时,其数据总线中有两根数据线粘连(短路)在一起,试用C语言编写一段调试程序,运行在该CPU的内部ROM中,便可以测试出是哪两根数据线粘连在一起。要求用文字描述自己的测试方法;然后,采用C语言编写该测试程序。

给你文字描述吧,C语言很好编的:

向某一个地址(0x80000000~0x80010000之间的任意地址)写如下数据:
先写16进制0xAAAA,也就是二进制的:1010101010101010
然后回读这个数据,如果二进制的其中某一位由1变成了0,说明这根地址线和两边的地址线连在一起了(高电平和低电平连在一起当然就都是低电平了),但是和左边连还是和右边连并不确定(当然如果是最高位的话就可以确定了);

再向这个地址写0x5555,也就是二进制的:0101010101010101
然后回读这个数据,再看哪一位由1变为0了。然后和上一步的推论一起就可以得出是哪两根数据线连在一起了。

关键不是c语言程序怎么编?

而是连通的数据线跟不连通的有何区别,如何区分?
另外,如果扫描检测系统的所有数据线?靠写数据再读取出来?

如果不知道如何区分,那么,也没办法写程序来区分啊。

可以这样判断,不用判断主存,直接通过CPU的IO引脚来判断,设置其中一个引脚为输出,其他引脚为输入,那么将输出的设为一个电平(高或低),然后在其他引脚上读取引脚的值,看看哪个引脚跟输出的引脚电平相同,这样循环一遍就能找出哪两根短路了。

直接拿万用表挨根量,也可以量出来。

也就是道为了出题目而出的题目

如果RAM和ROM使用同样的数据总线,程序代码就读不准确,怎么运行?这么个小小CPU,RAM和ROM还使用不同的数据总线。真是可爱!!!

题目的意思应该是,从0x0001,0x0002,0x0004,0x0008,0x0010到0x8000,往内存写这16个数字,一次写一个,读一个,读回的数字是否和原来相同。要是不同,就是这条线有问题。

就用按键扫描的方法来判断.

单片机的型号,主存的型号,cpu的型号??