位置:51电子网 » 技术资料 » 单 片 机

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

发布时间:2008/5/27 0:00:00 访问次数:419

http://www.hificat.com

1、pic单片机程序的基本格式

   先介绍二条伪指令:
   equ ——标号赋值伪指令
   org ——地址定义伪指令
   pic16c5x单片机在reset后指令计算器pc被置为全“1”,所以pic16c5x几种型号芯片的复位地址为:
   pic16c54/55:1ffh
   pic16c56:3ffh
   pic16c57/58:7ffh

   一般来说,pic单片机的源程序并没有要求统一的格式,大家可以根据自己的风格来编写。但这里我们推荐一种清晰明了的格式供参考。

   title this is …… ;程序标题
   ;--------------------------------------
   ;名称定义和变量定义
   ;--------------------------------------
   f0    equ  0
   rtcc   equ  1
   pc    equ  2
   status  equ  3
   fsr   equ  4
   ra    equ  5
   rb    equ  6
   rc    equ  7  
       ┋
   pic16c54 equ 1ffh ;芯片复位地址
   pic16c56 equ 3ffh
   pic16c57 equ 7ffh
   ;-----------------------------------------
   org pic16c54 goto main   ;在复位地址处转入主程序
   org   0          ;在0000h开始存放程序
   ;-----------------------------------------
   ;子程序区
   ;-----------------------------------------
   delay movlw 255
      ┋
       retlw 0
   ;------------------------------------------
   ;主程序区
   ;------------------------------------------
   main
      movlw b‘00000000’
      tris rb       ;rb已由伪指令定义为6,即b口
       ┋
   loop
       bsf rb,7 call delay        
       bcf rb,7 call delay
        ┋
       goto loop
   ;-------------------------------------------
       end       ;程序结束

   注:main标号一定要处在0页面内。

   2、pic单片机程序设计基础

   1) 设置 i/o 口的输入/输出方向

   pic16c5x单片机的i/o 口皆为双向可编程,即每一根i/o 端线都可分别单独地由程序设置为输入或输出。这个过程由写i/o控制寄存器tris f来实现,写入值为“1”,则为输入;写入值为“0”,则为输出。
       movlw 0fh  ;0000 1111(0fh)
             输入 输出
       tris 6    ;将w中的0fh写入b口控制器,
             ;b口高4位为输出,低4位为输入。
       movlw 0c0h ; 11 000000(0c0h)
              rb4,rb5输出0 rb6,rb7输出1

   2) 检查寄存器是否为零

   如果要判断一个寄存器内容是否为零,很简单,现以寄存器f10为例:
       movf 10,1      ;f10→f10,结果影响零标记状态位z
       btfss status,z    ;f10为零则跳
       goto nz        ;z=0即f10不为零转入标号nz处程序
       ┋          ;z=1即f10=0处理程序

   3) 比较二个寄存器的大小

   要比较二个寄存器的大小,可以将它们做减法运算,然后根据状态位c来判断。注意,相减的结果放入w,则不会影响二寄存器原有的值。
   例如f8和f9二个寄存器要比较大小:
       movf 8,0       ;f8→w
       subwf 9,0      ;f9—w(f8)→w
       btfsc status,z    ;判断f8=f9否
       goto f8=f9
       btfsc status,c    ;c=0则跳
       goto f9>f8       ;c=1相减结果为正,f9>f8
       goto f9<f8       ;c=0相减结果为负,f9<f8
         ┋

   4) 循环n次的程序

   如果要使某段程序循环执行n次,可以用一个寄存器作计数器。下例以f10做计数器,使程序循环8次。
       count equ 10     ;定义f10名称为count(计数器)
          ┋
       movlw 8
       movwf count loop   ;循环体
    loop
           ┋
       decfsz count,1    ;count减1,结果为零则跳
       goto loop       ;结果不为零,继续循环
           ┋       ;结果为零,跳出循环

   5)“if……then……”格式的程序

   下面以“if x=y
http://www.hificat.com

