|
;************************************************* ;* 本程序是一個(gè)LED燈的循環(huán)閃爍程序,用INT鍵來切換* ;* 閃爍模式 *www.dangdangdz.com ;************************************************* include ;*---- MODESEL equ 20h MODESELB equ 21h Count equ 22h Count1 equ 23h Count2 equ 24h PORTDB equ 25h
;*-----
org 0 goto start org 4 goto ISR
org 10 start clrf PORTD ;清D口 movlw 00h movwf MODESEL ;初始化模式選擇寄存器 movwf MODESELB movlw b'10010000' movwf INTCON ;初始化中斷控制 bsf STATUS,RP0 clrf TRISD ;設(shè)D口全為輸出 movlw b'10111111' OPTION ;選擇INT下降沿有效
bcf STATUS,RP0 call FMsel movwf PORTDB movwf PORTD main btfsc PORTB,0 ;\ goto $+6 ; \ call Delay ; 按鍵去抖動(dòng) btfsc PORTB,0 goto $+3 ; / call FMsel ;/ movwf PORTDB movf MODESELB,W ; movwf MODESEL ; call LongDelay bcf STATUS,C rlf PORTDB,1 btfsc STATUS,C bsf PORTDB,0 movf PORTDB,W movwf PORTD goto main
;*---------- Delay ; call指令占用2個(gè)指令周期 clrf Count ; 清 Count占用1個(gè)指令周期 Dloop decfsz Count,f ; 這兩行指令將延時(shí) goto Dloop ; (256 * 3) -1 個(gè)指令周期 return ; return占用2個(gè)指令周期
;*---------------- LongDelay clrf Count clrf Count1 movlw 0x01 movwf Count2 LDloop decfsz Count,f goto LDloop decfsz Count1,f goto LDloop decfsz Count2,f goto LDloop return
;*--------------- FMsel movf MODESEL,w movwf MODESELB movf MODESEL,w addwf PCL retlw b'11111000' retlw b'11110000' retlw b'11100000' retlw b'11000000' retlw b'10000000' movlw 00h movwf MODESELB bsf INTCON,GIE retlw b'11111000' return
;*------------- ISR btfss INTCON,INTF goto $+3 bcf INTCON,INTF incf MODESEL retfie end
單片機(jī)控制LED燈閃爍的程序編制方法
1:程序開始(START)
2:A=00000000B
3:PORT 0
4:延遲(DELAY)
5:A=11111111B
6:PORT 0
7:延遲(DELAY)
8:反回開始
延遲子程序編制方法:
1:R6=0
2:DEL1
3:R7=0
4:$
5:R7-1
6:R7=0 不等于0,返回2
7:R6-1
8:R6=0 不等于0,返回4
回主程序 |