单片机 > 单片机程序设计 > 详情

51单片机C语言调用汇编子程序的简便方法

发布时间:2023-10-24 发布时间:
|

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);

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STC89C52RC单片机的NRF24L01无线通信程序.收发一体