汇编语言 中文注释(兄弟答辩用的,谢过诸位了先)

注释的要尽量详细些,最好每行都有注释,兄弟是答辩用的,可是上学的时候没努力,有了程序竟也是看不懂,谢谢!

LCD串口写子程序:
;DA_IN: 数据或指令
;RS_STU: 数据指令选择
;WR_COUNT1: 计数器1
;WR_COUNT2: 计数器2
SERIAL_WR: PUSH ACC
MOV A,DA_IN
SETB CS
MOV WR_COUNT1,#05H
SETB STD ;1
SERIAL_WR1: CLR SCLK
SETB SCLK
DJNZ WR_COUNT1,SERIAL_WR1
CLR STD ;RW
CLR SCLK
SETB SCLK
JNB RS_STU,CLR_RS
SETB STD ;写数据
SJMP SETB_RS
CLR_RS: CLR STD ;写指令
SETB_RS: CLR SCLK
SETB SCLK
CLR STD ;0
CLR SCLK
SETB SCLK
MOV WR_COUNT1,#02H
SERIAL_WR2: MOV WR_COUNT2,#04H
SERIAL_WR21:RLC A
MOV STD,C
CLR SCLK
SETB SCLK
DJNZ WR_COUNT2,SERIAL_WR21
MOV WR_COUNT2,#04H
CLR STD ;0
SERIAL_WR22:CLR SCLK
SETB SCLK
DJNZ WR_COUNT2,SERIAL_WR22
DJNZ WR_COUNT1,SERIAL_WR2
CLR SCLK
CLR CS
LCALL DELAY
POP ACC
RET

另一个
SUB1:JB BUSY,SUB1
MOV P0,A
NOP
SETB REQ
HE3:JNB BUSY,HE3
CLR REQ
RET
HANZI:
MOV A,#0F0H
ACALL SUB1
MOV A,#02H
ACALL SUB1
MOV A,#00H
ACALL SUB1
MOV A,#10H
ACALL SUB1
MOV A, #01H
ACALL SUB1
RET
ASC:
MOV A,#0F1H
LCALL SUB1
MOV A,50H
LCALL SUB1
MOV A,51H
LCALL SUB1
MOV A,52H
LCALL SUB1
RET

A\D转换
程序设计
AD: MOV 20H,#00H
MOV 21H,#00H
CLR CLK
MOV R7,#0AH
CLR CS
NOP
LP01: MOV C,DAT
MOV A,20H
RLC A
MOV 20H,A
MOV A,21H
RLC A
MOV 21H,A
SETB CLK
CLR CLK
DJNZ R7,LP01
SETB CS
MOV 22H,20H
MOV 23H,21H
RET
change: LCALL AD
MOV 40H,20H
MOV 41H,21H
;1
MOV A,41H
RRC A
MOV 41H,A
MOV A,40H
RRC A
MOV 40H,A
; 2
MOV A,41H
RRC A
MOV 41H,A
MOV A,40H
RRC A
MOV 40H,A
MOV 41H,40H
MOV 40H,#00H
LCALL AD
MOV 40H,20H
MOV 41H,21H
MOV 40H,20H
MOV 41H,21H
MOV 41H,40H
MOV 40H,#00H
MOV A,#5
MOV B,41H
mul ab
mov 33h,b
ret

总共应该是三段,谢过了诸位先!我感觉100分有点少,但是分数悬赏的时候100分是最多了.有劳了!
里面可能也会有错误,请帮忙指正,谢谢

DA_IN: 数据或指令
;RS_STU: 数据指令选择
;WR_COUNT1: 计数器1
;WR_COUNT2: 计数器2
SERIAL_WR: PUSH ACC;A入堆栈保护
MOV A,DA_IN
SETB CS;将CS置1(程序中未定义CS,故不知其作用)
MOV WR_COUNT1,#05H;计数器1置初值5
SETB STD ;将STD置1,标识写数据(程序中未定义STD,故不知其作用,由后面推测可能是用于标识写数据和指令的)
SERIAL_WR1: CLR SCLK;将SCLK置0(程序中未定义CS,故不知其作用)
SETB SCLK;将SCLK置1
DJNZ WR_COUNT1,SERIAL_WR1;计数器1不为0转SERIAL_WR1处
CLR STD ;将STD置0,标识写指令
CLR SCLK;将SCLK置0
SETB SCLK;将SCLK置1
JNB RS_STU,CLR_RS;RS_STU为0(选择为指令)则转CLR_RS处
SETB STD ;RS_STU为1(选择为数据)将STD置1,标识写数据
SJMP SETB_RS;转SETB_RS处
CLR_RS: CLR STD ;将STD置0,标识写指令
SETB_RS: CLR SCLK;将SCLK置0
SETB SCLK;将SCLK置1
CLR STD ;将STD置0
CLR SCLK;将SCLK置0
SETB SCLK;将SCLK置1
MOV WR_COUNT1,#02H;
SERIAL_WR2: MOV WR_COUNT2,#04H;计数器1置初值4
SERIAL_WR21:RLC A;A带进位位循环右移一位
MOV STD,C;C送入STD(即A的最高位送入STD)
CLR SCLK;将SCLK置0
SETB SCLK;将SCLK置1
DJNZ WR_COUNT2,SERIAL_WR21;计数器2不为0转SERIAL_WR21处
MOV WR_COUNT2,#04H;计数器2为0则再置初值4
CLR STD ;将STD置0
SERIAL_WR22:CLR SCLK;将SCLK置0
SETB SCLK;将SCLK置1
DJNZ WR_COUNT2,SERIAL_WR22;计数器2不为0转SERIAL_WR22处
DJNZ WR_COUNT1,SERIAL_WR2;计数器2为0但计数器1不为0转SERIAL_WR2处
CLR SCLK;计数器1为0则将SCLK置0
CLR CS;将CS置0
LCALL DELAY;调用子程序DELAY(延时)
POP ACC;恢复A
RET;返回

