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