帮忙看下这个单片机汇编程序

来源:百度知道 编辑:UC知道 时间:2024/05/21 22:57:34
ESCOM:MOV DPH,78H
MOV DPL,77H
MOVX A,@DPTR
CLR TI
MOV SBUF,A
MOV A,DPH
CJNE A,76H,END1
MOV A,DPL
CJNE A,75H,END1
CLR ES
CLR ET1
CLR TR1
POP ACC
POP DPH
POP DPL
RETI
END1: INC 77H
MOV A,77H
JNZ END2
INC 78H
END2: SJMP ESCOM

具体是如何实现把数据块发送出去的 (78H)=20H (77H)=00H (76H)=20H (75H)=20H
另外F0是什么来的..答得好+分
这个是串口通信的程序 里面有一条指令 WAIT:JNB F0,WAIT4 这里F0是什麽来的

首先:ESCOM:MOV DPH,78H
MOV DPL,77H
将DPTR装入片外数据地址为2000H
MOVX A,@DPTR将2000H处的数据取给A寄存器
CLR TI
MOV SBUF,A
清发送标志位并把这个数据(2000H处)存入缓存(SBUF)并发送出去
MOV A,DPH
CJNE A,76H,END1
接下来判断DPH中的(片外数据)高位地址是否到达待发送数据块末尾
MOV A,DPL
CJNE A,75H,END1
同理,判断DPL中的(片外数据)低位地址是否到达待发送数据块末尾
此处在刚开始时:A中(即DPL(也就是77H))的地位地址为00H,未到数据块末尾的20H(为75H中的数据)
则跳转到END1处执行
END1: INC 77H
MOV A,77H
这两句即数据块当前低位地址加一(使操作指向下一数据)
JNZ END2
INC 78H
END2: SJMP ESCOM
这三句使程序跳转到开头,继续以上述方式发送第二个数据
(这里有点不明白,本人觉得这三句可以直接使用一个SJMP ESCOM实现就好了,那个JNZ END2 在整个数据块传送期间都在执行的,因为上一句MOV A,77H中A一直不为零,所以INC 78H这一句形同虚设,可能是本人水平有限看不出深意)
当数据从片外的2000H一直传送到2020H以后,
MOV A,DPH
CJNE A,76H,END1
MOV A,DPL
CJNE A,75H,END1
这两句的跳转都不会执行
于是
CLR ES
CLR ET1
CLR TR1
POP ACC
POP DPH
POP DPL
RETI
清各个中断使能位
并恢复各个寄存器
至于你说得F0 ???,不知道你指的是什么,恕我无能为力