另一个
SUB1:JB BUSY,SUB1;设备忙则等待
MOV P0,A;由P0口输出A中数据
NOP ;空操作
SETB REQ;将REQ置1 (程序中未定义REQ,故不知其作用,可能是所用设备中的一个状态标志位)
HE3:JNB BUSY,HE3 ;设备不忙则转HE3处
CLR REQ ;将REQ置0
RET ;返回
HANZI:
MOV A,#0F0H ;数据0F0H送A
ACALL SUB1 ;调用子程序SUB1(输出数据0F0H)
MOV A,#02H ;数据02H送A
ACALL SUB1 ;调用子程序SUB1(输出数据02H)
MOV A,#00H ;数据00H送A
ACALL SUB1;调用子程序SUB1(输出数据00H)
MOV A,#10H ;数据10H送A
ACALL SUB1;调用子程序SUB1(输出数据10H)
MOV A, #01H ;数据01H送A
ACALL SUB1;调用子程序SUB1(输出数据01H)
RET;返回
ASC:
MOV A,#0F1H ;数据0F1H送A
LCALL SUB1 ;调用子程序SUB1(输出数据0F1H)
MOV A,50H ;50H单元中数据0F1H送A
LCALL SUB1;调用子程序SUB1(输出50H单元中数据)
MOV A,51H ;51H单元中数据0F1H送A
LCALL SUB1 ;调用子程序SUB1(输出51H单元中数据)
MOV A,52H ;52H单元中数据0F1H送A
LCALL SUB1;调用子程序SUB1(输出52H单元中数据)
RET;返回

A\D转换
程序设计
AD: MOV 20H,#00H ;数据00H送20H单元
MOV 21H,#00H ;数据00H送21H单元
CLR CLK;将CLK置0
MOV R7,#0AH;;数据0AH送R7
CLR CS;将CS置0
NOP;空操作
LP01: MOV C,DAT;将DAT送入进位位C
MOV A,20H;将20H单元中数送入A
RLC A;A带进位位循环左移一位
MOV 20H,A;A中内容送入20H单元
MOV A,21H;将21H单元中数送入A
RLC A;A带进位位循环左移一位
MOV 21H,A;A中内容送入21H单元(至此是将21H20H整体左移了一位,DAT状态移入20H单元的最低位)
SETB CLK;将CLK置1
CLR CLK;将CLK置0
DJNZ R7,LP01;R7不为0则转LP01处
SETB CS;将CS置1
MOV 22H,20H;20H单元内容送入22H单元
MOV 23H,21H;21H单元内容送入23H单元
RET;返回
change: LCALL AD;调用子程序AD(A\D转换)
MOV 40H,20H;20H单元内容送入40H单元
MOV 41H,21H;21H单元内容送入41H单元
MOV A,41H;41H单元内容送入A
RRC A;A带进位位循环右移一位
MOV 41H,A;A内容送入41H单元
MOV A,40H;40H单元内容送入A
RRC A;A带进位位循环右移一位
MOV 40H,A;A内容送入40H单元
MOV A,41H;41H单元内容送入A
RRC A;A带进位位循环右移一位
MOV 41H,A;A内容送入41H单元
MOV A,40H;40H单元内容送入A
RRC A;A带进位位循环右移一位
MOV 40H,A;A内容送入40H单元(至此41H40H单元内容整体右移了2位,或说是缩小了4倍)
MOV 41H,40H ;40H单元内容送入41H单元
MOV 40H,#00H;40H单元清0
LCALL AD;调用子程序AD(A\D转换)
MOV 40H,20H;20H单元内容送入40H单元
MOV 41H,21H;21H单元内容送入41H单元
MOV 40H,20H;20H单元内容送入40H单元
MOV 41H,21H;21H单元内容送入41H单元
MOV 41H,40H;40H单元内容送入41H单元
MOV 40H,#00H;40H单元清0
MOV A,#5;将数据5送入A
MOV B,41H;41H单元内容送入B
mul ab;A*B
mov 33h,b;积的高8位送入33H单元
ret;返回
温馨提示:答案为网友推荐,仅供参考
相似回答