发送程序
ORG 0000H
LJMP MAIN
ORG 0023H
LJMP COM_INT
ORG 1000H
MAIN: MOV SP,#53H ;设置堆栈指针
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位 78H对应的地址是#20H
WAIT1: JNB TI,WAIT1
CLR TI
MOV SBUF,77H ;发送首地址低8位 77H对应的地址是#00H
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 ; F0为0则转移
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
用串口调试助手 Assess port看得到的数如下:
20 00 20 40 00 00 00 00 00...........
显示的两个数应该是地址桢吧,为什么没有接收到数据桢呢?是不是没有进入中断?怎么才能进入中断?
MOV 78H,#20H
MOV 77H,#00H
MOV 76H,#20H
MOV 75H,#40H
这四句是给出的地址还是数据? |