看看我的程序有没有问题?汇编-〉C51(100分)

  • 主题发起人 hero761004
  • 开始时间
H

hero761004

Unregistered / Unconfirmed
GUEST, unregistred user!
WRIR EQU 73FFH;写指令
RDBY EQU 7BFFH;读状态
WRDT EQU 77FFH;写数据
RDATA EQU 7FFFH;读数据
S00 EQU 30H
S01 EQU 31H
ORG 0100H
begin
: MOV IE,#80H
MOV PSW,#00H
MOV SP,#70H
LCALL CLEAR
MOV S00,#12
MOV S01,#03H
MOV DPTR,#TEST
LCALL XS__
MOV S00,#32
MOV S01,#05H
MOV DPTR,#CHARA
LCALL XS__
MOV S00,#24
MOV S01,#06H
MOV DPTR,#CHARX
LCALL XS__
SJMP $;原地踏步


OPEN: CLR P1.6
ONN: LCALL BUSY
MOV DPTR,#WRIR;打开显示
MOV A,#3FH
MOVX @DPTR,A
MOV DPTR,#RDBY
MOVX A,@DPTR
JB ACC.5,ONN;显示确实打开否?
ret
BUSY:
MOV DPTR,#RDBY
MOVX A,@DPTR
JB ACC.7,BUSY
RET

CURSOR:
MOV A,S00;30h <3f为左边,〉3f为右边
LCALL OPEN
LCALL BUSY
MOV A,#0B8H;0page;设置页
ORL A,S01
MOV DPTR,#WRIR
MOVX @DPTR,A
LCALL BUSY
MOV A,S00
ORL A,#40h
MOV DPTR,#WRIR
MOVX @DPTR,A;设置列
RET
CLEAR:
MOV S00,#00H
MOV S01,#00H
CLE_2: LCALL CURSOR
MOV R4,#8
CLE_1: MOV R5,#8
CLE_0: LCALL CURSOR
MOV A,#00H
MOV DPTR,#WRDT
MOVX @DPTR,A
INC S00
DJNZ R5,CLE_0
DJNZ R4,CLE_1
INC S01
CLE_5: MOV S00,#00H
CLE_3: MOV A,S01
CJNE A,#08H,CLE_2
RET
XS__:
MOV R3,#8
MXTPAT:
LCALL CURSOR
MOV A,#00H
MOVC A,@A+DPTR
PUSH ACC
LCALL BUSY
MOV DPTR,#WRDT
POP ACC
MOVX @DPTR,A
INC S00
INC DPTR
DJNZ R3,MXTPAT
RET
test: db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
CHARA: DB 00H,00H,60H,1CH,13H,13H,1CH,60H
CHARX: DB 00H,00H,00H,63H,14H,08H,14H,63H
END
Keil C51对应子程序:
一下子程序,给我的汇编运行总有些不同,谁知道为什么?
#define WRIR 0x73ff
#define RDBY 0x7bff
#define WRDT 0x77ff
#define RDATA 0x7fff
void busy(void)
{
do
{
busylabel=XBYTE[RDBY];

busylabel>>=7;
}
while(busylabel==1);

}
void open(void)
{

P1_6=0;

busy();
XBYTE[WRIR]=0x3f;
do
{
busylabel=XBYTE[RDBY];
busylabel<<=2;
busylabel>>=7;
}
while(busylabel==1);
}

void cursor(void)
{
open();
busy();

s01=s01+0xb8;
XBYTE[WRIR]=s01;

busy();
s00=s00+0x40;
XBYTE[WRIR]=s00;
}
void clear(void)
{
s00=0;
s01=0;
for(i=0;i<8;i++)
{
for(j=0;j<64;j++)
{
cursor();
XBYTE[WRDT]=0;

s00++;
}
s00=0;
s01++;
}

}
 
顶部