微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > PIC系列单片机程序设计基础三

PIC系列单片机程序设计基础三

时间:09-09 来源:互联网 点击:

Bit6  Bit5

BANK

物理地址

 0    0

BANK0

10H~1FH

 0    1

BANK1

30H~3FH

 1    0

BANK2

50H~5FH

 1    1

BANK3

70H~7FH

  当芯片上电RESET后,F4的bit6,bit5是随机的,非上电的RESET则保持原先状态不变。
   下面的例子对BANK1和BANK2的30H及50H寄存器写入数据。
   例1.(设目前体选为BANK0)
       BSF   4,5    ;置位bit5=1,选择BANK1
       MOVLW  DATA
       MOVWF  10H    ; DATA→30H
       BCF   4,5
       BSF   4,6   ;bit6=1,bit5=0选择BANK2
       MOVWF  10H    ;DATA→50H

   从上例中我们看到,对某一体(BANK)中的寄存器进行读写,首先要先对F4中的体寻址位进行操作。实际应用中一般上电复位后先清F4的bit6和bit5为0,使之指向BANK0,以后再根据需要使其指向相应的体。

   注意,在例子中对30H寄存器(BANK1)和50H寄存器(BANK2)写数时,用的指令“MOVWF 10H”中寄存器地址写的都是“10H”,而不是读者预期的“MOVWF 30H”和“MOVWF 50H”,为什么?

   让我们回顾一下指令表。在PIC16C5X单片机的所有有关寄存器的指令码中,寄存寻址位都只占5个位:fffff,只能寻址32个(00H—1FH)寄存器。所以要选址80个寄存器,还要再用二位体选址位PA1和PA0。当我们设置好体寻址位PA1和PA0,使之指向一个BANK,那么指令“MOVWF 10H”就是将W内容置入这个BANK中的相应寄存器内(10H,30H,50H,或70H)。

   有些设计者第一次接触体选址的概念,难免理解上有出入,下面是一个例子:
   例2:(设目前体选为BANK0)
       MOVLW  55H 
       MOVWF  30H   ;欲把55H→30H寄存器
       MOVLW  66H
       MOVWF  50H   ;欲把66H→50H寄存器
   以为“MOVWF 30H”一定能把W置入30H,“MOVWF 50H”一定能把W置入50H,这是错误的。因为这两条指令的实际效果是“MOVWF 10H”,原因上面已经说明过了。所以例2这段程序最后结果是F10H=66H,而真正的F30H和F50H并没有被操作到。

   建议:为使体选址的程序清晰明了,建议多用名称定义符来写程序,则不易混淆。   例3:假设在程序中用到BANK0,BANK1,BANK2的几个寄存器如下:

p>

BANK0

地址

BANK1

地址

BANK2

地址

BANK3

地址

A

10H

B

30H

C

50H

·

70H

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

 

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top