对单片机有效地址的访问和禁止地址写入的后果
扫描二维码
随时随地手机看文章
下面我们看看对有效地址的访问和对禁止地址写入时造成的后果
第一段程序的意图是将两个数据31H和11H分别存入外部数据存储器的两个单元中,但程序中却使用了第一片存储器物理空间00单元所对应的两个逻辑单元,其结 果是第二个数据11H覆盖了第一片存储器物理地址00单元中的第一个数据31H,这段程序说明的问题是外部存储器的一个物理单元对应两个逻辑地址,但它仍旧只是一个存储器,不能当两个存储器使用。
第二段程序的意图是将数据31H存入第二片外部数据存储器物理单元00中,然后再分别使用该物理单元所对应的两个逻辑地址从该单元中取数据,其效 果一样,说明对某一物理单元访问时,使用该单元对应的任一个逻辑地址都可以。
第三段程序的意图是向禁止单元0000H写入一个数12H,其后果是将有效逻辑地址8000H和2000H中的数据覆盖了,至使下次程序从8000H和2000H中取数据时,取得数据都为12H而不是原来存入该两单元中的正确数据。
下面是第一段程序的运行过程:
第一条指令置累加器A的内容为31H
第二条指令置DPTR的内容为8000H
第三条指令将累加器A的内容31H存入外部数据存储器8000H单元
(注意:今后在未作说明的情况下的地址都是指CPU的逻辑地址)
其结果是将31H存入了第一片存储器的物理单元00中
第四条指令是将数据11H送入累加器A中
第五条指令是将0C000H送入DPRT中
第六条指令是将累加器A中的内容11H存放外部数据存储器0C000H中
其实质是存入了第一片存储器的物理单元00中,将上次存入该物理单元中的数据31H覆盖掉了,从这段程序的运行我们可以看出,企图将一个物理存储单元的两个逻辑地址当两个存储器来使用是错误的。
下面我们来看第二段程序的运行:
第一条指令将数据31H送入累加器A
第二条指令将2000H送入DPTR中
第三条指令将累加器中的数据31H存入外部数据存储器2000H单元中,其实质是存入第二片存储器的物理单元00中
第四条指令将外部数据存储器2000H单元中的数据取入累加器,其实质是将第二片数据存储器物理单元00中的数据取回累加器中
第五条指令是将数据6000H送入DPTR中
第六条指令将外部数据存储器6000H单元中的数据取回累加器
可以看出其实质也是从第二片存储器物理单元00中取数据,其结果当然与上次从2000H单元中取数一样,可见,使用同一物理单元的不同逻辑地址访问存储器时,效果相同。
下面我们来看第三段程序的运行过程:
第一条指令将数据000H送入DPTR
第二条指令将数据12H送入累加器A中
第三条指令将累加器中的数据12H存入外部数据存储器0000H单元中
由于CPU发地址0000H使P2.5和P2.7同时为0,至使两片存储器的片选信号都有效,两片存储器的地址线A0-A12为低电平,所以在CPU发写信号后,其结 果当然与上次从2000H单元中取数一样。
可见,使用同一物理单元的不同逻辑地址访问存储器时,效果相同,第二片存储器物理单元00的有效逻辑地址为2000H和6000H,可见,这条对禁止地址0000H的写入指令破坏了上述有效逻辑地址原有内容,所以我们在程序中千万不能使用禁止地址和无效地址。