導航:首頁 > 編程語言 > 8051匯編程序

8051匯編程序

發布時間:2022-09-19 05:35:44

⑴ 用匯編語言編程 8051

簡單提示一下思路(條件1南北的是綠燈吧),P0口注意上拉電阻的問題,12盞燈,6盞一組,分別接在6個管腳上,開始時東西紅燈和南北綠燈亮,定時2s,綠燈滅,點亮黃燈;定時1s,黃燈滅,紅燈綠燈按要求變化。如此循環即可。在定時中斷服務程序中CPL P0.x ;即可改變燈的亮滅狀態。不想用中斷也可以用循環延時。

⑵ 8051單片機的匯編程序編程問題!!!

既然向我求助,那我就寫一下大概的思路和C語言程序,至於匯編語言,兄弟可自己由C語言翻譯,我今天的確沒太有時間.
周期為2個ms的方波,也就是說半個周期為1ms,也就是說,P1.2每1ms翻轉一次;
同理,P1.3每3.5ms翻轉一次,因為只能用一個定時器,所以,取1ms和3.5ms的最大公約數,是0.5ms,也就是說,讓定時器0.5ms中斷一次,然後每兩個中斷,翻轉一次P1.2,每7個中斷翻轉一次P1.3;
這就是編程思路,那麼我們來看具體的編程細節;
6Mhz,也就是指令周期是2us,0.5ms需要250個計數,250<256,為了速度和效率,我們讓定時器1工作在自動重載模式下,也就是模式2;

C語言整個程序編程如下;

#include <reg52.h>
bit P1_2_Turn_Cnt = 0; //----用於P1.2的計數翻轉,因為只有兩次,大可不必用unsigned char類型的
unsigned char P1_3_Turn_Cnt = 0; //----用於P1.3的計數翻轉,因為要7次,所以用unsigned char
sbit P1_3 = P1^3;
sbt P1_2 = P1^2;
void main(void)
{
//----初始化定時器,工作在模式2,自動重載,開中斷,每0.5ms中斷一次
TH1 = 256 - 250; //----設置定時器,250 X 2us = 500us = 0.5ms
TL1 = 256 -250;
TMOD = 0x20; //----定時器/計數器1 工作在模式2下;
ET1 = 1; //----開定時器1中斷
TR1 = 1; //-----啟動定時器
EA = 1; //----開總中斷
while(1); //----定時器初始化完成,方波工作在定時器內部完成;
}

void ISR_Timer1(void) interrupt 3
{
P1_2_Turn_Cnt = ~P1_2_Turn_Cnt;//---P1_2翻轉計數,由於初始化為0,所以第1次會翻轉為1;
//---由此推論,奇數次翻轉後狀態為1,偶數次中斷會翻轉為
//---0,所以當P1_2_Turn_Cnt = 0時,P1_2翻轉.
if(P1_2_Turn_Cnt == 0)
{
P1_2 = ~P1_2;
}
P1_3_Turn_Cnt++;
if(P1_3_Turn_Cnt >= 7)
{
P1_3_Turn_Cnt = 0;
P1_3 = ~P1_3;
}
}

以上就是這個程序實現的全部過程,你可以自己手動翻譯成匯編語言,也可以用Keil的Debug模式自動翻譯,因為我時間有限,所以就不給你翻譯了,請見諒!

⑶ 編寫簡單的8051匯編語言程序(用KEIL編程環境)

1. ORG 0000H
MOV DPTR,#20H
MOV A,@DPTR
MOV 20H,30H
MOV 30H,A
RET

ORG 0000H
PUSH 20H
PUSH 30H
POP 20H
POP 30H
RET

2. ORG 0000H
MOV A,#34H
ADD A,78H
MOV R2,A
MOV A,12H
ADDC A,56H
MOV R1,A
RET

3. ORG 0000H
MOV R0,#10
MOV DPTR,#2FH
LOOP: INC DPTR
MOV A,@DPTR
CLR A
DJNZ R0,LOOP
RET

