基本信息
文件名称:Microchip 系列:PIC18F4550_(20).PIC18F4550汇编语言编程.docx
文件大小:24.38 KB
总页数:27 页
更新时间:2025-06-05
总字数:约1.49万字
文档摘要

PAGE1

PAGE1

PIC18F4550汇编语言编程

1.汇编语言基础

1.1汇编语言概述

汇编语言是一种低级编程语言,它与特定的处理器架构密切相关。对于PIC18F4550单片机,汇编语言提供了对硬件寄存器和指令集的直接访问,使得开发者可以更精细地控制单片机的行为。汇编语言的每条指令通常对应于处理器的一条机器码指令,因此执行效率非常高,但编程难度也相对较大。

1.2汇编语言的基本语法

PIC18F4550的汇编语言语法包括以下几个部分:

指令:CPU执行的基本操作,如MOV、ADD、SUB等。

操作数:指令操作的对象,可以是寄存器、立即数、内存地址等。

标签:用于标记代码中的特定位置,方便跳转和引用。

注释:以;开头,用于解释代码的功能和逻辑。

1.2.1指令格式

汇编语言指令的基本格式如下:

instructionoperand1,operand2;comment

instruction:指令名称。

operand1:第一个操作数。

operand2:第二个操作数(如果需要)。

;comment:注释,可选。

1.3常用指令

1.3.1数据传送指令

MOV:移动数据。

MOVF:移动文件寄存器内容。

MOVLW:移动立即数。

MOVWF:移动W寄存器内容到文件寄存器。

MOVWFFSR;将W寄存器的内容移动到文件选择寄存器FSR

MOVLW0x55;将立即数0x55移动到W寄存器

MOVFPORTA,W;将PORTA寄存器的内容移动到W寄存器

1.3.2算术逻辑指令

ADD:加法。

SUB:减法。

AND:按位与。

OR:按位或。

XOR:按位异或。

COMF:按位取反。

INCF:加1。

DECF:减1。

ADDWFFSR,F;将W寄存器的内容加到FSR寄存器,并将结果存回FSR

SUBWFPORTA,W;从PORTA寄存器的内容中减去W寄存器的内容,并将结果存入W寄存器

ANDLW0x0F;将W寄存器的内容与立即数0x0F进行按位与操作

ORLW0xFF;将W寄存器的内容与立即数0xFF进行按位或操作

XORLW0x55;将W寄存器的内容与立即数0x55进行按位异或操作

COMFPORTB,W;将PORTB寄存器的内容按位取反,并将结果存入W寄存器

INCFCOUNTER,F;将COUNTER寄存器的内容加1,并将结果存回COUNTER

DECFCOUNTER,W;将COUNTER寄存器的内容减1,并将结果存入W寄存器

1.3.3控制转移指令

GOTO:无条件跳转。

CALL:调用子程序。

RETURN:从子程序返回。

RETFIE:从中断返回。

GOTOSTART;无条件跳转到标签START

CALLDELAY;调用子程序DELAY

RETURN;从子程序返回

RETFIE;从中断返回

1.3.4位操作指令

BCF:清除位。

BSF:设置位。

BTFSC:测试位,如果位清除则跳过下一条指令。

BTFSS:测试位,如果位设置则跳过下一条指令。

BCFSTATUS,Z;清除STATUS寄存器的Z位

BSFSTATUS,Z;设置STATUS寄存器的Z位

BTFSCSTATUS,Z;测试STATUS寄存器的Z位,如果位清除则跳过下一条指令

BTFSSSTATUS,Z;测试STATUS寄存器的Z位,如果位设置则跳过下一条指令

2.寄存器和内存

2.1寄存器

PIC18F4550单片机的寄存器可以分为以下几类:

工作寄存器(WREG):用于存储中间结果。

状态寄存器(STATUS):包含CPU的状态信息,如零标志位(Z)、进位标志位(C)等。

文件选择寄存器(FSR):用于间接寻址。

程序计数器(PC):指向当前执行的指令地址。

特殊功能寄存器(SFR):用于控制单片机的各种功能,如端口寄存器(PORTA、PORTB等)、定时器寄存器(TMR0、TMR1等)。

2.1.1工作寄存器(WREG)

WREG是PIC18F4550单片机的一个8位寄存器,用于存储中间结果。大多数指令都会使用WREG作为操作数之一。

MOVLW0x55;将立即数0x55移动到WREG

ADDWFCOUNTER,F;将WREG的内容加到COUNTER寄存器,并将结果存回COUNTER

2.1.2状态寄存器(STATUS)

STATUS寄存器包含了一些重要的CPU状态标志位,如零标志位(Z)、进位标志位(C)等。这些标志位在条件跳转和循环控制中非常有用。

CLRFSTATUS;清除所有状态标志位

BSFST