Programação Semáforo ASM ~ PIC


;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:

Campanha Social NERDS!