❶ 單片機流水燈C語言程序(8個燈,依次點亮每個燈,延時500MS)
單片機流水燈C語言程序的源代碼如下:
#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++);
}
(1)單片機源碼文件說明擴展閱讀
51單片機流水燈的源代碼如下
#include<reg51.h>
#include<intrins.h>
voiddelay(inta)
{
inti;
while(a--)for(i=0;i<110;i++);
}
main()
{
inti;
while(1)
{
P0=0xfe;
for(i=0;i<8;i++)
{
P0=_crol_(P0,1);
delay(500);
}
}
}
❷ 單片機C語言的延時程序源碼分析,希望能幫我加註釋,告訴我每句語句的含義謝謝!
H_DATA BIT P3.2 將p3.2引腳命名為H_DATA,以後用H_DATA就能代表P3.2
H_CLK BIT P3.4 同上,將P3.4命名為H_CLK
?PR?DELAY30US SEGMENT CODE 函數DELAY30US聲明
PUBLIC DELAY30US
RSEG ?PR?DELAY30US
; abc XDATA 0A00H
;35.8US
DELAY30US: 函數體
PUSH 05H ;2因為函數用到R5,所以將進入函數之前的R5壓入堆棧,返回前提出
MOV r5,#50 ;25 為R5賦值
DE30S1:
DJNZ r5,DE30S1 ;2*14=28 對R5減一,判斷不等於零跳到DE30S1;等於零退出
POP 05h ;2把進入函數前的R5恢復
RET 函數返回
;******************************************************************
?PR?DELAY10US SEGMENT CODE 聲明DELAY10US函數
PUBLIC DELAY10US
RSEG ?PR?DELAY10US
;16.3US
DELAY10US: DELAY10US函轎段數體
PUSH 05H ;2因為函數用到R5,所以將進入函數之前的R5壓入堆棧,返回前提出
MOV r5, #20 ;10為R5賦值
DE10S1:
DJNZ r5, DE10S1 ;5*2=10對R5減一,判斷不等於零跳到DE10S1;等於零退出
POP 05H ;2把進入函數前的R5恢復
RET 函數返回
?PR?CLSSIGNAL SEGMENT CODE 聲賀雹明函數CLSSIGNAL
PUBLIC CLSSIGNAL
RSEG ?PR?CLSSIGNAL
CLSSIGNAL:
;WHEN SYSTEM SEND INFORMATION TO PINPAD, SEND STOP BIT AT END, THEN NEXT A
;SEND OPERATION. SO WAITTING STOP BIT FINISHED.
CLSL1:
PUSH 05H 因為函數用到R5,所以將進入函數之前的R5壓入堆棧,返回前提出
CLSL1_U:
MOV R5, #6EH 對R5賦值
CLSL2: JNB H_DATA, CLSL1_U 判斷p3.2不為零跳轉,繼續閉拍譽賦初值
JNB H_CLK, CLSL1_U 判斷p3.4不為零,繼續賦初值
DJNZ R5, CLSL2 如果兩個輸入都為零對r5減一,不為零跳到clsl2
POP 05H
RET
END
❸ 單片機上的源代碼和固件有什麼區別
源代碼就是人能看懂的程序代碼,通常說寫程序也就是寫的源代碼;固件是源碼經過編譯過後生成的目標程序,是二進制代碼,一般為bin或hex格式,燒錄進單片機能夠被識別和執行。
❹ 什麼是51單片機源程序
專門為51單片機設計的程序,可以是C程序,也可以是匯編程序。但如果是C程序,兼容性很強,不但51單片機能用,其它類型的CPU也可以用;如果是匯編程序,則指令必須是51單片機指令集規定的。不管是哪種程序,最終生成的二進制機器碼能夠在以8051為核的CPU上正確運行。
❺ 單片機源代碼每一步的作用給予解釋!謝謝
ORG 07B0H
MOV R2,00H;這個錯了嗎?如果有#是將00賦值給R2,如果沒有就是將00H中的值給R2
MOV R3,#00H;00賦值給R3
MOV R4,#10H;10賦值給R4
MOV R5,#00H;00賦值給伍歲姿R5
MOV R6,#00H;00賦值給R6
MOV R7,#08H;08賦值給R7
SE22: MOV DPL,R3;將R3中的數放到寄存器DPTR的低位
MOV DPH,R2;將R2中的數放到寄存器DPTR的高位
MOVX A,@DPTR;將DPTR指向的地址中的值放到A中
MOV DPL,R5;將R5中的數放到寄存器DPTR的低位
MOV DPH,R4;將R4中的數放到寄存器DPTR的高位
MOVX @DPTR,A;將A中的值放到DPTR指向的地址中
CJNE R3,#0FFH,LO42;當R3等於FF時向下執行,否則跳到LO42
INC R2;R2中的值加1
LO42: INC R3;R3中的值加1
CJNE R5,#0FFH,LO43;當R5等於FF時向下執行,否則跳到LO43
INC R4;R4中的值加1
LO43: INC R5;R5中的值加1
CJNE R7,#00H,LO44;當R7等於00時向腔絕下執行,否則跳到LO43
CJNE R6,#00H,LO45;當R6等於00時向下執行,否則跳到LO43
SJMP $;在原地跳
NOP;空雀嘩指令
LO44: DEC R7;R7值自減1
SJMP SE22;跳到SE22
LO45: DEC R7;R7值自減1
DEC R6;R6值自減1
SJMP SE22;跳到SE22
END
❻ 單片機語言 include<reg52.h>是什麼意思
include是預編譯指令,include<reg52.h>的作用就是將52單片機的頭文件reg52.h嵌入源文件中。
預處理器發現 #include 指令後,就會尋找指令後面<>中的文件名,並把這個文件的內容包含到當前文件中。被包含文件中的文本將替換源代碼文件中的#include 指令, 就像把被包含文件中的全部內容鍵入到源文件中的這個位置一樣。
<reg52.h>表示調用了52或者51單片機的資源,也就是可以直接對單片機的相關寄存器與引腳進行操作,十分方便。
(6)單片機源碼文件說明擴展閱讀:
reg52.h中特殊位元組寄存器說明:
sfr P0 = 0x80; // P0口特殊寄存器定址位
sfr P1 = 0x90; // P1口特殊寄存器定址位
sfr P2 = 0xA0; // P2口特殊寄存器定址位
sfr P3 = 0xB0; // P3口特殊寄存器定址位
sfr PSW = 0xD0; //程序狀態字寄存器
sfr ACC = 0xE0; //累加器
sfr B = 0xF0; //B 特殊寄存器
sfr SP = 0x81; //堆棧指針寄存器
sfr DPL = 0x82; //數字指針(低位)
sfr DPH = 0x83; //數字指針(高位)
sfr PCON = 0x87; //電源控制寄存器
sfr TCON = 0x88; //定時器/計數器0和1控制
sfr TMOD = 0x89; //定時器/計數器0和1模式
sfr TL0 = 0x8A; //定時器/計數器0低8位寄存器
sfr TL1 = 0x8B; //定時器/計數器1低8位寄存器
sfr TH0 = 0x8C; //定時器/計數器0高8位寄存器
sfr TH1 = 0x8D; //定時器/計數器1高8位寄存器
sfr IE = 0xA8; //中斷允許寄存器
sfr IP = 0xB8; //中斷優先寄存器(低)
sfr SCON = 0x98; //串口控制寄存器
sfr SBUF = 0x9 9; //串口數據緩沖器
❼ 什麼是單片機源程序
首手鋒配先,源程序就畢指是通過用某種編程語言編碼後,利用編譯器編譯成相應的可執行文件。
那麼單片機的源基銷程序就是,利用keil將寫好的c代碼文件編譯成可執行的.HEX文件。