4.
DELAY: MOV R0,#4
D1: MOV R1,#297
D2: DJNZ R1,D2
DJNZ R0,D1
RET

⑷ 8051單片機的數字鍾匯編程序

ORG 0000H ;程序執行開始地址
LJMP START ;跳到標號START執行
ORG 0003H ;外中斷0中斷程序入口
LJMP REMO ;外中斷0中斷返回
ORG 000BH ;定時器T0中斷程序入口
LJMP TIME0 ;跳至INTTO執行
ORG 0013H ;外中斷1中斷程序入口
RETI ;外中斷1中斷返回
ORG 001BH ;定時器T1中斷程序入口
LJMP TIME1 ;跳至TIME1執行
ORG 0023H ;串列中斷程序入口地址
RETI ;串列中斷程序返回
;
TIME1: RETI
;
TIMEADD EQU 30H;30H做為軟體計數緩存
DISP1 EQU 31H;31H做為第一位顯示緩存
DISP2 EQU 32H;32H做為第二位顯示緩存
DISP3 EQU 33H;33H做為第三位顯示緩存
DISP4 EQU 34H;34H做為第四位顯示緩存
SECLED EQU P1.0;秒點顯示P1.0
HALFSEC EQU 35H;半秒計數緩存
UPKEY BIT P2.7;定義P2.7是UP鍵
SETKEY BIT P2.0;定義P2.0是SET鍵
BUZZ BIT P2.5;
;
;第1位使能P2.1
;第2位使能P2.2
;第3位使能P2.3
;第4位使能P2.4
;
ORG 0030H;
;
START:
MOV SP,#5FH;放堆棧
MOV P2,#0FFH;把P2置高
CLR P2.5;把p2.5置0
LCALL BUZZER;發出滴聲
LCALL BUZZER;按鍵滴聲
MOV TIMEADD,#0;軟體計數器清零
MOV TMOD,#11H;TIME0工作於方式1,TIME1工作於方式1
MOV TH0,#3CH;
MOV TL0,#0B0H;放定時預置數15536
MOV IE,#8BH;開INT0,TIME0,TIME1
MOV IP,#02H;TIME0中斷優先
SETB IT0;外部中斷0為負跳變方式觸發
SETB TR0;開始計數
MOV DISP1,#00H;
MOV DISP2,#00H;
MOV DISP3,#00H;
MOV DISP4,#00H;把所有顯示緩存清零
MOV HALFSEC,#00H;把半秒計數緩存清零
MOV DPTR,#TAB;

SCAN:
MOV A,DISP1;把第一位顯示緩存送入A
MOVC A,@A+DPTR;查表
SETB P2.4;
CLR P2.1;第一位顯示使能
MOV P0,A;查表得到的7段碼送給P0去顯示
LCALL DELAY;延時
MOV P0,#0FFH;顯示一小段時間後關掉7段顯示,去顯示下一位

MOV A,DISP2;
MOVC A,@A+DPTR;
SETB P2.1;
CLR P2.2;
MOV P0,A;
LCALL DELAY;
MOV P0,#0FFH;

MOV A,DISP3;
MOVC A,@A+DPTR;
SETB P2.2;
CLR P2.3;
MOV P0,A;
LCALL DELAY;
MOV P0,#0FFH;

MOV A,DISP4;
MOVC A,@A+DPTR;
SETB P2.3;
CLR P2.4;
MOV P0,A;
LCALL DELAY;
MOV P0,#0FFH;

JNB SETKEY,ADJUST;按鍵按下時去調整時間

;以下是進位程序
MOV A,DISP1;把第一位緩存送入A
CJNE A,#10,SCAN;如果第一位不等於10繼續掃描
MOV DISP1,#00H;如果第一位等於10了就把第一位清零

