在51微控制器的組合語言中的雙週期指令說週期讀入操作碼並丟棄,既然讀了又丟棄了還要週期幹什

時間 2022-03-14 01:00:10

1樓:匿名使用者

第乙個問題:雙週期指令,第二週期讀的是運算元,只有在第一週期讀操作碼的,而有幾條指令是單位元組的,也需要兩個週期,這不是浪費時間,是因乙個週期是不能完成的,這不是你想像的那樣。

第二個問題:要做計時,不管是倒計時還是正常計時,用延遲函式來做,這種方法計時是不準確的,只有用定時器才比較準確。

第三個問題:你不要求計時準確,就想用延遲函式來做也可以,那為什麼兩位會一閃一閃的,是因為在呼叫延遲函式時不能完成顯示的,也就是不能同時呼叫顯示函式了,所以,就不顯示了,而等到延時到了才能再調顯示子函式,這樣,顯示的間隔長了,就會閃爍了。

第四個問題:是很好解決的,其實在呼叫顯示子函式時也是等於在延遲,因為顯示一位一般要延時1ms的,顯示兩位就延時2ms,可以寫乙個延時1ms的函式。這樣,就不用另外呼叫其它的延時函式了。

反覆呼叫顯示函式,呼叫一次就延時2ms,然後對呼叫顯示函式計數,呼叫500次就是1秒了,這是大約的時間,因不準確。有了1秒的時間,剩下的問題你會解決了吧。

2樓:做而論道

時間,是故意浪費的。

雙週期指令,都是針對片外ram(或io介面)的。

當年,它們的工作速度,明顯跟不上 cpu 的速度。

如果 cpu 沒有在這裡《等待》一下,就必須在電路上,增加乙個部分,強迫微控制器,停頓一下。

你去看看 80x86 cpu 的等待週期,是怎麼插入的,就知道了。--都是用外接電路,來完成的。

-----------

兩位的只能用定時器,中斷去做...

你的程式呢?

3樓:匿名使用者

其實微控制器程式設計 沒有那麼要考慮得這麼複雜,

用延遲函式做數碼管顯示 & 定時器中斷做數碼管顯示 都一樣,

只是 要使 數碼管顯示 不一閃一閃,只要 每個數碼管 在 一秒鐘內顯示 大於 50 次

用中斷顯示參考 彙編在追問裡

用延時org 00h

sjmp star

org 1bh

sjmp tis; 轉t1中斷服務程式

org 30h

star:mov r2,#60h; 倒計時初值

mov r4,#100; 定時中斷溢位計數器

sta1:acall dis; 呼叫顯示子程式

sjmp sta1

seg7:inc a; a的值加一

movc a,@a+pc; 取顯示斷段

retdb 0c0h,0f9h,0a4h,0b0h; 0至3的共陽型顯示碼

db 99h,92h,82h,0f8h; 4至7的共陽型顯示碼

db 80h,90h,88h,83h; 8至b的共陽型顯示碼

db 0c6h,0a1h,86h,8eh; c至f的共陽型顯示碼

dis: mov a,r2; 單位元組十六進製制數轉為十進位制數

anl a,#0fh

acall seg7

setb p2.0

cpl a

mov p1,a; 顯示十位

clr p2.1

acall dly0

mov a,r2

swap a

anl a,#0fh

acall seg7

setb p2.1

cpl a

mov p1,a; 顯示個位

clr p2.0

acall dly0

ret; 子程式返回

dly0:mov r6,#20 ; 10 ms 12mhz

dly1:mov r5,#250 ; 延時

djnz r5,$

djnz r6,dly1

djnz r4,dly8; 定時1s到否

mov r4,#100; 到1s,重置r4=100

mov a,r2

add a,#99h ; 倒計時遞減

da a

mov r2, a

dly8:ret; 子程式返回end

微控制器雙週期指令的理解

4樓:做而論道

是的。51 微控制器,還有兩條單位元組四週期的指令:mul ab 和 div ab。

其中,僅有第一次,是真的取了。

後面的許多次,都是無效的,但是,ale 照樣輸出脈衝,假裝還在取指。

一共用了四個機器週期,指令才算完成。

算一算,四個週期中,共有多少次取指操作?

----

在執行單位元組單週期的指令時,也有兩次取指令的操作,後面的一次,是虛假的。

51微控制器執行一條指令所需時間

5樓:楊柳風

51微控制器12m晶振,晶振週期1/12微妙,乙個機器週期包含12個晶振週期,所以12m晶振時機器週期=12x(1/12)微妙=1微妙。djnz r0,rel指令週期包含2個機器週期,執行完後要花費2微妙時間。

6樓:

自己查51微控制器指令集手冊,每條指令的週期數。

7樓:匿名使用者

各種指令的執行時間不同的,這是規定的,你可以看指令表。djnz r0,rel,12m的晶振,執行時間為24個時鐘週期,那就是2us。

8樓:匿名使用者

