1樓:匿名使用者
以下是個示範,依次切換到工作區0到3
org 0000h
sjmp main
org 0030h
main:
mov sp,#5fh ;將sp設定到60h以後的ram區mov a,#0
lcall setrn
lcall delay
mov a,#1
lcall setrn
lcall delay
mov a,#2
lcall setrn
lcall delay
mov a,#3
lcall setrn
lcall delay
sjmp $
setrn:
jnz setrn1 ;a=0工作區0clr rs0
clr rs1
retsetrn1:
jnz setrn2 ;a=1工作區1setb rs0
clr rs1
retsetrn2:
jnz setrn3 ;a=2工作區2clr rs0
setb rs1
retsetrn3:
jnz setrn1 ;a=3工作區3setb rs0
setb rs1
retdelay:
mov r0,#10
delay1:
mov r1,#100
djnz r1,$
djnz r0,delay1ret
2樓:藏在水中的人
利用 psw :程式狀態字暫存器的 rs1位與rs0位 選擇暫存器區 或者直接定址
sp的初值要跳過 暫存器使用的地址
位4-3: rs1-rs0:暫存器區選擇。
rs1 rs0 暫存器區 地址
0 0 0 0x00-0x07
0 1 1 0x08-0x0f
1 0 2 0x10-0x17
1 1 3 0x18-0x1f
3樓:做而論道
如果程式中要要到三組工作暫存器rn,如何切換?sp的初值是否要修改?
是要修改。
若要,如何修改?
mov sp, #nn ;nn的範圍:18h~7fh (51系列微控制器),注意留出堆疊空間。
微控制器的中斷問題,關於微控制器中斷的問題
那個中斷函式和主函式直接是什麼關係?為什麼寫在主函式後邊但是主函式又沒引用?中斷函式無需被顯式呼叫。當有相應的中斷產生時,程式會自動中止當前的執行 記錄位置,然後跳轉到相應的中斷入口處。而在中斷入口會進行二次跳轉,到程式中對應的中斷處理函式內並執行。中斷處理函式執行完畢返回後,跳回到剛才中止執行的位...
關於微控制器驅動三極體的問題,關於微控制器IO口控制三極體的問題
因為三極體基極電流較大。建議你換成mos管,比如2n7002,只需要極微小電流就可以驅動很大的輸出。 專解決學習難題 這裡的三極體是開關作用,不是放大作用,所以會這樣,驅動不夠,和你刪除程式無關。 單片的io口輸出高電平驅動的很低,是靠內部的上拉電阻供電,電流很小。而低電平的驅動能力就較大,所以你改...
關於微控制器中可位定址空間的問題
很簡單哦 51彙編指令集中,clr指令只有三種用法 clr a clr c clr bit 所以clr 00h中,00h只能表示位了 若是暫存器清零的話,應是mov 00h,0 繆嘉歆祈沉 51微控制器的位定址區問題書上寫著位定址區是20h 2fh,位地址00h 7fh,這不是超過這個位定址區了嘛,...