📄 the01.htm
字号:
<td > <p align="center" class="lh15" >DC~4Mhz</p></td>
<td > <p align="center" class="lh15" >1024×12</p></td>
<td > <p align="center" class="lh15" >41× 8</p></td>
<td > <p align="center" class="lh15" >1</p></td>
<td > <p align="center" class="lh15" >1</p></td>
<td > <p align="center" class="lh15" >5</p></td>
<td > <p align="center" class="lh15" >2.5V-5.5V</p></td>
<td > <p align="center" class="lh15" >8</p></td>
</tr>
</table>
</div>
<p align="center" class="lh15" >表1.1 PIC12C5XX型号功能表</p>
<p class="lh15" >各型号管脚图如下:</p>
<p align="center" class="lh15" >PDIP,SOIC,Windowed CERDIP
<table cellpadding="2" cellspacing="0" width="100%">
<tr>
<td align="right" width="290"> <p class="lh17">VDD——><br>
GP5/OSC1/CLKIN<——><br>
GP4/OSC2<——><br>
GP3/MCLR/VPP——></p></td>
<td class="lh15" width="106"><img src="image/the01.1.gif" v:shapes="_x0000_s1026 _x0000_s1027 _x0000_s1028 _x0000_s1029 _x0000_s1030 _x0000_s1031 _x0000_s1032 _x0000_s1033 _x0000_s1034 _x0000_s1035 _x0000_s1036" width="106" height="98"></td>
<td class="lh15" align="left"> <p class="lh17" ><——VSS<br>
<——>GP0<br>
<——>GP1<br>
<——>GP2/T0CK1</p></td>
</tr>
</table>
<div align="center">图1.1 12C508/509引脚 </div>
<p class="lh15" >下表描述了各引脚的功能。
<table border="0" cellspacing="1" cellpadding="3" bgcolor="#000000" width="100%" >
<tr bgcolor="#E7E7E7" >
<td > 引脚名 </td>
<td > 引脚序号 </td>
<td > 属性 </td>
<td > 缓冲类型 </td>
<td > 功能 </td>
</tr>
<tr bgcolor="#FFFFFF" >
<td > <p align="center" class="lh15" >GP0</p></td>
<td > <p align="center" class="lh15" >7</p></td>
<td > <p align="center" class="lh15" >I/O</p></td>
<td > <p align="center" class="lh15" >TTL/ST</p></td>
<td> <p class="lh15" >双向I/O口线,带可编程弱上拉,并具电平变化唤醒睡眠功能</p></td>
</tr>
<tr bgcolor="#FFFFFF" >
<td> <p align="center" class="lh15" >GP1</p></td>
<td > <p align="center" class="lh15" >6</p></td>
<td > <p align="center" class="lh15" >I/O</p></td>
<td > <p align="center" class="lh15" >TTL/ST</p></td>
<td > <p class="lh15" >双向I/O口线,带可编程弱上拉,并具电平变化唤醒睡眠功能</p></td>
</tr>
<tr bgcolor="#FFFFFF" >
<td > <p align="center" class="lh15" >GP2/T0CK1</p></td>
<td > <p align="center" class="lh15" >5</p></td>
<td > <p align="center" class="lh15" >I/O</p></td>
<td > <p align="center" class="lh15" >ST</p></td>
<td > <p class="lh15" >双向I/O口线,并可设置为计数器TIMER0的外部信号输入端</p></td>
</tr>
<tr bgcolor="#FFFFFF" >
<td > <p align="center" class="lh15" >GP3/MCLR</p></td>
<td > <p align="center" class="lh15" >4</p></td>
<td > <p align="center" class="lh15" >I</p></td>
<td > <p align="center" class="lh15" >TTL</p></td>
<td> <p class="lh15" >单向输入口线,也可设置为芯片复位端。当设为复位端MCLR时,低电平有效。<br>
当作为输入口线时,带可编程弱上拉及电平变化唤醒睡眠功能</p></td>
</tr>
<tr bgcolor="#FFFFFF">
<td> <p align="center" class="lh15" >GP4/OSC2</p></td>
<td > <p align="center" class="lh15" >3</p></td>
<td > <p align="center" class="lh15" >I/O</p></td>
<td > <p align="center" class="lh15" >TTL</p></td>
<td > <p class="lh15" >双向I/O口线,(使用片内RC振荡源时,也可作为晶振输出端)</p></td>
</tr>
<tr bgcolor="#FFFFFF" >
<td> <p align="center" class="lh15" >GP5/OSC1/CLKIN</p></td>
<td > <p align="center" class="lh15" >2</p></td>
<td > <p align="center" class="lh15" >I/O</p></td>
<td > <p align="center" class="lh15" >TTL/ST</p></td>
<td > <p class="lh15" >双向I/O口线,(使用片内RC振荡源时,也可作为晶振输入端或外部振荡输入端)</p></td>
</tr>
<tr bgcolor="#FFFFFF" >
<td > <p align="center" class="lh15" >VDD</p></td>
<td > <p align="center" class="lh15" >1</p></td>
<td > <p align="center" class="lh15" >电源</p></td>
<td > <p align="center" class="lh15" >—</p></td>
<td > <p class="lh15" >正电源</p></td>
</tr>
<tr bgcolor="#FFFFFF" >
<td > <p align="center" class="lh15" >VSS</p></td>
<td> <p align="center" class="lh15" >8</p></td>
<td > <p align="center" class="lh15" >电源</p></td>
<td > <p align="center" class="lh15" >—</p></td>
<td> <p class="lh15" >地</p></td>
</tr>
</table>
注:ST ─ 斯密特触发器
<p align="center" class="lh15" >表1.2 PIC12C5XX引脚功能</p>
<p class="lh15" > 从上表可看出,PIC12C5XX最多可以有5根I/O口线和1根输入口线(GP3)。</p>
<p class="lh15" ><b><font size="2">§1.3 PIC12C5XX内部结构<br>
</font></b> PIC12C5XX 的总线结构采用的是数据总线(8位)和指令总线(12位)独立分开的”哈佛结构”,所以它具有精简指令集(RISC)的特点,速度快,效率高,并且功耗很低。</p>
<p ><span class="lh15"> PIC12C5XX在一个芯片上集成了8位的算术逻辑运算单元(ALU),0.5K~1K的12位程序存储器,25~41个8位数据寄存器以及8位的计数器,上电复位电路,复位定时器,看门狗等等。</span></p>
<p align="center" class="lh15" >图1.2 PIC12C5XX内部结构<span class="lh15"><img src="image/the01.2.jpg" v:shapes="_x0000_s1038" width="576" height="436"></span></p>
<p class="lh15" ><b><font size="2">§1.4 指令周期和流水作业<br>
</font></b><span class="lh15"> PIC12C5XX的指令周期被分频成4个不重叠的节拍Q1~Q4,程序计数器PC在Q1节拍增1,
而指令是在Q4节拍从程序存储器中取出并置入指令译码器,并在下一个指令周期被执行, 如下图所示:</span></p>
<p align="center" class="lh15" >图1.3 指令周期<span class="lh15"><br>
<img src="image/the01.3.jpg" v:shapes="_x0000_s1037" width="596" height="222"></span></p>
<p class="lh15" > 指令的执行贯穿Q1~Q4节拍。</p>
<p class="lh15" > 如上所述,当CPU在执行一条指令的同时, 下一条指令的代码也同时被取出置入指令译码器,准备在下一指令周期执行,这就是PIC的流水作业方式,也是RISC结构单片机的特点,这种特点使单片机的运行速度可以达到很高。</p>
<p >
<p><span class="lh15">除了地址分支跳转指令的执行周期是2个指令周期外,其余所有指令都是单周期指令, 见下图:
</span> </p>
<p align="center" class="lh15" >图1.4 流水作业<br>
<img src="image/the01.4.jpg" v:shapes="_x0000_s1026" width="595" height="160">
</p>
<p class="lh15" ><b><font size="2">§1.5 程序存储器和堆栈</font></b><br>
<span class="lh15">PIC12C5XX的程序存储器为12位长,其中PIC12C508为512字节,而PIC12C509为1024字节。复位向量为地址0,因为最后一个字节(PIC12C508为地址1FFH,PIC12C509为地址3FFH)存放有片内RC实际振荡的校正系数,其形式为指令MOVLW
XX,用户不要使用这个字节,所以用户的程序应从地址000H开始存放,注意这点和PIC16C5X有所不同。 </span> </p>
<p align="center" class="lh15" ><img src="image/the01.5.jpg" v:shapes="_x0000_s1027" width="269" height="489">
<br>
图1.5 程序存储器和堆栈</p>
<p class="lh15" >PIC12C5XX把程序存储器以512字节为单位进行分页管理,这样PIC12C508有一个页面程序区,而PIC12C509有2个页面程序区,由状态寄存器STATUS中的PA0位(STATUS<5>)
确定程序区的页面。这是因为PIC是RISC结构,所有指令都是单字节,在PIC12C5XX中, 一条指令中所包含的地址信息只有9位,只能直接寻址一个页面(512字节);对于12C509,则还要由PA0位来辅助寻址2个页面(1024字节)的程序空间,即程序当需从一个页面跳转到另一个页面时(CALL、GOTO指令),应事先根据要跳转去的页面,把PA0位置为相应的值,请参阅状态寄存器的描述。</p>
<p class="lh15" >PIC12C5XX的堆栈有2层,有自己独立的空间,不占用程序存储器。注意它只能容纳二层子程序嵌套调用。堆栈的长度是12位,和PC长度一致,可以存放子程序调用时的PC值。</p>
<p class="lh15" >对堆栈的压入操作由子程序调用指令CALL完成,出栈操作则由子程序返回指令RETLW完成,请参阅第二章中这二条指令的详介。</p>
<p class="lh15" ><b><font size="2">§1.6 数据存储器</font></b></p>
<p class="lh15" >PIC12C5XX的数据存储器(RAM)由一些寄存器组成,分为特殊寄存器和通用寄存器二种。在PIC单片机中,对任何部件的操作都表现为对某一寄存器的操作,所以编程非常简单明了。</p>
<p class="lh15" align="center" > <img src="image/2.gif" width="526" height="224"><br>
* : 非实际存在的寄存器,参见§1.6.1中详介。<br>
图1.6 寄存器结构</p>
<p class="lh15" >从上图可看到,00h~06h为特殊寄存器,其余为通用寄存器。PIC12C508有25个通用寄存器,而PIC12C509则有41个通用寄存器,其中25个在Bank0,另16个在Bank1,关于寄存器的Bank方式,请参阅§1.6.1的FSR寄存器描述。</p>
<p class="lh15" ><b>§1.6.1 特殊寄存器 </b> </p>
<p class="lh15" >一、INDF(地址:00h) ── 间址寄存器<br>
INDF是一个物理上不存在的寄存器,只是一个逻辑寄存器,用来进行间接寻址,实际的寻址地址为FSR<4:0>的值。</p>
<p class="lh15" >例: MOVLW
10h<br>
MOVWF
FSR
;实际地址10h(F10寄存器)→FSR<br>
MOVLW
55h<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -