久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12182|回復: 27
打印 上一主題 下一主題
收起左側

51單片機4*R0—R7疑問

  [復制鏈接]
跳轉到指定樓層
樓主
各位大大前輩51單片機4*R0—R7為什么要用R0—R7啊,還得提前改變狀態寄存器切換著用,好復雜的說。

我直接用0H—20H的直接地址不行嗎?
或者直接定義為R0—R28不更方便嗎?
求各位大大解惑!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:149988 發表于 2016-11-24 20:33 | 只看該作者

RE: 51單片機4*R0—R7疑問

本帖最后由 不倒翁.WZT 于 2016-11-25 06:50 編輯

R寄存器是51單片機工作寄存器區,它有一些特殊的功能。這種用法是51單片機匯編語言的一個硬性規定,不用R0—R28可能是匯編語言創建時的某些需要所決定的。
回復

使用道具 舉報

板凳
ID:111634 發表于 2016-11-24 21:20 | 只看該作者
本帖最后由 zl2168 于 2016-11-24 21:47 編輯

1. 51匯編只認R0~R7,不認R8~R28。
2. 4個工作寄存器區,只能打開一個。即當前只能用一個,都稱為R0~R7。至于那一組,由PSW中PSW.4、PSW.3決定。
3. 可用00H~1FH替代28個工作寄存器,但那是直接地址,不是工作寄存器。
4. R0~R7的操作指令與直接地址的操作指令是不同的,對同一存儲地址(即28字節單元)的操作指令碼、指令字節數和指令執行機周數都不同。51有專用于R0~R7的指令,R0~R7的操作指令比直接地址的操作指令,指令字節數少1字節,指令執行機周數少1機周。

以上摘自張志良編著《80C51單片機實用教程——基于Keil CProteus》高等教育出版社ISBN 978-7-04-044532-9, 用于學習51單片機原理,便于閱讀理解,便于自學。






回復

使用道具 舉報

地板
ID:123289 發表于 2016-11-25 01:49 | 只看該作者
R0-R7:對應00H-1FH,分4個頁面。由于指令表中與R0-R7相關的指令很多,所以用R0-R7就很方便,被大量使用。
問題是:你主程序中用R0-R7;中斷程序中也用R0-R7。
如此中斷返回主程序后R0-R7就被修改了,數據就不對了。為此中斷程序就要先將R0-R7壓堆棧,返回時再彈出。
有了頁面選擇,就方便了,不用壓棧彈棧了,就是修改R0-R7選擇頁面。
我的使用方法是:
主程序:R0-R7用0頁;
時間中斷:R0-R7用1頁;
串口中斷:R0-R7用2頁;
其它中斷:R0-R7用3頁。
當然會依據中斷級別作處理的。
對于C語言來說,無須考慮。
回復

使用道具 舉報

5#
ID:138155 發表于 2016-11-25 10:02 | 只看該作者
你要是能達到直接用地址讀取的話就牛逼了 也不用來提這個問題啦
回復

使用道具 舉報

6#
ID:149642 發表于 2016-11-25 21:04 | 只看該作者
wuyibin2003 發表于 2016-11-25 10:02
你要是能達到直接用地址讀取的話就牛逼了 也不用來提這個問題啦

怎么不可能直接地址讀取?
變量1 equ 00h
變量2 equ 1fh
//省略
mov a,變量1
不就讀取了????
回復

使用道具 舉報

7#
ID:149642 發表于 2016-11-25 21:07 | 只看該作者
yzwzfyz 發表于 2016-11-25 01:49
R0-R7:對應00H-1FH,分4個頁面。由于指令表中與R0-R7相關的指令很多,所以用R0-R7就很方便,被大量使用。
...

謝謝,我寫電腦軟件習慣了,都是直接定義變量,調用習慣了,這里讓設計者給設計了幾個變量,關鍵是還要切換,感覺挺麻煩的,不過你們回答的都非常好,非常專業,謝謝,我是在想,當初設計的時候為啥不弄個r0-r28省去切來切去。
回復

使用道具 舉報

8#
ID:149642 發表于 2016-11-25 21:11 | 只看該作者
zl2168 發表于 2016-11-24 21:20
1. 51匯編只認R0~R7,不認R8~R28。
2. 4個工作寄存器區,只能打開一個。即當前只能用一個,都稱為R0~R7。 ...

你很專業,也很用心回答,可是我還是不理解,有些指令雖然少了1個周期,但是切換也要一個周期啊,而且現在的一些單片機都優化了一些代碼后工作寄存器的專用指令已經不局限于這28個地址了。
回復

