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

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

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

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<

  f9       ;c=0相减结果为负,f9
    ┋

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 then goto next”格式为例。
  movf x,0      ;x→w
  subwf y,0     ;y—w(x)→w
  btfsc status,z   ;x=y 否
  goto next      ;x=y,跳到next去执行。
    ┋       ;x≠y

6)“for……next”格式的程序

  “for……next”程序使循环在某个范围内进行。下例是“for x=0 to 5”格式的程序。f10放x的初值,f11放x的终值。
  start  equ  10
  daend  equ  11

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<

  f9       ;c=0相减结果为负,f9
    ┋

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 then goto next”格式为例。
  movf x,0      ;x→w
  subwf y,0     ;y—w(x)→w
  btfsc status,z   ;x=y 否
  goto next      ;x=y,跳到next去执行。
    ┋       ;x≠y

6)“for……next”格式的程序

  “for……next”程序使循环在某个范围内进行。下例是“for x=0 to 5”格式的程序。f10放x的初值,f11放x的终值。
  start  equ  10
  daend  equ  11

相关IC型号
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!