51微控制器是按照時鐘的定時工作的,即在乙個指令週期內,微控制器會按照時鐘的上公升沿或下降沿操作,12m晶振,每個指令週期為1微妙.

執行djnz r0,rel指令,在第乙個指令週期完成r0減去一的操作,第二個指令週期完成讀取rel並跳轉。所以共需要2微妙。

51微控制器c語言 _nop_()是乙個空指令?短時間延時的?空幾個機器週期?

9樓:12345額時代

這個_nop_()等效與彙編裡面的,nop指令,也就是空乙個機器週期,如果是傳統51微控制器的話,等於空12個時鐘週期【即乙個機器週期】,操作方法如下:

1、首先,可以利用keil來進行模擬實驗,觀察軟體所顯示的數值,然後再進行相關的運算,即可得出結果。

2、在使用keil進行模擬之前,要「模擬」給微控制器各個口上電,點選這裡。

3、然後再點選這裡,會出來乙個對話方塊,全部勾選即可。

4、除了使用keil外,還可可以借助其他的軟體,來進行測試運算。

5、最後要知道指令週期,指執行一條指令所需的時間。機器週期,由6個狀態週期組成。狀態週期,是時鐘週期的兩倍,如下圖所示就完成了。

10樓:影視娛樂筐

如果晶振是12mhz的話這一條指令所用時間為 1us。

如果晶振是11.0592mhz的話這一條指令所用時間為 1.08us。

11樓:陳暴龍

我想你說的是彙編吧..

空指令機器碼90

cpu不執行此指令,但占用乙個指令週期,指令週期的長短因cpu不同等因素而不同

如果是c的函式_nop_() 那你就找到這個函式的宣告定義的地方看看他的內容咯

12樓:

是的,好像是延時乙個指令週期。

51微控制器的晶振和機器週期的關係!晶振**12次是否為乙個機器週期,求大蝦!坐等!!!

13樓:

哦,對你正學習的微控制器來,是這樣的,51,共四種週期振盪週期:也稱時鐘週期,是指為微控制器提供時鐘訊號的振盪源的週期狀態週期:每個狀態週期為時鐘週期的2倍,是振盪週期經二分頻後得到的。

機器週期:乙個機器週期包含6個狀態週期s1~s6,也就是12個時鐘週期。

在乙個機器週期內, cpu可以完成乙個獨立的操作。

指令週期:它是指cpu完成一條操作的所需的全部時間。每條指令執行時間都是有乙個

或幾個機器週期組成。mcs-51系統中,有單週期指令、雙週期指令和四週期指令

振盪*12 = 狀態*6 = 機器

記住這個概念

14樓:匿名使用者

對於傳統的51是的,機器週期=晶振週期*12.

現在有很多微控制器是1t、4t、6t模式,分別對應是機器週期等於晶振週期的1、4、6倍

15樓:浙江仁龍皮雕軟包廠

傳統的51微控制器的晶振頻率是機器週期的12倍。晶振振盪12次為乙個機器週期。

對於51微控制器,什麼叫指令長度?例如:單位元組指令,雙位元組指令,三位元組指令,能否分別舉例?

16樓:

對於51微控制器而言,評判其指令有兩條標準:一條是指令執行所占用的指令週期數;一條是指令本身儲存所占用的長度。

你這裡所說的指令長度是指後者。在51的手冊中都可以查到。

典型的單位元組指令是nop、累加器載入/存貯操作等等;

典型的雙位元組指令是sjmp、ajmp、暫存器載入/存貯操作等等;

典型的三位元組指令是ljmp、條件跳轉等等;

17樓:做而論道

指令長度,是指機器語言。

機器語言,這是高手都不用的東西。

初學者,根本就不用討論這麼深入。

51微控制器組合語言做16位除法,51微控制器是否能夠完成16位的加減乘除運算

大別山的蝸牛 雙位元組無符號除法程式 r5r2r3r4 r6r7 r2 r3r4 餘數r6r7 入口 r5,r2,r3,r4,r6,r7 占用資源 acc,b,f0 堆疊需求 4位元組 出口 r2 r3,r4,r6,r7,ovndiv42 mov a,r1 push a mov b,00h ndv4...

微控制器組合語言中JMP START在不同位置的作用,求大神解釋

jmp start 這是跳轉指令,我想你是學習的51微控制器的初學者。它的意思是跳轉到標識為 start 位置開始往下執行語句。你給了三段程式,第一和第二的作用是一樣的。先說你程式的意思先,你程式設計是一個流水燈,先左移8次,然後又右移8次。接著重複上面的迴圈 左移8次,右移8次,左移8次,右移8次...

組合語言在51微控制器中的所有指令有那些

冷月上柵欄 微控制器指令功能一覽表 助記符 說明 mov a,rn e8 ef 暫存器a mov a,direct e5 dircet 直接位元組送a mov a,ri er e7 間接ram送a mov a,data 74 data 立即數送a mov rn,a f8 ff a送暫存器 mov r...