单片机编译通不过 sendAA.asm(2): error A45: UNDEFINED SYMBOL (PASS-2)

sendAA_Code SEGMENT CODE
PUBLIC sendAA
RSEG sendAA_Code
ddsz: mov a,0x90
anl a,#1
jz ddsz //等待时钟线为高
mov r0,#24
djnz r0,$ //延时约50微秒
mov a,0x90
anl a,#1
jz ddsz //时钟信号是否仍旧为高
mov a,0x90
anl a,#2
rr a
// jz fq //放弃
mov r0,9 //延时20us
djnz r0,$
mov 0x90,#0 //输出起始位
mov r3,#9
djnz r3,$ //延时约20us
mov 0x90,#0 //时钟线拉低
mov r3,19
djnz r3,$ //延时约40us
mov 0x90,#1 //释放时钟
mov r3,9
djnz r3,$ //延时约20us
mov r0,#0xaa //存放要发送的数据
mov r1,#8 //循环8次
fssj: mov a,0x90 //发送数据
anl a,#1
// jz fq //主机禁止发送则放弃
mov a,r0 //发送数据
anl a,#1
rl a
mov 0x90,a
mov a,r0
rr a
mov r0,a
mov r3,#9
djnz r3,$ //延时约20us
mov 0x90,#0 //时钟线拉低
mov r3,19
djnz r3,$ //延时约40us
mov 0x90,#1 //释放时钟
mov r3,#5
djnz r3,$ //延时约11us
djnz r1,fssj
mov a,0x90
anl a,#1
// jz fq //主机禁止发送则放弃
mov 0x90,#2 //输出校验位
mov r3,9
djnz r3,$ //延时约20us
mov 0x90,#0 //时钟线拉低
mov r3,19
djnz r3,$ //延时约40us
mov 0x90,#1 //释放时钟
mov r3,9
djnz r3,$ //延时约20us
mov a,0x90
anl a,#1
// jz fq //主机禁止发送则放弃
mov 0x90,#2 //输出停止位
mov r3,9
djnz r3,$ //延时约20us
mov 0x90,#0 //时钟线拉低
mov r3,19
djnz r3,$ //延时约40us
mov 0x90,#1 //释放时钟
mov r3,24
djnz r3,$ //延时约20us
RET
END
是不是第二句哪里写错了?
下面是主函数
#include <reg52.h>
#include <stdio.h>
extern void sendAA();
main()
{
sendAA();
}

看见一个搞混合编译的真爽,帮你改过来了,编译正常了,都是一些小问题,你注意对比看一下
另外你很多地方出现了MOV r3,9 MOV r3,19,这样的句子,不应该用直接寻址啊,跟你的注释也对不上,应该是MOV r3,#9 MOV r3,#19,帮你改过来了一部分,你再检查看看
学混合编译话,看看《keil c51 编译器用户手册》这本书,网上很容易下,里面几个混合编译的例子很详细,格式很规范,无参数传递,有参数传递,有参数返回的都有例子,仔细看看吧
NAME ASM1

?PR?sendAA?ASM1 SEGMENT CODE
PUBLIC sendAA
RSEG ?PR?sendAA?ASM1

sendAA:
mov a,0x90
anl a,#1
jz sendAA //等待时钟线为高
mov r0,#24
djnz r0,$ //延时约50微秒
mov a,0x90
anl a,#1
jz sendAA //时钟信号是否仍旧为高
mov a,0x90
anl a,#2
rr a
// jz fq //放弃
mov r0,#9 //延时20us
djnz r0,$
mov 0x90,#0 //输出起始位
mov r3,#9
djnz r3,$ //延时约20us
mov 0x90,#0 //时钟线拉低
mov r3,#19

djnz r3,$ //延时约40us
mov 0x90,#1 //释放时钟
mov r3,#9
djnz r3,$ //延时约20us
mov r0,#0xaa //存放要发送的数据
mov r1,#8 //循环8次
fssj: mov a,0x90 //发送数据
anl a,#1
// jz fq //主机禁止发送则放弃
mov a,r0 //发送数据
anl a,#1
rl a
mov 0x90,a
mov a,r0
rr a
mov r0,a
mov r3,#9
djnz r3,$ //延时约20us
mov 0x90,#0 //时钟线拉低
mov r3,#19
djnz r3,$ //延时约40us
mov 0x90,#1 //释放时钟
mov r3,#5
djnz r3,$ //延时约11us
djnz r1,fssj
mov a,0x90
anl a,#1
// jz fq //主机禁止发送则放弃
mov 0x90,#2 //输出校验位
mov r3,#9
djnz r3,$ //延时约20us
mov 0x90,#0 //时钟线拉低
mov r3,#19
djnz r3,$ //延时约40us
mov 0x90,#1 //释放时钟
mov r3,#9
djnz r3,$ //延时约20us
mov a,0x90
anl a,#1
// jz fq //主机禁止发送则放弃
mov 0x90,#2 //输出停止位
mov r3,#9
djnz r3,$ //延时约20us
mov 0x90,#0 //时钟线拉低
mov r3,#19
djnz r3,$ //延时约40us
mov 0x90,#1 //释放时钟
mov r3,#24
djnz r3,$ //延时约20us
RET
END
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-09-18
靠,提交错了,点成不登陆提交了,我不想当雷锋啊,LZ明鉴啊

看见一个搞混合编译的真爽,帮你改过来了,编译正常了,都是一些小问题,你注意对比看一下
另外你很多地方出现了MOV r3,9 MOV r3,19,这样的句子,不应该用直接寻址啊,跟你的注释也对不上,应该是MOV r3,#9 MOV r3,#19,帮你改过来了一部分,你再检查看看
学混合编译话,看看《keil c51 编译器用户手册》这本书,网上很容易下,里面几个混合编译的例子很详细,格式很规范,无参数传递,有参数传递,有参数返回的都有例子,仔细看看吧本回答被提问者采纳

...sendAA.asm(2): error A45: UNDEFINED SYMBOL (PASS-2)
?PR?sendAA?ASM1 SEGMENT CODE PUBLIC sendAA RSEG ?PR?sendAA?ASM1 sendAA:mov a,0x90 anl a,#1 jz sendAA \/\/等待时钟线为高 mov r0,#24 djnz r0,$ \/\/延时约50微秒 mov a,0x90 anl a,#1 jz sendAA \/\/时钟信号是否仍旧为高 mov a,0x90 anl a,#...

相似回答
大家正在搜