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)
2021-11-26 01:23 上傳
點擊文件名下載附件
|