Hello, I am trying to implement a weight sensor. Tension simulates weight, and I've already made a sensor which is working. But when I try to enable conversion on the other sensors, ie the other AN ports, it doesn't recognize when I call adcon1,adcon2, etc. I appreciate if you can help me.
Follow the code below (the comments are in Brazilian-Portuguese, sorry) .
Anything I can transcribe into English
Follow the code below (the comments are in Brazilian-Portuguese, sorry) .
Anything I can transcribe into English
Code:
PROCESSOR 16F877A ;primeira linha é o tipo de processador
#include <p16f877a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
D0 equ 0x21 ;---UN
D1 equ 0x22 ;---DEZ
T0 equ 0x24 ;---CENTENA
TEMP1 equ 0x25
TEMP2 EQU 0X26
z EQU 0X27
PORTC EQU 07
TRISC EQU 87
#DEFINE ENABLE PORTD,0
#DEFINE RS PORTD,1
#DEFINE bank0 BCF STATUS,RP0
#DEFINE bank1 BSF STATUS,RP0
org 0x00 ;vetor de reset
goto Main ;após o reset, começa na função principal
org 0x04 ;vetor de interrupção
goto Main ; vai pra main
;-----------------------------------------------------------
; TABELA DE MEDIDA
;-----------------------------------------------------------
TABELA_TEMP
ADDWF PCL
RETLW b'00000000'
RETLW b'00000001'
RETLW b'00000010'
RETLW b'00000011'
RETLW b'00000100'
RETLW b'00000101'
RETLW b'00000110'
RETLW b'00000111'
RETLW b'00001000'
RETLW b'00001001'
RETLW b'00001010'
RETLW b'00001011'
RETLW b'00001100'
RETLW b'00001101'
RETLW b'00001110'
RETLW b'00001111'
RETLW b'00010000'
RETLW b'00010001'
RETLW b'00010010'
RETLW b'00010011'
RETLW b'00010100'
RETLW b'00010101'
RETLW b'00010110'
RETLW b'00010111'
RETLW b'00011000'
RETLW b'00011001'
RETLW b'00011010'
RETLW b'00011011'
RETLW b'00011100'
RETLW b'00011101'
RETLW b'00011110'
RETLW b'00011111'
RETLW b'00100000'
RETLW b'00100001'
RETLW b'00100010'
RETLW b'00100011'
RETLW b'00100100'
RETLW b'00100101'
RETLW b'00100110'
RETLW b'00100111'
RETLW b'00101000'
RETLW b'00101001'
RETLW b'00101001'
RETLW b'00101010'
RETLW b'00101011'
RETLW b'00101100'
RETLW b'00101101'
RETLW b'00101110'
RETLW b'00101111'
RETLW b'00110000'
RETLW b'00110001'
RETLW b'00110010'
;-----------------------------------------------------------
; TABELA PARA O LCD
;-----------------------------------------------------------
TABELA_LCD ;para mostrar o caractere em asc no display
ADDWF PCL
RETLW '0'
RETLW '1'
RETLW '2'
RETLW '3'
RETLW '4'
RETLW '5'
RETLW '6'
RETLW '7'
RETLW '8'
RETLW '9'
;-----------------------------------------------------------
; MAIN
;-----------------------------------------------------------
Main
bank1 ; MUDA BANCO MEMORIA 1
MOVLW B'10000000'
; 1-UU---- Alinhado a direita
; -0UU---- FSC/
; --UU0000 Todas analogicas
MOVWF ADCON1
;BSF PIE1, ADIE
MOVLW B'00000000'
MOVWF TRISB
MOVLW B'00000000'
MOVWF TRISD
MOVLW B'11111111'
MOVWF TRISA
MOVLW B'00000000'
; --------
MOVWF OPTION_REG
MOVLW B'00000111' ; Desabilita os comparadores
MOVWF CMCON
bank0 ; BANCO DE MEMORIA 0
MOVLW B'00000001' ; Configura ADC
; 00----U- FSC/8
; -------1 Liga o conversor
; --000--- Canal AN0 entrada
MOVWF ADCON0
MOVLW B'00000000'
MOVWF INTCON
CLRF PORTB
CLRF D0
CLRF D1
;-----------------------------------------------------------
; CONFIGURA LCD
;-----------------------------------------------------------
LCD_IN
CALL DELAY20
BCF RS ;SELECIONA O DISPLAY PARA COMANDOS
MOVLW 0X30 ;ESCREVE COMANDO 0X3O PARA INICIALIZACAO
CALL ESCREVE
CALL DELAY20
MOVLW 0X30 ;ESCREVE COMANDO 0X3O PARA INICIALIZACAO
CALL ESCREVE
MOVLW 0X30
CALL ESCREVE
MOVLW B'00111000' ;ESCREVE COMANDO PARA INTERFACE D E 8 VAIS DE DADOS
CALL ESCREVE
MOVLW B'00000001'
CALL ESCREVE ;ESCREVE COMANDO PARA LIMPAR TODO O DISPLAY
CALL DELAY20 ;DELAY DE 8MS
MOVLW B'00001100'
CALL ESCREVE ;ESCREVE COMANDO PARA LIGAR O DISPLAY SEM CURSOR
MOVLW B'00000110'
CALL ESCREVE ;ESCREVE COMANDO PARA INCREMENTAR AUTOMATICA A DIREITA
BSF RS ;SELECIONA O DISPLAY PARA DADOS
GOTO INICIO
;-----------------------------------------------------------
; INICIO
;-----------------------------------------------------------
INICIO
CALL MEDIDA
CALL BIN_DEC
;-----------------------------------------------------------
; CONDIÇÃO IF ELSE
;-----------------------------------------------------------
MOVLW d'3' ; WREG = 3
MOVWF z ; Z = WREG
MOVF z, W ; WREG = Z
SUBWF D1, W ; WREG = D1 - WREG
BTFSC STATUS, C ; SE D1<Z, ENTÃO C NÃO DEVE SER DEFINIDO
GOTO TRANSITO_FECHADO
; SE CHEGOU AQUI, SIGNIFICA QUE D1<Z
bank0
BCF RS ;SELECIONA O DISPLAY PARA COMANDOS
MOVLW B'00000001'
CALL ESCREVE ;ESCREVE COMANDO PARA LIMPAR TODO O DISPLAY
BSF RS ;SELECIONA O DISPLAY PARA DADOS
CALL DELAY1
MOVLW 'S' ;
CALL ESCREVE
MOVLW 'I' ;
CALL ESCREVE
MOVLW 'G' ;
CALL ESCREVE
MOVLW 'A' ;
CALL ESCREVE
MOVLW ' ' ;
CALL ESCREVE
MOVLW 'D' ;
CALL ESCREVE
MOVLW 'E' ;
CALL ESCREVE
MOVLW 'V' ;
CALL ESCREVE
MOVLW 'A' ;
CALL ESCREVE
MOVLW 'G' ;
CALL ESCREVE
MOVLW 'A' ;
CALL ESCREVE
MOVLW 'R' ;
CALL ESCREVE
; ACIONAMENTO E DESLIGAMENTO DOS LEDS
BSF STATUS, 5; SELECIONA BANCO 1
CLRF TRISC ; TRISC = 0
BCF STATUS,5; SELECIONA BANCO 0
BCF PORTC,1 ; PORTC RC1 = 0
BSF PORTC, 0 ; PORTC RC0 = 1
CALL DELAY1
BCF PORTC,0 ; PORTC RCO = 0
goto INICIO ;loop
GOTO continuacao
TRANSITO_FECHADO
; SE CHEGOU AQUI, SIGNIFICA QUE D1>Z
bank0
BCF RS; SELECIONA O DISPLAY PARA COMANDOS
MOVLW B'00000001'
CALL ESCREVE ;ESCREVE COMANDO PARA LIMPAR TODO O DISPLAY
BSF RS ;SELECIONA O DISPLAY PARA DADOS
CALL DELAY1
MOVLW 'T' ;
CALL ESCREVE
MOVLW 'R' ;
CALL ESCREVE
MOVLW 'A' ;
CALL ESCREVE
MOVLW 'N' ;
CALL ESCREVE
MOVLW 'S' ;
CALL ESCREVE
MOVLW 'I' ;
CALL ESCREVE
MOVLW 'T' ;
CALL ESCREVE
MOVLW 'O' ;
CALL ESCREVE
MOVLW 'F' ;
CALL ESCREVE
MOVLW 'E' ;
CALL ESCREVE
MOVLW 'C' ;
CALL ESCREVE
MOVLW 'H' ;
CALL ESCREVE
MOVLW 'A' ;
CALL ESCREVE
MOVLW 'D' ;
CALL ESCREVE
MOVLW 'O' ;
; ACIONAMENTO E DESLIGAMENTO DOS LEDS
BSF STATUS, 5; SELECIONA BANCO 1
CLRF TRISC ; TRISC = 0
BCF STATUS,5; SELECIONA BANCO 0
BSF PORTC,1 ; PORTC RC1 = 1
BCF PORTC,0 ; PORTC RCO = 0
goto INICIO ;loop
continuacao
;-----------------------------------------------------------
; INICIO DA CONVERSAO
;-----------------------------------------------------------
MEDIDA
; AN0 - PESO
bank1
BSF ADCON1,7 ;Justifica a Direita
bank0
BCF ADCON0,3 ;--0Seta AN0 para Leitura
BCF ADCON0,4 ;-00
BCF ADCON0,5 ;000
CALL DELAY20 ;Espera 30us
BSF ADCON0,2 ;Inicia a Conversao
CALL FIM_CONVERSAO ;Verifica o fim da conversao
bank1
MOVFW ADRESL ;Copia o valor convertido para W
bank0
MOVWF T0 ;Envia o valor convertido para T0
BCF STATUS,C
RRF T0,1 ;Divide por 2
MOVFW T0
CALL TABELA_TEMP
MOVWF T0
RETURN
FIM_CONVERSAO
BTFSC ADCON0, 2
GOTO FIM_CONVERSAO
RETURN
;-----------------------------------------------------------
; ROTINA ESCREVE
;-----------------------------------------------------------
ESCREVE
MOVWF PORTB ;ATUALIZA O DISPLAY
NOP ;PERDE 1 CICLO DE MAQIUNA PARA ESTABILIZACAO (1us)
BSF ENABLE ;ENVIA UM PULSO DE HABILITACAO (ENABLE) PARA O DISPLAY
GOTO $+1
BCF ENABLE
CALL DELAY1 ;DELAY DE 8ms
RETURN ;RETORNA PARA ULTIMA INSTRUCAO
;-----------------------------------------------------------
; BIN PARA DEC
;-----------------------------------------------------------
BIN_DEC
MOVFW T0
MOVWF D0
CLRF D1
BIN_DEC1
MOVLW D'100'
SUBWF D0,W
BTFSS STATUS,C
GOTO BIN_DEC2
MOVWF D0
BIN_DEC2
MOVLW D'10'
SUBWF D0,W
BTFSS STATUS,C
RETURN
MOVWF D0
INCF D1,F
GOTO BIN_DEC2
;-----------------------------------------------------------
; DELAYS
;-----------------------------------------------------------
DELAY20
MOVLW D'200'
MOVWF TEMP2
L2:
MOVLW D'30'
MOVWF TEMP1
L1:
DECFSZ TEMP1, 1
GOTO L1
DECFSZ TEMP2, 1
GOTO L2
RETURN
DELAY1
MOVLW D'10'
MOVWF TEMP2
L3:
MOVLW D'30'
MOVWF TEMP1
L4:
DECFSZ TEMP1, 1
GOTO L4
DECFSZ TEMP2, 1
GOTO L3
RETURN
end
;-----------------------------------------------------------
; FIM DO CÓDIGO
;-----------------------------------------------------------