延时程序的书写:
以12MHZ为晶振的atm89s51单片机的机器周期为1us为例子
执行一次MOV需要1个机器周期----1us
执行一次DJNZ需要2个机器周期---2us
执行一次nop需要1个机器周期----1us
执行一次RET需要2个机器周期---2us
使用循环程序
实验任务一:
已知程序存储器中以TAB为起点地址的空间存放着0~9的平方值,累加器A中存放着一个0~9的十进制数据,要求用查表的方法获得A中数据的平方值
org 0000h
mov 30h, #0
mov 31h, #1
mov 32h, #2
mov 33h, #3
mov 34h, #4
mov 35h, #5
mov 36h, #6
mov 37h, #7
mov 38h, #8
mov 39h, #9
call start ;将0-9的数据依次放在30h-39h的位置上
start:
MOV R0,#30H ;初始化寄存器R0
MOV R2,#10
MOV DPTR,#TAB ;DPTR作为指针,指向TAB表的地址
LOOP:
MOV A, @R0 ;将寄存器R0中的数据传送到累加器A中
MOVC A, @A + DPTR;DPTR的地址加上A的偏移地址中的值传送到累加器A中
INC R0 ;R0加一,指向R0寄存器中存放的下一个值
DJNZ R2, LOOP ;循环10次
RET ;子程序结束
TAB:
DB 0,1,4,9,16,25,36,49,64,81// 将0-9的平方值放入TAB中
END
实验结果:debug验证查看: