|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
在用comport debuger调试时,执行到RE_SUB中的JNB RI,$就下不去了,不知道是程序错了,还是板坏了,先把程序拿上来给大家看看,帮帮看,有什么地方错的
程序如下:
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV TMOD, #20H ;定时器初始化
MOV TH1, #0FDH
MOV TL1, #0FDH
MOV SCON, #0D0H ;串口初始化
MOV SP, #60H
CLR EA ;清中断
CLR ES
CLR ET1
SETB TR1
MOV R1, #30H;存数据首地址
MOV R0, #40H ;发送数据首地址
MOV 20H, #00H ;设定异或初值
MOV R4, #03H;设定判断次数
LOOP1: LJMP RE_SUB ;调接收子程序
MOV A, R2
CLR C
SUBB A, #0F1H ;是否为测试码0F1H
JNZ LOOP1 ;否,重新接收测试码
MOV R7, #0F1H ;是,回送测试码
LJMP TR_SUB ;调发送子程序
NOP
CLR SM2
CLR TB8
LOOP2: ACALL RE_SUB
MOV A, R2 ;接收数据长度
MOV R3, A ;存数据长度
ACALL RE_SUB ;接读OR写命令
NOP
MOV A, R2 ;判断是接收命令?
CLR C
SUBB A, #0F3H
JZ LOOP3 ;是,开始接收数据
NOP
MOV A, R2 ;判断是发送命令?
CLR C
SUBB A, #0F2H
JZ LOOP6 ;是,开始发送数据
NOP
ACALL LOOP5 ;都不是,发送错误命令
LOOP6: MOV A, @R0 ;开始发送数据
MOV R7, A
ACALL TR_SUB
INC R0
DJNZ R3, LOOP6 ;判断发送结束否?
ACALL RE_SUB;发送结束,接收结束命令
MOV A, R2
CLR C
SUBB A, #01H;判断是否为结束命令?
JNZ LOOP5;否,发送错误命令
ACALL LOOP7;是,通信结束
LOOP3: ACALL RE_SUB ;开始接数据
MOV A, R2
MOV @R1, A ;存内存
XRL A, 20H ;值异或
MOV 20H, A
INC R1
DJNZ R3, LOOP3 ;判断接收完否?
MOV R7, #0F4H ;发送数据接收完毕通知
ACALL TR_SUB
CLR SM2
CLR TB8
ACALL RE_SUB ;接收校验异或值
NOP
MOV A, R2
CLR C
SUBB A, 20H ;比较校验值
JNZ LOOP4
NOP
MOV R7, #00H ;发结束信号
ACALL TR_SUB
NOP
AJMP LOOP7
NOP
LOOP5: MOV R7, #0F5H ;发错误命令
ACALL TR_SUB
NOP
AJMP LOOP7
NOP
LOOP4: DEC R4
MOV A, R4
JZ LOOP5
NOP
MOV R7, #0F6H ;发重发命令
ACALL TR_SUB
NOP
ACALL LOOP3
NOP
LOOP7: AJMP $;通信结束
RE_SUB:
SETB REN ;接收子程序
SETB P3.0
JNB RI, $
NOP
CLR RI
MOV A, SBUF
MOV R2, A
RET
NOP
TR_SUB: SETB REN;发送子程序
SETB P3.1
JNB TI, $
NOP
CLR TI
MOV A, R7
MOV SBUF, A
RET
NOP
另附流程图
希望大家看看,给点意见。:)
|
-
-
10_285.doc
112.5 KB, 下载次数: 0
, 下载积分:
资产 -2 信元, 下载支出 2 信元
|