⑴ 51單片機的程序!
1. 你這邏輯不通嘛
2. LED1一直沒滅,第3步有什麼意義?
⑵ 關於51單片機程序
如下:
MOV DPTR, #ST1
MOVX A, @DPTR
MOV B, A
INC DPTR
MOVX A, @DPTR
CJNE A,B, QQQ
QQQ:
JNC WWW
MOV A, B
WWW:
INC DPTR
MOVX @DPTR, A
SJMP $
⑶ 用51單片機編程
單片機中只有一條語句是對進制調整的
DA A 對累加器A的結果進行十進制調整
如果隨意對一個累加器A中的二進制數據進行「二進制轉十進制」調整是沒有任何實際意義的!
DA調整的對象是ADD或ADDC以後的結果,而且是BCD碼相加以後才能夠加以調整,否則沒有實際意義!
比如,現在我想執行12D+39D也就是兩個十進制數相加這樣一個加法(有時候程序處理的需要,數據在單片機中是以BCD碼的形式存儲的,也就是12H和39H(十六進制),但我們可以人為將它們看為12D和39D(十進制),而且還希望相加以後的結果為51H,也就是說符合十進制運算規則12+39=51,而不是4BH的結果),但這樣的十進制加法運算在單片機中是不能夠直接實現的。因為單片機只能夠執行二進制加法指令,也就是所有的運算都按照二進制中的規則進行!
於是就出現了DA調整指令!
現在12H+39H,將12H放於A中,執行 ADD A,#39H指令,則結果為4BH,這不是我們希望的51H的數據形式!!這時執行DA A 指令後,就會將A中的數據調整為51H(具體調整過程和原理你可以詳細看書,如果單片機書中講的不詳細,那麼微機原理中一定說的非常詳細),而我們按照BCD碼規則就將其看為51D,符合我們的要求!
也就是說加數和被加數都是BCD碼的形式,最大也只可能是99H,也就是我們十進制數中的99,只有這樣才會有實際的意義!
所以DA A指令只用於十進制BCD碼加法指令以後,否則是沒有實際意義的!
在單片機中數據就是以二進制存放的也可以說是以16進制存放(4位二進制就是16進制),所以一般來說在單片機只有二進制轉十進制才有意義,通過單片機將十進制轉二進制是沒意義的。 這個一般都是我們自己把一個十進制數轉成二進制再送給單片機處理。
非得編寫程序的話 程序如下
----------------------------------------------------------------------
;二進制整數(2位)轉換為十進制整數(組合BCD碼)
;入口: R3,R4
;出口: R0
IBTD22 : MOV A,R0
PUSH A
MOV R7,#03H
CLR A
IBD221 : MOV @R0,A
INC R0
DJNZ R7,IBD221
POP A
MOV R0,A
MOV R7,#10H
IBD222 : PUSH A
CLR C
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV B,#03H
IBD223 : MOV A,@R0
ADDC A,@R0
DA A
MOV @R0,A
INC R0
DJNZ B,IBD223
POP A
MOV R0,A
DJNZ
--------------------------------------------------
;二進制整數(M位)轉換為十進制整數(組合BCD碼)
;入口: R1,M,N
;出口: R0
IBTDMN : MOV A,R0
MOV R2,A
MOV A,R1
MOV R3,A
MOV B,N
CLR A
IBDMN1 : MOV @R0,A
INC R0
DJNZ B,IBDMN1
MOV A,M
SWAP A
RR A
CLR C
MOV R7,A
IBDMN2 : MOV A,R2
MOV R0,A
MOV A,R3
MOV R1,A
MOV B,M
IBDMN3 : MOV A,@R1
RLC A
MOV @R1,A
INC R1
DJNZ B,IBDMN3
MOV B,N
IBDMN4 : MOV A,@R0
ADDC A,@R0
DA A
JNB ACC.4,IBDMN5
SETB C
CLR ACC.4
IBDMN5 : MOV @R0,A
INC R0
DJNZ B,IBDMN4
DJNZ R7,IBDMN2
MOV A,R2
MOV R0,A
RET
----------------------------------------------------------------
BCD整數轉換為二進制整數(1位)
;入口: R0(高位地址),R7
;出口: R4
IDTB1: CLR A
MOV R4,A
IDB11: MOV A,R4
MOV B,#0AH
MUL AB
ADD A,@R0
INC R0
MOV R4,A
DJNZ R7,IDB11
RET
------------------------------------------
;BCD整數轉換為二進制整數(N位)
;入口: R1(高位地址),M,N
;出口: R0
IDTBMN : MOV A,R0
MOV R2,A
MOV B,N
CLR A
IDBMN1 : MOV @R0,A
INC R0
DJNZ B,IDBMN1
MOV A,R2
MOV R0,A
MOV A,M
MOV NCNT,A
IDBMN2 : MOV R7,N
CLR A
CLR F0
IDBMN3 : XCH A,@R0
MOV B,#0AH
MUL AB
MOV C,F0
ADDC A,@R0
MOV F0,C
MOV @R0,A
INC R0
MOV A,B
DJNZ R7,IDBMN3
MOV A,R2
MOV R0,A
MOV A,@R1
INC R1
ADD A,@R0
MOV @R0,A
DJNZ NCNT,IDBMN2
RET
----------------------------------------------------------
NDIV31 : MOV A,R2
MOV B,R7
DIV AB
PUSH A
MOV R2,B
MOV B,#10H
NDV311 : CLR C
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV F0,C
CLR C
SUBB A,R7
JB F0,NDV312
JC NDV313
NDV312 : MOV R2,A
INC R4
NDV313 : DJNZ B,NDV311
POP A
CLR OV
JZ NDV314
SETB OV
NDV314 : XCH A,R2
MOV R7,A
RET
⑷ 51單片機的程序
你好,缺少紅圈處的三個頭文件
⑸ 51單片機下載程序
可以做個上位機軟體,把編程的數據按順序發送到單片機,單片機收到後按一定的順序寫入到目標單片機的ROM中或FLASH中。
首先要有上位機軟體。
其次,下位機單片機要有介面(串口或USB)從電腦收數據,
收數據後,用電路和軟體結合的方法把數據寫入目標單片機。
⑹ 51單片機程序
ORG 0000H
JMP START
ORG 0100H
START:MOV P3,#FFH
JB P3.0,L1
JB P3.1,L2
AJMP START
L1:SETB P1.0
AJMP START
L2:SETB P1.1
AJMP START
⑺ 51單片機程序解釋
這四個端子在74LS164中,CLK的意思是時鍾信號,DINA,DINB分別指date input A和data input B(數據輸入A和B),CLEAR指清零端。程序的定義是把這個四端子分別定義在單片機的P3.2P到3.5端子上。
⑻ 求51單片機程序
//利用單片機軟體延時,使P0口外接的8個發光二極體以1位1s的速度,輪流發光。
#include<reg52.h>
#include<intrins.h>
#define ucha unsigned char
#define uint unsigned int
//----------------------------
ucha a;
//----------------------------
void main()
{
uint i, j;
a = 0xfe;
while(1) {
a = _crol_(a, 1);
P0 = a;
for(i = 250; i > 0; i--) //延時
for(j = 500; j > 0; j--);
}
}
//============================