TA的每日心情 | 开心 2017-8-18 10:05 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
刚学51不久,汇编这几天才开始。下面来个练手的。开始用C写的,就这么两行字居然占了400字节,看来C编小程序没有优势呀!昨天用汇编写了一个,200多字节,想着想着还是不爽,今天琢磨着优化了一下,一开始是126字节,接着124、123,最后115了。实在是压榨不了它了,哪位高手来支支招,看还能缩减不?
附上最终的源程序:
EN BIT P1.2
RW BIT P1.1
RS BIT P1.0
ORG 0000H
LJMP START
START: MOV SP,#60H
LCDINT: CLR RW ;没有读这一操作,所以读写标志位常设为写
CLR RS ;写指令
MOV A,#01H ;清屏
ACALL WRBYT
LOOP: CLR RS ;写指令
MOV A,#38H ;8位总线方式,双行5*7点阵字符
ACALL WRBYT
MOV A,#06H ;设置文字不移动
ACALL WRBYT
MOV A,#0CH ;开显示,无光标,不闪烁
ACALL WRBYT ;
MOV A,#80H ;写第一行起始地址
ACALL WRBYT
SETB RS ;写数据
MOV DPTR,#CHR1;调第一行字符串首地址
LCALL WRITE
CLR RS ;写指令
MOV A,#0C0H ;第二行起始地址
ACALL WRBYT
SETB RS ;写数据
MOV DPTR,#CHR2;调第二行字符串首地址
LCALL WRITE
LJMP LOOP
WRITE: MOV R3,#16
WCHAR: MOV A,#0
MOVC A,@A+DPTR;调对应位置字符内容
ACALL WRBYT ;把调用的字符写入LCD
INC DPTR ;字符地址加1
DJNZ R3,WCHAR ;如果这一行没有写完,返回到WRCHR继续写。
RET
WRBYT: LCALL DELLAY
MOV P0,A
SETB EN
CLR EN
RET
DELLAY: MOV R4,#20
DJNZ R4,$
RET
CHR1: DB " Hi! welcome to "
CHR2: DB "www.shoudian.org"
END |
|