|
;51單片機(jī)入門程序10
;工程名稱:用查表指令MOVC A,@A+DPTR實(shí)現(xiàn)P1端口LED的全亮全滅
;編寫日期:2009.7.4 ;編寫者:藍(lán)柳柳 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ORG 0000H
MAIN: MOV R7,#0 ;查表程序要用到軟件計(jì)數(shù)器來計(jì)調(diào)出表中數(shù)據(jù)的次數(shù)(或個(gè)數(shù)) ;但是在用軟件計(jì)數(shù)器前先清零,這是給軟件計(jì)數(shù)器R7清零
MOV DPTR,#LIULIU ; 把表格的首地址放入寄存器DPTR, ;注意了DPTR里的地址是永恒不變的
LOOP:MOV A,R7 ;把軟件計(jì)數(shù)器里的數(shù)據(jù)送給累加器A,為查表作些準(zhǔn)備
MOVC A,@A+DPTR ;查表,把查到的數(shù)據(jù)送到A
MOV P1,A ;把A里的數(shù)送到P1端口顯示
ACALL YS ;調(diào)用延時(shí)子程序,顯示一小段時(shí)間 INC R7 ;軟件計(jì)數(shù)器自動(dòng)加1
CJNE R7,#2,LOOP ;R7里的數(shù)到2了沒,到了順序往下運(yùn)行,沒到轉(zhuǎn)移到LOOP處
MOV R7,#0 ;軟件計(jì)數(shù)器清零,也就是上面程序已經(jīng)調(diào)出表里的最后一個(gè)數(shù)據(jù)
AJMP LOOP ;回到LOOP處重新把表里的第一個(gè)數(shù)調(diào)出來顯示
LIULIU: DB 00000000B,11111111B ;DB 00H ,0FFH 注意了如果是用十六進(jìn)制表示時(shí),#號(hào)后面不能 ;直接跟十六進(jìn)制里面的那幾個(gè)英文字母,要用0隔開
YS: ;延時(shí)子程序,如果是用12MHZ作為時(shí)鐘電路的話,那么延時(shí)時(shí)間為1秒
MOV R1,#10
D: MOV R2,#200 T: MOV R3,#248
DJNZ R3,$
DJNZ R2,T DJNZ R1,D
RET ;子程序返回指令,子程序的設(shè)計(jì)一般都是因?yàn)橹鞒绦蛞{(diào)用它, ;調(diào)用完是要返回到主程序繼續(xù)運(yùn)行下一個(gè)語句的
END
|
|