📄 pic16cxxx-1-3.htm
字号:
<html>
<head>
<title>PIC16Cxxx单片机应用与设计</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style>
<!--
BODY {font-size:12px;font-family:宋体;}
td {font-size:12px;font-family:宋体;}
A:link { COLOR: #0000ff; TEXT-DECORATION: underline}
A:visited { COLOR:#0000ff; TEXT-DECORATION: underline}
A:active { COLOR:red! important; TEXT-DECORATION: underline}
A:hover { TEXT-DECORATION: none}
.b24 a:link { FONT-SIZE: 12px; COLOR:#0000ff; TEXT-DECORATION: underline}
.b24 a:visited {FONT-SIZE: 12px; COLOR:#0000ff; TEXT-DECORATION: underline}
.b24 a:active { FONT-SIZE: 12px; COLOR:#0000ff; TEXT-DECORATION: underline}
.b24 a:hover { FONT-SIZE: 12px; COLOR:#990000; TEXT-DECORATION: none}
.lh13 { LINE-HEIGHT: 130%}
.lh15 { LINE-HEIGHT: 150%}
.lh17 { LINE-HEIGHT: 170%}
.lh19 { LINE-HEIGHT: 190%}
.lh30 { LINE-HEIGHT: 300%}
-->
</style>
</head>
<body bgcolor="#FFFFFF" leftmargin="0" topmargin="0" >
<table width="778" border="0" cellspacing="0" cellpadding="0">
<tr align="center">
<td> </td>
</tr>
<tr align="center">
<td> <table width="700" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="41%" height="46" valign="top"><img src="logo.gif" width="205" height="41"></td>
<td height="46" width="59%" valign="bottom" align="right"> <table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="right"><b><font style="font-size:16px" color="#990000">——
—— —— 技术资料下载中心</font></b> </td>
</tr>
<tr>
<td height="8"></td>
</tr>
</table></td>
</tr>
<tr>
<td height="1" colspan="2"></td>
</tr>
<tr bgcolor="#990000">
<td height="1" colspan="2"></td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td colspan="2"><font style="font-size:16px" color="#000000"><b>>> <a href="index.htm">PIC16CXXX单片机应用与设计</a>
\</b></font></td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
</table>
<table width="700" border="0" cellspacing="0" cellpadding="2" class="lh15">
<tr>
<td align="center"><b><font size="3">第一章 PIC16C6X单片机</font><font size="3"></font></b></td>
</tr>
<tr>
<td> <p> </p></td>
</tr>
<tr valign="top">
<td height="300"> <p>五、寄存器PIR1</p>
<p><img src="image/a32.gif" width="425" height="79"><br>
该寄存器包含外设中断的中断标志位。</p>
<p align="center"><img src="image/a33.gif" width="598" height="746">
</p>
<p>六、寄存器PIE2 </p>
<p align="center"><img src="image/a34.gif" width="249" height="78">
</p>
<p>该寄存器包含了CCP2的中断使能位,关于CCP功能,请参考有关章节。</p>
<p align="center"> <img src="image/a35.gif" width="409" height="232"></p>
<p>七、寄存器PIR2</p>
<p>
<p align="center"><img src="image/a36.gif" width="467" height="488">
</p>
<p>八、寄存器PCON</p>
<p><img src="image/c2.gif" width="440" height="81"></p>
<p>该寄存器包含一个称为"上电复位"标志位,用来区别上电复位和别的复位(如MCLR拉低或WDT超时等造成的复位)。</p>
<p><img src="image/a37.gif" width="445" height="797"> </p>
<p>九、寄存器PC和PCLATH<br>
程序计数器PC是一个13位宽的寄存器,分成二个部份:低8位PCL(地址:02h)可读/写,高5位PCH不能直接读/写,而是通过寄存器PCLATH(地址:10h)载入。PC
值的各种载入情况见下图所示:<br>
<p align="center">图1.15 不同指令下程序计数器PC值的载入方式<br>
<img src="image/a38.gif" width="275" height="224"> </p>
<p> 对于PIC16C65/63,程序空间达4K字节,但地址跳转指令CALL和GOTO的指令码中仅有11位的地址信息,只能在2K空间内跳转。所以在PIC16C63/65中,把4K程序空间分成2页,每页2K,再把寄存器PCLATH<3>位作为页面选择位,这样,就可以在4K空间内跳转。方法是当发生跨页面的CALL或GOTO时,先预置PCLATH<3>,使之指向所希望的页面(0或1)。下面是一个例子:</p>
<p align="center"><img src="image/a40.gif" width="417" height="215"></p>
<p>大家注意到RETURN指令之前不必理会页面位PCLATH<3>,因为在发生中断时,13
位的PC值被全部压入堆栈中保留,所以跨页面的CALL结束后,执行RETURN 指令即会返回到原先的页面。<br>
在开始写汇编程序时,由于不考虑指令在存储器中的实际位置,不会注意到哪个CALL或GOTO是跨页面。在用MPASM汇编时,它会发出警告信息。这时可根据提示信息修改编辑汇编程序,作相应的页面预置处理,然后再重新进行汇编。<br>
对于PIC16C61/62/64,则不存在程序页面选择的问题。<br>
<br>
十、寄存器INDF和FSR<br>
INDF寄存器(地址0)不是一个物理上存在的寄存器,是一个虚拟的逻辑寄存器,它用以实现间接寻址。当寻址INDF时,实际上是访问FSR寄存器(地址4h)内容所指的单元。<br>
以下程序采用间接寻址方式将20h-2Fh的寄存器(RAM)单元清零。</p>
<p align="center"><img src="image/a41.gif" width="508" height="551"><br>
</p>
<p><img src="image/a42.gif" width="588" height="383"></p>
<p>§1.8 I/O 口 <br>
<br>
PIC16C64/65有5个I/O口,PIC16C62/63有3个I/O口,PIC16C61则只有2个I/O
口。 这些I/O管脚有的和某些外部功能部件复用,即可以作为一般的I/O引脚, 也可以作为某些特殊功能的输入/输出。PIC16CXX把I/O口都作为寄存器来处理,编程寻址非常方便。
</p>
<p> §1.8.1 PORTA和TRISA </p>
<p> 对于PIC16C62/63/64/65,PORTA是6位宽的I/O口;而对于PIC16C61而言,PORTA
则只有5位。RA4具有斯密特输入和集电极开路输出,其他所有的RA脚都具有TTL输入和CMOS输出, 其方向可由寄存器TRISA相应的位来定义,"1"定义为输入,"0"则为输出,见下图。
</p>
<p align="center"><img src="image/a43.gif" width="476" height="377"></p>
<br> I/O脚定义为输入时即为高阻态,定义为输出时则其输出锁存器的输出电平就是I/O
脚输出电平。<br>
读PORTA寄存器的结果是读取I/O管脚上的电平,而写PORTA寄存器的结果是写入I/O 锁存器。所有的 写I/O口的操作都是一个"读入/修改/
写入"的过程,即先读入I/O脚电平,然后由程序修改(指定一个值),最后再置入I/O锁存器。<br> <p>
<p align="center"><img src="image/a44.gif" width="419" height="300"></p>
<br>
§1.8.2 PORTB和TRISB
<p> PORTB是一个8位,双向可编程的I/O口,相应的方向寄器为TRISB(地址:86h)。</p>
<p align="center"><img src="image/a45.gif" width="337" height="137"></p>
PORTB每个管脚都有可编程之弱上拉,设置RBPu位(OPTION<7>)可以打开/关闭这些弱上拉。当I/O管脚被设成输出时,则其弱上拉自动关闭。当芯片上电复位后,RBPu=1,所有弱上拉被关闭,可由用户程序将它们打开(置RBPu=0)。<br>
另外PORTB还有一个重要特性,即RB<7:4>这4根I/O线具有"电平变化中断"功能,就是当RB<7:4>管脚上的电平发生变化,可以引起CPU中断,
但仅当I/O 脚定义为输入时这个功能才有效。<br> 这种中断可以把CPU从"睡眠"(SLEEP)状态中唤醒。<br>
PORTB 的"电平变化中断"以及可编程弱上拉特性使之可以非常方便地构成一个键盘矩阵,特别是对于那些希望以键盘按动来唤醒CPU工作的设计,最理想不过,如手持式仪器,遥控器,计算器等。在不用的时候,CPU处于睡眠状态(低功耗),
而当一旦有按键按下, 即可唤醒CPU进行工作。这种设计实例请参考后面的第七章设计范例。<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -