1樓:生活如歌
1 p1口做輸出口,編寫程式,使p1口接的8個發光二極體l1—l8按16進位制加一方式點亮發光二極體。程式如下:
org 0540h
ha1s: mov a,#00h;a初值為0
ha1s1: jb p3.3,ha1s1;如果p3.3為1則等待(有脈衝變0一次)
mov r2,#20h;r2賦值為20
lcall delay;延時(去抖動)
jb p3.3,ha1s1;如果為1則返回繼續判斷
ha1s2: jnb p3.3,ha1s2;等待脈衝變為高電平(等待鍵釋放)
mov r2,#20h;r2重新賦值為20
lcall delay;延時
jnb p3.3,ha1s2;如果沒釋放則返回繼續等待
inc a;a加1
push acc;a入堆疊保護
cpl a;a取反
mov p1,a;a送p1
pop acc;a的值出棧恢復原值
ajmp ha1s1;返回程式開始處
delay: push 02h;02h(r2)入棧保護,因為下面的迴圈中都是20次(r2中的數,所以三次入棧),不過這個程式這樣寫真是很彆扭
delay1: push 02h
delay2: push 02h
delay3: djnz r2,delay3
pop 02h
djnz r2,delay2
pop 02h
djnz r2,delay1
pop 02h
djnz r2,delay
retend
二、把上面的要求p3.3輸入替換成int0外部中斷輸入,寫個完整的彙編程式,其他要求不變!
org 0000h
ljmp main
org 0013h
ljmp zdx1
org 0100h
main: setb ex1
setb ea
mov a,#00h
mov p1,#0ffh
sjmp $
zdx1: inc a
push acc
cpl a
mov p1,a
pop a
retiend
2樓:匿名使用者
p3.3是外中斷1,不是0.
org 00h
ajmp main
org 13h
ajmp ex1int
org 30h
main:
setb ea
setb ex1
setb it1
main1:
mov p1,r0
cjne r0,#0,main1
mov r0,#0
ajmp main1
ex1int:
inc r0
retiend
3樓:匿名使用者
org 0000h ; protues**通過jmp main
org 0003h
int00: inc a ; int0 中斷 計數cpl a
mov p1,a ; p1 輸出顯示 計數cpl a
reti
main: mov sp, #7fh ; 初始化設定setb it0 ; 開中斷
setb ex0
setb ea
sjmp $end
微控制器C語言程式設計,51微控制器C語言程式設計
使用兩個定時器或一個定時器中使用兩個計數都能滿足你的要求。建議使用一個定時器和一個計數器即可,如計數器為i,則if i 測溫定時 0 溫度測量 if i 步進電機定時 0 步進電機控制 注 此時要求兩個控制模組的定時步長是一致,比如都是1ms 設定一個比較小的定時間隔,例如1ms,用靜態變數累加,比...
微控制器組合語言程式設計,全國微控制器組合語言程式設計師
org 0000h main mov dptr,3000h clr r0 clr r1 clr r2 mov r3,100 loop mov a,dptr clr c cjne a,0h,loop1 inc r0 djnz r3,loop loop1 rl a jc fushu inc r1 djn...
微控制器彙編程式出錯
圖太不清晰了 問題可能在p0口的上拉電阻上 過小了 執行時暫停下,看p0口的邏輯電平。再一個就是檢查 網路標號了 低階錯誤 ls,對此程式而言,好像延時沒有必要!程式,我看沒問題,就看你電路的連線了。我proteus剛關掉,我就不試了,關注該問題進展。怎麼沒見你寫對數碼管的選址指令啊?數碼管顯示一位...