//这是一个流水灯程序,主要是练练手,熟悉下汇编,
//之前都是用C编程,汇编接触得很少,写完这几行代码,
//发现汇编还是非常有意思的,以后会尝试写一写大型的汇编程序;
//张平,BUPT,to_zhangping@yahoo.com.cn
//V1.0,2009/6/11
//Crystal:12Mhz MCU:AT89S52
//显示数据:
BUFF1:
DB 00000000B,00011000B,00111100B,01111110B
DB 11111111B,11100111B,11000011B,10000001B
DB 10101010B,01010101B,11001100B,00110011B
DB 11110000B,00001111B,100110001,10000001B
ORG 0000H
LJMP MAIN
ORG 0080H
MAIN:
MOV R0,#0X00 ;计算地址偏移;
MOV R1,#0X0F ;计算循环次数;
MOV DPTR,#BUFF1 ;装入表格地址;
L1:
MOV A,R0 ;装入偏移地址;
MOVC A,@A+DPTR ;载入显示数据;
MOV P0,A ;输出显示数据;
LCALL DELAY_LONG ;调用延时;
INC R0 ;地址偏移加一;
DJNZ R1,L1 ;循环次数减一;
LJMP MAIN ;无限循环;
DELAY_LONG: ;DELAY 2*1.26S=2.52S
MOV R5,#2
LP00: ; (2+250*2)+2)*250=1.26S for 1Mhz SYSCLK(EG. 12MHZ CRYSTAL);
MOV R6,#250
LP01: ; EXECUTION TIME:(2+250*2)个时钟周期;
MOV R7,#250 ; 2 SYSCLK
DJNZ R7,$ ; 2 SYSCLK
DJNZ R6,LP01 ; 2 SYSCLK
DJNZ R5,LP00 ; 2 SYSCLK
RET
END
用户1547065 2009-6-14 14:12
用户518079 2009-6-13 14:46