1樓:匿名使用者
mov @r2, a ; 把a中的內容放入r2所指向的儲存單元中
嗯, 上面這行是錯的, 一時沒注意
應該用@r0 @r1才能間接訪問
mov b,a
mov a,r2
mov r0,a
mov a,b
mov @r0,a
微控制器技術***
315840913
2樓:
這題很容易讓人使用mov @r2, a 這條指令。事實上,mov @r2, a 這條指令是非法的。因為指令中的r只能是r0,或者r1。
給出參考**如下:
xch a, r2;先講兩個暫存器內容調換mov r0, a;調換後的值暫放在r0xch a, r2;取回原數
mov @r0, a; 把a中的內容放入r0所指向的儲存單元中還可以:
mov r0,a;暫存a於r0
mov a,r2;
mov r1,a;完成r2的值賦給r1
mov a,r0;將原來的a值取回
mov @r1,a; 把a中的內容放入r1所指向的儲存單元中還可以利用堆疊
push acc;先將a值壓入堆疊
mov a,r2;
mov r1,a;完成r2的值賦給r1
pop acc;將原來的a值取回
mov @r1,a; 把a中的內容放入r1所指向的儲存單元中
3樓:匿名使用者
mov b,a
mov a,r2
mov r0,a
mov a,b
mov @r0,a
4樓:做而論道
xch a, r2
mov r0, a
xch a, r2
mov @r0, aend
微控制器基礎:將r1中的資料傳送到以r2中內容為位址的儲存單元中
5樓:修者世界
將r1的資料 傳送到以r2中內容為位址的儲存單元中,要用到間址定址方式,需要借助r0(r1)來實現,方法如下:
mov a,r2
mov r0,a
mov a,r1
mov @r0,a
或者:mov 00h,02h
mov a,r1
mov @r0,a
6樓:六弦七品
暫存器間接定址只針對r0和r1,樓上電大的朋友還真不了解微控制器,暫存器之間也不能直接傳遞資料的。不過樓主,這道題我認為沒什麼意思,你的意思是用一條mov指令實現這個功能?如果有人行,我只有感嘆微控制器白學了,定址方式本來就受限的微控制器,把位址存在r2中幹什麼?
如果非要實現這個,只有中轉了
mov a,r2
mov r0,a
mov a,r1
mov @ro,a
7樓:依然范特奚
看你的問題好像是暫存器間接定址
mov @r2,r1
你比我還要不懂= =!
我電大,
微控制器是弱項,
不過簡單點的我還是懂的= =、
暫存器間接定址是運算元存放在暫存器單元中,它的位址沒有在指令中直接給出,
而是存放在暫存器中,
通過尋找置頂的暫存器,
取出儲存單元位址,
從而得到運算元,因此稱為暫存器間接定址
暫存器間接定址也需要以暫存器符號的形式表示,並且在暫存器名稱前面加字首「@」以示與暫存器定址方式區別上面是我照書上打的,還有你提問的時候,請選對分類,你這種程式設計問題,問 作業系統/系統故障已經是錯誤的了
那就是你題目不明確意思,我就看出是暫存器間接定址
8樓:匿名使用者
^_^,這個簡單
mov a,r1
mov r1,r2
mov @r1,a
mcs51微控制器程式設計 將下列20個有符號數存放到微控制器內部ram從40h開始的單元 80
9樓:六十七年
table: db 05h,08h,20h,45h,0ach,0fh,0ddh,0bh,3ah,2dh
db 01h,15h,00h,37h,0eh,88h,43h,02h,10h,0bh
mov dptr,#table
mov r0, #40h //存放陣列資料的起始位址
mov r1, #60h //存放符合條件的陣列資料的起始位址
mov r2, #0 //符合條件的資料的個數
mov r3, #0 //符合條件的資料累加值的高8位
mov r4, #0 //符合條件的資料累加值的低8位
mov r5, #0 //計算從陣列中獲取的資料的個數
loop:
cjne r5,#14h,n_over //判斷獲取的數量是否達到20個,沒有則繼續跳到n_over
sjmp over //判斷獲取的數量達到20個,跳到over結束
n_over:
//將下列20個有符號數存放到微控制器內部ram從40h開始的單元中
mov a,r5
movc a,@a+dptr //取table中的資料放入累加器a
mov @r0, a //將累加器a中的資料(陣列中的資料)寫入r0代表的位址中
inc r0 //r0加1,指向陣列資料存放的下乙個位址
inc r5 //r5加1,為取table中的下乙個資料做準備
clr c //清進製/借位標誌位
cjne a,#30h,n_eq //判斷累加器a中的資料是否等於30h,不等於則跳到n_eq
sjmp loop
//統計出大於等於0 <= xi<= 2fh的資料個數,並將結果儲存在r2中;
n_eq: //參考
jc lt_30h //有借位則跳到lt_30h,表示資料範圍為0~2fh
sjmp loop //不在要求範圍內,跳到loop取下乙個資料
lt_30h:
inc r2 //符合條件的數量加1
//將0 <= xi<= 2fh的資料依次儲存到ram從60h開始的單元中
mov @r1, a //將符合條件的資料寫入r1代表的位址中
inc r1 //r1加1,指向有效資料存放下乙個位址
//計算出0 <= xi<= 2fh的所有資料的和,並將結果儲存到r3,r4中(r3存放和的高8位,r4存放和低8位)
clr c //清進製/借位標誌位
add a,r4 //將符合條件的資料累加
mov r4,a //將類加後的資料低8位放入r4
jnc loop //沒有進製則跳轉,有進製說明累加低8位累加和大於ff
inc r3 //高八位和加1
sjmp loop
over:
....
這種問題你完全可以參考常用51微控制器彙編指令
微控制器復位r2對應的儲存單元位址02h 那麼psw=?
10樓:六十七年
工作暫存器有4組,每組都是8個工作暫存器r0~r7,通過psw中的rs1、rs0兩位來選擇使用哪一組版
,如果不選,默權認是選擇第0組。
rs1rs0組合為00時,選中第0組工作暫存器,r0~r7位址為00h~07h;
rs1rs0組合為01時,選中第1組工作暫存器,r0~r7位址為08h~0fh;
rs1rs0組合為10時,選中第2組工作暫存器,r0~r7位址為10h~17h;
rs1rs0組合為11時,選中第3組工作暫存器,r0~r7位址為18h~1fh;
也就是說你的rs1rs0組合為00(rs1 bit4 rs0 bit3)
這個應該是考察暫存器組的選擇吧,所以猜測psw值應該為0(復位後其他位應該是0)
51微控制器中ACC怎麼用,51微控制器中ACC怎麼用??
a和acc的實質是一樣的,對應位址都是0e0h,只是彙編在使用時,在格式上取了兩個名字。你看看它們的使用方法,有的地方用a,有的地方用acc,會發現有一定的規律。當其要進行位表示時,必須用acc,比如要寫成acc.7,而不能寫成a.7 但當其作為8位二進位制數時,acc和a都能用 但還是有區別 比如...
關於51微控制器的中斷問題,51微控制器外部中斷0的問題
優先中斷,就是在執行乙個中斷的時候,又來了乙個中斷 如果新來的中斷,其優先順序高於正在執行的中斷,那麼就會暫停現在的中斷而去執行新來的中斷,等這個新中斷執行完之後再會回去繼續執行剛才那個沒執行完也就是那個被打斷的中斷 如果新來的中斷,其優先順序不如正在執行的中斷的優先順序高,那麼程式會繼續執行這個中...
51微控制器SBUF什麼意思,51微控制器中SBUF中讀出的資料型別
define 巨集定義 unsigned乙個資料型別 還有就是signed 乙個是有符號 乙個是無符號 int資料型別 sbuf是串列埠接送或者傳送資料暫存器 define 是定義乙個常量 unsigned char 定義乙個字元型變數,unsigned int 定義乙個整數型變數購買sea wol...