找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5274|回复: 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 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏7 分享淘帖 顶1 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表