使用道具 舉報

9#
ID:149642 發表于 2016-11-25 21:18 | 只看該作者
yzwzfyz 發表于 2016-11-25 01:49
R0-R7:對應00H-1FH,分4個頁面。由于指令表中與R0-R7相關的指令很多,所以用R0-R7就很方便,被大量使用。
...

謝謝,非常專業,非常好的回答,電腦軟件寫習慣了,總是定義好變量直接用就好,這個別人定義的還要組別切換,感覺挺麻煩的,有時看多了,這也是r的變量那也是R的變量都不知道哪個是哪個了,有時我在想,有些指令直接用符號還簡單些,比如mov用=替代,加減乘除什么的。。。。
回復

使用道具 舉報

10#
ID:111634 發表于 2016-11-25 21:40 | 只看該作者
lksbbs 發表于 2016-11-25 21:11
你很專業,也很用心回答,可是我還是不理解,有些指令雖然少了1個周期,但是切換也要一個周期啊,而且現 ...

你是用現代的標準質疑上世紀八十年代MCS-51的設計,苛求了!
現代的改進版51,主頻高,不需考慮執行指令少一個機周;內存多,不需考慮指令代碼少一個字節。
再說了,用c51編程,也不需考慮是R0~R7的操作指令還是直接地址的操作指令,都有c51編譯器代勞了。
不過,懂匯編是很重要的。當然,不懂,也就算了,沒必要深究。
回復

使用道具 舉報

11#
ID:150250 發表于 2016-11-25 23:57 來自手機 | 只看該作者
匯編要學嗎
回復

使用道具 舉報

12#
ID:138155 發表于 2016-11-26 08:36 | 只看該作者
lksbbs 發表于 2016-11-25 21:04
怎么不可能直接地址讀取?
變量1 equ 00h
變量2 equ 1fh

你試過可以執行了嗎
回復

使用道具 舉報

13#
ID:111634 發表于 2016-11-26 08:41 | 只看該作者
lksbbs 發表于 2016-11-25 21:11
你很專業,也很用心回答,可是我還是不理解,有些指令雖然少了1個周期,但是切換也要一個周期啊,而且現 ...

若用匯編編寫程序,用工作寄存器肯定比直接地址好。
回復

使用道具 舉報

14#
ID:111634 發表于 2016-11-26 08:46 | 只看該作者
本帖最后由 zl2168 于 2016-11-26 08:49 編輯
wuyibin2003 發表于 2016-11-26 08:36
你試過可以執行了嗎

根本不需要先定義,直接讀就行。
MOV   A,direct      ;direct代表片內RAM 00H~FFH存儲單元 的 直接地址   
回復

使用道具 舉報

15#
ID:150279 發表于 2016-11-26 10:24 | 只看該作者

R0-R7:對應00H-1FH,分4個頁面。由于指令表中與R0-R7相關的指令很多,所以用R0-R7就很方便,被大量使用。
問題是:你主程序中用R0-R7;中斷程序中也用R0-R7。
如此中斷返回主程序后R0-R7就被修改了,數據就不對了。為此中斷程序就要先將R0-R7壓堆棧,返回時再彈出。
有了頁面選擇,就方便了,不用壓棧彈棧了,就是修改R0-R7選擇頁面。
我的使用方法是:
主程序:R0-R7用0頁;
時間中斷:R0-R7用1頁;
串口中斷:R0-R7用2頁;
其它中斷:R0-R7用3頁。
當然會依據中斷級別作處理的。
對于C語言來說,無須考慮。
回復

使用道具 舉報

16#
ID:150291 發表于 2016-11-26 11:02 | 只看該作者
不太清楚
回復

使用道具 舉報

17#
ID:111634 發表于 2016-11-26 17:45 | 只看該作者

對c51編程來說,弄清R0-R7,不是充要條件,不懂也罷!
回復

使用道具 舉報

18#
ID:146533 發表于 2016-11-26 18:05 | 只看該作者
首先,51它就是這樣規定的R0到R7,然后直接尋址比寄存器尋址多一個字節,周期也要多一個。所以還是寄存器尋址還是蠻好的
回復

使用道具 舉報

19#
ID:149642 發表于 2016-11-26 21:26 | 只看該作者
zl2168 發表于 2016-11-25 21:40
你是用現代的標準質疑上世紀八十年代MCS-51的設計,苛求了!
現代的改進版51,主頻高,不需考慮執行指令 ...

