『壹』 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;
}
}
}