Skip to content

Instantly share code, notes, and snippets.

@mactkg
Created January 12, 2012 08:02
Show Gist options
  • Save mactkg/1599325 to your computer and use it in GitHub Desktop.
Save mactkg/1599325 to your computer and use it in GitHub Desktop.
; PIC test program
;
list p=16f84
;
; define config fuses
;
include "p16f84.inc"
__CONFIG _HS_OSC & _PWRTE_ON & _WDT_OFF
DELAYT EQU 02H
;
LED0 EQU 00
LED1 EQU 01
M0 EQU 03
M1 EQU 02
SW0 EQU 00
SW1 EQU 01
S0 EQU 02
S1 EQU 03
S2 EQU 04
S3 EQU 05
;
TIMEF0 EQU 0CH
TIMEF1 EQU 0DH
TIMEF2 EQU 0EH
CNT EQU 12H
REG_A EQU 10H
REG_B EQU 11H
WHICH EQU 13H
;
;
;********* Program Memory Programming ***********
;
ORG 00
GOTO INIT
ORG 04
GOTO INTR
ORG 10H
INIT
BSF STATUS,RP0 ;Select page 1
MOVLW 000H ;Set Input/Output
MOVWF PORTA ;SET PORT A
MOVWF INTCON
MOVLW 0ffh
MOVWF PORTB
BCF STATUS,RP0 ;SELECT PAGE 0
START
MOVLW 000H
MOVWF PORTA
MOVLW 0FFH ; Set 1
MOVWF REG_B
;add CLRF CNT before JUMP!!!!!1
LOOP
BTFSC PORTB, S0 ;1 = BLACK
CALL BNNN
BTFSS PORTB, S0 ;0 = WHITE
CALL WNNN
; BCF PORTA,M0
; BCF PORTA,M1
GOTO LOOP
BNNN
BTFSC PORTB, S1
GOTO BBNN
GOTO BWNN
BBNN
BTFSC PORTB, S2
GOTO BBBN
GOTO BBWN
BWNN
BTFSC PORTB, S2
GOTO BWBN
GOTO BWWN
BBBN
CLRF CNT
BTFSC PORTB, S3
CALL WARNING ;BBBB
CLRF CNT
BTFSS PORTB, S3
CALL FORWARD ;BBBW
RETURN
BBWN
CLRF CNT
BTFSC PORTB, S3
CALL FORWARD ;BBWB
CLRF CNT
BTFSS PORTB, S3
CALL FORWARD ;BBWW
RETURN
BWBN
CLRF CNT
BTFSC PORTB, S3
CALL FORWARD ;BWBB
CLRF CNT
BTFSS PORTB, S3
CALL WARNING ;BWBW
RETURN
BWWN
CLRF CNT
BTFSC PORTB, S3
CALL WARNING ;BWWB
CLRF CNT
BTFSS PORTB, S3
CALL LEFT_LOW ;BWWW
RETURN
;
WNNN
BTFSC PORTB, S1
GOTO WBNN
GOTO WWNN
WBNN
BTFSC PORTB, S2
GOTO WBBN
GOTO WBWN
WWNN
BTFSC PORTB, S2
GOTO WWBN
GOTO WWWN
WBBN
CLRF CNT
BTFSC PORTB, S3
CALL FORWARD ;WBBB
CLRF CNT
BTFSS PORTB, S3
CALL FORWARD ;WBBW
RETURN
WBWN
CLRF CNT
BTFSC PORTB, S3
CALL FORWARD ;WBWB
CLRF CNT
BTFSS PORTB, S3
CALL FORWARD ;WBWW
RETURN
WWBN
CLRF CNT
BTFSC PORTB, S3
CALL FORWARD ;WWBB
CLRF CNT
BTFSS PORTB, S3
CALL FORWARD ;WWBW
RETURN
WWWN
CLRF CNT
BTFSC PORTB, S3
CALL RIGHT_LOW ;WWWB
CLRF CNT
BTFSS PORTB, S3
CALL WARNING ;WWWW
RETURN
;
LEFT_HIGH ;1
BSF PORTA,M0
BSF PORTA,M1
CALL DELAY
BCF PORTA,M0
CALL DELAY
DECFSZ CNT,1
GOTO LEFT_HIGH
BCF PORTA,LED0
BSF PORTA,LED1
RETURN
LEFT_LOW ;2
BSF PORTA,M0
BSF PORTA,M1
CALL DELAY
BCF PORTA,M0
CALL DELAY
CALL DELAY
DECFSZ CNT,1
GOTO LEFT_LOW
BCF PORTA,LED0
BSF PORTA,LED1
RETURN
RIGHT_HIGH ;3
BSF PORTA,M0
BSF PORTA,M1
CALL DELAY
BCF PORTA,M1
CALL DELAY
DECFSZ CNT,1
GOTO RIGHT_HIGH
BSF PORTA,LED0
BCF PORTA,LED1
RETURN
RIGHT_LOW ;4
BSF PORTA,M0
BSF PORTA,M1
CALL DELAY
BCF PORTA,M1
CALL DELAY
CALL DELAY
DECFSZ CNT,1
GOTO RIGHT_LOW
BSF PORTA,LED0
BCF PORTA,LED1
RETURN
FORWARD ;5
BSF PORTA, M0
BSF PORTA, M1
BSF PORTA,LED0
BSF PORTA,LED1
RETURN
WARNING
BCF PORTA, M0
BCF PORTA, M1
CALL DELAY
GOTO WARNING2
WARNING2
BTFSS PORTA, LED0
CALL T_LEFT
BTFSS PORTA, LED1
CALL T_RIGHT
CALL DELAY
RETURN
;
T_LEFT
BCF PORTA,M0
BSF PORTA,M1
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
RETURN
T_RIGHT
BSF PORTA,M0
BCF PORTA,M1
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
RETURN
;
DELAY
MOVLW DELAYT ;DELAYT -> working registor
MOVWF TIMEF0 ;move the value of working registor to TIMEF0
LOOP0
CLRF TIMEF1 ;flag down!
;LOOP1
; CLRF TIMEF2 ;flag down!
LOOP2
MOVF PORTB,0 ;move the value of PORTB to working registor (0 -> working registor(W), 1 -> the first HIKISUU)
ANDWF REG_B,1 ;the value of PORTB(W) take AND with REG_B and through value to REG_B
;DECFSZ TIMEF2,1 ;if(TIMEF2-- != 0){
;GOTO LOOP2 ; Loop more!
;DECFSZ TIMEF1,1 ;if(TIMEF1-- != 0){
;GOTO LOOP2 ; Loop more!
DECFSZ TIMEF0,1 ;if(TIMEF0-- != 0){
GOTO LOOP2 ; Loop more!
RETURN ; Bye!
;
INTR
RETURN
END
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment