⑴ 51單片機,求用匯編語言編寫延時1小時的子程序,要精確到秒級別
這個可以做到,如果晶振是12M的話,一下方法可以實現延時1小時,精確度在秒級別。
DELAY1H:
MOV R7,#180 ;1/1000000
DLY1H:
LCALL DELAY_20S ;180*19.960603s +2*180
DJNZ R7,DLY1H ;2*180/1000000
RET 2/1000000
共延時時間:3592.9s誤差為7.1秒,如果再精確的話,再加一點延時就可以了。
DELAY_20S: ;Total=19.960603s
MOV R2,# ;1
DLY1:
MOV R3,#200 ;1*200
DLY2:
MOV R4,#248 ;1**200*200
DJNZ R4,$ ;2**248*200*200
DJNZ R3,DLY2 ;2*200*200
DJNZ R2,DLY1 ;2*200
RET ;2
⑵ 51單片機中延時程序
1. sleep()是以毫秒計算的,延時5秒是sleep(5*1000);,延時5分是sleep(5*1000*60);
2.包含的頭文件看你用的什麼編輯軟體。
3.我用的VC++是用包含在#include<windows.h>頭文件中。
#include<stdio.h>#include<windows.h>//Sleep()的頭文件 main() { int i;
int n=10;for(i=1;i<=n;i++) {printf("%d",i);Sleep(5*1000*60);} //
這里修改延時時間,
有些人說是用#include<dos.h>做頭文件你自己試下吧。
還用Sleep的S是大寫的,不是小寫的。
⑶ C51單片機延時程序,需要不精確延時2小時,請問大神怎麼寫延時代碼,謝謝!
可以有很多辦法,一是調整參數,使其延時5分鍾或6分鍾,循環24次或20次。二是將延時函數的形參改為長整型(32位)延時時間擴大65536倍。三是使用定時器,每次定時50mS,累計144000次,便是2小時,使用定時器(中斷)的好處是在延時期間還可以干許多事情,例如顯示剩餘時間,檢測設備工作狀態或者調整延時時間等,而你的純軟體延時期間想干其它事情比較困難。
⑷ 51單片機定時器的匯編語言程序編程,
LED BIT P1.0 ;定義LED的引腳
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H ;定時器0工作模式1
MOV TH0,#HIGH(65536-50000) ;初值,50毫秒中斷一次
MOV TL0,#LOW(65536-50000)
SETB TR0 ;啟動定時器
SETB ET0 ;啟動定時器中斷
SETB EA ;開總中斷
MOV R2,#40 ;中斷計數初始值
SJMP $
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
DJNZ R2,T0E ;R2減到0重新賦值,否則退出
MOV R2,#40
CPL LED ;LED亮滅轉換
T0E:
RETI
END
⑸ 51單片機匯編語言延時子程序怎樣計算
;以下按12M晶振計算,#後面的數最大可以是255
DELAY:MOV R7,#10 ;1
MOV R6,#100 ;10*1
MOV R5,#200 ;10*100*1
DJNZ R5, $ ; 10*100*200*2
DJNZ R6, $ - 4 ;10*100*2
DJNZ R7, $ - 8 ;10*2
RET ;2
Total=1+10*1+10*100*1+10*100*200*2+10*100*2+10*2+2=403033微秒
⑹ 用匯編怎麼寫51單片機的延時程序
DEL1S:MOV R7,#10x0dx0aD1: MOV R6,#200x0dx0aD2: MOV R5,#250x0dx0a DJNZ R5,$x0dx0a DJNZ R6,D2x0dx0a DJNZ R7,D1x0dx0a RETx0dx0ax0dx0a說明:1、如果不使用R5、R6、R7可以用別的單元替換,比如換成30H、31H、32H等等x0dx0a 2、這個程序是12M時鍾,如果時鍾不同,要修改數值。如6M時鍾,要把MOV R7,#10 修改成:MOV R7,#5