|
新手来报到。。求解惑,汇编的。。不知道断点是在哪里
[复制链接]
ORG 0000H
LJMP MAIN
ORG 0023H
LJMP COM_INT
ORG 1000H
MAIN: MOV SP,#53H ;设置堆栈指针
ACALL RECEI ;调用接收子程序
HERE: SJMP HERE
RECEI: MOV R0,#78H ;设置地址接收区
MOV TMOD,#20H ;设置定时器/计数器工作方式
MOV TH1,#0F3H ;设置波特率
MOV TL1,#0F3H
MOV PCON,#80H ;波特率加倍
SETB TR1 ;开计数器
MOV SCON,#50H ;设置串行口工作方式1,接收
MOV IE,#90H ;开中断
CLR F0 ;标志位清“0”,先接收的是地址
CLR 7FH ;=1,表示接收数据结束
WAIT: JNB 7F,WAIT ;查询标志位等待接收
RET
COM_INT: PUSH DPL ;压栈, 保护现场
PUSH DPH
PUSH Acc
CLR RI ;接收中断标志位清“0”
JB F0,R_DATA ; 接收是数据?地址?F0=0地址
MOV A,SBUF ;接收的是地址帧数据
MOV @R0,A ;将地址帧送指定的寄存器
DEC R0
CJNE R0,#74H,RETN
SETB F0 ;置标志位, 地址接收完毕
RETN: POP Acc ;出栈, 恢复现场
POP DPH
POP DPL
RETI ;中断返回
R_DATA: MOV DPH,78H ;数据接收程序区
MOV DPL, 77H
MOV A,SBUF ;接收数据
MOVX @DPTR,A ;送指定的数据存储单元中
INC 77H ;地址加1
MOV A,77H ;判断当前接收的数据的地址
JNZ END2 ;是否应向高8位进位
INC 78H
END2: MOV A,76H
CJNE A,78H,RETN ; 是否最后一帧数据,否则继续
MOV A,75H
CJNE A,77H,RETN ;是最后一帧则各种标志位清“0”
CLR ES ;关闭串行口中断
CLR EA ;关中断
SETB 7FH ;设置数据接收完毕标志
SJMP RETN ;跳入返回子程序区
END
|
|