導航:首頁 > 操作系統 > 51單片機中如何用匯編語

51單片機中如何用匯編語

發布時間:2022-07-19 21:28:10

『壹』 51單片機,這個函數用匯編語言應該怎麼寫

SPI_WRITE:
MOV R2,#8
CLR CLK
LOP:
RRC A
MOV DIN,C
CLR CLK
SETB CLK
DJNZ R2,LOP
RET

『貳』 51單片機中,C語言中怎麼加入匯編語言

C語言的執行效率比匯編高很多,為什麼要加匯編呢,C語言中不直接加入匯編,少數的匯編指令你可以在開頭宏定義一下,比如#define _NOP()_ nop();

『叄』 在89C5151單片機中怎麼編寫匯編語言

單片機中當然不能編寫匯編程序了啊,先應該在編譯環境中編譯,常用的是偉幅編譯軟體,把編譯生成的HEX文件再燒到單片機中去,就可以實現控制了。學單片機匯編需要兩個重要軟體,一個是編程軟體WAVE(偉幅)另還要模擬軟體Proteus 7 Professional。

『肆』 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 ;匯編程序結束

(4)51單片機中如何用匯編語擴展閱讀:

實現流水燈的三個方法:

第一種,匯流排方法實現流水燈。這是一種比較笨但又最易理解的方法,採用順序程序結構,用位指令控制P1口的每一個位輸出高低電平,加上延時函數,即可控制每個LED燈的亮滅。

第二種,移位方法實現流水燈採用循環程序結構編程。首先在程序開始給P1.0口送一個低電平,其它位為高。然後延時一段時間再讓低電平往高位移動,這樣就實現「流水」的效果了。

第三種,庫函數實現流水燈。利用左移函數進行。

『伍』 用匯編語言編寫一個51單片機的程序

首先搞清LED管是高電平導通還是低電平導通。
如果是低電平導通,P1賦0x00時,發光管全亮,0xff時,全滅。
具體程序:
#define uint unsigned int
#define uchar unsigned char
void delay(uint time_out)
{
uint i,j;
for(i=0;i<time_out;i++)
{
for(j=0;j<110;j++)
{;}
}
}

void main(){
while(1)
{
P1=0xfe; //第1個管亮
delay(500);
P1=0xfd; //第2個管亮
delay(500);
P1=0xfb; //依次類推
delay(500);
P1=0xf7;
delay(500);
P1=0xef;
delay(500);

P1=0xdf;
delay(500);

P1=0xbf;
delay(500);

P1=0x7f;
delay(500);
}
}

程序大致如此,delay函數負責延遲500ms.有問題自己再調試調試

『陸』 51單片機編程題,用匯編語言怎麼做

在8051單片機的時鍾頻率為6MHz,那麼定時器的計數脈沖周期就是 2uS;

sbit CP=P1^0;

void Timer0_init()

{

TMOD |=0x01; //T0定時器,方式1,採用16位定時器

TH0 = (65536-500)/256; //定時器裝初值500, 即 1000uS 中斷一次

TL0 = (65536-500)%256;

EA=1; ET0=1; TR0=1;

}


void timer0() interrupt 1

{

TH0 = (65536-500)/256; //定時器裝初值500, 1mS 中斷一次

TL0 = (65536-500)%256;

CP=~CP; //改變脈沖信號的輸出狀態

}


void main()

{

Timer0_init();

CP=0;

while(1) { }

}


匯編語言,才看到,算了,你別人的回答吧

『柒』 在51單片機中,使用匯編語言,如何將十六進制數轉換成十進制。

程序經過模擬調試通過,如下所示:

MOV R0, TL0
MOV R1, TH0
CLR A
MOV R2, A, ;先清零
MOV R3, A,
MOV R4, A,
MOV R5, #16 ;共轉換十六位數
LOOP:
CLR C
MOV A, R0 ;從待轉換數的高端移出一位到Cy
RLC A
MOV R0, A
MOV A, R1
RLC A
MOV R1, A
MOV A, R4 ;送到BCD碼的低端
ADDC A, R4 ;帶進位加。自身相加,相當於左移一位
DA A ;十進制調整,變成BCD碼
MOV R4, A
MOV A, R3
ADDC A, R3
DA A
MOV R3, A
MOV A, R2
ADDC A, R2
MOV R2, A
DJNZ R5, LOOP ;共轉換十六位數
;-------至此,已經把TH1 TL1中的數字,轉換成BCD碼,送到了R2 R3 R4。
;-------下面,分別存入R4 R3 R2 R1 R0。
MOV A, R4
MOV B, #16
DIV AB
MOV R1, A
MOV R0, B

MOV A, R2
MOV R4, A

MOV A, R3
MOV B, #16
DIV AB
MOV R3, A
MOV R2, B
RET
;完

『捌』 c51單片機中如何用匯編語言編寫流水燈

51單片機用匯編語言編寫流水燈程序,就是控制多個LED
,使其在特定時間間隔內,只有一個LED
發光,其他熄滅,用這種方式順序移動點亮LED的位置,就形成了流水燈的效果。以下是程序:
;假設晶振12MHZ,P1控制8個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
;匯編程序結束

『玖』 在C51語言中如何嵌入匯編語言

keil C 語言中嵌入匯編語言進行混合編程,方法如下:

1、在C 文件中要嵌入匯編代碼片以如下方式加入匯編代碼

#pragma ASM

; Assembler Code Here

#pragma ENDASM

2、在Project 窗口中包含匯編代碼的C 文件上右鍵,選擇「Options for ...」

4、編譯,即可生成目標代碼

實例:

#include<reg52.h>

#define uchar unsigned char

sbit LED1=P1^0;

//C 嵌入匯編常式

void delay_ms(void)

{

#pragma asm

MOV R0,#0FFH

MOV R1,#0FFH

D_LOOP1:

DJNZ R0,D_LOOP1

MOV R0,#0FFH

DJNZ R1,D_LOOP1

#pragma endasm

}

void main(void)

{

uchar i;

P1 = 0xFF;

while(1)

{

i++;

delay_ms();

if(i>=7)

{

LED1 =~LED1;

i=0;

}

}

}

閱讀全文

與51單片機中如何用匯編語相關的資料

熱點內容
伺服器地址跟蹤 瀏覽:974
免費google雲伺服器 瀏覽:516
摘譯和編譯的英文 瀏覽:359
熱泵壓縮機選型 瀏覽:121
op手機微信加密如何解除 瀏覽:386
如何在王牌戰爭找到高爆率伺服器 瀏覽:13
江浙小學語文輔導課用什麼APP 瀏覽:99
新夢幻大陸伺服器地址 瀏覽:241
網吧伺服器怎麼更換壁紙 瀏覽:530
linux命令方法 瀏覽:332
linux下載freetype 瀏覽:123
程序員入駐平台 瀏覽:327
程序員大戰外掛 瀏覽:745
html實例教程pdf 瀏覽:157
linux命令開放所有許可權 瀏覽:575
30歲能學會編程 瀏覽:737
小火箭的伺服器是什麼 瀏覽:967
cad查信息命令 瀏覽:402
XP禁止新建文件夾 瀏覽:394
程序員的悲慘生活 瀏覽:207