欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6261|回復: 5
收起左側

51單片機C語言調用匯編子程序的簡便方法

  [復制鏈接]
ID:716413 發表于 2020-4-23 06:59 | 顯示全部樓層 |閱讀模式
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)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:65297 發表于 2020-10-28 17:27 | 顯示全部樓層
從C語言調用匯編語言中看到,從C語言傳遞數據到匯編語言里面的R7,可是沒有看到任何聲明R7的語句,請問我們怎么知道C語言的數據是傳給R7的?為什么不是R0或R5之類的寄存器???
回復

使用道具 舉報

ID:624769 發表于 2021-8-29 01:32 | 顯示全部樓層
mkkop 發表于 2020-10-28 17:27
從C語言調用匯編語言中看到,從C語言傳遞數據到匯編語言里面的R7,可是沒有看到任何聲明R7的語句,請問我們怎 ...

規定,C語言傳參,Char的話, 第一變量 R7, 第二變量 R5, 第三變量 R3  short 的話,第一變量 R6,R7 第二變量R4,R5,第三變量 R2R3, long 的話 R4R5R6R7, 指針的話 R1R2R3 bit的話 C  返回值同理,
回復

使用道具 舉報

ID:235200 發表于 2021-8-29 22:40 | 顯示全部樓層
編譯出現A33的錯誤,下載的壓縮包沒有595匯編.asm,照上面的說明打了,編譯不能通過,無法驗證
回復

使用道具 舉報

ID:262 發表于 2021-11-26 01:25 | 顯示全部樓層
csmyldl 發表于 2021-8-29 22:40
編譯出現A33的錯誤,下載的壓縮包沒有595匯編.asm,照上面的說明打了,編譯不能通過,無法驗證

樓主現在已經修復了
回復

使用道具 舉報

ID:99987 發表于 2021-11-26 10:50 | 顯示全部樓層
heicad 發表于 2021-11-26 01:25
樓主現在已經修復了

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表