PIC系列单片机程序设计基础(精选).doc
文本预览下载声明
1、程序的基本格式 先介绍二条伪指令: 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 TRIS RB ;RB已由伪指令定义为6,即B口 LOOP BSF RB,7 CALL DELAY BCF RB,7 CALL DELAY GOTO LOOP ; END ;程序结束 注:MAIN标号一定要处在0页面内。 2、程序设计基础 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 F9F8 ;C=1相减结果为正,F9F8 GOTO F9F8 ;C=0相减结果为负,F9F8 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……T
显示全部