流水燈匯編程序
㈠ 花樣流水燈設計匯編語言
晶振頻率,假設是12MHz。
程序如下:
;啟動後,八路流水燈同時閃爍,每秒閃爍一次。
;按下按鍵A,順時針依次閃爍,間隔1秒。
;按下按鍵B,順時針間隔0.5秒依次閃爍。
;按下按鍵C,逆時針間隔一秒依次閃爍。
;按下按鍵D,逆時針間隔2秒依次閃爍
;按下按鍵E,同時常亮。
;按下按鍵F,同時常滅。
;按下按鍵G,復位,同時間隔1秒閃爍。
ORG0000H
MOVTMOD,#01H
SETBTR0
CALLSET_T0
MOVB,#50
MOVR4,#0
MOVR5,#7FH
MOVR6,#0
;---------------------------------------
LOOP:
MOVR7,B
CJNER6,#0,_1
MOVP1,R4
MOVA,R4
CPLA;0取反
MOVR4,A
JMPWAIT
_1:CJNER6,#1,_2
MOVP1,R5
MOVA,R5
RRA;1順時針
MOVR5,A
JMPWAIT
_2:CJNER6,#2,WAIT
MOVP1,R5
MOVA,R5
RLA;2逆時針
MOVR5,A
WAIT:
JNBTF0,$
CALLSET_T0
CALLR_ABCD
DJNZR7,WAIT
JMPLOOP
;---------------------------------------
R_ABCD:
JNBP2.0,KA
JNBP2.1,KB
JNBP2.2,KC
JNBP2.3,KD
JNBP2.4,KE
JNBP2.5,KF
JNBP2.6,KG
RET
KA:MOVB,#100;間隔1s
MOVR6,#1;順時針
JMPEXIT
KB:MOVB,#50
MOVR6,#1
JMPEXIT
KC:MOVB,#100;間隔1s
MOVR6,#2;逆時針
JMPEXIT
KD:MOVB,#200
MOVR6,#2
JMPEXIT
KE:MOVP1,#0
MOVR6,#3;無操作
JMPEXIT
KF:MOVP1,#255
MOVR6,#3;無操作
JMPEXIT
KG:MOVB,#50;500ms亮、滅一次
MOVR6,#0;閃爍
EXIT:
MOVR7,#10
RET
;---------------------------------------
SET_T0:
MOVTH0,#(65536-10000)/256
MOVTL0,#(65536-10000)MOD256
CLRTF0
RET
;---------------------------------------
電路模擬圖如下:
㈡ 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 ;匯編程序結束
(2)流水燈匯編程序擴展閱讀:
實現流水燈的三個方法:
第一種,匯流排方法實現流水燈。這是一種比較笨但又最易理解的方法,採用順序程序結構,用位指令控制P1口的每一個位輸出高低電平,加上延時函數,即可控制每個LED燈的亮滅。
第二種,移位方法實現流水燈採用循環程序結構編程。首先在程序開始給P1.0口送一個低電平,其它位為高。然後延時一段時間再讓低電平往高位移動,這樣就實現「流水」的效果了。
第三種,庫函數實現流水燈。利用左移函數進行。
㈢ 單片機流水燈匯編程序是怎樣的
ORG 000H
LJMP MAIN
ORG 000BH;定時器0中斷入口
LJMP LOOP1
ORG 0100H
MAIN:
MOV TMOD,#01H;設置定時器工作模式
MOV TL0,#0EFH;設置定時器初值
MOV TH0,#0D8H
SETB EA;打開總中斷
SETB ET0;打開定時器0中斷
SETB TR0;啟動定時器0
MOV P0,#0FFH
MOV R0,#200;延時參數
LOOP:
CJNE R0,#0,LOOP;延時
MOV A,#0EFH
NEXT:
MOV P0,A ;送值
MOV R0,#50 ;延時參數
EXIT:
CJNE R0,#00H,EXIT ;延時一會兒
RL A ;A循環左移【根據程序分許,該程序完成流水燈功能】
LJMP NEXT
LOOP1:;定時器0中斷函數
MOV TL0,#0EFH;定時器初值
MOV TH0,#0D8H ;定時器初值
DEC R0 ;
RETI ;中斷返回
END
有疑問可以追問。
㈣ 匯編流水燈程序
延時根據單片機調整.
ORG 00H
MOV P2,#80H
START:MOV A,#0FFH ;賦初值
CLR C
MOV R2,#8
LOOP:RRC A ; 帶進位右移
MOV P1,A
CALL DELAY
DJNZ R2,LOOP
MOV R2,#7
LOOP1:RLC A ; 帶進位左移
MOV P1,A
CALL DELAY
DJNZ R2,LOOP1
JMP START
DELAY:MOV R3,#20 ; 延時0.2秒
D1: MOV R4,#20
D2: MOV R5,#248
DJNZ R5,$
DJNZ R4,D2
DJNZ R3,D1
RET
END
㈤ 單片機流水燈匯編程序
KEYFX EQU P1.0 ;方向控制鍵
KEYKM EQU P1.1 ;速度控制鍵
FX BIT 00H ;方向標志
SPEED BIT 01H ;速度標志
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-50000) ;50毫秒中斷一次
MOV TL0,#LOW(65536-50000)
SETB TR0
SETB ET0
SETB EA
MOV R2,#2
MOV A,#0FEH ;燈初始化
CLR FX
CLR SPEED
MOV SPEED,#2
LOOP:
JB KEYFX,LOOP1 ;方向鍵按下否
JNB KEYFX,$
CPL FX
SJMP LOOP
LOOP1:
JB KEYKM,LOOP ;速度鍵按下否
JNB KEYKM,$
CPL SPEED
SJMP LOOP
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
JB FX,T001
RL A ;左循環
SJMP T002
T001:
RR A ;右循環
T002:
DJNZ R2,T0E
JB SPEED,T003
MOV R2,#2 ;快速
SJMP T0E
T003:
MOV R2,#10 ;慢速
T0E:
RETI
END
㈥ 8路流水燈匯編語言程序的寫法
匯編語言程序如下:
;假設1:D1~D8八個彩燈接在P1口,輸出低電平發光
;假設2:系統晶振為12MHz
;假設3:N = 5
;程序如下:
ORG 0000H
MOV R3, #5 ;N=5
LOOP0:
MOV A, #0FFH
MOV P1, #0FFH ;開始時全滅
;-------------------------------逐個點亮
MOV R2, #8
LOOP1: CLR C
RLC A
MOV P1, A
CALL DL500MS
DJNZ R2, LOOP1
;-------------------------------逐個熄滅
MOV R2, #8
LOOP2: SETB C
RLC A
MOV P1, A
CALL DL500MS
DJNZ R2, LOOP2
;-------------------------------全亮、全滅交替
MOV R2, #4
LOOP3: MOV P1, #0 ;全亮
CALL DL500MS
CALL DL500MS ;共1s
MOV P1, #255 ;全滅
CALL DL500MS ;0.5s
DJNZ R2, LOOP3
;-------------------------------
DJNZ R3, LOOP0
MOV P1, #01001001B ;5、顯示為0100 1001
CALL DL500MS
CALL DL500MS ;共1s
SJMP 0000H ;重新開始N遍
;-------------------------------延時子程序
DL500MS:
MOV R5, #9 ;1T
DL1: MOV R6, #128 ;1T
DL2: MOV R7, #215 ;1T
NOP ;1T
DL3: DJNZ R7, DL3 ;2T 2 * 215 = 430 T
DJNZ R6, DL2 ;2T [1+1+430+2] * 128 = 55552 T
DJNZ R5, DL1 ;2T [1+55552+2] * 9 = 499995 T
RET ;2T 1 + 499995 + 2 = 499998 T
;-------------------------------------
流水燈模塊接在單片機的P1口,由原理圖可以知道,在P1口給一個低電平即可點亮LED燈。相反,如果要LED燈熄滅,就要把P1口的電平變為高電平即可。
要實現流水燈功能,只要將LED1~LED8依次點亮、熄滅,依始類推,8隻LED變會一亮一暗的做流水燈了。
實現8個LED流水燈程序用中文表示為:
P1.0低、延時、P1.0高、P1.1低、延時、P1.1高、P1.2低、延時、P1.2高、P1.3低、延時、P1.3高。
P1.4低、延時、P1.4高、P1.5低、延時、P1.5高、P1.6低、延時、P1.6高、P1.7低、延時、P1.7高、返回到開始、程序結束。
㈦ 匯編語言 51單片機,外部中斷控制流水燈
ORG 0000H ; 試試這個 流水燈的編碼隨便改
LJMP MAIN
ORG 0003H
LJMP LINT0
ORG 000BH
LJMP LT0ZD
ORG 0030H
MAIN: MOV SP, #60H
MOV TMOD, #00H
MOV IE, #81H
MOV TL0, #(8192-2500)MOD 32
MOV TH0, #(8192-2500)/32
SETB TR0
MOV R5, #20
LOOP: MOV R3, #48
CJNE R3, #0, $
LJMP LOOP
LINT0: CPL ET0
RETI
LT0ZD: PUSH PSW ; T0 中斷
PUSH ACC
MOV TL0, #(8192-2500)MOD 32
MOV TH0, #(8192-2500)/32
DJNZ R5, LT0Z2
MOV R5, #30 ; 可以調整速度
MOV A, R3
LCALL LSDIN
MOV P1, A
DEC R3
LT0Z2: POP ACC
POP PSW
RETI
LSDIN: MOVC A,@A+PC
RET
LSDBM: DB 11111110B,11111101B,11111011B,11110111B ; 流水燈的編碼1
DB 11101111B,11011111B,10111111B,01111111B
DB 01111111B,10111111B,11011111B,11101111B
DB 11110111B,11111011B,11111101B,11111110B
DB 11111100B,11111001B,11110011B,11100111B ; 流水燈的編碼2
DB 11001111B,10011111B,00111111B,01111110B
DB 01111110B,00111111B,10011111B,11001111B
DB 11100111B,11110011B,11111001B,11111100B
DB 11111000B,11110001B,11100011B,11000111B ; 流水燈的編碼3
DB 10001111B,00011111B,00111110B,01111100B
DB 01111100B,00111110B,00011111B,10001111B
DB 11000111B,11100011B,11110001B,11111000B
END
㈧ 流水燈匯編語言程序
ORG 0000H ;程序開始
SJMP START ;跳轉到START
ORG 0050H ;START從ROM的0050H開始存儲
START: MOVE P1.0,#00000001B ;把二進制數00000001B送到P1口
LCALL DELAY ;調用延時子程序
MOVE P1.0,#00000010B ;把二進制數00000010B送到P1口
LCALL DELAY
MOVE P1.0,#00000100B
LCALL DELAY
MOVE P1.0,#00001000B
LCALL DELAY
MOVE P1.0,#00010000B
LCALL DELAY
MOVE P1.0,#00100000B
LCALL DELAY
MOVE P1.0,#01000000B
LCALL DELAY
MOVE P1.0,#10000000B
LCALL DELAY
LJMP START ;跳轉到START
;延時子程序DELAY,改變R5、R6、R7中的值(0到255),可以改變延時時間
DELAY: MOV R5,#20 ;把20放到寄存器R5中,
D1: MOV R6,#20
D2: MOV R7,#248
DJNZ R7,$ ;把寄存器R7中的內容減1,如果結果不定於0,則跳轉到本身,如果等於0,執行下一條程序
DJNZ R6,D2 ;把寄存器R6中的內容減1,如果結果不定於0,則跳轉到本身,如果等於0,跳轉到D2
DJNZ R5,D1
RET
END
㈨ 急!急!急!單片機流水燈匯編語言程序
5隻LED為共陽極連接,即單片機輸出端為低電平時即可點亮LED。
;用最直接的方式實現流水燈
ORG 0000H
START:MOV P1,#01111111B ;最下面的LED點亮
LCALL DELAY ;延時60秒
LCALL DELAY ;延時60秒
MOV P1,#10111111B ;最下面第二個的LED點亮
LCALL DELAY ;延時60秒
LCALL DELAY ;延時60秒
MOV P1,#11011111B ;最下面第三個的LED點亮 (以下省略)
LCALL DELAY
LCALL DELAY ;延時60秒
MOV P1,#11101111B
LCALL DELAY
LCALL DELAY ;延時60秒
MOV P1,#11110111B
LCALL DELAY
LCALL DELAY ;延時60秒
MOV P1,#11111011B
LCALL DELAY ;延時60秒
LCALL DELAY ;延時60秒
LCALL DELAY ;延時60秒
LCALL DELAY ;延時60秒
LCALL DELAY ;完成第一次循環點亮,延時約0.25秒
AJMP START ;反復循環
;延時子程序,12M晶振延時約250毫秒
DELAY: ;大約值:2us*256*256*2=260ms,也可以認為為250ms
PUSH PSW ;現場保護指令(有時可以不加)
MOV R4,#240
L3: MOV R2 ,#00H
L1: MOV R3 ,#00H
L2: DJNZ R3 ,L2 ;最內層循環:(256次)2個周期指令(R3減一,如果比1大,則轉向L2)
DJNZ R2 ,L1 ; 中層循環:256次
DJNZ R4 ,L3 ;外層循環:240次
POP PSW
RET
END
隨便改了一個
㈩ 用匯編語言編流水燈,有8個LED燈,LED1~LED8 燈按順序點亮,每個等亮一秒轉到下個燈,一直循環亮
這個流水燈是很普通的一種花樣,假設LED接P1口,程序如下:
ORG 0000H
LJMP MAIN
0RG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-50000) ;50毫秒定時
MOV TL0,#LOW(65536-50000)
SETB TR0
SETB ET0
SETB EA
MOV A,#0FEH
MOV P1,A
MOV R2,#20
SJMP $
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
DJNZ R2,T0E ;1秒未到直接退出
MOV R2,#20
RL A
MOV P1,A ;1秒一變的花樣流水燈。
T0E:
RETI
END