展开全部
以个例子给你参考,有两个文件,一是S.a51, 另一个是 M.C都加到KEILL的工程中编译。汇编中有两个函数,注意C的参数是如何传递给汇编的。
S.A51
$NOMOD51
NAME SENTBYTEUP
?PR?_SentByteUp?SENTBYTEUP SEGMENT CODE
?DT?_SentByteUp?SENTBYTEUP SEGMENT DATA OVERLAYABLE
PUBLIC _SentByteUp
RSEG ?DT?_SentByteUp?SENTBYTEUP
?_SentByteUp?BYTE:
px?040: DS 1
px?041: DS 1
RSEG ?PR?_SentByteUp?SENTBYTEUP
_SentByteUp:
USING 0
MOV A,R7
LOPU: RRC A
CLR SCKU
MOV DATU,C
SETB SCKU
DJNZ R5,LOPU
RET
?PR?_SentByteDn?SENTBYTEDN SEGMENT CODE
?DT?_SentByteDn?SENTBYTEDN SEGMENT DATA OVERLAYABLE
PUBLIC _SentByteDn
RSEG ?DT?_SentByteDn?SENTBYTEDN
?_SentByteDn?BYTE:
px?042: DS 1
px?043: DS 1
RSEG ?PR?_SentByteDn?SENTBYTEDN
_SentByteDn:
USING 0
MOV A,R7
LOPD: RRC A
CLR SCKD
MOV DATD,C
SETB SCKD
DJNZ R5,LOPD
RET
END
M.C
#include <reg51.h>
extern void SentByteUp(uchar c,uchar b); //申明使用外部函数
extern void SentByteDn(uchar c,uchar b); //申明使用外部函数
void main(void)
{
SentByteDn(a,8);// 调用汇编的函数
SentByteUp(a,8);// 调用汇编的函数
}
jinfahua@126.com QQ505308008
S.A51
$NOMOD51
NAME SENTBYTEUP
?PR?_SentByteUp?SENTBYTEUP SEGMENT CODE
?DT?_SentByteUp?SENTBYTEUP SEGMENT DATA OVERLAYABLE
PUBLIC _SentByteUp
RSEG ?DT?_SentByteUp?SENTBYTEUP
?_SentByteUp?BYTE:
px?040: DS 1
px?041: DS 1
RSEG ?PR?_SentByteUp?SENTBYTEUP
_SentByteUp:
USING 0
MOV A,R7
LOPU: RRC A
CLR SCKU
MOV DATU,C
SETB SCKU
DJNZ R5,LOPU
RET
?PR?_SentByteDn?SENTBYTEDN SEGMENT CODE
?DT?_SentByteDn?SENTBYTEDN SEGMENT DATA OVERLAYABLE
PUBLIC _SentByteDn
RSEG ?DT?_SentByteDn?SENTBYTEDN
?_SentByteDn?BYTE:
px?042: DS 1
px?043: DS 1
RSEG ?PR?_SentByteDn?SENTBYTEDN
_SentByteDn:
USING 0
MOV A,R7
LOPD: RRC A
CLR SCKD
MOV DATD,C
SETB SCKD
DJNZ R5,LOPD
RET
END
M.C
#include <reg51.h>
extern void SentByteUp(uchar c,uchar b); //申明使用外部函数
extern void SentByteDn(uchar c,uchar b); //申明使用外部函数
void main(void)
{
SentByteDn(a,8);// 调用汇编的函数
SentByteUp(a,8);// 调用汇编的函数
}
jinfahua@126.com QQ505308008
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询