;51单片机入门程序10
;工程名称:用查表指令MOVC A,@A+DPTR实现P1端口LED的全亮全灭
;编写日期:2009.7.4 ;编写者:蓝柳柳 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ORG 0000H
MAIN: MOV R7,#0 ;查表程序要用到软件计数器来计调出表中数据的次数(或个数) ;但是在用软件计数器前先清零,这是给软件计数器R7清零
MOV DPTR,#LIULIU ; 把表格的首地址放入寄存器DPTR, ;注意了DPTR里的地址是永恒不变的
LOOP:MOV A,R7 ;把软件计数器里的数据送给累加器A,为查表作些准备
MOVC A,@A+DPTR ;查表,把查到的数据送到A
MOV P1,A ;把A里的数送到P1端口显示
ACALL YS ;调用延时子程序,显示一小段时间 INC R7 ;软件计数器自动加1
CJNE R7,#2,LOOP ;R7里的数到2了没,到了顺序往下运行,没到转移到LOOP处
MOV R7,#0 ;软件计数器清零,也就是上面程序已经调出表里的最后一个数据
AJMP LOOP ;回到LOOP处重新把表里的第一个数调出来显示
LIULIU: DB 00000000B,11111111B ;DB 00H ,0FFH 注意了如果是用十六进制表示时,#号后面不能 ;直接跟十六进制里面的那几个英文字母,要用0隔开
YS: ;延时子程序,如果是用12MHZ作为时钟电路的话,那么延时时间为1秒
MOV R1,#10
D: MOV R2,#200 T: MOV R3,#248
DJNZ R3,$
DJNZ R2,T DJNZ R1,D
RET ;子程序返回指令,子程序的设计一般都是因为主程序要调用它, ;调用完是要返回到主程序继续运行下一个语句的
END
|