ORG 0000H
LJMP MAIN
ORG 0023H
LJMP COM_INT
ORG 1000H
MAIN MOV SP,#53Hv ;设置堆栈指针
MOV 78H,#20H ;设置要发送的数据块的首、末地址
MOV 77H,#00H
MOV 76H,#20H
MOV 75H,#40H
ACALL TRANS ;调用发送子程序
SJMP $
TRANS: MOV TMOD,#20H ;设置定时器/计数器
MOV TH1,#0F3H ;设置计数器1初值
MOV TL1,#0F3H
MOV PCON,#80H ;波特率加倍
SETB TR1 ;打开计数器1
MOV SCON,#40H ;设置串行口工作方式
MOV IE,#00H ;先关闭中断,利用查询方式发送地址侲
CLR F0
MOV SBUF,78H ;发送首地址高8位
WAIT1 JNB TI,WAIT1
CLR TI
MOV SBUF,77H ;发送首地址低8位
WAIT2 JNB TI,WAIT2
CLR TI
MOV SBUF,76H ;发送末地址高8位
WAIT3 JNB TI,WAIT3
CLR TI
MOV SBUF,75H ;发送末地址低8位
WAIT4 JNB TI,WAIT4
CLR TI
MOV IE,#90H
MOV DPH,78H
MOV DPL,77H
MOVX A,@DPTR
MOV SBUF,A
WAIT JNB F0 WAIT
RET
COM_INT: CLR TI ;关发送中断标志位TI
INC DPTR ;数据指针加1,准备发送下个数据
MOV A,DPH ;判断当前被发送的数据的地址是不是末地址
CJNE A,76H,END1 ;不是末地址则跳转
MOV A,DPL ;同上
CJNE A,75H,END1
SETB F0 ;数据发送完毕,置1标志位
CLR ES ;关串行口中断
CLR EA ;关中断
RET ;中断返回
END1: MOVX A,@DPTR ;将要发送的数据送累加器,准备发送
MOV SBUF,A ;发送数据
RETI ;中断返回
END
问题:
1.为什么子程序里要先发一遍首末地址的高低8位?
2. COM_INT中断中,INC DPTR语句后DPTR这个数据指针指向了哪里?
3.CJNE这两句如果不是末地址就都不是末地址,要是末地址就都是末地址? |