Ⅰ 51單片機中如何用匯編語言編寫流水燈
流水燈就是51單片機控制led燈依次點亮的控制方式。具體程序如下:
ORG 0000H;復位啟動
AJMP START;
ORG 001BH;T1中斷
AJMP T1INT;
;定義變數========================
YSJSEQU 30H;延時計數器
LEDEQU 31H;LED控制緩沖器
;主程序==========================
START:MOV LED,#0FEH;初始化數據
MOV YSJS,#0;
MOV TMOD,#10H;定時器1工作於方式1,16位定時器
MOV TL1,#0B0H;設置定時初值
MOV TH1,#3CH;定時時間=50mS
SETB ET1;使能定時器1中斷
SETB TR1;啟動定時器1
SETB EA;開總中斷
MOV P1,LED;初始化流水燈
LOOP:JMP LOOP;循環等待中斷
T1INT:PUSH PSW;定時器1中斷程序
PUSH ACC;保護現場
MOV TH1,#3CH;定時時間=50mS
MOV TL1,#0B0H;
INC YSJS;
PUSH ACC;保護ACC
MOV A,YSJI;
CJNE A,#2,QT1;50mS*2=100mS
MOV P1,LED;
MOV A,LED;
RL A;累加器A的值循環左移1位
MOV LED,A;
MOV YSJS,#0;
QT1:POP ACC;恢復現場
POP PSW;
RETI;返回主程序
END;匯編程序結束
(1)51單片機匯編學習擴展閱讀:
實現流水燈的三個方法:
第一種,匯流排方法實現流水燈。這是一種比較笨但又最易理解的方法,採用順序程序結構,用位指令控制P1口的每一個位輸出高低電平,加上延時函數,即可控制每個LED燈的亮滅。
第二種,移位方法實現流水燈採用循環程序結構編程。首先在程序開始給P1.0口送一個低電平,其它位為高。然後延時一段時間再讓低電平往高位移動,這樣就實現「流水」的效果了。
第三種,庫函數實現流水燈。利用左移函數進行。
Ⅱ 學51單片機用匯編還是用C語言比較好先學匯編可以嗎
絕對可以,我就是先學習的匯編語言,只有學習了匯編才能真正的了解單片機。。 如果不了解單片機的構造及原理,學c很快就會厭倦。不過c就是簡單點,容易上手, 我先學的是匯編,也感覺不是很難。
Ⅲ 51單片機中如何用匯編語言編寫流水燈
流水燈就是51單片機控制led燈依次點亮的控制方式。具體程序如下:
ORG 0000H ;復位啟動
AJMP START ;
ORG 001BH ;T1中斷
AJMP T1INT ;
;定義變數========================
YSJS EQU 30H;延時計數器
LED EQU 31H;LED控制緩沖器
;主程序==========================
START: MOV LED,#0FEH ;初始化數據
MOV YSJS,#0 ;
MOV TMOD,#10H ;定時器1工作於方式1,16位定時器
MOV TL1,#0B0H ;設置定時初值
MOV TH1,#3CH ;定時時間=50mS
SETB ET1 ;使能定時器1中斷
SETB TR1 ;啟動定時器1
SETB EA ;開總中斷
MOV P1,LED ;初始化流水燈
LOOP: JMP LOOP ;循環等待中斷
T1INT: PUSH PSW ;定時器1中斷程序
PUSH ACC ;保護現場
MOV TH1,#3CH ;定時時間=50mS
MOV TL1,#0B0H ;
INC YSJS ;
PUSH ACC ;保護ACC
MOV A,YSJI ;
CJNE A,#2,QT1 ;50mS*2=100mS
MOV P1,LED ;
MOV A,LED ;
RL A ;累加器A的值循環左移1位
MOV LED,A ;
MOV YSJS,#0 ;
QT1: POP ACC ;恢復現場
POP PSW ;
RETI ;返回主程序
END ;匯編程序結束
(3)51單片機匯編學習擴展閱讀:
實現流水燈的三個方法:
第一種,匯流排方法實現流水燈。這是一種比較笨但又最易理解的方法,採用順序程序結構,用位指令控制P1口的每一個位輸出高低電平,加上延時函數,即可控制每個LED燈的亮滅。
第二種,移位方法實現流水燈採用循環程序結構編程。首先在程序開始給P1.0口送一個低電平,其它位為高。然後延時一段時間再讓低電平往高位移動,這樣就實現「流水」的效果了。
第三種,庫函數實現流水燈。利用左移函數進行。
Ⅳ 51單片機匯編語言編寫一個跑馬燈的程序,初學者做實驗用,具體要求如下,好了可以加分
程序1:
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV SP,#5FH
LOOP:
MOV A,P2
MOV B,A
MOV P0,A
MOV P1,#0FFH
LOOP1:
LCALL DELAY
MOV C,P1.7
MOV A,P0
RLC A
MOV P0,A
MOV A,P1
RLC A
MOV P1,A
MOV A,P2
CJNE A,B,LOOP
SJMP LOOP1
DELAY:
MOV R2,#60
DELAY1:
MOV R3,#250
DJNZ R3,$
DJNZ R2,DELAY1
RET
END
程序2:
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV SP,#5FH
JNB P2.0,LOOP1 ;
JNB P2.1,LOOP2 ;
SJMP MAIN
LOOP1:
MOV P0,#0FEH
MOV P1,#0FFH
LOOP11:
MOV C,P1.7
MOV A,P0
RLC A
MOV P0,A
MOV A,P1
RLC A
MOV P1,A
JNB P2.1,LOOP2
SJMP LOOP11
LOOP2:
MOV P0,#0FCH
MOV P1,#0FFH
LOOP21:
MOV C,P1.7
MOV A,P0
RLC A
MOV P0,A
MOV A,P1
RLC A
MOV P1,A
JNB P2.0,LOOP1
SJMP LOOP21
DELAY:
MOV R2,#60
DELAY1:
MOV R3,#250
DJNZ R3,$
DJNZ R2,DELAY1
RET
END
Ⅳ 各位高手,自學習51單片機匯編要如何開始丫,不懂英語可以自學會嗎
可以。我的英語就是相當爛的。但是我單片機一樣運用的很好。其實你學久了一行。相關的英語文檔多看一點。很快就會學好的。
我當時相當的討厭英語。後來慢慢的學單片機。慢慢的查字典。發現挺有趣的。
像你剛開始。最主要是找一個老鳥給你一些好的建議。讓你入門的時間縮短一點。有很多人就是因為入門難。所以放棄了。你一定要堅持。加油。
Ⅵ 51單片機匯編編程
1:
KEY1 EQU P2.2
KEY2 EQU P2.1
KEY3 EQU P2.0
RED EQU P1.4
YELLOW EQU P1.5
GREEN EQU P1.6
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
SETB RED
SETB YELLOW
SETB GREEN
LP:
JB KEY1,LP1
CLR RED
SJMP LP
LP1:
JB KEY2,LP2
CLR YELLOW
SJMP LP
LP2:
JB KEY3,MAIN
CLR GREEN
SJMP LP
END
2:
KEY1 EQU P2.2
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV R0,#0
LP:
JB KEY1,DISP
JNB KEY1,$
INC R0
CJNE R0,#10,DISP
MOV R0,#0
DISP:
MOV DPTR,#LEDTAB
MOV A,R0
MOVC A,@A+DPTR
MOV P0,A
SJMP LP
TABLE: ; 共陰極數碼管顯示代碼表
DB 3FH,06H,5BH,4FH,66H ;01234
DB 6DH,7DH,07H,7FH,6fh ;56789
END
Ⅶ 51單片機開始要學匯編嗎
我不知道你究竟是問的哪個問題,挨個說一下個人的看法吧! 1.學習51單片機不一定要學匯編,用Keil C足夠了,不過如果學習了匯編並對51寄存器組比較熟的話,對調試和查找問題會有很大好處的。 2.如果你是搞硬體的話,可以盡最大能力學就是了,學到可以自己調試板子,就足夠了。當然,如果學的能編一個很大系統的話,那你就是寶了。 3.C++和JAVA在單片機中基本上是不會用的,當然手機軟體除外,另外學習C++對編一些上位機調試軟體還是比較有幫助的,比如一些串口的調試輔助工具或USB工具等通訊工具,也可以用來編上位機測試軟體,可以事半功倍。 4.學習PCB和單片機找工作都挺容易的,但如果你能夠都比較通的話就更好了。
Ⅷ 51單片機學習板是用來學習C語言的嗎,怎麼有人說用它可以學習匯編語言
可以的,我用的51就是匯編編程,不過C更加好些。比方說流水燈的匯編:
ORG 00H
START:
MOV A, #0FFH
CLR C
MOV R1, #8
LEFT: ;向左流動
RLC A
MOV P1, A
CALL DELAY
DJNZ R1, LEFT
MOV R2, #7
RIGHT: ;向右流動
RRC A
MOV P1, A
CALL DELAY
DJNZ R2, RIGHT
JMP START
DELAY: ;延時200毫秒
MOV R3, #20
D1:
MOV R4, #20
D2:
MOV R5, #248
DJNZ R5, $
DJNZ R4, D2
DJNZ R3, D1
RET
END
如果用C語言的就是:
**************************************************************
文件名稱:flash_led.c
文件說明:流水燈C程序
編寫日期:2006年10月5日
程序說明:MCU採用AT89S51,外接12M晶振,P1口輸出
*************************************************************/
#include //51系列單片機定義文件
#define uchar unsigned char //定義無符號字元
#define uint unsigned int //定義無符號整數
void delay(uint); //聲明延時函數
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8個流水燈逐個閃動
{
P1=~temp;
delay(100); //調用延時函數
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++) //8個流水燈反向逐個閃動
{
P1=~temp;
delay(100); //調用延時函數
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++) //8個流水燈依次全部點亮
{
P1=temp;
delay(100); //調用延時函數
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++) //8個流水燈依次反向全部點亮
{
P1=temp;
delay(100); //調用延時函數
temp>>=1;
}
}
}
void delay(uint t) //定義延時函數
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
建議樓主如果初學就用C語言吧。匯編檢查錯誤比較麻煩的。鄙人就常常為這個問題擔憂。
51單片機是初學者學習的,到後來可以用MSP430單片機,性能相當強大,而且超低功耗,ROM和RAM比51大十幾倍至少。這款單片機也可以用C和匯編,但建議用C。呵呵,加油樓主,學習單片機學進去了是快樂的。
Ⅸ 51單片機匯編程序
ORG 0
CALL KEY_1
CALL KEY_1
CALL KEY_1
CPL P1.0
SJMP 0000
KEY_1:
JB P3.2, $
CALL DL10MS
JB P3.2, KEY_1
JNB P3.2, $
RET
DL10MS:
...;軟體延時,自己編寫吧
RET
Ⅹ 51單片機匯編語言怎麼學容易上手
動手就容易上手!在動手中去理解你會比看什麼都快數倍。最好先淘寶花上幾十元(小錢吧,不定還不夠你一頓飯錢)購一串口直可下載的開發板套件(先和老闆說好會配你一堆堆現成的程序),你就掛在你這計算機上,看到那不懂的了就開機打進去試試!哈!我保你一月就小有成效。交流資料,視屏這網上多的是!嘿!再有解決不了的問題這來找我!