呵呵,我不懂c,我記憶很差,c那龐大的代碼完全記不住,懂匯編是發現它常用到的也就那么幾個代碼,才自學的。雖然現在也寫過幾萬行匯編代碼了,可是有時候還是能夠認識匯編指令,有時候卻像突然想不起某人名字一樣要翻看電話本。。。。。。電腦編程主要是寫圖片處理,和字節集處理,沒有寫過大系統,用中文軟件寫的。
回復

使用道具 舉報

20#
ID:149642 發表于 2016-11-26 21:30 | 只看該作者
wuyibin2003 發表于 2016-11-26 08:36
你試過可以執行了嗎

我也是初學,但是可以肯定可以執行,附件是我最近在研究我們論壇里那個多模塊化帖子的研究程序,發現那帖子有問題,很有問題,特別是有兩行代碼他說可以不寫,但我怎么研究都必須要寫。

多模塊化例程.rar

20.71 KB, 下載次數: 10

回復

使用道具 舉報

21#
ID:111634 發表于 2016-11-27 19:14 | 只看該作者
lksbbs 發表于 2016-11-26 21:26
呵呵,我不懂c,我記憶很差,c那龐大的代碼完全記不住,懂匯編是發現它常用到的也就那么幾個代碼,才自學 ...

你與別人相反。大家都說,c比匯編容易學。你卻說,“c那龐大的代碼完全記不住,懂匯編是發現它常用到的也就那么幾個代碼”。
回復

使用道具 舉報

22#
ID:111634 發表于 2016-11-27 19:23 | 只看該作者
本帖最后由 zl2168 于 2016-11-27 19:26 編輯

⒊ C51編程的特點



以上摘自張志良編著《80C51單片機實用教程——基于Keil C和Proteus》高等教育出版社ISBN 978-7-04-044532-9, 用于學習51單片機原理,便于閱讀理解,便于自學。書中電路和程序設計有詳細說明,程序語句條條有注解。
回復

使用道具 舉報

23#
ID:107559 發表于 2016-11-27 19:31 | 只看該作者
請參考reg51.h文件,打開后你會看見stb p0=0x80h,定義了地址從80開始。
回復

使用道具 舉報

24#
ID:150587 發表于 2016-11-27 19:32 | 只看該作者
多模塊的設計要怎么學習
回復

使用道具 舉報

25#
ID:111634 發表于 2016-11-27 19:35 | 只看該作者
順便說一聲,剛才向你介紹的張志良編著《80C51單片機實用教程——基于Keil C和Proteus》是雙解匯編和c51.
回復

使用道具 舉報

26#
ID:149642 發表于 2017-1-23 14:46 | 只看該作者
zl2168 發表于 2016-11-27 19:23
⒊ C51編程的特點

謝謝,我又明白了很多,
回復

使用道具 舉報

27#
ID:149642 發表于 2017-1-23 14:53 | 只看該作者
zl2168 發表于 2016-11-27 19:14
你與別人相反。大家都說,c比匯編容易學。你卻說,“c那龐大的代碼完全記不住,懂匯編是發現它常用到的也 ...

我的大腦內存與別人有差異,記得我當初記電話ic卡和手機號碼的時候是記鍵盤按鍵順序,至于按完了都不知道自己按了些什么,反正電話打通了,現在編程記指令都可能是指令實在是短,長的也就個lcall長點?才勉強記得住的吧,或許也是按鍵多了習慣了才記住,哈哈
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 九九热在线免费观看 | 91精品久久久久久久久久 | 国产精品嫩草影院精东 | 综合久久av | 日日想夜夜操 | 国产成人精品免费视频大全最热 | 国产精品久久久久一区二区三区 | 草比网站 | 自拍偷拍精品 | 一区二区三区中文字幕 | 欧美一区二区三区在线播放 | 久久午夜精品福利一区二区 | 日本公妇乱淫xxxⅹ 国产在线不卡 | 91精品久久久久久久久中文字幕 | 亚洲一页 | 成人在线观看免费视频 | 久久久久久成人 | 免费的av网站 | 成人免费看片网 | 亚洲一区二区在线免费观看 | 一区视频| 国产精品亚洲视频 | 一区二区久久 | 成年人在线观看视频 | 国产在线播放av | 综合久久综合久久 | 日韩网站在线观看 | 亚洲视频www | 亚洲精品大全 | av影音资源| 九九热re | 久久国产精品久久久久久 | 亚洲免费观看 | 中文字幕 国产 | 成人中文字幕在线观看 | 精品国产不卡一区二区三区 | 黄色一级在线播放 | 中文在线视频观看 | 99久久免费精品视频 | 亚洲综合视频 | 搞av.com|