⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pic2.htm

📁 pic单片机原理
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<html>
<head>
<title>PIC学习/PIC系列单片机程序设计基础</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>&nbsp;</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">&nbsp;</td>
        </tr>
        <tr> 
          <td colspan="2"><font style="font-size:16px" color="#000000"><b>>> <a href="index.htm">PIC单片机原理</a> 
            \</b></font></td>
        </tr>
      </table>
      <table width="700" border="0" cellspacing="0" cellpadding="2">
        <tr> 
          <td align="center"> <div align="center" class="标题"> <span class="t18lan"><font size="3"><b>PIC系列单片机程序设计基础</b></font></span> 
            </div></td>
        </tr>
        <tr> 
          <td> <p></p></td>
        </tr>
        <tr valign="top"> 
          <td height="300">&nbsp;&nbsp;&nbsp; <b class="T14LAN"><span class="lh15">1、程序的基本格式</span></b><span class="lh15"><br>
              先介绍二条伪指令:<br>
              EQU ——标号赋值伪指令<br>
              ORG ——地址定义伪指令<br>
              PIC16C5X在RESET后指令计算器PC被置为全“1”,所以PIC16C5X几种型号芯片的复位地址为:<br>
               PIC16C54/55:1FFH<br>
               PIC16C56:3FFH<br>
               PIC16C57/58:7FFH<br>
              一般来说,PIC的源程序并没有要求统一的格式,大家可以根据自己的风格来编写。但这里我们推荐一种清晰明了的格式供参考。<br>
              TITLE This is …… ;程序标题<br>
              ;--------------------------------------<br>
              ;名称定义和变量定义<br>
              ;--------------------------------------<br>
              F0    EQU  0<br>
              RTCC   EQU  1<br>
              PC    EQU  2<br>
              STATUS  EQU  3<br>
              FSR   EQU  4<br>
              RA    EQU  5<br>
              RB    EQU  6<br>
              RC    EQU  7  <br>
                   ┋<br>
              PIC16C54 EQU 1FFH ;芯片复位地址<br>
              PIC16C56 EQU 3FFH<br>
              PIC16C57 EQU 7FFH<br>
              ;-----------------------------------------<br>
              ORG PIC16C54 GOTO MAIN   ;在复位地址处转入主程序<br>
              ORG   0          ;在0000H开始存放程序<br>
              ;-----------------------------------------<br>
              ;子程序区<br>
              ;-----------------------------------------<br>
              DELAY MOVLW 255<br>
                  ┋<br>
                  RETLW 0<br>
              ;------------------------------------------<br>
              ;主程序区<br>
              ;------------------------------------------<br>
              MAIN<br>
                  MOVLW B‘00000000’<br>
                  TRIS RB       ;RB已由伪指令定义为6,即B口<br>
                   ┋<br>
              LOOP<br>
                  BSF RB,7 CALL DELAY        <br>
                  BCF RB,7 CALL DELAY<br>
                    ┋<br>
                  GOTO LOOP<br>
              ;-------------------------------------------<br>
                   END       ;程序结束<br>
               注:MAIN标号一定要处在0页面内。<br>
              <b class="T14LAN">2、程序设计基础</b><br>
              1) 设置 I/O 口的输入/输出方向<br>
              PIC16C5X的I/O 口皆为双向可编程,即每一根I/O 端线都可分别单独地由程序设置为输入或输出。这个过程由写I/O控制寄存器TRIS 
            f来实现,写入值为“1”,则为输入;写入值为“0”,则为输出。<br>
                  MOVLW 0FH  ;0000 1111(0FH)<br>
                        输入 输出<br>
                  TRIS 6    ;将W中的0FH写入B口控制器,<br>
                         ;B口高4位为输出,低4位为输入。<br>
                  MOVLW 0C0H ; 11 000000(0C0H)<br>
                          RB4,RB5输出0 RB6,RB7输出1<br>
              2) 检查寄存器是否为零<br>
              如果要判断一个寄存器内容是否为零,很简单,现以寄存器F10为例:<br>
                  MOVF 10,1      ;F10→F10,结果影响零标记状态位Z<br>
                  BTFSS STATUS,Z    ;F10为零则跳<br>
                  GOTO NZ        ;Z=0即F10不为零转入标号NZ处程序<br>
                   ┋          ;Z=1即F10=0处理程序<br>
              3) 比较二个寄存器的大小<br>
              要比较二个寄存器的大小,可以将它们做减法运算,然后根据状态位C来判断。注意,相减的结果放入W,则不会影响二寄存器原有的值。<br>
              例如F8和F9二个寄存器要比较大小:<br>
                   MOVF 8,0       ;F8→W<br>
                   SUBWF 9,0      ;F9—W(F8)→W<br>
                   BTFSC STATUS,Z    ;判断F8=F9否<br>
                   GOTO F8=F9<br>
                   BTFSC STATUS,C    ;C=0则跳<br>
                   GOTO F9&gt;F8       ;C=1相减结果为正,F9&gt;F8<br>
                   GOTO F9&lt;<F8 ;c="0相减结果为负,F8">F8       ;C=0相减结果为负,F9&lt;F8<br>
                     ┋<br>
               4) 循环n次的程序<br>
              如果要使某段程序循环执行n次,可以用一个寄存器作计数器。下例以F10做计数器,使程序循环8次。<br>
                   COUNT EQU 10     ;定义F10名称为COUNT(计数器)<br>
                      ┋<br>
                   MOVLW 8<br>
                   MOVWF COUNT LOOP   ;循环体<br>
               LOOP<br>
                       ┋<br>
                   DECFSZ COUNT,1    ;COUNT减1,结果为零则跳<br>
                   GOTO LOOP       ;结果不为零,继续循环<br>
                       ┋       ;结果为零,跳出循环<br>
               5)“IF……THEN……”格式的程序<br>
              下面以“IF X=Y THEN GOTO NEXT”格式为例。<br>
                   MOVF X,0      ;X→W<br>
                   SUBWF Y,0     ;Y—W(X)→W<br>
                   BTFSC STATUS,Z   ;X=Y 否<br>
                   GOTO NEXT      ;X=Y,跳到NEXT去执行。<br>
                      ┋       ;X≠Y<br>
               6)“FOR……NEXT”格式的程序<br>
              “FOR……NEXT”程序使循环在某个范围内进行。下例是“FOR X=0 TO 5”格式的程序。F10放X的初值,F11放X的终值。<br>
                  START  EQU  10<br>
                  DAEND  EQU  11<br>
                       ┋<br>
                  MOVLW 0<br>
                  MOVWF START     ; 0→START(F10)<br>
                  MOVLW 5<br>
                  MOVWF DAEND     ;5→DAEND(F11)<br>
               LOOP<br>
                       ┋<br>
                  INCF START,1     ;START值加1<br>
                  MOVF START,0<br>
                  SUBWF DAEND,0     ;START=DAEND ?(X=5否)<br>
                  BTFSS STATUS,Z<br>
                  GOTO LOOP        ;X<5,继续循环<br>
                       ┋       ;X=5,结束循环<br>
               7)“DO WHILE……END”格式的程序<br>
              “DO WHILE……END”程序是在符合条件下执行循环。下例是“DO WHILE X=1”格式的程序。F10放X的值。<br>
                  X  EQU  10<br>
                    ┋<br>
                  MOVLW  1<br>
                  MOVWF  X     ;1→X(F10),作为初值<br>
               LOOP<br>
                    ┋<br>
                  MOVLW 1<br>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -