;******************************************************************************************************** ; ; DADO.ASM ; ; ; PROJETO EDUCATIVO VISANDO GERAR NUMEROS ALEATÓRIOS DE 0 A 6 NA FORMA APRESENTADA POR UM 'DADO'. ; DATA: 29-06-2012 ; AUTOR: CLAUDIO LARIOS BLOG 'LARIOS.TECNOLOGIA.WS' ; ;******************************************************************************************************** #INCLUDE ; ARQUIVO PADRAO __CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _MCLRE_ON & _INTRC_OSC_NOCLKOUT ERRORLEVEL -302 ;suppress bank selection messages ; PAGINACAO DE MEMORIA; #DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK0 DE MEMORIA #DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK1 ; VARIAVEIS CBLOCK 0X20 ;ENDERECO INICIAL DE MEMORIA TEMP,TEMP1,TEMP2,CT0,CT1,CT2,CT3,SRT,LC,LC1 ENDC ;======================DEFINICAO DE BITS E FLAGS============================================== #DEFINE CH0 GPIO,5 ; BOTÃO 'MENU' PINO 2 #DEFINE LD25 GPIO,1 ; LED2 E 5 PINO 6 #DEFINE LD34 GPIO,2 ; LED 3 E 4 PINO 5 #DEFINE LD16 GPIO,0 ; LED 1 E 6 PINO 7 #DEFINE LD7 GPIO,4 ; LED 7 PINO 3 #DEFINE SOM GPIO,5 ; SAIDA P/SOM PINO 2 ORG 0X00 GOTO INICIO ;TABELA QUE RETORNA VALORES PARA A PORTA DE SAIDA PTAB ADDWF PCL,F RETLW 0X00 ;0 RETLW 0X10 ;1 RETLW 0X01 ;2 RETLW 0X11 ;3 RETLW 0X05 ;4 RETLW 0X15 ;5 RETLW 0X07 ;6 RETLW 0X10 ;1 INICIO MOVLW .7 ;DESLIGA COMPARADORES MOVWF CMCON BANK1 MOVLW B'101000' ;AJUSTA SAIDAS E ENTRADAS MOVWF TRISIO MOVLW B'111111' MOVWF WPU ;PULL UP'S ATIVO MOVLW B'10000000' MOVWF OPTION_REG ;PULL UP'S ATIVO BANK0 CALL BIP ;TESTA BIP MOVLW 0XFF ;LIGA LED PARA TESTE MOVWF GPIO MOVLW .5 CALL DELAYW ;TEMPO QUE FICA ACESOS CLRF GPIO ;APAGA LEDS CALL BIP ;TESTA BIP MAIN INCF SRT,F ;INCREMENTA REGISTRADOR RANDOMICO BTFSC CH0 ;TESTA INTERRUPTOR DE SORTEIO GOTO MAIN CLRF GPIO CALL BIP ;FOI ACIONADO MOVFW SRT ;GERA BIP ANDLW 0X07 ;LIMITA A APENAS 7 VALORES CALL PTAB ;PEGA VALOR RANDOMICO MOVWF GPIO ;COLOCA NA SAIDA DOS LEDS INCF SRT,F ;INCREMENTA REGISTRADOR RANDOMICO BTFSS CH0 ;TESTA BOTÃO DE SORTEIO GOTO $-2 ;AGUARDA SOLTAR MOVLW .3 ;TEMPORIZA CALL DELAYW GOTO MAIN ;VAI PARA O LOOP PRINCIPAL ;ROTINA DE BIP BIP MOVLW 0XFF ;TEMPO DO BIP MOVWF CT0 BANK1 BCF TRISIO,5 ;VIRA SAIDA BANK0 VU2 BSF SOM ;SAIDA = 1 MOVLW 0X39 ;DETERMINA A FREQUENCIA DO BIP CALL WAIT_uS BCF SOM ;SAIDA = 0 MOVLW 0X39 ;DETERMINA A FREQUENCIA DO BIP CALL WAIT_uS DECFSZ CT0,F GOTO VU2 BANK1 BSF TRISIO,5 ;VIRA ENTRADA BANK0 RETURN ;ROTINAS DE DELAY DELAYW MOVWF TEMP VJ1 call DELAY1 DECFSZ TEMP,F GOTO VJ1 DELAY1 MOVLW .255 ;DELAY PARA VISUALIZAÇAO DELAY INCF SRT,F ;INCREMENTA REGISTRADOR RANDOMICO goto $+1 movwf LC+1 ;duas variáveis em uma Loop decfsz LC+0,F ;dec. o prim. cont. goto Loop decfsz LC+1,F ;dec. o seg. cont. goto Loop return WAIT_WMSEC movwf LC+1 WSET movlw .250 movwf LC XLOOP decfsz LC,F goto XLOOP decfsz LC+1,F goto WSET return ;DELAY EM MICROSEGUNDOS WAIT_uS movwf LC V5 INCF SRT,F ;INCREMENTA REGISTRADOR RANDOMICO decfsz LC, F goto V5 return END