標題: 51單片機C語言調用匯編子程序的簡便方法 [打印本頁]

作者: 新洲羅遠    時間: 2020-4-23 06:59
標題: 51單片機C語言調用匯編子程序的簡便方法
1、在匯編文件中,程序前邊加上如下三句話就可以:
PUBLIC   _delay, _binrlc       ;定義公用子程序名,這里定義了兩個子程序(有下劃線)
LUOYUAN  SEGMENT CODE  ;程序段命名,LUOYUAN,叫啥名都可以
RSEG     LUOYUAN

下邊放子程序(程序名要下劃線,其它標號不要下劃線)

;匯編語言文件
PUBLIC  _delay, _binrlc;定義子程序名
LUOYUAN  SEGMENT CODE  ;命名LUOYUAN的程序段
RSEG     LUOYUAN

_delay:  MOV P1,#55H
             MOV R2,#30H
        DJNZ R2,$
        RET
;**********************************************;P3.2  74LS595鎖存口
;P3.3  74LS595時鐘口;P3.4  74LS595數據口
;P3.5  工作指示
;**********************************************
_binrlc: CLR P3.2                ;鎖存
         MOV A,R7
         ;XRL A,#0FFH    ;顯示要取反
         MOV R3,#8H        
binrl1: CLR  P3.3       ;時鐘位下降
        RLC A           ;連同進位左移1位
            MOV P3.4,C      ;進位到直接尋址位
        SETB P3.3       ;時鐘位上升
        DJNZ R3,binrl1

        SETB P3.2       ;鎖存
                CPL P3.5   ;取反閃亮
        RET
END


2、在C程序中,先聲明外部函數,不然編譯找不到函數錯誤,然后就如同C程序中調用C函數一樣

     binrlc(SBUF);   不要下劃線。
本程序89C51接收PC 串口來的數據,送到74LS595驅動的LED顯示。

//89C51串口0方式驅動74LS595
// 11.0532
// P3_4控制鎖存
#include "AT89X51.h"

void initUart(void)
{
TMOD|=0x20;
SCON=0x50;
PCON|=0x80;
TH1=0xfa;
TL1=0xfa;
TR1=1;
ES=1;
}
extern void binrlc(char);      //外部函數聲明

void uart(void) interrupt 4
{
if(RI)
{
    RI=0;
     binrlc(SBUF);    //調用匯編子程序,方式同C子程序一樣
         P1= SBUF;
}
else
    TI=0;
}
void main(void)
{
initUart();
EA=1;
while(1);
}

以上Keil代碼工程下載::
Keil工程文件.7z (13.52 KB, 下載次數: 34)


作者: mkkop    時間: 2020-10-28 17:27
從C語言調用匯編語言中看到,從C語言傳遞數據到匯編語言里面的R7,可是沒有看到任何聲明R7的語句,請問我們怎么知道C語言的數據是傳給R7的?為什么不是R0或R5之類的寄存器???
作者: 188610329    時間: 2021-8-29 01:32
mkkop 發(fā)表于 2020-10-28 17:27
從C語言調用匯編語言中看到,從C語言傳遞數據到匯編語言里面的R7,可是沒有看到任何聲明R7的語句,請問我們怎 ...

規(guī)定,C語言傳參,Char的話, 第一變量 R7, 第二變量 R5, 第三變量 R3  short 的話,第一變量 R6,R7 第二變量R4,R5,第三變量 R2R3, long 的話 R4R5R6R7, 指針的話 R1R2R3 bit的話 C  返回值同理,
作者: csmyldl    時間: 2021-8-29 22:40
編譯出現A33的錯誤,下載的壓縮包沒有595匯編.asm,照上面的說明打了,編譯不能通過,無法驗證
作者: heicad    時間: 2021-11-26 01:25
csmyldl 發(fā)表于 2021-8-29 22:40
編譯出現A33的錯誤,下載的壓縮包沒有595匯編.asm,照上面的說明打了,編譯不能通過,無法驗證

樓主現在已經修復了
作者: madell    時間: 2021-11-26 10:50
heicad 發(fā)表于 2021-11-26 01:25
樓主現在已經修復了

您好怎么修復的?同樣的問題




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1