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後顯示 一直迴圈!段口和位口各宣告...