① 單片機循環
程序沒有毛病,樓主希望得到什麼樣的結果?
------------------
程序沒有毛病,用proteus7中模擬的時候,速度太快了不行。
下面程序,只是把延時時間加大了,模擬就可以了。
org 0000h
ajmp main
main:
mov r5, #0h
loop:
call disp
call delay
ajmp loop
disp:
mov DPTR, #table
mov a, r5
movc A, @a+DPTR
mov p0, a
dec r5
cjne r5, #-1, dell
mov r5 , #9
dell:
ret
delay:
mov r4, #100
mov r7, #0x0a
LL1:
mov r6, #-1
djnz r6, $
djnz r7, LL1
djnz r4, LL1
ret
table:
db 3fh,06h,5bh,4fh,66h
db 6dh,7dh,07h,7fh,6fh
end
② 單片機問題,急急~
1.
ORG 0000H
AJMP START
ORG 0030H
START:
MOV DPTR,#0050H ;外部存儲器首地址
MOV R0,#9 ;計數器
MOV A,#0 ;A清零
LOOP:
MOVX @DPTR,A ;將A的內容(0)送到外部RAM
INC DPTR ;下一個地地址
DJNZ R0,LOOP ;沒有完成則繼續
SJMP $
END
2.
方法1:
(演算法:11+12+13+……+50=(11+50)*20)
程序:
ORG 0000H
AJMP START
ORG 0030H
START:
MOV R2,#11 ;最小數
MOV R3,#50 ;最大數
MOV R4,#20 ;倍數
MOV A,R2 ;取最小數
ADD A,R3 ;求最小數與最大數之合
MOV B,R4 ;取倍數
MUL AB ;求所有數之合
MOV R0,A ;低位送R0
MOV R1,B ;高位送R1
SJMP $
END
方法1:
(演算法:一個一個加)
程序:
ORG 0000H
AJMP START
ORG 0030H
START:
MOV R2,#11 ;被加數(從11開始)
MOV R3,#40 ;個數
MOV A,#0 ;清除A
MOV B,#0 ;清除B
MOV R0,#0 ;清除R0
LOOP:
MOV A,R0 ;低位求和
ADD A,R2
MOV R0,A
MOV A,B ;高位求和
ADDC A,#0
MOV B,A
INC R2
DJNZ R3,LOOP ;沒有加完則繼續
MOV R1,B ;保存高位數據到R1
SJMP $
END
3.
;定時器選用T0
;工作方1
;時間常數計算公式:(1) T=(65536-X)*(12/fosc)
; (2) 12/fosc=12/12MHz=1us
; (3) T=2ms=2000us
;由(1)(2)(3)得到:(4)X=65536-2000=61536=0F060h
;TH0=0F0h,TL0=060h
程序:
ORG 0000H
AJMP INI ;程序入口
ORG 000BH
AJMP T0_INT ;T0中斷入口
ORG 0030H
;初始化
INI:
MOV TMOD,#01H ;設置定時器T0工作方式1
MOV TH0,#0F0h ;裝載時間常數
MOV TL0,#060H
SETB EA ;開啟中斷響應
SETB ET0
SETB TR0 ;啟動定時器T0
SJMP $
;定時器中斷程序
T0_INT:
MOV TH0,#0F0h ;重裝時間常數
MOV TL0,#060H
RETI
END
③ 單片機編程
亂寫的,湊合看吧:
ORG 2000H
CLR A
MOV R7,#0
MOV R6,#0
MOV R5,#30
MOV R4,#20
MOV R3,#50H
MOV R2,#20H
LOOP1: MOV A,@R4
JNB ACC.7,LOOP2 ;判斷符號數的正負
INC @R3
MOVX @R3,A ;負數存入外存中51H開始的單元中
INC @R7 ;負數個數 1
LOOP2: INC @R2
MOVX @R2,A ;正數存入外存中21H開始的單元中
INC @R6 ;正數個數 1
CJNE A,#64H,LOOP3
SJMP LOOP4
LOOP3: JNC LOOP4
MOV B,#0AH ;小於100的數改成壓縮BCD碼送還至原地址單元
DIV AB
SWAP A
ADD A,B
MOV @R4,A
LOOP4: MOV @R4,#0AAH ;不小於100的數改為AAH送還至原地址單元
INC @R4
DJNZ R5,LOOP1
MOV DPTR,#20H ;正數的個數存放至外存區20H單元中 MOV A,@R6
MOVX @DPTR,A
MOV DPTR,#50H ;負數的個數存放在外存區50H單元中
MOV A,@R7
MOVX @DPTR,A
SJMP $
上邊的幾個回答- -...此程序若還有錯誤請及時聯系我修改,謝謝先!
另:各位參考的童鞋切記要加相關注釋,多少做點改動,被老師認為雷同的渣就概不負責了哈。
So,建兄,渣就不多解釋了。
④ 單片機C語言編程
KEY4EQU30H
KEY2EQU31H
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
CLREA
MOVSP,#5FH
MOVKEY2,#0
MOVKEY4,#0
LOOP:
JBP1.0,LOOP
MOVR7,#10
LCALLDELAY
JBP1.0,LOOP
JNBP1.0,$
MOVP3,#0C0H
LOOP0:
LCALLKEYDEAL
MOVA,KEY4
JNZLOOP41
MOVA,P3
ANLA,#0F0H
ORLA,#0EH
MOVP3,A
SJMPLOOP21
LOOP41:
DECA
JNZLOOP42
MOVA,P3
ANLA,#0F0H
ORLA,#0DH
MOVP3,A
SJMPLOOP21
LOOP42:
DECA
JNZLOOP43
MOVA,P3
ANLA,#0F0H
ORLA,#0BH
MOVP3,A
SJMPLOOP21
LOOP43:
DECA
JNZLOOP21
MOVA,P3
ANLA,#0F0H
ORLA,#07H
MOVP3,A
LOOP21:
MOVA,KEY2
JNZLOOP22
MOVA,P3
ANLA,#0FH
ORLA,#20H
MOVP3,A
SJMPLOOP3
LOOP22:
DECA
JNZLOOP3
MOVA,P3
ANLA,#0FH
ORLA,#10H
MOVP3,A
LOOP3:
LJMPLOOP0
;----------------------------
DELAY:
MOVR2,#2
DLY1:
MOVR3,#250
DJNZR3,$
DJNZR2,DLY1
DJNZR7,DELAY
RET
;-----------------------------
KEYDEAL:
JBP1.1,KEYEN1
MOVR7,#10
LCALLDELAY
JBP1.1,KEYEN1
JNBP1.1,$
INCKEY4
MOVA,KEY4
ANLA,#03H
MOVKEY4,A
KEYEN1:
JBP1.2,KEYEN2
MOVR7,#10
LCALLDELAY
JBP1.2,KEYEN2
JNBP1.2,$
INCKEY2
MOVA,KEY2
ANLA,#01H
MOVKEY2,A
KEYEN2:
RET
;-----------------------------
⑤ 單片機中的LOOP是什麼
一種循環的標示,由自己決定這個的標示(類似地名),比如我一個AJMP跳轉指令需要跳轉到一個地方,那我就自己定一個標示(LOOP是自己定義的,可以改成別的也行,必須和跳轉的那個程序一樣),然後跳轉的那個地方程序開頭就寫(LOOP:),這句後面就是跳轉後需要執行的程序了~!不知道這樣解釋對你有沒有幫助
⑥ 單片機 跑馬燈 代碼詳解
ORG
0000H
;開機上電主程序入口
AJMP
START
;系統一進來就轉到主程序
ORG
0030H
;主程序地址
START:
MOV
A,
#0FFH
;主程序開始,A中初始化成全1
CLR
C
;c清零
MOV
R2,
#08H
;R2左轉循環計數器
LOOP:
RLC
A
<<C+A+C<<帶進位循環左移,A中的內容在8此循環中從0位到7位依次變0
MOV
P2,
A
;送到P2,使P2從0位到7位依次點亮LED
CALL
DELAY
;單片機運行很快,為了能看到燈的變化,必須延遲,把速度降下來
DJNZ
R2,
LOOP
;R2每次減1後判斷是否=0,8次後=0程序才會下行,否則會跳回LOOP
MOV
R2,#07H
;R2右轉循環計數器
LOOP1:
RRC
A
>>C+A+C>>帶進位循環右移,A中的內容在8此循環中從7位到0位依次變0
MOV
P2,
A
;送到P2,使P2從7位到0位依次點亮LED
CALL
DELAY
;和上個循環一樣,延時
DJNZ
R2,
LOOP1
;R2每次減1後判斷是否=0,7次後=0程序才會下行,否則會跳回LOOP1
JMP
START
;跳回程序起始位置重復下一個循環
DELAY:
MOV
R3,
#20;延時子程序,這個應該不用解釋了吧
D1:
MOV
R4,
#200
D2:
MOV
R5,
#248
DJNZ
R5,
$
DJNZ
R4,
D2
RET
END