;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
|