1、pic单片机程序的基本格式

   先介绍二条伪指令:
   equ ——标号赋值伪指令
   org ——地址定义伪指令
   pic16c5x单片机在reset后指令计算器pc被置为全“1”,所以pic16c5x几种型号芯片的复位地址为:
   pic16c54/55:1ffh
   pic16c56:3ffh
   pic16c57/58:7ffh

   一般来说,pic单片机的源程序并没有要求统一的格式,大家可以根据自己的风格来编写。但这里我们推荐一种清晰明了的格式供参考。

   title this is …… ;程序标题
   ;--------------------------------------
   ;名称定义和变量定义
   ;--------------------------------------
   f0    equ  0
   rtcc   equ  1
   pc    equ  2
   status  equ  3
   fsr   equ  4
   ra    equ  5
   rb    equ  6
   rc    equ  7  
       ┋
   pic16c54 equ 1ffh ;芯片复位地址
   pic16c56 equ 3ffh
   pic16c57 equ 7ffh
   ;-----------------------------------------
   org pic16c54 goto main   ;在复位地址处转入主程序
   org   0          ;在0000h开始存放程序
   ;-----------------------------------------
   ;子程序区
   ;-----------------------------------------
   delay movlw 255
      ┋
       retlw 0
   ;------------------------------------------
   ;主程序区
   ;------------------------------------------
   main
      movlw b‘00000000’
      tris rb       ;rb已由伪指令定义为6,即b口
       ┋
   loop
       bsf rb,7 call delay        
       bcf rb,7 call delay
        ┋
       goto loop
   ;-------------------------------------------
       end       ;程序结束

   注:main标号一定要处在0页面内。

   2、pic单片机程序设计基础

   1) 设置 i/o 口的输入/输出方向

   pic16c5x单片机的i/o 口皆为双向可编程,即每一根i/o 端线都可分别单独地由程序设置为输入或输出。这个过程由写i/o控制寄存器tris f来实现,写入值为“1”,则为输入;写入值为“0”,则为输出。
       movlw 0fh  ;0000 1111(0fh)
             输入 输出
       tris 6    ;将w中的0fh写入b口控制器,
             ;b口高4位为输出,低4位为输入。
       movlw 0c0h ; 11 000000(0c0h)
              rb4,rb5输出0 rb6,rb7输出1

   2) 检查寄存器是否为零

   如果要判断一个寄存器内容是否为零,很简单,现以寄存器f10为例:
       movf 10,1      ;f10→f10,结果影响零标记状态位z
       btfss status,z    ;f10为零则跳
       goto nz        ;z=0即f10不为零转入标号nz处程序
       ┋          ;z=1即f10=0处理程序

   3) 比较二个寄存器的大小

   要比较二个寄存器的大小,可以将它们做减法运算,然后根据状态位c来判断。注意,相减的结果放入w,则不会影响二寄存器原有的值。
   例如f8和f9二个寄存器要比较大小:
       movf 8,0       ;f8→w
       subwf 9,0      ;f9—w(f8)→w
       btfsc status,z    ;判断f8=f9否
       goto f8=f9
       btfsc status,c    ;c=0则跳
       goto f9>f8       ;c=1相减结果为正,f9>f8
       goto f9<f8       ;c=0相减结果为负,f9<f8
         ┋

   4) 循环n次的程序

   如果要使某段程序循环执行n次,可以用一个寄存器作计数器。下例以f10做计数器,使程序循环8次。
       count equ 10     ;定义f10名称为count(计数器)
          ┋
       movlw 8
       movwf count loop   ;循环体
    loop
           ┋
       decfsz count,1    ;count减1,结果为零则跳
       goto loop       ;结果不为零,继续循环
           ┋       ;结果为零,跳出循环

   5)“if……then……”格式的程序

   下面以“if x=y
相关IC型号

热门点击

 

推荐技术资料

硬盘式MP3播放器终级改
    一次偶然的机会我结识了NE0 2511,那是一个远方的... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!