Ⅰ 急求:單片機實驗
:
ORG 0030H
MOV 30H, #34H
MOV 31H, #56H
MOV 32H, #23H
MOV 33H, #90H
MOV 34H, #32H
MOV 35H, #68H
MOV 36H, #09H
MOV 37H, #75H
CALL SORT
SJMP $
;-----------------------------------------------------
SORT: ;最簡短、高效的排序程序.
MOV B, #7 ;第一輪排序時,比較7次.
S1: MOV R0, #30H ;數據區的起始地址.
MOV R7, B
CLR PSW.5 ;清除"交換"標志位.
S2: MOV A, @R0 ;取前一個數.
INC R0
CLR C
SUBB A, @R0 ;減後一個數,前<後時,Cy=1
S3: JC S4 ;有借位時,不用交換,轉移.
MOV A, @R0 ;取後一個數,准備交換.
DEC R0
XCH A, @R0 ;交換到前一個.
INC R0
XCH A, @R0 ;交換到後一個.
SETB PSW.5 ;設定"交換"標志位.
S4: DJNZ R7, S2 ;繼續本輪比較.
JNB PSW.5, ENDS ;如本輪沒有進行過交換,可提前結束.
DJNZ B, S1 ;下一輪,比較次數少一次.
ENDS:
RET
;-----------------------------------------------------
END
Ⅱ 單片機原理與實驗
定時器的時鍾頻率為12MHz/12=1MHz,則定時器計數器計1個數為1us,所以2ms為2000,因為計數器是向上計數模式,所以65536-2000=63536=0xF830
void Timer0_Init(void)
{
TMOD|=0x01; //16位定時器模式
ET0=1; //定時器0中斷允許
TH0=0xF8; //定時2ms 2000-2ms
TL0=0x30;
TR0=1; //開始計時
}
void Timer0_Interrupt(void) interrupt 0
{
TH0=0xF8; //重裝載
TL0=0x30;
if(P1^0 == 1) P1^0 = 0;
else P1^0 = 1;
}
Ⅲ 學單片機都可以做哪些有趣的實驗
我和單片機打了5年交道了,從大2開始。 我的心得:單片機不是用來學的,是用來玩的。初學者建議您用AVR,51就別學了,不是因為它老,是因為AVR涵蓋的知識多,學會了AVR別的你就全明白了,不建議你以後用匯編編程,但是建議你看一下匯編程序,了解單片機內部工作原理。 學單片機之前先把C語言弄透,以後會少走好多彎路。 至於實驗初學者可以先學流水燈、矩陣按鍵、數碼管掃描,完後玩一點更稍級的18B20、DS1302、LED屏幕、液晶等,這些都會了你就算『明白』單片機了,然後往更高層次發展。 單片機是工具,它需要你具備一定的模擬、數字基礎知識,學這些都不難,最難的是堅持學下去。手機上、MP3上的控制晶元現在用的是ARM,這算是一種更高級的單片機,這就是單片機和電子的關系。單片機是一種潮流,推動電子往更高層次發展的潮流。 我們老師告訴我一句話:切忌做浮躁的單片機工程師,與其整日把時髦的技術掛在嘴邊,不如把最基本的東西牢牢記在心裡,學習單片機並不難,難的事堅持不懈的學習下去。 我想這就是學習單片機的訣竅。 然後的問題是程序下載器,這個有賣的,ISP下載線就可以,大約三四十塊錢,也可以自己做,ouravr.com上也能找到電路圖,至於編譯器建議你用WINAVR,在這個網站上也有下載鏈接,這些都OK了之後下載一份Mega16的晶元說明書,然後買一本馬潮老師寫的單片機原理,在這個網上可以訂得到,我是在書店買的,你要是有什麼不會的話,在網站論壇上留言他會給你解答,這個網站對我的幫助很大,是一個純技術的網站,所有源碼公開,我的AVR就是在這里學會的。呵呵,看起來像是做廣告,不過這個網站的學習環境遠遠比混亂的現實世界好~ 記住:最難能可貴的就是堅持,堅持下去!
Ⅳ 單片機實驗
1、
MOV R0,#20H
MOVX A,@R0
MOV 20H,A
2、
MOV DPTR,#2000H
MOVX A,@DPTR
MOV 20H,A
3、
MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV 20H,A
4、
MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV B,A
MUL AB
MOV R7,A
MOV R6,B;(溢出部分送R6)
5、高八位?低八位?什麼意思?
地址高八位DPH,地址第八位DPL
MOV DPH,#20H
MOV DPL,#00H
Ⅳ 單片機實驗編程
1.
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV P1,#00H
LCALL DELAY
MOV P1,#0FFH
LCALL DELAY
SJMP MAIN
DELAY:
MOV R2,#200
DLY:
MOV R3,$250
DJNZ R3,$
DJNZ R2,DLY
RET
END
2.
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV A,#0FEH
LOOP:
MOV P1,A
LCALL DELAY
SJMP LOOP
DELAY:
MOV R2,#200
DLY:
MOV R3,$250
DJNZ R3,$
DJNZ R2,DLY
RET
END
Ⅵ 單片機實驗——數據傳送實驗
ORG 0000H
LJMP MAIN
ORG 0060H
MAIN:
MOV R0 ,#4800H
MOV R1 ,#5800H
LOOP:
MOVX A ,@R0
MOV R1 ,A
INC R0
INC R1
DJNZ #10H,LOOP
END
Ⅶ 單片機實驗設計
;-------------------------------------
;下列程序,經過編譯、模擬,符合要求:
;-------------------------------------
ORG 0000H
SJMP START
ORG 000BH
SJMP T0_INT
;-------------------------------------
START:
MOV TMOD, #01H
MOV TH0, #9EH
MOV TL0, #58H ;50ms@6MHz
SETB TR0
SETB ET0
SETB EA
MOV R2, #10
LOOP:
CLR PSW.5
CLR P1.1 ;輸出0,這是一個周期的開始.
JNB PSW.5, $ ;等待500ms
CLR PSW.5
JNB PSW.5, $ ;再等待500ms
CLR PSW.5
MOV C, P3.3 ;如果P3.3為低,
CPL C
MOV P1.1, C ;就輸出高,這就是50%占空比.
JNB PSW.5, $ ;繼續等待500ms
CLR PSW.5
SETB P1.1 ;如果到這里才輸出高,就是25%占空比.
JNB PSW.5, $ ;輸出高500ms
SJMP LOOP
;-------------------------------------
T0_INT: ;50ms執行一次.
MOV TH0, #9EH ;重新賦初始值.
MOV TL0, #58H ;50ms@6MHz
DJNZ R2, T0_END ;不到10次,轉到退出.
; ;下列指令都是每隔500ms執行一次.
MOV R2, #10 ;重新設置.
SETB PSW.5 ;每隔500ms,設置一次1
T0_END:
RETI
;-------------------------------------
END
;-------------------------------------
編譯後的機器語言,僅僅用了74位元組
Ⅷ 51單片機小燈實驗
給你第一用匯編第二用C吧,另一半自己搞定。
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV A,#0FEH
MOV R2,#8
LOOP:
MOV P0,A
LCALL DELAY
CLR C
RLC A
DJNZ R2,LOOP
SJMP $
DEALY:
MOV R3,#200
DELAY1:
MOV R4,#250
DJNZ R4,$
DJNZ R3,DELAY1
RET
END
#include<reg51.h>
#define uchar unsigned char
uchar num;
sbit LED=P1^0;
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num>=200)
{
num=0;
LED=~LED;
}
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
LED=0;
while(1);
}
Ⅸ 51單片機應該做哪些實驗
如果是剛開始學習的話,那就買一塊開發板,比如篤行之家的,一般的開發板都會配套好多實驗,你可以先學習基本的實驗,如流水燈,數碼管,點陣,lcd顯示,紅外,AD/DA,繼電器,蜂鳴器等,學完了之後就可以拔高練習。