㈠ 80C51的單片機寫進去的程序存放在哪裡 又在哪裡執行
單片機是 哈弗結構。 同時讀取程序存儲器和數據存儲器。
單片機自動完成賦予它的任務的過程,也就是單片機執行程序的過程,即一條條執行的指令的過程,所謂指令就是把要求單片機執行的各種操作用的命令的形式寫下來,這是在設計人員賦予它的指令系統所決定的,一條指令對應著一種基本操作;單片機所能執行的全部指令,就是該單片機的指令系統,不同種類的單片機,其指令系統亦不同。為使單片機能自動完成某一特定任務,必須把要解決的問題編成一系列指令(這些指令必須是選定單片機能識別和執行的指令),這一系列指令的集合就成為程序,程序需要預先存放在具有存儲功能的部件——存儲器中。存儲器由許多存儲單元(最小的存儲單位)組成,就像大樓房有許多房間組成一樣,指令就存放在這些單元里,單元里的指令取出並執行就像大樓房的每個房間的被分配到了唯一一個房間號一樣,每一個存儲單元也必須被分配到唯一的地址號,該地址號稱為存儲單元的地址,這樣只要知道了存儲單元的地址,就可以找到這個存儲單元,其中存儲的指令就可以被取出,然後再被執行。 程序通常是順序執行的,所以程序中的指令也是一條條順序存放的,單片機在執行程序時要能把這些指令一條條取出並加以執行,必須有一個部件能追蹤指令所在的地址,這一部件就是程序計數器PC(包含在CPU中),在開始執行程序時,給PC賦以程序中第一條指令所在的地址,然後取得每一條要執行的命令,PC在中的內容就會自動增加,增加量由本條指令長度決定,可能是1、2或3,以指向下一條指令的起始地址,保證指令順序執行。
㈡ 延時攝影拍攝的視頻存在哪個文件夾
正常存儲啊。
㈢ 大疆御Mavic 2 全景照片和延時攝影生成的文件路徑在哪裡
全景圖片和延時攝影合成文件都在處於機身存儲/SD卡DCIM文件夾里,同時在APP回放界面也可以查看文件。
注意事項:
1)如用戶拍攝時未插入SD卡,拍攝的文件將保存在飛行器機載快閃記憶體中;
2)全景照片合成使用的是原片合成。
㈣ 設計一個由51單片機控制的一到五秒的程序延時程序!再加個數碼管顯示延時的秒數。
#include <reg51.h> //調用51單片機的頭文件
#define uchar unsigned char
#define uint unsigned int
unsigned char code LED[]=
{ //定義表格一定要使用code,這樣會做到程序存儲區中
0x3F, //"0"的字形表,0B00111111
0x06, //"1"的字形表,0B00000110
0x5B, //"2"的字形表,0B01011011
0x4F, //"3"的字形表,0B01001111
0x66, //"4"的字形表,0B01100110
0x6D, //"5"的字形表,0B01101101
0x7D, //"6"的字形表,0B01111101
0x07, //"7"的字形表,0B00000111
0x7F, //"8"的字形表,0B01111111
0x6F, //"9"的字形表,0B01101111
0x00,
};
uchar num;
uint fz1,fz2,xs1,xs2;
uint ms,fz,xs,kg;
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
sbit led5=P1^4;
sbit key1=P2^0;
sbit key2=P2^1;
sbit key3=P2^2;
sbit key4=P2^3;
void delayms(uint xms) // 延時函數
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void sjcl() // 時鍾函數
{
if(num==20)
{ num=0;
led5=0;
ms++;
if(ms>=60)
{
ms=0;
fz++;
}
if(fz>=60)
{
fz=0;
xs++;
}
if(xs>=12)
{
xs=0;
}
}
if(num==10)
{ led5=1;
}
}
void smgxs() // 顯示函數
{
if(kg==0)
{
fz1=xs/10;
fz2=xs%10;
xs1=fz/10;
xs2=fz%10;
}
else if(kg==1)
{
fz1=11;
fz2=11;
xs1=fz/10;
xs2=fz%10;
}
else if(kg==2)
{
fz1=xs/10;
fz2=xs%10;
xs1=11;
xs2=11;
}
led1=0;
P0=LED[fz1];
delayms(5);
led1=1;
led2=0;
P0=LED[fz2];
delayms(5);
led2=1;
led3=0;
P0=LED[xs1];
delayms(5);
led3=1;
led4=0;
P0=LED[xs2];
delayms(5);
led4=1;
}
void ajcl()
{
if(key1==0)
{
delayms(10);
if(key1==0)
{
TR0=0;
kg++;
while(!key1);
}
if(kg==3)
{
kg=0;
TR0=1;
}
}
if(kg!=0)
if(kg==1)
{
smgxs();
if(key2==0)
delayms(10);
if(key2==0)
{
fz=fz+1;
while(!key2);
smgxs();
}
if(key3==0)
delayms(10);
if(key3==0)
{
fz=fz-1;
while(!key3);
smgxs();
}
}
if(kg==2)
{
smgxs();
if(key2==0)
delayms(10);
if(key2==0)
{
xs=xs+1;
while(!key2);
smgxs();
}
if(key3==0)
delayms(10);
if(key3==0)
{
xs=xs-1;
while(!key3);
smgxs();
}
}
}
void main() // 主函數
{ TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
sjcl();
smgxs();
ajcl();
}
}
void T0time()interrupt 1 //中斷函數
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
}
改一下就ok
㈤ 單片機延時子程序
延時程序在單片機編程中使用非常廣泛,但一些讀者在學習中不知道延時程序怎麼編程,不知道機器
周期和指令周期的區別,不知道延時程序指令的用法,,本文就此問題從延時程序的基本概念、機器周期和指
令周期的區別和聯系、相關指令的用法等用圖解法的形式詳盡的回答讀者
我們知道程序設計是單片機開發最重要的工作,而程序在執行過程中常常需要完成延時的功能。例如
在交通燈的控製程序中,需要控制紅燈亮的時間持續30秒,就可以通過延時程序來完成。延時程序是如何
實現的呢?下面讓我們先來了解一些相關的概念。
一、機器周期和指令周期
1.機器周期是指單片機完成一個基本操作所花費的時間,一般使用微秒來計量單片機的運行速度,
51單片機的一個機器周期包括12個時鍾振盪周期,也就是說如果51單片機採用12MHz晶振,那麼執行
一個機器周期就只需要1μs;如果採用的是6MHz的晶振,那麼執行一個機器周期就需要2μs。
2.指令周期是指單片機執行一條指令所需要的時間,一般利用單片機的機器周期來計量指令周期。
在51單片機里有單周期指令(執行這條指令只需一個機器周期),雙周期指令(執行這條指令只需要兩個
機器周期),四周期指令(執行這條指令需要四個機器周期)。除了乘、除兩條指令是四周期指令,其餘均
為單周期或雙周期指令。也就是說,如果51單片機採用的是12MHz晶振,那麼它執行一條指令一般只需
1~2微秒的時間;如果採用的是6MH晶振,執行一條指令一般就需2~4微秒的時間。
現在的單片機有很多種型號,但在每個型號的單片機器件手冊中都會詳細說明執行各種指令所需的機
器周期,了解以上概念後,那麼可以依據單片機器件手冊中的指令執行周期和單片機所用晶振頻率來完成
需要精確延時時間的延時程序。
二、延時指令
在單片機編程裡面並沒有真正的延時指令,從上面的概念中我們知道單片機每執行一條指令都需要一
定的時間,所以要達到延時的效果,只須讓單片機不斷地執行沒有具體實際意義的指令,從而達到了延時
的效果。
1.數據傳送指令MOV
數據傳送指令功能是將數據從一個地方復制、拷貝到另一個地方。
如:MOVR7,#80H;將數據80H送到寄存器R7,這時寄存器R7裡面存放著80H,就單這條
指令而言並沒有任何實際意義,而執行該指令則需要一個機器周期。
2.空操作指令NOP
空操作指令功能只是讓單片機執行沒有意義的操作,消耗一個機器周期。
3.循環轉移指令DJNZ
循環轉移指令功能是將第一個數進行減1並判斷是否為0,不為0則轉移到指定地點;為0則往下執行。
如:DJNZR7,KK;將寄存器R7的內容減1並判斷寄存器R7里的內容減完1後是否為0,如果
不為0則轉移到地址標號為KK的地方;如果為0則執行下一條指令。這條指令需要2個機器周期。
利用以上三條指令的組合就可以比較精確地編寫出所需要的延時程序。
三、1秒延時子程序、流程圖及時間計算(以單片機晶振為12MHz為例,1個機器周期需要1μs)
了解了以上的內容,現在讓我們來看看
程序總共所需時間:1+10+2560+330240+660480+5120+20+2=998433μs≈1S
在這里運行這段程序共需998433μs,還差1567μs才達到1S的,所以想要達到完美的1S延時,需
要在返回指令RET前再添加一些指令讓它把1567μs的延時完成。有興趣的讀者可以自己試著添加完成。
最後補充一點,編寫程序時一般將延時程序編寫成獨立的子程序,而所謂子程序也就是一個實現某個功能
的小模塊。這樣在主程序中就可以方便地反復調用編寫好的延時子程序。
小提示:循環轉移指令(DJNZ)除了可以給定地址標號讓其跳轉外,還可以將地址標號改成$,這樣
程序就跳回本指令執行。例如:
DJNZR7,$;R7內容減1不為0,則再次執行本指令;為0則往下執行,當R7的值改為10
時,則執行完該條程序所需的時間為2*10=20μs。
51單片機匯編延時程序演算法詳解
將以12MHZ晶振為例,詳細講解MCS-51單片機中匯編程序延時的精確演算法。
指令周期、機器周期與時鍾周期
指令周期:CPU執行一條指令所需要的時間稱為指令周期,它是以機器周期為單位的,指令不同,所需的機器周期也不同。
時鍾周期:也稱為振盪周期,一個時鍾周期=晶振的倒數。
MCS-51單片機的一個機器周期=6個狀態周期=12個時鍾周期。
MCS-51單片機的指令有單位元組、雙位元組和三位元組的,它們的指令周期不盡相同,一個單周期指令包含一個機器周期,即12個時鍾周期,所以一條單周期指令被執行所佔時間為12*(1/12000000)=1μs。
程序分析
例150ms延時子程序:
DEL:MOVR7,#200①
DEL1:MOVR6,#125②
DEL2:DJNZR6,DEL2③
DJNZR7,DEL1④
RET⑤
精確延時時間為:1+(1*200)+(2*125*200)+(2*200)+2
=(2*125+3)*200+3⑥
=50603μs
≈50ms
由⑥整理出公式(只限上述寫法)延時時間=(2*內循環+3)*外循環+3⑦
詳解:DEL這個子程序共有五條指令,現在分別就每一條指令被執行的次數和所耗時間進行分析。
第一句:MOVR7,#200在整個子程序中只被執行一次,且為單周期指令,所以耗時1μs
第二句:MOVR6,#125從②看到④只要R7-1不為0,就會返回到這句,共執行了R7次,共耗時200μs
第三句:DJNZR6,DEL2隻要R6-1不為0,就反復執行此句(內循環R6次),又受外循環R7控制,所以共執行R6*R7次,因是雙周期指令,所以耗時2*R6*R7μs。
例21秒延時子程序:
DEL:MOVR7,#10①
DEL1:MOVR6,#200②
DEL2:MOVR5,#248③
DJNZR5,$④
DJNZR6,DEL2⑤
DJNZR7,DEL1⑥
RET⑦
對每條指令進行計算得出精確延時時間為:
1+(1*10)+(1*200*10)+(2*248*200*10)+(2*200*10)+(2*10)+2
=[(2*248+3)*200+3]*10+3⑧
=998033μs≈1s
由⑧整理得:延時時間=[(2*第一層循環+3)*第二層循環+3]*第三層循環+3⑨
此式適用三層循環以內的程序,也驗證了例1中式⑦(第三層循環相當於1)的成立。
注意,要實現較長時間的延時,一般採用多重循環,有時會在程式序里加入NOP指令,這時公式⑨不再適用,下面舉例分析。
例3仍以1秒延時為例
DEL:MOVR7,#101指令周期1
DEL1:MOVR6,#0FFH1指令周期10
DEL2:MOVR5,#80H1指令周期255*10=2550
KONG:NOP1指令周期128*255*10=326400
DJNZR5,$2指令周期2*128*255*10=652800
DJNZR6,DEL22指令周期2*255*10=5110
DJNZR7,DEL12指令周期2*10=20
RET2
延時時間=1+10+2550+326400+652800+5110+20+2=986893μs約為1s
整理得:延時時間=[(3*第一層循環+3)*第二層循環+3]*第三層循環+3⑩
結論:針對初學者的困惑,對匯編程序的延時演算法進行了分步講解,並就幾種不同寫法分別總結出相應的計算公式,只要仔細閱讀例1中的詳解,並用例2、例3來加深理解,一定會掌握各種類型程序的演算法並加以運用。
單片機延時子程序
1)延時為:20ms晶振12M
1+(1+2*248+2)*4+1+1+1=20000US=20MS
用匯編..優點就是精確...
缺點就是算有點復雜.
DELAY20MS:
MOVR7,#4
D1:
MOVR6,#248
DJNZR6,$
DJNZR7,D1
NOP
NOP
RET
2)一些通過計算51匯編指令得出的軟延時子程序
;*****************************************************************
;延時10uS
;*****************************************************************
time10us:movr5,#05h;11us
djnzr5,$
ret
;*****************************************************************
;延時50uS
;*****************************************************************
time50us:movr5,#19h;51us
djnzr5,$
ret
;*****************************************************************
;延時100uS
;*****************************************************************
time100us:movr5,#31h;99.6us
djnzr5,$
ret
;*****************************************************************
;延時200uS
;*****************************************************************
time200us:movr5,#64h;201us
djnzr5,$
ret
;*****************************************************************
;延時250uS
;*****************************************************************
time250us:movr5,#7ch;249.6us
djnzr5,$
ret
;*****************************************************************
;延時350uS
;*****************************************************************
time350us:movr5,#0afh;351us
time350us_1:djnzr5,time350us_1
ret
;*****************************************************************
;延時500uS
;*****************************************************************
time500us:movr5,#0fah;501us
time500us_1:djnzr5,time500us_1
ret
;*****************************************************************
;延時1mS
;*****************************************************************
time1ms:movr5,#0fah;1001us
time1ms_1:nop
nop
djnzr5,time1ms_1
ret
;*****************************************************************
;延時2.5mS
;*****************************************************************
time2_5ms:movr5,#05h;2.496ms
time2_5ms_1:movr6,#0f8h;497us
djnzr6,$
djnzr5,time2_5ms_1
ret
;*****************************************************************
;延時10mS
;*****************************************************************
time10ms:movr5,#14h;10.262ms
time10ms_1:movr6,#0ffh;511us
djnzr6,$
djnzr5,time10ms_1
ret
;*****************************************************************
;延時50mS
;*****************************************************************
time50ms:movr5,#63h;49.996ms
time50ms_1:movr6,#0fbh;503us
djnzr6,$
djnzr5,time50ms_1
ret
;*****************************************************************
;延時100mS
;*****************************************************************
time100ms:movr5,#0c3h;100.036ms
time100ms_1:movr6,#0ffh;511us
djnzr6,$
djnzr5,time100ms_1
ret
;*****************************************************************
;延時200mS
;*****************************************************************
time200ms:movr5,#02h;250.351ms
time200ms_1:movr6,#0f4h;125.173ms
time200ms_2:movr7,#0ffh;511us
djnzr7,$
djnzr6,time200ms_2
djnzr5,time200ms_1
ret
;*****************************************************************
;延時500mS
;*****************************************************************
time500ms:movr5,#04h;500.701ms
time500ms_1:movr6,#0f4h;125.173ms
time500ms_2:movr7,#0ffh;511us
djnzr7,$
djnzr6,time500ms_2
djnzr5,time500ms_1
ret
;*****************************************************************
;延時1S
;*****************************************************************
time1s:movr5,#08h;1001.401ms
time1s_1:movr6,#0f4h;125.173ms
time1s_2:movr7,#0ffh;511us
djnzr7,$
djnzr6,time1s_2
djnzr5,time1s_1
ret
12M晶振機器周期為1USNOP為單周期指令DJNZ為雙周期指令.
3)
;;晶振12MHZ,延時1秒
DELAY:MOV72H,#100
LOOP3:MOV71H,#100
LOOP1:MOV70H,#47
LOOP0:DJNZ70H,LOOP0
NOP
DJNZ71H,LOOP1
MOV70H,#46
LOOP2:DJNZ70H,LOOP2
NOP
DJNZ72H,LOOP3
MOV70H,#48
LOOP4:DJNZ70H,LOOP4
4);延時1分鍾子程序,F=6MHz
;程序已測過,延時時間60,000,000.0uS
delay60s:movr3,#228
movr2,#253
movr1,#219
loop1:djnzr1,$
djnzr2,loop1
djnzr3,loop1
nop
ret
5)計算機反復執行一段程序以達到延時的目的稱為軟體延時,單片機程序中經常需要短時間的延時,但是相當一部分人對延時程序很模糊,對延時程序的演算法不夠了解,在這里我以12MHz晶振和兩個經典延時子程序為例,詳細分析單片機匯編延時程序。
何為時鍾周期、機器周期、和指令周期?
時鍾周期:也就是振盪周期,以12MHz的時鍾脈沖為例,那時鍾周期就為(1/12000000)s=(1/12)us;
機器周期:1個機器周期=6個狀態周期=12個時鍾周期=1us;
指令周期:CPU執行一條指令所需要的時間稱為指令周期,指令周期是以機器周期為單位的,不同的指令所需的機器周期不一定相同,可參考51單片機指令速查表。
由上可得:CPU執行一條單周期指令,需要1us;執行一條雙周期指令需要2us。
下面是具體的延時子程序分析:
0.1s延時子程序(12MHz晶振):
MOVR7,#200;單周期指令(1us)
D1:MOVR6,#250;單周期指令(1us)
DJNZR6,$;雙周期指令(2us)//該指令自身執行R6次
DJNZR7,D1;雙周期指令(2us)//D1執行R7次
RET;雙周期指令(2us)
T=1+(1+2*R6+2)*R7+2
=100603us
≈0.1s
0.5s延時子程序(12MHz晶振):
MOVR7,#5;單周期指令(1us)
D1:MOVR6,#200;單周期指令(1us)
D2:MOVR5,#250;單周期指令(1us
DJNZR5,$;雙周期指令(2us)//該指令自身執行R5次
DJNZR6,D2;雙周期指令(2us)//D2執行R6次
DJNZR7,D1;雙周期指令(2us)//D1執行R7次
RET;雙周期指令(2us)
T=1+[1+(1+2*R5+2)*R6+2]*R7+2
=503018us
≈0.5s
6)51單片機經典流水燈程序,在51單片機的P2口接上8個發光二極體,產生流水燈的移動效果。
ORG0;程序從0地址開始
START:MOVA,#0FEH;讓ACC的內容為11111110
LOOP:MOVP2,A;讓P2口輸出ACC的內容
RRA;讓ACC的內容左移
CALLDELAY;調用延時子程序
LJMPLOOP;跳到LOOP處執行
;0.1秒延時子程序(12MHz晶振)===================
DELAY:MOVR7,#200;R7寄存器載入200次數
D1:MOVR6,#250;R6寄存器載入250次數
DJNZR6,$;本行執行R6次
DJNZR7,D1;D1循環執行R7次
RET;返回主程序
END;結束程序
㈥ 電腦下載的應用程序,它原始保存的位置在哪裡如果不將它轉移到其他的磁碟,它應該延時保持在哪個位置
下載的應用程序安裝包,原始保存的位置在桌面,重裝系統備份我的文檔或者c盤。
軟體的默認安裝位置是C:\Program Files和C:\Program Files (x86)
備份這個文件夾沒意義,重裝系統後軟體也需要重新安裝。
㈦ 單片機中R0,R1,R2,R5,R6,R7是怎樣用的是怎樣計算時鍾周期和延時程序的時間的
R0,R1,R2,R5,R6,R7
1.是通用寄存器,存取數據使用;
2.R0,R1用於間接定址,指定內外0-255存儲單元,如MOV A,@R0,MOVX @R1;
延時時間按照指令周期計算,每個指令周期為振盪周期的12倍(對於單周期的單片機當然等於振盪周期)。例如,如果單片機使用的晶振為12MHZ,那麼指令周期等於1微妙。
㈧ 計算機執行程序的時候,通常在哪裡保存待處理的數據
計算機執行程序的時候,通常在內存保存待處理的數據。
㈨ 單片機c語言對延遲程序的編制還有掉電後給定參數的保存
一、先寫一個延時程序,入口參數就是X,根據X的值來計算延時的長短。
二、寫一個按鈕響應程序,主要就是根據按鈕信息來調節X的值。
三、為了單片機掉電以後還能保存X的值,就不能把X得值放在RAM中,可以把X得值放在flash存儲器中,這就需要寫一個對flash存儲器讀寫的函數。
把這三個函數寫出來就能實現你要的功能了。