求乙個51微控制器1S的延時程式,彙編的

2025-07-29 05:16:11 字數 4833 閱讀 2010

1樓:網友

delay:

mov r2,#

dly1:mov r3,#200 ;1*100dly2:

mov r4,#248 ;1*200*100djnz r4,$ 248*2*200*100djnz r3,dly2 ;200*100*2djnz r2,dly1 ;200*2djnz r7,delay ;呼叫是給r7賦值秒數ret

2樓:冷袖清空人

r2不是200嗎???我怎麼看著你是按100算的。

求乙個51微控制器延時1秒的程式,用匯編!!

3樓:網友

如果用6m晶振的話,乙個機器週期為2*10(-6)s那麼1s=2*500000

delay: mov r5,#10 ;延時子程式d1: mov r1,#

d2: mov r2,#

djnz r2,$

djnz r1,d2

djnz r5,r1ret

4樓:網友

del1s:mov r7,#

d1: mov r6,#

d2: mov r5,#

djnz r5,$

djnz r6,d2

djnz r7,d1

ret說明:1、如果不使用r5、r6、r7可以用別的單元替換,比如換成30h、31h、32h等等。

2、這個程式是12m時鐘,如果時鐘不同,要修改數值。如6m時鐘,要把mov r7,#10 修改成:mov r7,#

5樓:網友

時脈頻率為12mhz的一秒延時彙編**(8051):機器週期t=(1/12m)*12=1us

因為乙個機器週期=6個接拍、1個節拍=2個時鐘週期,這是機器週期的定義。

org 1000h

mov r5, #

l3: mov r6, #250 ;1t

l2: mov r7, #200 ;1t

l1: nop ;1t

nop ;1t

nop ;1t

djnz r7, l1 ;(1+1+1+2)*200t=1ms

djnz r6, l2 ;*250t=250750us

djnz r5, l3 ;(3+250750)*4=1003012us=

retend

找乙個微控制器組合語言編寫的延時1ms的子程式

6樓:官時芳宮娟

void

delay(unsigned

intx)/延時xms

延時1ms即為使x=1;

這程式延時約1ms(x=1時用keil測出來約,近似1ms),用c語言很難做到準確的1ms。注意晶振為的時候用~

7樓:網友

多簡單的小程式呀:

time1ms:

mov r6, #

time1:

延時498us

mov r7, #

djnz r7, $r7的為0時,程式向下執行,否則繼續減;djnz r6, time1 ;加上此命令後,每個小週期時間為500us

執行兩週為1ms,再加上最前面的mov r6那條指令,就是ret此程式實現的是的定時,當然這當中不算主程式呼叫此延時程式時現場保護的時間,即壓棧和出棧的時間。

8樓:青城孤子

老兄,你的微控制器是哪個型號的,晶振是多少呀?

51微控制器的定時器怎麼做延時 彙編

9樓:無畏無知者

1)你的主程式必須在1秒內完成乙個過程,然後等待下一秒的到來;2)主程式放在乙個迴圈內,並回設定答乙個標記,以判斷是否觸發執行主程式,還是繼續空迴圈;

3)這個標記就由延時中斷例程來賦值;

其實,如果你的主程式能夠在1秒內完成,由沒有其他任務的話,完全可以放在中斷例程裡執行的;

10樓:黑影小生

貌似想到的方法和複雜,就是每個語句前都用cjne r1,#00h,$ // 執行語句 // ,mov r1,#00h

然後在定時器內使r1置1或其他值,這樣做很麻煩,不知你要這樣幹什麼???

11樓:網友

定時器中斷裡1s時,作個標誌,主程式裡判斷這標誌。

給你乙個流水燈內。

的例子參考。

org 容00h

ajmp main

org 0bh

ajmp t0int

org 30h

main:mov tmod,#01h

mov th0,#3ch

mov tl0,#0b0h

mov r0,#

setb ea

setb et0

setb tr0

main0:

mov a,#01h

main1:

mov p1,a

jnb f0,main1

clr f0

rl ainc a

ajmp main1

t0int:

mov tmod,#

mov th0,#3ch

mov tl0,#0b0h

