这段程序很简单,实际编译在目标板上运行没有问题。
#include "msp430x14x.h"
;自己第一次写的程序
;
NAME main;模块名称定义
PUBLIC main;全局符号声明
ORG 0FFFEH;中断向量表复位向量地址
DC16 init;存放用户程序入口地址,复位后开始执行
RSEG DATA16_C ;在ROM中存放LED的显示值
LEDdata:DC8 01H,02H,04H,08H,10H,20H,40H,80H
RSEG CSTACK ;定义堆栈段
DS 0
RSEG CODE ;定义代码段
DS 0
init: MOV #SFE(CSTACK),SP;初始化堆栈指针
main: NOP;用户主程序开始
MOV #WDTPW+WDTHOLD,&WDTCTL;关闭看门狗定时器
MOV.b #0,&P4SEL;定义P4口为基本I/O口
MOV.b #0FFH,&P4DIR;设置P4口为输出端口
MOV.b #0,&P4OUT;使8个灯都为熄灭状态
again: MOV #LEDdata,R4;取输出表格首地址
MOV #8,R5;循环控制次数
next: MOV.b @R4+,&P4OUT;取表格的某一状态输出
CALL #delay;延时
DEC R5;
JNZ next;
JMP again;
delay: PUSH SR;
MOV #0FFFFH,R6;
wait: DEC R6;
JNZ wait;
POP SR;
RET
END
随便修改了一下,问题就出来了:
#include "msp430x14x.h"
;自己第一次写的MSP430汇编程序
;
NAME main;模块名称定义
PUBLIC main;全局符号声明
ORG 0FFFEH;中断向量表复位向量地址
DC16 init;存放用户程序入口地址,复位后开始执行
RSEG CSTACK ;定义堆栈段
DS 0
RSEG CODE ;定义代码段
DS 0
init: MOV #SFE(CSTACK),SP;初始化堆栈指针
main: NOP;用户主程序开始
MOV #WDTPW+WDTHOLD,&WDTCTL;关闭看门狗定时器
MOV.b #0,&P4SEL;定义P4口为基本I/O口
MOV.b #0FFH,&P4DIR;设置P4口为输出端口
MOV.b #0,&P4OUT;使8个灯都为熄灭状态
CALL #delay;延时,
这是出第二个问题的地方。
MOV.b #80H,&P4OUT;
CALL #delay;延时
MOV.b #0,&P4OUT;
CALL #delay;延时
MOV.b #40H,&P4OUT;
CALL #delay;延时
MOV.b #0,&P4OUT;
end: NOP;
这是第一个问题出的地方
JMP end;
delay: PUSH SR;
MOV #0FFFFH,R6;
wait: DEC R6;
JNZ wait;
POP SR;
RET
END
结果是:
for_user.asm
Error[0]: Invalid syntax E:我的文档for_user.asm 27
Error[50]: Undefined symbol:'delay' E:我的文档for_user.asm 19
Done. 2 error(s), 0 warning(s)
请大家指教
[
本帖最后由 ywb888 于 2012-1-13 12:50 编辑 ]
此帖出自
小平头技术问答
一周热门 更多>