INC DISP2;第二位加1
MOV A,DISP2;
CJNE A,#6,SCAN;如果第二位不等於6繼續掃描
MOV DISP2,#00H;

INC DISP3;
MOV A,DISP4;
CJNE A,#2,PM;
MOV A,DISP3;
CJNE A,#4,SCAN;
MOV DISP3,#00H;
AJMP DIS4;

PM:
MOV A,DISP3;
CJNE A,#10,SCAN;
MOV DISP3,#00H;

DIS4:
INC DISP4;
MOV A,DISP4;
CJNE A,#3,SCAN;
MOV DISP4,#00H;

AJMP SCAN;
;
DELAY: ;延時子程序
MOV R7,#2
NOP
D1: MOV R6,#2
DJNZ R6,$
DJNZ R7,D1
RET
;
TAB: DB 88H,0EBH,91H,0A1H,0E2H,0A4H,84H,0E9H,80H,0A0H,0C0H,86H,9CH,83H,94H,0D4H,0FFH
;
;
;
;
;下面程序為設置時間用
ADJUST:
LCALL ADJDELAY;
JB SETKEY,SET1;
LCALL BUZZER;按鍵滴聲
JNB SETKEY,$
CLR TR0; 暫時關閉計時

ADJ4:
SETB P2.1;
CLR P2.4;
MOV A,DISP4;
MOVC A,@A+DPTR;
MOV P0,A;顯示第四位
JNB SETKEY,ADJ8;如果設置鍵有動作去調節第3位
JB UPKEY,ADJ4;加鍵是否按下
LCALL ADJDELAY;
JB UPKEY,ADJ4;延時後再檢查加鍵是否按下
LCALL BUZZER;按鍵滴聲
JNB UPKEY,$;等待加鍵松開
INC DISP4;第四位加1
MOV A,DISP4;
CJNE A,#3,ADJ4;第四位不等於3轉移
MOV DISP4,#00H;第四位等於3清零
AJMP ADJ4;再去顯示第四位

ADJ8:
LCALL ADJDELAY;
JB SETKEY,ADJ4;
LCALL BUZZER;按鍵滴聲
JNB SETKEY,$;

ADJ3:
SETB P2.4;
CLR P2.3;
MOV A,DISP3;
MOVC A,@A+DPTR;
MOV P0,A;顯示第三位
JNB SETKEY,ADJ7;
JB UPKEY,ADJ3;
LCALL ADJDELAY;
JB UPKEY,ADJ3;
LCALL BUZZER;按鍵滴聲
JNB UPKEY,$;
INC DISP3;第3位加1
MOV A,DISP4;
CJNE A,#2,PM1;
MOV A,DISP3;
CJNE A,#4,ADJ3;第3位不等於4轉移
MOV DISP3,#00H;第四位等於3清零
AJMP ADJ3;再去顯示第四位

PM1:
MOV A,DISP3;
CJNE A,#10,ADJ3;
MOV DISP3,#00H;
AJMP ADJ3;

SET1:
LCALL BUZZER;按鍵滴聲
LCALL BUZZER;按鍵滴聲
JNB SETKEY,$;
NOP;
MOV HALFSEC,#00H;清零秒針
SETB TR0;
LJMP SCAN;

ADJ7:
LCALL ADJDELAY;
JB SETKEY,ADJ3;
LCALL BUZZER;按鍵滴聲
JNB SETKEY,$;

ADJ2:
SETB P2.3;
CLR P2.2;
MOV A,DISP2;
MOVC A,@A+DPTR;
MOV P0,A;顯示第二位
JNB SETKEY,ADJ6;
JB UPKEY,ADJ2;
LCALL ADJDELAY;
JB UPKEY,ADJ2;
LCALL BUZZER;按鍵滴聲
JNB UPKEY,$;
INC DISP2;第2位加1
MOV A,DISP2;
CJNE A,#6,ADJ2;第2位不等於6轉移
MOV DISP2,#00H;第2位等於6清零
AJMP ADJ2;再去顯示第2位

