;Código fonte ASM p/ controle do semáforo.
;Autor: Walisson Oliveira
;Versão do arquivo. 2.1
;Compilado em: 02/05/2010
;
#include
__config _CP_OFF & _WDT_OFF & _XT_OSC
#define bank0 bcf STATUS, RP0
#define bank1 bsf STATUS, RP0
#define botao PORTB, 0
#define verde b'00001100'
#define vermelho b'00010001'
#define amarelo b'00001010'
#define dez1 b'00100000'
#define dez2 b'01000000'
#define dez3 b'01100000'
#define dez4 b'10000000'
#define dez5 b'10100000'
#define dez6 b'11100000'
#define mask_dez b'11100000' ; Mascara "AND" do bcd2
#define tseg d'10'
#define tmilisegundo d'111'
#define tx d'225'
cblock 0x20 ; Array de declaração de variaveis
bcd_und_reg
bcd_dez_reg
botao_flag
seg
milisegundo
x
tempo
endc
org 0x00
goto main
org 0x04
retfie
main
bank1
movlw b'00000000'
movwf TRISA
movlw b'00000001'
movwf TRISB
movlw b'00000000'
movwf INTCON
movlw b'00000000'
movwf OPTION_REG
bank0
clrf PORTA
clrf PORTB
sinal
movlw verde
call bcd25
call delay
movlw amarelo
movwf PORTA
movlw d'5'
movwf tempo
movlw d'0'
movwf bcd_dez_reg
movlw d'10'
movwf bcd_und_reg
call delay
movlw vermelho
call bcd25
call delay
goto sinal
bcd25
movwf PORTA
movlw d'25'
movwf tempo
movlw dez2
movwf bcd_dez_reg
movlw d'10'
movwf bcd_und_reg
return
; Rotina de tempo
delay
movfw bcd_dez_reg
iorwf bcd_und_reg,0
movwf PORTB
movlw tseg
movwf seg
m100
movlw tmilisegundo
movwf milisegundo
m1
movlw tx
movwf x
m2
nop
decfsz x
goto m2
decfsz milisegundo
goto m1
decfsz seg
goto m100
movlw d'2'
subwf bcd_und_reg, 1
btfsc STATUS, C ; Testa se o decremento deu negativo (c=0)
goto continue
decf bcd_dez_reg
movlw b'11100000'
andwf bcd_dez_reg,1 ;Utiliza apenas os 3 ultimos bit
movlw b'00010010'
movwf bcd_und_reg
continue
decfsz tempo
goto delay
return
end
;NERDS
Nenhum comentário:
Postar um comentário
Faça seu comentário aqui: