📄 the01.htm
字号:
MOVWF
INDF
;数据55h→F10<br>
INCF
FSR
;FSR增1(FSR=11h)<br>
MOVWF
INDF
;数据55h→F11</p>
<p class="lh15" > 参阅后面FSR寄存器的描述。</p>
<p class="lh15" >二、TMR0(地址:01h) ── 定时器/计数器寄存器</p>
<p class="lh15" >二、TMR0(地址:01h) ── 定时器/计数器寄存器<br>
TMR0对应于TIMER0,它是一个8位的定时器/计数器(在PIC16C5X中称其为RTCC),请参阅§1.8详介。</p>
<p class="lh15" >三、PCL(地址:02h) ── 程序计数器PC<7:0></p>
<p class="lh15" >PIC12C5XX程序计数器PC最多可寻址1K(1024)程序区:</p>
<div align="center">
<table border="0" cellspacing="1" cellpadding="0" bgcolor="#000000" >
<tr bgcolor="#EAEAEA" >
<td width="114" > <p align="center" class="lh15" >型
号</p></td>
<td width="114" > <p align="center" class="lh15" >PC长度</p></td>
<td width="114" > <p align="center" class="lh15" >寻址空间</p></td>
<td width="114"> <p align="center" class="lh15" >PC复位值</p></td>
</tr>
<tr bgcolor="#FFFFFF" >
<td width="114" > <p align="center" class="lh15" >PIC12C508</p></td>
<td width="114" > <p align="center" class="lh15" >9</p></td>
<td width="114" > <p align="center" class="lh15" >512</p></td>
<td width="114" > <p align="center" class="lh15" >1FFh</p></td>
</tr>
<tr bgcolor="#FFFFFF" >
<td width="114" > <p align="center" class="lh15" >PIC12C509</p></td>
<td width="114" > <p align="center" class="lh15" >10</p></td>
<td width="114" > <p align="center" class="lh15" >1024</p></td>
<td width="114" > <p align="center" class="lh15" >3FFh</p></td>
</tr>
</table>
</div>
<p class="lh15" >单片机一复位,PC值被置为全“1”指向程序区的最后一个字节。前面我们提过,这个地址存放的是芯片出厂时已放入的MOVLW
XX指令(其中XX是片内振荡校正系数),所以单片机复位后会执行这条指令,然后PC马上翻转到000h,开始执行用户的程序代码。注意,页面选择位PA0
复位时也被清零,所以这时页面处于0页,请参阅有关状态寄存器STATUS的描述。</p>
<p > <span class="lh15">对于“GOTO”指令,它的指令码中含有跳转地址的低9位,即PC<8:0>,对于PIC12C509来说,状态寄存器的第5位(STATUS<5>)还会被置入PC<9>,以选择程序页面,从而寻址1K的程序空间。
<br >
</span>
<p class="lh15" align="center" >
<img src="image/the01.6.jpg" v:shapes="_x0000_s1026" width="251" height="146"><br>
图1.7 GOTO指令寻址方式</p>
<p class="lh15" >对于“CALL”指令或其他涉及会修改PCL的指令,它们的指令码中仅包含目的地址的低8位,即PC<7:0>,而PC<8>总是会被硬件自动清零,状态寄存器第5位(STATUS<5>)也会被置入PC<9>以选择程序页面(对于PIC12C509而言)。见下图:
</p>
<p class="lh15" align="center" >
<img src="image/the01.7.jpg" v:shapes="_x0000_s1027" width="224" height="140"><br>
图1.8 CALL指令或修改PCL的指令寻址方式</p>
<p class="lh15" >从上图可看出,由于执行这些指令硬件总会清PC<8>=0,所以它们的起始地址都必须限于放在每个程序页面的上半区,即头上的256个字节空间内(0h~FFh或200h~2FFh)。</p>
<p class="lh15" >四、STATUS(地址:03h) ── 状态寄存器</p>
<p class="lh15" >STATUS寄存器包含了ALU的算术状态、芯片复位状态、程序页面位等信息。STATUS 可以被读/写,但是其中的复位状态位TO、PD不能由软件设置,它们的状态如何决定§1.12.7
会有详细描述。</p>
<div align="center"><img src="image/3.gif" width="570" height="617"><br>
</div>
<p align="center" class="lh15" >图1.9 状态寄存器</p>
<p class="lh15" >在加法运算时,C是进位位;在减法运算时,C是借位的反。</p>
<p class="lh15" >例a: <br>
CLRF
F10 ;F10=0<br>
MOVLW
1
;W=1<br>
SUBWF
F10
;F10-W=-1(FFH),C=0(运算结果为负)</p>
<p class="lh15" >例b: <br>
MOVLW
1
;W=1<br>
MOVWF
F10
;F10=1<br>
CLRW
;W=0<br>
SUBWF
F10
;F10-W=1,C=1(运算结果为正)</p>
<p class="lh15" >PD和TO两位可用来判断芯片复位的原因,GPWUF位也是用来判断芯片复位类型,请参阅§1.12.7描述。</p>
<p class="lh15" >五、FSR(地址:04h) ── 选择寄存器</p>
<p class="lh15" >FSR和INDF寄存器(地址:00h)配合完成间接寻址,请参阅前面有关INDF寄存器的描述。FSR寄存器宽度为5位,FSR<4:0>用来间接寻址32个寄存器,FSR<5>
则用来选择寄存器体(Bank),见下图:</p>
<p align="center" class="lh15" ><img src="image/4.gif" width="500" height="327"><br>
图1.10 直接/间接寻址方式</p>
<p class="lh15" >
a、PIC12C508: 不存在寄存器体选,FSR<5>恒为“1”。<br>
b、PIC12C509:
FSR<5>=1 Bank1,<br>
FSR<5>=0
Bank0。</p>
<p class="lh15" >六、OSCCAL(地址:05h) ── 内部振荡校正系数寄存器</p>
<p class="lh15" >PIC12C5XX内部集成有RC振荡供用户选择使用,OSCCAL<7:4> 包含了该振荡电路的校正系数,其上电初始值为“0111”,请参阅§1.11.4有关内部RC振荡的描述。</p>
<p class="lh15" >七、GPIO(地址:06h) ── I/O寄存器</p>
<p class="lh15" >PIC12C5XX有一个6位的I/O口,它在寄存器中的映像就是GPIO寄存器,GPIO<5:0>对应于
I/O口线GP5:GP0,GPIO<7:6>未用,恒为“0”。</p>
<p class="lh15" >八、TRIS ── I/O方向控制寄存器</p>
<p class="lh15" >TRIS是GP口线方向控制寄存器,用户不能直接寻址,必须通过执行“TRIS 6”指令来设置它。当执行“TRIS
6”指令后,W寄存器的内容即会被置入TRIS中。“1”将相应的I/O口线设为输入态(高阻态),“0”则被设为输出态。但是有二点例外,即GP3永远是输入态而GP2有可能由OPTION寄存器设置为输入态(T0CKI),而不理会TRIS中的设置内容。请参阅§1.2关于I/O口的描述。</p>
<p class="lh15" >例:<br>
MOVLW
0Fh ;W=“00001111”<br>
TRIS
6
;TRIS=“001111”,GP0:GP3为输入态<br>
GP4:GP5为输出态</p>
<p class="lh15" >各种复位都会置TRIS为全“1”。</p>
<p class="lh15" >九、OPTION ── 参数定义寄存器</p>
<p class="lh15" >OPTION用来定义一些芯片工作参数,见下图所示:</p>
<div align="center"> </div>
<p align="center" class="lh15" ><img src="image/5.gif" width="603" height="639"><br>
图1.11 OPTION寄存器</p>
<p class="lh15" >OPTION也是不能由用户直接寻址的,必须由执行“OPTION”指令来把W寄存器中的内容置入OPTION寄存器,如下例:<br>
MOVLW
7
;W=“00000111”<br>
OPTION
;W→OPTION<br>
各种复位都会置OPTION为全“1”。</p>
<p class="lh15" >注意即使TRIS中相应的GP2方向位是“0”,如果将TOCS置为“1”,则GP2也会被强置为输入态,即为T0CKI输入线。</p>
<p class="lh15" >有关OPTION各位的定义,请参阅各自相应的章节。</p>
<p class="lh15" >十、W ── 工作寄存器</p>
<p class="lh15" >W寄存器用来存放指令中的第二个操作数,或用来进行内部数据传送,或存放运算结果,是最常用的寄存器。</p>
<p class="lh15" ><b>§1.6.2 通用寄存器</b></p>
<p class="lh15" >
PIC12C508: 07h ─ 1Fh ;Bank0<br>
PIC12C509:
07h ─ 1Fh ;Bank0<br>
30h ─ 3Fh
;Bank1</p>
<p class="lh15" >通用寄存器在上电后的值是随机的,所以它属RAM性质。</p>
<p class="lh15" ><b><font size="2">§1.7 I/O 口</font></b></p>
<p class="lh15" >PIC12C5XX只有一个I/O口,对应的映像寄存器为GPIO(地址:06h),其中GPIO<
5:0> 对应GP5:GP0,GPIO<7:6>未用,永为“0”。注意,GP3仅可作为输入,是单向I/O口线。另外,GP5、GP4、GP3及GP2还可以由用户定义成各种特殊功能口线,一旦它们被用作特殊用途,则永远读为“0”。GP0、GP1和GP3还带有可编程的弱上拉和“电平变化唤醒功能”(即唤醒正处于睡眠状态下的芯片),关于这点请参阅OPTION寄存器的描述。如果GP3被用户定义为复位输入端(MCLR),则它的弱上拉自动有效,但“电平变化唤醒”特性被自动关闭。</p>
<p class="lh15" >GPIO口线的方向由TRIS寄存器控制,详情参见§1.6.1中有关TRIS寄存器的描述。</p>
<p class="lh15" ><b>§1.7.1 I/O 口结构</b></p>
<p > <span class="lh15">一根I/O口线的结构如下图所示: </span>
<p class="lh15" align="center" >
<img src="image/the01.8.jpg" v:shapes="_x0000_s1026" width="279" height="385"><br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -