汇编高手请进(100分)

来源:百度知道 编辑:UC知道 时间:2024/06/06 00:03:13
从未接触过汇编语言,下面的代码虽然有注释,可是还是看不明白,可以帮我逐句解释一下吗,高分相送,谢谢!

TEST BIT 70H
ORG 0000h
MOV 1,#0FFH;开机延时
DJNZ 1,$
AJMP MAIN
ORG 0023h
LJMP COMM ;串口中断
ORG 0100H
MAIN:MOV SP,#5fH
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$串口初始化
mov TMOD,#20h ;T1: 工作模式2
mov PCON,#00h ;SMOD=1
mov TL1,#0FDH
mov TH1,#0FDH ;初始化波特率9600
mov SCON,#50h ;Standard UART settings
SETB REN ;允许接收
SETB TR1 ;T1开始工作
SETB ES ;开串口中断
SETB EA
CLR TEST

AJMP $
;$$$$$$$$$$$$$$$$$$$$
COMM:JB RI,GO
RETURN:RETI
GO:CLR RI
JB TEST,SEND
MOV A,SBUF
SWAP A
SETB TEST
RETI
SEND:MOV B,SBUF
ADD A,B
MOV P1,A
LCALL DY2MS
mov sbuf,A
jnb ti,$
clr ti
CLR TEST
RETI
;$$$$$$$$$$$$$$$$$$$$$ Delays
DY2MS:
MOV R7,#01
LOOP0:MOV R6,#00
DJNZ R6,$
DJNZ R7,LOOP
RET
END
好的,呵呵,还有我想知道这段代码51单片机都可以用吗?有没有什么型号的限制,如果有给我推荐个能用的型号,谢谢啦!

TEST BIT 70H ;用TEST代替位地址70H
ORG 0000h ;从0000h开始存放程序
MOV 1,#0FFH;开机延时 好像输少了个R
DJNZ 1,$ ;循环减数,延迟256us
AJMP MAIN ;跳转到MAIN
ORG 0023h ;
LJMP COMM ;串口中断
ORG 0100H
MAIN:MOV SP,#5fH ;设置堆栈指针
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$串口初始化
mov TMOD,#20h ;T1: 工作模式2
mov PCON,#00h ;SMOD=1
mov TL1,#0FDH ;设定定时/计数器T1
mov TH1,#0FDH ;初始化波特率9600
mov SCON,#50h ;Standard UART settings
SETB REN ;允许接收
SETB TR1 ;T1开始工作
SETB ES ;开串口中断
SETB EA
CLR TEST ;清除TEST位

AJMP $ ;动态停机,等待中断
;$$$$$$$$$$$$$$$$$$$$
COMM:JB RI,GO ;中断子程序,判断RI,为1跳转
RETURN:RETI ;为0,退出子程序
GO:CLR RI ;RI为1,将其清0
JB TEST,SEND ;TEST为1,跳转
MOV A,SBUF ;不为1,将SBUF内数据放入累加器A
SWAP A ;高低4位数据对换
SETB TEST ;TEST位置1
RETI ;退出子程序
SEND:MOV B,SBUF ;将SBUF内数据放入寄存器B
ADD A,B ;AB相加,和放入A
MOV P1,A ;A内数据在P1口输出
LCALL DY2MS ;调用延时子程序延迟2ms
mov sbuf,A ;数据由A内送到SBUF,开始发送到外部
jnb ti,$ ;判断TI位,为0未发