Semáforo em assembly
;PROGRAMA EXEMPLO PARA UTILIZAÇÃO DO PIC16F628A
;DESENVOLVIDO POR ALUNOS DATA 20/08/2012
;==========================================================
#INCLUDE
__CONFIG _BODEN_ON& _CP_OFF & _PWRTE_ON& _WDT_OFF & _LVP_OFF & _MCLRE_ON & _INTRC_OSC_NOCLKOUT
;==========================================================
; PAGINAÇÃO DE MEMORIA
#DEFINE BANK0 BCF STATUS,RP0
#DEFINE BANK1 BSF STATUS,RP0
;==========================================================
; VARIAVEIS
CBLOCK 0X20 TEMP1 TEMP2 TEMP3 ENDC
;==========================================================
; ORG 0X00 GOTO INICIO
ORG 0X04 RETFIE
;==========================================================
; SUB-ROTINAS
ATRASO
MOVLW .6 MOVWF TEMP1
DL3
MOVLW .250 MOVWF TEMP2
DL2
MOVLW .200 MOVWF TEMP3
DL1
NOP ;1us NOP ;1us 5us*200=1000us ou 1ms DECFSZ TEMP3,F ;1us GOTO DL1 ;2us DECFSZ TEMP2,F ;1ms*250=2500ms GOTO DL2 DECFSZ TEMP1,F ;250ms*6=1500ms ou 1,5s GOTO DL3 RETURN
ATRASO2 MOVLW .60 MOVWF TEMP1
DL6
MOVLW .250 MOVWF TEMP2
DL5
MOVLW .200 MOVWF TEMP3
DL4
NOP ;1us NOP ;1us 5us*200=1000us ou 1ms DECFSZ TEMP3,F ;1us GOTO DL4 ;2us DECFSZ TEMP2,F ;1ms*250=2500ms GOTO DL5 DECFSZ TEMP1,F ;250ms*60=15000ms ou 15s GOTO DL6 RETURN
ATRASO3 MOVLW .12 MOVWF TEMP1
DL9
MOVLW .250 MOVWF TEMP2
DL8
MOVLW .200 MOVWF TEMP3
DL7
NOP ;1us NOP ;1us 5us*200=1000us ou 1ms DECFSZ TEMP3,F ;1us GOTO DL7 ;2us DECFSZ TEMP2,F ;1ms*250=2500ms GOTO DL8 DECFSZ TEMP1,F ;250ms*12=3000ms ou 3s GOTO DL9 RETURN
;==========================================================
;
INICIO BANK1 MOVLW B'00000001' MOVWF TRISA MOVLW B'00000000' MOVWF TRISB MOVLW B'10000000' MOVWF OPTION_REG MOVLW B'00000000' MOVWF INTCON BANK0 MOVLW B'00000111' MOVWF CMCON CLRF