ADJ6:
LCALL ADJDELAY;
JB SETKEY,ADJ2;
LCALL BUZZER;按鍵滴聲
JNB SETKEY,$;

ADJ1:
SETB P2.2;
CLR P2.1;
MOV A,DISP1;
MOVC A,@A+DPTR;
MOV P0,A;顯示第一位
JNB SETKEY,ADJ5;如果SET鍵有動作轉去抖
JB UPKEY,ADJ1;
LCALL ADJDELAY;
JB UPKEY,ADJ1;
LCALL BUZZER;按鍵滴聲
JNB UPKEY,$;
INC DISP1;第1位加1
MOV A,DISP1;
CJNE A,#10,ADJ1;第1位不等於10轉移
MOV DISP1,#00H;第1位等於10清零
AJMP ADJ1;再去顯示第1位

ADJ5:
LCALL ADJDELAY;
JB SETKEY,ADJ1;
AJMP SET1;

ADJDELAY:;是不是延時40MS?
MOV R7,#200
D3: MOV R6,#100
DJNZ R6,$
DJNZ R7,D3
RET

BUZZER: MOV R6,255;蜂鳴子程序
BUZZ1: CPL BUZZ;
MOV R7,#80;
DJNZ R7,$;
DJNZ R6,BUZZ1;
CLR BUZZ;
RET

;以上為設置時間用
;
REMO:
RETI;
;
;
;
TIME0:; TIME0中斷處理程序
MOV TH0,#3CH;
MOV TL0,#0B6H;重新放定時預置數15542,用預置數較正時間。
PUSH ACC;機器周期2
PUSH PSW;機器周期2
INC TIMEADD;軟體計數器加1,機器周期1
MOV A,TIMEADD;加1後送給A,機器周期1
CJNE A,#10,T_RET;如果A不等於10跳到T_RET,機器周期2
CPL SECLED;取反秒點LED,軟體計數器計時半秒,機器周期1
MOV TIMEADD,#00H;軟體計數器清零,機器周期1
INC HALFSEC;秒加1,機器周期1
MOV A,HALFSEC;機器周期1
CJNE A,#120,T_RET;把秒針緩存和120比較,不等跳轉T_RET,機器周期2
INC DISP1;第一位顯示加1,機器周期1
MOV HALFSEC,#00H;清零秒針,機器周期1
T_RET:
POP PSW
POP ACC
RETI

END

⑸ 8051單片機匯編程序請教

你的第二次修改,還有一處不足:
……
;CLR C
MOV DPTR,#TABLE
LOOP:
CLR A ;這里少了一句,下面每次讀出的,
;就不知道是什麼了
MOVC A,@A+DPTR
JNZ CONT_P
INC R2
SJMP NEXT
……

可以正常計數的程序如下。
;=========================================
ORG 0H
MOV A,#00H
MOV R2,A
MOV R3,A
MOV R4,A
MOV R6,A
MOV R5,#40
;CLR C
MOV DPTR,#TABLE
LOOP:
CLR A
MOVC A,@A+DPTR
JNZ CONT_P
; CJNE A,#00H,CONT_P
INC R2
SJMP NEXT
CONT_P:
JB ACC.7, CONT_N
INC R3
SJMP NEXT
CONT_N:
INC R4
NEXT:
INC DPTR
DJNZ R5, LOOP
MOV P0,R4
SJMP $
; 實際個數 保存單元 統計個數
;零個數 14 R2 21
;正數個數 19 R3 19
;負數個數: 7 R4 0
;其實是零和負數沒有分開統計,請高手指教一下,謝謝!

ORG 400H
TABLE:
DB 01H, 15H, 22H,0FFH, 00H, 02H, 09H,0F9H, 00H, 00H
DB 01H, 15H, 22H,0FFH, 00H, 02H, 09H,0F9H, 00H, 00H
DB 01H, 15H, 22H,0FFH, 00H, 02H, 09H,0F9H, 00H, 00H
DB 02H, 05H, 00H,0FFH, 26H, 34H, 00H, 00H, 00H, 00H
END

