應用1:設有51應用系統連接如附圖。試說(shuō)明該系統分別執行如下程序段A和程序段B時(shí),與P1.0端口連接的LED如何顯示變化?對應程序段A和程序段B的顯示變化有何區別?
本文引用地址:http://dyxdggzs.com/article/201611/321807.htm程序段A:
LP: CPL P1.0
MOV R0,#0
DJNZ R0,$
JMP LP
程序段B:
LP: SETB P1.0
DJNZ R0,$
CLR P1.0
DJNZ R0,$
DJNZ R0,$
JMP LP
答:對應程序段A和程序段B,LED都將周期性變換亮滅狀態(tài)。每個(gè)亮滅變換周期內,對程序段A,LED持續亮的時(shí)間與持續滅的時(shí)間長(cháng)度相同;對程序段B,LED持續亮的時(shí)間是持續滅的時(shí)間長(cháng)度的2倍。程序段B時(shí)的LED亮滅周期約為程序段A時(shí)的LED亮滅周期的1.5倍。
應用2:設有51應用系統連接如應用1附圖,且系統所用晶振頻率為12MHz。試編寫(xiě)程序段應用51單片機的定時(shí)/計數器1實(shí)現連接在P1.0上的LED的顯示狀態(tài)每隔10秒鐘翻轉一次。
答:
MOV TMOD,#20H;T1定時(shí)方式2:8位自動(dòng)重裝入
MOV TH1,#(256-250) ;定時(shí)周期250us(對應12MHz晶振,每個(gè)機器周期=1us)
MOV TL1,TH1;
CLR TF1;清T1溢出標志
SETB TR1;啟動(dòng)T1計時(shí)
MOV R0,#0;R0用于累計T1溢出的次數
MOV R1,#0;R1用于累計R0達到200的次數
LP:JBC TF1,L1;如果TF1為1則清零TF1并轉去進(jìn)行溢出次數累計
JMP LP;循環(huán)等待T1溢出
L1:INC R0;累計T1溢出次數
CJNE R0,#200,LP;未達到200次則轉去等待下一次溢出
MOV R0,#0;確保R0的值在0~199之間
INC R1;累計時(shí)間達到50ms的次數(250us*200=50ms)
CJNE R1,#200,LP;累計時(shí)間未達到10s則轉去等待下一次溢出
MOV R1,#0;確保R1的值在0~199之間
CPL P1.0;累計時(shí)間已達到10s,則翻轉P1.0狀態(tài)1次(50ms*200=10s)
JMP LP;繼續循環(huán)累計時(shí)間
評論