djnz r0,rti

mov r0,#

setb f0

rti:retiend

求乙個微控制器的延時子程式延時20ms 謝謝

12樓:網友

12m晶振 51微控制器。

一)51c 迴圈。

#include

void delay_ms(unsigned int ms) // 延時子程式。

void main ()

二)51c中斷。

#include

#define uchar unsigned charvoid inittimer0(void)void main(void)

void timer0interrupt(void) interrupt 1

三)51彙編迴圈。

d20ms:

mov r7,#

mov r6,#

djnz r6,$

djnz r7,$-4

ret(四)51彙編中斷。

org 0000h

ljmp start

org 000bh

ljmp t0int

start:

mov sp,#60h

lcall t0init

loop:這裡寫自己的程式。

ljmp loop

t0init:

mov tmod,#01h

mov th0,#0b1h

mov tl0,#0e0h

setb ea

setb et0

setb tr0

rett0int: 20ms中斷子程式push dph

push dpl

push acc

mov th0,#0b1h

mov tl0,#0e0h

這裡寫自己的程式。

pop acc

pop dpl

pop dph

retiend

13樓:網友

延時有幾種方法,你可以用中斷,也可以用軟體延時,這都得知道微控制器的晶振頻率。

晶振為6mhz 編寫乙個1s延時的子程式 用匯編 要方法

14樓:網友

用中斷,定時器工作方式1,計數最大數為65536,那麼從15536開始計數,達到65536要計50000次,6m的晶振機器週期為2微秒,那麼溢位一次耗時為100000微秒,計數溢位10次即為1秒鐘。

org 000bh

ajmp time0

org 30h

main:mov 30h,#00h;先把30h位址的資料清零,用做給溢位計數用mov tmod,#00000001b

mov th0,#3ch

mov tl0,#0b0h

setb ea

setb et0

setb tr0

loop:ajmp loop

time0:push acc

push psw

inc 30h;進入中斷後就自增。

mov a,30h

cjne a,#10,t_ret;看計數器的溢位到了10次沒,沒有就跳到t_ret再繼續從15536計數。

t_l1:延時1秒到了,寫自己的程式吧。

mov 30h,#00h;記得把溢位計數器再次清零t_ret:mov th0,#3ch

mov tl0,#0b0h

pop psw

pop acc

retiend

編寫乙個定時一秒的子程式,利用該子程式編寫乙個延時一分鐘的程式。微控制器組合語言題目求解

15樓:網友

equ min 60h ;分存放單元;精度不是很高的,看著辦。

delay1min:

acall delay1sec

djnz r6,exit

mov r6,#

inc min

retdelay1sec:

mov r5,#

de2:mov r4,#

de1:mov r3,#

djnz r3,$

djnz r4,de1

djnz r5,de2ret

16樓:網友

這個把你們教科書上的延時程式改改就行了。子程式定時一秒,然後主程式中迴圈60次。

微控制器編寫能延時1秒的子程式,微控制器編寫乙個能延時1秒的子程式

通用辦法,可以類推 delay1s mov r5,08h 1s 1000000us mov r6,0a2h 1000000 2 500000 mov r7,20h 500000用16進製表示為 07a120 所以 r5 07h 1 08h r6 0a1h 1 0a2h r7 20h loop djn...

微控制器制作乙個發音裝置的程式 10

微控制器制作乙個發音裝置的程式 使用timer控制i o輸出不同頻率的方波就可以了。發什麼音?蜂鳴器的聲音還是什麼?微控制器 電子發聲 全部微控制器唱歌那是學微控制器的最基本的程式。關於這個方面的程式有個老師做的很好的。你這個人還真是慷慨。做這個就只給積分。能用乙個微控制器設計乙個程式控溫裝置嗎?不需要微控制器...

用51微控制器C語言幫我寫乙個顯示1234的程式。

include unsigned char const disp tab 根據你的系統自己調節該函式。void sys delayms unsigned int ms void main 你好!只是顯示 ,沒有其他要求嗎。請c語言高手幫忙,寫乙個程式,微控制器顯示,s後顯示 一直迴圈!段口和位口各宣告...