⑹ 在keilC中8051匯編程序語言格式

嘿嘿 keilC中8051匯編程序語言格式是:
[ 標號: ] 操作碼 操作數,操作數 [;注釋]
例如:
MAIN: MOV A,#69H ;將立即數送累加器A。

呵呵 滿意 就選滿意回答嘍

⑺ 求幫修改8051匯編跑馬燈程序:

org 0000h ;程序從0000開始運行
Ljmp main
org 0030h
main: ;主程序循環點亮
mov p1,#0FFh
lcall delay ;延時一段時間
loop1: mov a,#0feh ;每次只亮一個燈。
loop: mov p1,a ;輸出到p1
lcall delay ; 延時調DELAY時間延時

RL A ;此3句用來點亮P1.2
mov p1,a ;輸出到p1
lcall DELAY1 ;延時一段時間

RL A ;此四句用來點亮P1.4因為左移兩個
mov p1,a ;輸出到p1
lcall DELAY1 ;延時一段時間調DELAY1時間延時
LJMP loop1 ;加這個就循環啦

DELAY1:MOV R4,#25 ;延時子程序,12M晶振延時1.001秒此7句為1S延時子程序供主程序調用
L3: MOV R2 ,#200
L1: MOV R3 ,#248
L2: DJNZ R3 ,L2
DJNZ R2 ,L1
DJNZ R4 ,L3
RET

delay: mov r5,#20 ;延時子程序1閃爍燈調用此7句為延時子程序供主程序調用
d1:mov r6,#20
d2: mov r7,#250
djnz r7,$
djnz r6,d2
djnz r5,d1
ret

end

⑻ 8051的匯編語言程序具有很強的通用性嗎

首先匯編語言本身就與通用性不搭界,所以談不上強通用性
其次8051匯編語言編制的程序只能在
51單片機
平台上運行
第三,每一個8051
匯編語言程序
只對應與其相應的
硬體環境
,否則得不到想要的結果。

⑼ 怎樣運行8051單片機匯編程序

如有了源程序,你可以下載個KEIL軟體,在軟體環境里就可以運行匯編程序了,
如想在硬體上運行,可以把KEIL里編譯過的文件通過另一個燒寫軟體寫入單片機里運行

⑽ 8051的匯編語言程序具有很強的通用性嗎

首先匯編語言本身就與通用性不搭界,所以談不上強通用性
其次8051匯編語言編制的程序只能在51單片機平台上運行
第三,每一個8051匯編語言程序只對應與其相應的硬體環境,否則得不到想要的結果。

閱讀全文

與8051匯編程序相關的資料

熱點內容
什麼樣的app上買機票最便宜 瀏覽:985
安卓如何查看異常重啟 瀏覽:715
解壓音樂排名 瀏覽:383
安卓手機瀏覽器怎麼掃二維碼 瀏覽:715
通達信成本均線源碼 瀏覽:614
可以下載的解壓音頻 瀏覽:564
海賊王怎麼換伺服器 瀏覽:318
計算機上的共享文件夾映射 瀏覽:940
榮耀安裝包在文件夾哪裡 瀏覽:196
機票php源碼 瀏覽:232
linux共享mac 瀏覽:924
中國沒有國外的伺服器地址 瀏覽:759
為什麼退款伺服器連接錯誤 瀏覽:557
android簡訊存儲位置 瀏覽:972
unix網路編程卷4 瀏覽:808
找靚機app下單什麼時候發貨 瀏覽:413
android一個應用兩個進程 瀏覽:803
linux硬碟復制 瀏覽:808
php圖片伺服器搭建 瀏覽:801
下載壓縮文件怎麼打開 瀏覽:194