Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  

Recommended Posts

Ola, escrevi um codigo de uma calculador simples, que faz some e subtracao de numeros de -63 a 64, e mostra em um display lcd.

 

bom, o programa term varias rotinas, e tudo funciona muito bem no proteus, sem problema algum.

 

Bom, como esse proprama é um trabalho para faculdade, tive que montar na protoboard, e foi ai que os problemas começaram, passei hoje a tarde inteira tentando ligar esse circuito, mas quando energizo o circuito, o lcd fica branco.

 

Tenho algumas perguntas:

 

1. Pinos que eu vou ligar ao barramento de dados do lcd, precisam de resistor? ou apenas a ligação entre eles ja basta. 

 

2. Estou utilizando a portab como saida para o lcd, e estou usando o lcd em modo 4 bits, eu precisor levar os pinos d0,d1,d2,d3 ao terra, ou apenas deixo-os flutuando?

 

3. Para trabalhar com o lcd com o pino rw ligado direto ao terra, qual deve ser a minha rotina de delay, considerando um cristal de 4MHz

Estou usando essa rotina aqui:

DELAYLCD	MOVLW	.50	MOVWF	DELAYSDELAYA	DECFSZ	DELAY,1	GOTO	SDELAYA	RETURN
4. se eu construir meu circuito exatamente do jeito dessa ffigura(Meu projeto que funciona no proteus), e não funcionar mesmo assim, posso assumir que o problema é no codigo ou exsite algo que eu devo acrescentar/tirar desse circuito?

yDqphbM.png

 

Postarei o código completo no post abaixo pois ele esta muito grande.

 

Por favor me ajudem, pois o projeto é para semana que vem, e eu não estou conseguindo resolver.

 

Aqui esta os arquivos do meu projeto incluindo o projeto do feito no proteus 8:

https://mega.co.nz/#!yN0iEToJ!5_-IOjy5VjgOljex_DVj6XZA1MD2S_eQkoFRDwIcPOQ

;*********************************************************************************************;CONFIGURCAO DO PIC#include p16f628a.inc	__CONFIG	_CP_OFF & _LVP_OFF & _BOREN_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC & _CPD_OFF;*********************************************************************************************;BARRAMENTO DE CONTROLE DO LCD#DEFINE	LCD_RS	PORTB,2		; PINO REGISTER SELECT DO LCD;#DEFINE		LCD_CTRL_RW		PORTB,2		; PINO REGISTER SELECT DO LCD#DEFINE	LCD_E	PORTB,3		; PINO ENABLE DO LCD;#DEFINE		LCD_DATA4		PORTB,4		; PINO D4 DO BARRAMENTO DE DADOS DO LCD;#DEFINE		LCD_DATA5		PORTB,5		; PINO D5 DO BARRAMENTO DE DADOS DO LCD;#DEFINE		LCD_DATA6		PORTB,6		; PINO D6 DO BARRAMENTO DE DADOS DO LCD;#DEFINE		LCD_DATA7		PORTB,7		; PINO D7 DO BARRAMENTO DE DADOS DO LCD;*********************************************************************************************;DEFINICAO DE VARIAVEIS	cblock 0x20	PNUM	SNUM	TNUM	PARCELA1	PARCELA2	RESULTADO	PARC1MOD	PARC2MOD	RESULTMOD	LIMITES	LIMITEI	RESULTLMT	DISPTEMP			DISPTEMP1	DELAY	REG_OP	TEMP	TEMP1	TEMP2	DIGITFINDER	T	ENDC;#include lcd.inc;RA0 MAIS1;RA1 MAIS10;RA2 MENOS1;RA3 MENOS10;RA4 ENTER;RB0 OPERACAO;*********************************************************************************************;VETOR DE RESET	ORG 0x00	GOTO	PROGRAMA;*********************************************************************************************;VETOR DE INTERRUPÇOES	ORG	0X04;===================================================================;TABELA DO SEGUNDO DIGITO;===================================================================DIGITOS_D1	MOVWF	T	MOVLW	0X00	MOVWF	PCLATH	MOVF	T,W	ADDWF	PCL,F	RETLW	'0'	RETLW	'1'	RETLW	'2'	RETLW	'3'	RETLW	'4'	RETLW	'5'	RETLW	'6'	RETLW	'7'	RETLW	'8'	RETLW	'9';10	RETLW	'0'	RETLW	'1'	RETLW	'2'	RETLW	'3'	RETLW	'4'	RETLW	'5'	RETLW	'6'	RETLW	'7'	RETLW	'8'	RETLW	'9';20	RETLW	'0'	RETLW	'1'	RETLW	'2'	RETLW	'3'	RETLW	'4'	RETLW	'5'	RETLW	'6'	RETLW	'7'	RETLW	'8'	RETLW	'9';30	RETLW	'0'	RETLW	'1'	RETLW	'2'	RETLW	'3'	RETLW	'4'	RETLW	'5'	RETLW	'6'	RETLW	'7'	RETLW	'8'	RETLW	'9';40	RETLW	'0'	RETLW	'1'	RETLW	'2'	RETLW	'3'	RETLW	'4'	RETLW	'5'	RETLW	'6'	RETLW	'7'	RETLW	'8'	RETLW	'9';50	RETLW	'0'	RETLW	'1'	RETLW	'2'	RETLW	'3'	RETLW	'4'	RETLW	'5'	RETLW	'6'	RETLW	'7'	RETLW	'8'	RETLW	'9';60	RETLW	'0'	RETLW	'1'	RETLW	'2'	RETLW	'3'	RETLW	'4'	RETLW	'5'	RETLW	'6'	RETLW	'7'	RETLW	'8'	RETLW	'9';70	RETLW	'0'	RETLW	'1'	RETLW	'2'	RETLW	'3'	RETLW	'4'	RETLW	'5'	RETLW	'6'	RETLW	'7'	RETLW	'8'	RETLW	'9';80	RETLW	'0'	RETLW	'1'	RETLW	'2'	RETLW	'3'	RETLW	'4'	RETLW	'5'	RETLW	'6'	RETLW	'7'	RETLW	'8'	RETLW	'9';90	RETLW	'0'	RETLW	'1'	RETLW	'2'	RETLW	'3'	RETLW	'4'	RETLW	'5'	RETLW	'6'	RETLW	'7'	RETLW	'8'	RETLW	'9';100	RETLW	'0'	RETLW	'1'	RETLW	'2'	RETLW	'3'	RETLW	'4'	RETLW	'5'	RETLW	'6'	RETLW	'7'	RETLW	'8'	RETLW	'9';110	RETLW	'0'	RETLW	'1'	RETLW	'2'	RETLW	'3'	RETLW	'4'	RETLW	'5'	RETLW	'6'	RETLW	'7'	RETLW	'8'	RETLW	'9';120	RETLW	'0'	RETLW	'1'	RETLW	'2'	RETLW	'3'	RETLW	'4'	RETLW	'5'	RETLW	'6'	RETLW	'7';===================================================================;INICIO DO CODIGO DO PROGRAMA;===================================================================PROGRAMA;===================================================================;ATRIBUICAO DOS VALORES INICIAIS;===================================================================	MOVLW	0x07 	MOVWF	CMCON		BANKSEL	TRISA 	MOVLW	0X1F	MOVWF	TRISA	;PORTA A RA0,RA1,RA2,RA3,RA4 ENTRADAS.	MOVLW	0X01	MOVWF	TRISB	;PORTA B RB0 ENTRADA, RB1,RB2,RB3,RB4,RB5,RB6 E RB7 SAIDAS, LCD.	BANKSEL	PORTA	CLRF	PNUM			;LIMPA VARIAVEIS.	CLRF	SNUM	CLRF	PARCELA1	CLRF	PARCELA2	CLRF	PARC1MOD	CLRF	PARC2MOD	CLRF	RESULTADO	MOVLW	0X01	MOVWF	REG_OP			;REGISTRADOR REG_OP, REGISTRADOR DE OPERAÇAO, INDICA SINAIS DAS PARCELAS, INDICA OPERACAO A SER FEITA, E CONTEM UM FLAG.;===================================================================;DEFINICAO DOS LIMITES, SUPERIOR E INFERIOR.;===================================================================	MOVLW	0X3F				MOVWF	LIMITES	MOVLW	0XC1	MOVWF	LIMITEI	CLRF	PORTB;===================================================================;INICIALIZAÇÃO DO LCD.;===================================================================	CALL	LCD_CONFIG	CALL	MOSTRA_LCD_INIC	CALL	DELAY_2	CALL	DELAY_2	CALL	MOSTRA_LCD_START;===================================================================;LAÇO PRINCIPAL DO PROGRAMA;===================================================================INICIO	BTFSC	PORTA,RA0	CALL	MAIS1	BTFSC	PORTA,RA1	CALL	MAIS10	BTFSC	PORTA,RA2	CALL	MENOS1	BTFSC	PORTA,RA3	CALL	MENOS10	BTFSC	PORTA,RA4	CALL	ENTER	BTFSC	PORTB,RB0	BSF	REG_OP,6	BTFSS	PORTB,RB0	BCF	REG_OP,6	CALL	OPER	CALL	LCD_SINAL	GOTO	INICIO;===================================================================;SUBROTINAS DE OPERAÇOES.;===================================================================MAIS1	CALL	DELAY_2		MOVF	REG_OP,W		;CHECA SE ESTA NA PRIMEIRA PARCELA	ANDLW	0X03	SUBLW	0X01 	BTFSS	STATUS,Z	GOTO	PARC2	MOVLW	0X01	ADDWF	PARCELA1,F	CALL	TESTALIMITESUP	MOVF	PARCELA1,W	BTFSS	PARCELA1,7	BCF		REG_OP,3	BTFSC	PARCELA1,7	BSF		REG_OP,3	BTFSC	PARCELA1,7	COMF	PARCELA1,W	MOVWF	PARC1MOD	BTFSC	PARCELA1,7	MOVLW	0X01	BTFSC	PARCELA1,7	ADDWF	PARC1MOD,F	BTFSS	PARCELA1,7	MOVWF	PARC1MOD	MOVF	PARC1MOD,W	CALL	DIGITOS_D1	MOVWF	PNUM	MOVF	PARC1MOD,W	CALL	DIGITOS_D2	MOVWF	SNUM	CALL	LCD_IMPRIMI_P1PARC2		MOVF	REG_OP,W	ANDLW	0X03		SUBLW	0X02			;CHECA SE ESTA NA SEGUNDA PARCELA	BTFSS	STATUS,Z	GOTO	FIMPARC2	MOVLW	0X01 	ADDWF	PARCELA2,F	CALL	TESTALIMITESUP	MOVF	PARCELA2,W	BTFSS	PARCELA2,7	BCF		REG_OP,2	BTFSC	PARCELA2,7	BSF		REG_OP,2	BTFSC	PARCELA2,7	COMF	PARCELA2,W	MOVWF	PARC2MOD	BTFSC	PARCELA2,7	MOVLW	0X01	BTFSC	PARCELA2,7	ADDWF	PARC2MOD,F	BTFSS	PARCELA2,7	MOVWF	PARC2MOD	MOVF	PARC2MOD,W	CALL	DIGITOS_D1	MOVWF	PNUM	MOVF	PARC2MOD,W	CALL	DIGITOS_D2	MOVWF	SNUM	CALL	LCD_IMPRIMI_P2FIMPARC2	ReturnMAIS10	CALL	DELAY_2		MOVF	REG_OP,W		;CHECA SE ESTA NA PRIMEIRA PARCELA	ANDLW	0X03	SUBLW	0X01 	BTFSS	STATUS,Z	GOTO	PARC22	MOVLW	0X0A	ADDWF	PARCELA1,F	CALL	TESTALIMITESUP	MOVF	PARCELA1,W	BTFSS	PARCELA1,7	BCF		REG_OP,3	BTFSC	PARCELA1,7	BSF		REG_OP,3	BTFSC	PARCELA1,7	COMF	PARCELA1,W	MOVWF	PARC1MOD	BTFSC	PARCELA1,7	MOVLW	0X01	BTFSC	PARCELA1,7	ADDWF	PARC1MOD,F	BTFSS	PARCELA1,7	MOVWF	PARC1MOD	MOVF	PARC1MOD,W	CALL	DIGITOS_D1	MOVWF	PNUM	MOVF	PARC1MOD,W	CALL	DIGITOS_D2	MOVWF	SNUM	CALL	LCD_IMPRIMI_P1PARC22		MOVF	REG_OP,W	ANDLW	0X03		SUBLW	0X02			;CHECA SE ESTA NA SEGUNDA PARCELA	BTFSS	STATUS,Z	GOTO	FIMPARC22	MOVLW	0X0A 	ADDWF	PARCELA2,F	CALL	TESTALIMITESUP	MOVF	PARCELA2,W	BTFSS	PARCELA2,7	BCF		REG_OP,2	BTFSC	PARCELA2,7	BSF		REG_OP,2	BTFSC	PARCELA2,7	COMF	PARCELA2,W	MOVWF	PARC2MOD	BTFSC	PARCELA2,7	MOVLW	0X01	BTFSC	PARCELA2,7	ADDWF	PARC2MOD,F	BTFSS	PARCELA2,7	MOVWF	PARC2MOD	MOVF	PARC2MOD,W	CALL	DIGITOS_D1	MOVWF	PNUM	MOVF	PARC2MOD,W	CALL	DIGITOS_D2	MOVWF	SNUM	CALL	LCD_IMPRIMI_P2FIMPARC22	ReturnMENOS1	CALL	DELAY_2		MOVF	REG_OP,W		;CHECA SE ESTA NA PRIMEIRA PARCELA	ANDLW	0X03	SUBLW	0X01 	BTFSS	STATUS,Z	GOTO	PARC2N	MOVLW	0X01	SUBWF	PARCELA1,F	CALL	TESTALIMITEINF	MOVF	PARCELA1,W	BTFSC	PARCELA1,7	BSF		REG_OP,3	BTFSC	PARCELA1,7	COMF	PARCELA1,W	BTFSC	PARCELA1,7	MOVWF	PARC1MOD	BTFSC	PARCELA1,7	MOVLW	0X01	BTFSC	PARCELA1,7	ADDWF	PARC1MOD,F	BTFSS	PARCELA1,7	MOVWF	PARC1MOD		MOVF	PARC1MOD,W	CALL	DIGITOS_D1	MOVWF	PNUM	MOVF	PARC1MOD,W	CALL	DIGITOS_D2	MOVWF	SNUM	CALL	LCD_IMPRIMI_P1PARC2N		MOVF	REG_OP,W	ANDLW	0X03		SUBLW	0X02			;CHECA SE ESTA NA SEGUNDA PARCELA	BTFSS	STATUS,Z	GOTO	FIMPARC2N	MOVLW	0X01 	SUBWF	PARCELA2,F	CALL	TESTALIMITEINF	MOVF	PARCELA2,W	BTFSC	PARCELA2,7	BSF		REG_OP,2	BTFSC	PARCELA2,7	COMF	PARCELA2,W	BTFSC	PARCELA2,7	MOVWF	PARC2MOD	BTFSC	PARCELA2,7	MOVLW	0X01	BTFSC	PARCELA2,7	ADDWF	PARC2MOD,F	BTFSS	PARCELA2,7	MOVWF	PARC2MOD	MOVF	PARC2MOD,W	CALL	DIGITOS_D1	MOVWF	PNUM	MOVF	PARC2MOD,W	CALL	DIGITOS_D2	MOVWF	SNUM	CALL	LCD_IMPRIMI_P2FIMPARC2N	ReturnMENOS10	CALL	DELAY_2		MOVF	REG_OP,W		;CHECA SE ESTA NA PRIMEIRA PARCELA	ANDLW	0X03	SUBLW	0X01 	BTFSS	STATUS,Z	GOTO	PARC22N	MOVLW	0X0A	SUBWF	PARCELA1,F	CALL	TESTALIMITEINF	MOVF	PARCELA1,W	BTFSC	PARCELA1,7	BSF		REG_OP,3	BTFSC	PARCELA1,7	COMF	PARCELA1,W	BTFSC	PARCELA1,7	MOVWF	PARC1MOD	BTFSC	PARCELA1,7	MOVLW	0X01	BTFSC	PARCELA1,7	ADDWF	PARC1MOD,F	BTFSS	PARCELA1,7	MOVWF	PARC1MOD	MOVF	PARC1MOD,W	CALL	DIGITOS_D1	MOVWF	PNUM	MOVF	PARC1MOD,W	CALL	DIGITOS_D2	MOVWF	SNUM	CALL	LCD_IMPRIMI_P1	PARC22N		MOVF	REG_OP,W	ANDLW	0X03		SUBLW	0X02			;CHECA SE ESTA NA SEGUNDA PARCELA	BTFSS	STATUS,Z	GOTO	FIMPARC22N	MOVLW	0X0A	SUBWF	PARCELA2,F	CALL	TESTALIMITEINF	MOVF	PARCELA2,W	BTFSC	PARCELA2,7	BSF		REG_OP,2	BTFSC	PARCELA2,7	COMF	PARCELA2,W	BTFSC	PARCELA2,7	MOVWF	PARC2MOD	BTFSC	PARCELA2,7	MOVLW	0X01	BTFSC	PARCELA2,7	ADDWF	PARC2MOD,F	BTFSS	PARCELA2,7	MOVWF	PARC2MOD	MOVF	PARC2MOD,W	CALL	DIGITOS_D1	MOVWF	PNUM	MOVF	PARC2MOD,W	CALL	DIGITOS_D2	MOVWF	SNUM	CALL	LCD_IMPRIMI_P2FIMPARC22N	ReturnENTER	CALL	DELAY_2		MOVF	REG_OP,W		;CHECA SE ESTA NA TERCEIRA PARCELA	ANDLW	0X03			;zera todos os bits, deixando apenas os dois menos significativos	SUBLW	0X03 			;subtrai 3 do reg_op	BTFSS	STATUS,Z		;se zero, esta na terceira parcela	GOTO	PULO1	MOVLW	0X20			;seta bit 5 do registrador reg_op para 1	IORWF	REG_OP,F		;PULO1	BTFSC	REG_OP,5		;se bit 5 = 1,então condiçao acima verdadeira	MOVF	REG_OP,W		;\	BTFSC	REG_OP,5		; \	ANDLW	0XFC			;  \	BTFSC	REG_OP,5		;   \	Zera os tres bits menos		MOVWF	REG_OP			;    \	significativos,e em seguida	BTFSC	REG_OP,5		;	 /	altera eles para 1	MOVLW	0X01			;   /		BTFSC	REG_OP,5		;  /	MUDA PARA ESTAGIO 1		IORWF	REG_OP,F		; /	BTFSC	REG_OP,5		;/			CLRF	PARCELA1		;LIMPA PARCELA2	BTFSC	REG_OP,5	CLRF	PARCELA2		;LIMPA PARCELA2	BTFSC	REG_OP,5	CLRF	RESULTADO		;LIMPA RESULTADO	BTFSC	REG_OP,5	CALL	MOSTRA_LCD_START	BTFSC	REG_OP,5		GOTO	FIM		MOVF	REG_OP,W		;CHECA SE ESTA NA PRIMEIRA PARCELA	ANDLW	0X03	SUBLW	0X01 	BTFSS	STATUS,Z	GOTO	PULO2	MOVLW	0X20	IORWF	REG_OP,FPULO2	BTFSC	REG_OP,5		;\	MOVF	REG_OP,W		; \	BTFSC	REG_OP,5		;  \	ANDLW	0XFC			;   \	Zera os tres bits menos		BTFSC	REG_OP,5		;    \	significativos,e em seguida	MOVWF	REG_OP			;	 /	altera eles para 2	BTFSC	REG_OP,5		;   /	MOVLW	0X02			;  /	MUDA ESTAGIO PARA 2	BTFSC	REG_OP,5		; /	IORWF	REG_OP,F		;/      	BTFSC	REG_OP,5	CLRF	PARCELA2		;LIMPA PARCELA2	BTFSC	REG_OP,5	CALL	LCD_P2	BTFSC	REG_OP,5	GOTO	FIM			MOVF	REG_OP,W		;CHECA SE ESTA NA SEGUNDA PARCELA	ANDLW	0X03	SUBLW	0X02 	BTFSS	STATUS,Z	GOTO	PULO3	MOVLW	0X20	IORWF	REG_OP,FPULO3	BTFSC	REG_OP,5		;\	MOVF	REG_OP,W		; \	BTFSC	REG_OP,5		;  \	ANDLW	0XFC			;   \	Zera os tres bits menos		BTFSC	REG_OP,5		;    \	significativos,e em seguida	MOVWF	REG_OP			;	 /	altera eles para 3	BTFSC	REG_OP,5		;   /	MOVLW	0X03			;  /	MUDA ESTAGIO PARA 3	BTFSC	REG_OP,5		; /	IORWF	REG_OP,F		;/ 	BTFSC	REG_OP,5	CALL	LCD_RESULTOPER	MOVF	PARCELA2,W		;\		Checa qual operação fazer	BTFSC	REG_OP,6		; \			SUBWF	PARCELA1,W		;  \	Se for subtraçao, faz aqui	BTFSS	REG_OP,6		;  /	ADDWF	PARCELA1,W		; /		Se for soma, faz aqui	MOVWF	RESULTADO		;/		e guarda o valor em "resultado"	BTFSS	RESULTADO,7	BCF		REG_OP,4	BTFSC	RESULTADO,7	BSF		REG_OP,4	BTFSC	RESULTADO,7	COMF	RESULTADO,W	MOVWF	RESULTMOD	BTFSC	RESULTADO,7	MOVLW	0X01	BTFSC	RESULTADO,7	ADDWF	RESULTMOD,F	MOVF	RESULTMOD,W	CALL	DIGITOS_D1	MOVWF	PNUM	MOVF	RESULTMOD,W	CALL	DIGITOS_D2	MOVWF	SNUM	MOVF	RESULTMOD,W		CALL	ACHADIGITOS	MOVWF	TNUM	CALL	LCD_IMPRIMI_RFIM	MOVF	REG_OP,W		;\	ANDLW	0XDF			; > Retorna o bit 5, do reg_op para 0.	MOVWF	REG_OP			;/	RETURNTESTALIMITESUP	MOVF	PARCELA1,W	SUBWF	LIMITES,W	MOVWF	RESULTLMT	BTFSC	RESULTLMT,7	MOVLW	0X3F	BTFSC	RESULTLMT,7	MOVWF	PARCELA1	BTFSC	STATUS,Z	MOVLW	0X3F	BTFSC	STATUS,Z	MOVWF	PARCELA1	MOVF	PARCELA2,W	SUBWF	LIMITES,W	MOVWF	RESULTLMT	BTFSC	RESULTLMT,7	MOVLW	0X3F	BTFSC	RESULTLMT,7	MOVWF	PARCELA2	BTFSC	STATUS,Z	MOVLW	0X3F	BTFSC	STATUS,Z	MOVWF	PARCELA2	RETURNTESTALIMITEINF	MOVF	LIMITEI,W	SUBWF	PARCELA1,W	MOVWF	RESULTLMT	BTFSC	RESULTLMT,7	MOVLW	0XC1	BTFSC	RESULTLMT,7	MOVWF	PARCELA1	BTFSC	STATUS,Z	MOVLW	0XC1	BTFSC	STATUS,Z	MOVWF	PARCELA1	MOVF	LIMITEI,W	SUBWF	PARCELA2,W	MOVWF	RESULTLMT	BTFSC	RESULTLMT,7	MOVLW	0XC1	BTFSC	RESULTLMT,7	MOVWF	PARCELA2	BTFSC	STATUS,Z	MOVLW	0XC1	BTFSC	STATUS,Z	MOVWF	PARCELA2	RETURN;===================================================================;SUBROTINAS DE LCD;===================================================================LCD_P2						;MOSTRA NA PRIMEIRA LINHA MENSAGEM "DIGITE VALOR 2:"	movlw	0X80			;ENDEREÇA A DDRAM DO LCD PARA O	call	LCD_CMD			;1º CARACTER DA 1ª LINHA	movlw	'D'				;1		call	LCD_CHR			movlw	'I'				;2	call	LCD_CHR	movlw	'G'				;3	call	LCD_CHR	movlw	'I'				;4	call	LCD_CHR   	movlw	'T'				;5	call	LCD_CHR	movlw	'E'				;6	call	LCD_CHR   	movlw	' '				;7	call	LCD_CHR	movlw	'V'				;8	call	LCD_CHR	movlw  	'A'				;9	call	LCD_CHR	movlw 	'L'				;10	call	LCD_CHR	movlw  	'O'				;11	call	LCD_CHR	movlw  	'R'				;12	call	LCD_CHR		movlw  	' '				;13	call	LCD_CHR	movlw  	'2'				;14	call	LCD_CHR		movlw  	':'				;15	call	LCD_CHR	movlw  	' '				;16	call	LCD_CHR	RETURN;===================================================================;IMPRIME PARCELA 1 NA SEGUNDA LINHA DO LCD;===================================================================LCD_IMPRIMI_P1             	movlw	0XC0			;ENDEREÇA A DDRAM DO LCD PARA O	call	LCD_CMD			;1º CARACTER DA 2ª LINHA	BTFSS	REG_OP,3		;SE O NUMERO FOR POSITIVO	movlw	' '				;IMPRIME UM ESPAÇO ANTES 	BTFSS	REG_OP,3		;DO NUMERO	call	LCD_CHR			;		BTFSC	REG_OP,3		;SE O NUMERO FOR NEGATIVO	movlw	'-'				;IMPRIME O SINAL "-"  NA FRENTE 	BTFSC	REG_OP,3		;DO NUMERO	call	LCD_CHR			;	MOVF	SNUM,W			;PEGA O VALOR DE SNUM	call	LCD_CHR			;E IMPRIMI NO PRIMEIRO DIGITO	MOVF	PNUM,W			;PEGA O VALOR DE PNUM	call	LCD_CHR			;E IMPRIME NO SEGUNDO DIGITO	RETURN	;===================================================================;IMPRIME PARCELA 2 NA SEGUNDA LINHA DO LCD;===================================================================LCD_IMPRIMI_P2             	movlw	0XC5			;ENDEREÇA A DDRAM DO LCD PARA O	call	LCD_CMD			;6º CARACTER DA 2ª LINHA	BTFSS	REG_OP,2		;SE O NUMERO FOR POSITIVO	movlw	' '				;IMPRIME UM ESPAÇO ANTES 	BTFSS	REG_OP,2		;DA PARCELA	call	LCD_CHR			;		BTFSC	REG_OP,2		;SE O NUMERO FOR NEGATIVO	movlw	'('				;IMPRIME O SINAL "("  NA FRENTE	BTFSC	REG_OP,2		;DA PARCELA	call	LCD_CHR			;	BTFSS	REG_OP,2		;SE O NUMERO FOR POSITIVO	movlw	' '				;IMPRIME UM ESPAÇO ANTES 	BTFSS	REG_OP,2		;DA PARCELA	call	LCD_CHR			;	BTFSC	REG_OP,2		;SE O NUMERO FOR NEGATIVO	movlw	'-'				;IMPRIME O SINAL "-"  NA FRENTE	BTFSC	REG_OP,2		;DO NUMERO	call	LCD_CHR			;	MOVF	SNUM,W			;PEGA O VALOR DE SNUM	call	LCD_CHR			;E IMPRIMI NO PRIMEIRO DIGITO	MOVF	PNUM,W			;PEGA O VALOR DE PNUM	call	LCD_CHR			;E IMPRIME NO SEGUNDO DIGITO	BTFSS	REG_OP,2		;SE O NUMERO FOR POSITIVO	movlw	' '				;IMPRIME UM ESPAÇO DEPOIS	BTFSS	REG_OP,2		;DA PARCELA	call	LCD_CHR			;	BTFSC	REG_OP,2		;SE O NUMERO FOR NEGATIVO	movlw	')'				;IMPRIME O SINAL ")"  DEPOIS	BTFSC	REG_OP,2		;DA PARCELA	call	LCD_CHR			;	RETURN	;===================================================================;IMPRIME O VALOR DO RESULTADO NA SEGUNDA LINHA DO LCD;===================================================================LCD_IMPRIMI_R             	movlw	0XCC			;ENDEREÇA A DDRAM DO LCD PARA O	call	LCD_CMD			;1º CARACTER DA 2ª LINHA	BTFSS	REG_OP,4		;SE O NUMERO FOR POSITIVO	movlw	' '				;IMPRIME UM ESPAÇO ANTES 	BTFSS	REG_OP,4		;DO RESULTADO	call	LCD_CHR			;	BTFSC	REG_OP,4		;SE O NUMERO FOR NEGATIVO	movlw	'-'				;IMPRIME O SINAL "-"  NA FRENTE	BTFSC	REG_OP,4		;DO RESULTADO	call	LCD_CHR			;	MOVF	RESULTMOD,W		;SUBTRAI 100 DO RESULTADO	MOVWF	DIGITFINDER		;SE O RESULTADO FOR NEGATIVO	MOVLW	0X64			;MOSTRA NO LCD	SUBWF	DIGITFINDER,F	;O RESULTADO EM FORMA DE	BTFSS	DIGITFINDER,7	;DOIS DIGITOS	GOTO	TDIGITOS		;SENDO SNUM O PRIMERO	MOVF	SNUM,W			;E PNUM O SEGUNDO	call	LCD_CHR			;COLOCANDO UM ESPAÇO AONDE 	MOVF	PNUM,W			;SERIA O TERCEIRO DIGITO	call	LCD_CHR			;	MOVLW	' '				;	call	LCD_CHR			;	GOTO	FIMR			;TDIGITOS	MOVF	TNUM,W			;SE O RESULTADO FOR	call	LCD_CHR			;POSITIVO, IMPRIME	MOVF	SNUM,W			;NO LCD TRES DIGITOS		call	LCD_CHR			;TNUM O PRIMEIRO	MOVF	PNUM,W			;SNUM O SEGUNDO			call	LCD_CHR			;E PNUM O TERCEIROFIMR	RETURN;===================================================================;SUBROTINA DE INICIALIZAÇÃO DO LCD;===================================================================LCD_CONFIG	MOVLW	0X33			;MANDA O VALOR 0X33 PARA O LCD	CALL	LCD_CMD			;	MOVLW	0X32			;MANDA O VALOR 0X32 PARA O LCD	CALL	LCD_CMD			;	MOVLW	0X28			;MANDA O VALOR 0X28 PARA O LCD	CALL	LCD_CMD			;INDICA MODO DE FUNCIONAMENTO 4 BITS	MOVLW	0X0C			;MANDA O VALOR 0X0c PARA O LCD	CALL	LCD_CMD			;LIGA LCD COM CURSOR DESLIGADO	MOVLW	0X06			;MANDA O VALOR 0X06 PARA O LCD	CALL	LCD_CMD			;INDICA MODO DE INCREMENTAÇAO AUTOMATICO PARA DIREITA	MOVLW	0X01			;MANDA O VALOR 0X01 PARA O LCD	CALL	LCD_CMD			;COMANDO PARA LIMPAR DISPLAY	MOVLW	0X02			;MANDA O VALOR 0X02 PARA O LCD	CALL	LCD_CMD			;MANDA CURSOR PARA O PRIMEIRO ESPAÇO DO DISPLAY	RETURN;===================================================================;SUBROTINA DE COMANDOS DO LCD;===================================================================LCD_CMD	MOVWF	DISPTEMP		;ENVIA NIBBLE MAIS SIGNIFICATIVO PARA LCD	SWAPF	DISPTEMP,w			ANDLW	b'00001111'		MOVWF	DISPTEMP1	CLRF	PORTB	CALL	DELAYLCD	CALL	DELAYLCD	CALL	DELAYLCD	BTFSC	DISPTEMP1,0	BSF	PORTB,4		BTFSC	DISPTEMP1,1	BSF	PORTB,5	BTFSC	DISPTEMP1,2	BSF	PORTB,6		BTFSC	DISPTEMP1,3	BSF	PORTB,7		BSF	LCD_E				;DA UM PULSO NO BIT E DO LCD	CALL	DELAYLCD		;PARA RECEBER O DADO	CALL	DELAYLCD	BCF	LCD_E	CALL	DELAYLCD	CALL	DELAYLCD	MOVF	DISPTEMP,w		;ENVIA O NIBBLE MENOS SIGNIFICATIVO PARA LCD		ANDLW	b'00001111'			MOVWF	DISPTEMP1	CLRF	PORTB	BTFSC	DISPTEMP1,0	BSF	PORTB,4		BTFSC	DISPTEMP1,1	BSF	PORTB,5	BTFSC	DISPTEMP1,2	BSF	PORTB,6		BTFSC	DISPTEMP1,3	BSF	PORTB,7		BSF	LCD_E				;DA UM PULSO NO BIT E DO LCD	CALL	DELAYLCD		;PARA RECEBER O DADO	CALL	DELAYLCD	BCF	LCD_E	CALL	DELAYLCD	CALL	DELAYLCD		RETURN;===================================================================;ENVIA UM CARACTER PRO LCD;===================================================================LCD_CHR	MOVWF	DISPTEMP	SWAPF	DISPTEMP,w		ANDLW	b'00001111'		MOVWF	DISPTEMP1	CLRF	PORTB	BTFSC	DISPTEMP1,0	BSF	PORTB,4		BTFSC	DISPTEMP1,1	BSF	PORTB,5	BTFSC	DISPTEMP1,2	BSF	PORTB,6		BTFSC	DISPTEMP1,3	BSF	PORTB,7		BSF	LCD_RS		BSF	LCD_E		CALL	DELAYLCD	BCF	LCD_E	MOVF	DISPTEMP,w		ANDLW	b'00001111'		MOVWF	DISPTEMP1	CLRF	PORTB	BTFSC	DISPTEMP1,0	BSF	PORTB,4		BTFSC	DISPTEMP1,1	BSF	PORTB,5	BTFSC	DISPTEMP1,2	BSF	PORTB,6		BTFSC	DISPTEMP1,3	BSF	PORTB,7		BSF	LCD_RS	BSF	LCD_E	CALL	DELAYLCD	BCF	LCD_E	CALL	DELAYLCD	CALL	DELAYLCD	RETURN;===================================================================;SUBROTINAS DE DELAY ;===================================================================;DELAY LCD;===================================================================DELAYLCD	MOVLW	.50	MOVWF	DELAYSDELAYA	DECFSZ	DELAY,1	GOTO	SDELAYA	RETURN;===================================================================;DELAY 1;===================================================================DELAY_1			MOVLW	.10 ; ORIGINALMENTE .10	MOVWF	TEMPL33	MOVLW	.50 ; ORIGINALMENTE .100	MOVWF	TEMP1L22	MOVLW	.100 ; ORIGINALMENTE .100	MOVWF	TEMP2L11	DECFSZ	TEMP2,F	GOTO	L11	DECFSZ	TEMP1,F	GOTO	L22	DECFSZ	TEMP,F	GOTO	L33	RETURN;===================================================================;DELAY 2 ;===================================================================DELAY_2			MOVLW	.10 ; ORIGINALMENTE .10	MOVWF	TEMPL3	MOVLW	.90 ; ORIGINALMENTE .100	MOVWF	TEMP1L2	MOVLW	.100 ; ORIGINALMENTE .100	MOVWF	TEMP2L1	DECFSZ	TEMP2,F	GOTO	L1	DECFSZ	TEMP1,F	GOTO	L2	DECFSZ	TEMP,F	GOTO	L3	RETURN;===================================================================;SUBROTINA PARA DESCOBRIR SE NUMERO É MAIOR OU MENOS QUE 100;===================================================================ACHADIGITOS	MOVWF	DIGITFINDER	MOVLW	0X64	SUBWF	DIGITFINDER,F	BTFSS	DIGITFINDER,7	GOTO	POSITIVO	MOVLW	'0'	GOTO	FIMACHAPOSITIVO	MOVLW	'1'FIMACHA	RETURN;===================================================================;TABELA DO PRIMEIRO DIGITO;===================================================================DIGITOS_D2	MOVWF	T	MOVLW	0X03	MOVWF	PCLATH	MOVF	T,W	ADDWF	PCL,F	RETLW	'0' 	RETLW	'0' 	RETLW	'0'		RETLW	'0' 	RETLW	'0' 	RETLW	'0'		RETLW	'0'		RETLW	'0'		RETLW	'0' 	RETLW	'0' ;10	RETLW	'1'	RETLW	'1'	RETLW	'1'	RETLW	'1'	RETLW	'1'	RETLW	'1'	RETLW	'1'	RETLW	'1'	RETLW	'1'	RETLW	'1';20	RETLW	'2'	RETLW	'2'	RETLW	'2'	RETLW	'2'	RETLW	'2'	RETLW	'2'	RETLW	'2'	RETLW	'2'	RETLW	'2'	RETLW	'2';30	RETLW	'3'	RETLW	'3'	RETLW	'3'	RETLW	'3'	RETLW	'3'	RETLW	'3'	RETLW	'3'	RETLW	'3'	RETLW	'3'	RETLW	'3';40	RETLW	'4'	RETLW	'4'	RETLW	'4'	RETLW	'4'	RETLW	'4'	RETLW	'4'	RETLW	'4'	RETLW	'4'	RETLW	'4'	RETLW	'4';50	RETLW	'5'	RETLW	'5'	RETLW	'5'	RETLW	'5'	RETLW	'5'	RETLW	'5'	RETLW	'5'	RETLW	'5'	RETLW	'5'	RETLW	'5';60	RETLW	'6'	RETLW	'6'	RETLW	'6'	RETLW	'6'	RETLW	'6'	RETLW	'6'	RETLW	'6'	RETLW	'6'	RETLW	'6'	RETLW	'6';70	RETLW	'7'	RETLW	'7'	RETLW	'7'	RETLW	'7'	RETLW	'7'	RETLW	'7'	RETLW	'7'	RETLW	'7'	RETLW	'7'	RETLW	'7';80	RETLW	'8'	RETLW	'8'	RETLW	'8'	RETLW	'8'	RETLW	'8'	RETLW	'8'	RETLW	'8'	RETLW	'8'	RETLW	'8'	RETLW	'8';90	RETLW	'9'	RETLW	'9'	RETLW	'9'	RETLW	'9'	RETLW	'9'	RETLW	'9'	RETLW	'9'	RETLW	'9'	RETLW	'9'	RETLW	'9';100	RETLW	'0'	RETLW	'0'	RETLW	'0'	RETLW	'0'	RETLW	'0'	RETLW	'0'	RETLW	'0'	RETLW	'0'	RETLW	'0'	RETLW	'0';110	RETLW	'1'	RETLW	'1'	RETLW	'1'	RETLW	'1'	RETLW	'1'	RETLW	'1'	RETLW	'1'	RETLW	'1'	RETLW	'1'	RETLW	'1';120	RETLW	'2'	RETLW	'2'	RETLW	'2'	RETLW	'2'	RETLW	'2'	RETLW	'2'	RETLW	'2'	RETLW	'2'	RETLW	'2'	RETLW	'2';===================================================================;MENSAGEM INICIAL DO LCD;===================================================================MOSTRA_LCD_INIC	movlw	0X01		;LIMPA DISPLAY			call	LCD_CMD			movlw	0X80		;ENDEREÇA A DDRAM DO LCD PARA O	call	LCD_CMD	;1º CARACTER DA 1ª LINHA	movlw	'C'		;1		call	LCD_CHR			movlw	'A'		;2	call	LCD_CHR	movlw	'L'		;3	call	LCD_CHR	movlw	'C'		;4	call	LCD_CHR   	movlw	'U'		;5	call	LCD_CHR	movlw	'L'		;6	call	LCD_CHR   	movlw	'A'		;7	call	LCD_CHR	movlw	'D'		;8	call	LCD_CHR	movlw  	'O'		;9	call	LCD_CHR	movlw 	'R'		;10	call	LCD_CHR	movlw  	'A'		;11	call	LCD_CHR	movlw  	' '		;12	call	LCD_CHR	movlw  	' '		;13	call	LCD_CHR	movlw  	' '		;14	call	LCD_CHR	movlw  	' '		;15	call	LCD_CHR	movlw  	' '		;16	call	LCD_CHR	movlw	0XC0		;ENDEREÇA A DDRAM DO LCD PARA O	call	LCD_CMD	;1º CARACTER DA 2ª LINHA	movlw	'6'		;1	call	LCD_CHR	movlw	' '		;2	call	LCD_CHR	movlw	'B'		;3	call	LCD_CHR	movlw	'I'		;1	call	LCD_CHR	movlw	'T'		;2	call	LCD_CHR	movlw	'S'		;3	call	LCD_CHR	movlw	' '		;1	call	LCD_CHR	movlw	'-'		;2	call	LCD_CHR	movlw	' '		;3	call	LCD_CHR	movlw	'M'		;1	call	LCD_CHR	movlw	'I'		;2	call	LCD_CHR	movlw	'C'		;3	call	LCD_CHR	movlw	'R'		;1	call	LCD_CHR	movlw	'O'		;2	call	LCD_CHR	movlw	' '		;3	call	LCD_CHR	movlw	'I'		;3	call	LCD_CHR	CALL	DELAY_2	CALL	DELAY_2	CALL	DELAY_2            	MOVLW	0X1C	CALL	LCD_CMD	CALL	DELAY_1             	MOVLW	0X1C	CALL	LCD_CMD	CALL	DELAY_1             	MOVLW	0X1C	CALL	LCD_CMD	CALL	DELAY_1             	MOVLW	0X1C	CALL	LCD_CMD	CALL	DELAY_1             	MOVLW	0X1C	CALL	LCD_CMD	CALL	DELAY_1             	MOVLW	0X1C	CALL	LCD_CMD	CALL	DELAY_1             	MOVLW	0X1C	CALL	LCD_CMD	CALL	DELAY_1             	MOVLW	0X1C	CALL	LCD_CMD	CALL	DELAY_1             	MOVLW	0X1C	CALL	LCD_CMD	CALL	DELAY_1             	MOVLW	0X1C	CALL	LCD_CMD	CALL	DELAY_1             	MOVLW	0X1C	CALL	LCD_CMD	CALL	DELAY_1             	MOVLW	0X1C	CALL	LCD_CMD	CALL	DELAY_1             	MOVLW	0X1C	CALL	LCD_CMD	CALL	DELAY_1             	MOVLW	0X1C	CALL	LCD_CMD	CALL	DELAY_1             	MOVLW	0X1C	CALL	LCD_CMD	CALL	DELAY_1             	MOVLW	0X1C	CALL	LCD_CMD	movlw	0X80		;ENDEREÇA A DDRAM DO LCD PARA O	call	LCD_CMD	;1º CARACTER DA 1ª LINHA	movlw	'G'		;1		call	LCD_CHR			movlw	'U'		;2	call	LCD_CHR	movlw	'I'		;3	call	LCD_CHR	movlw	'L'		;4	call	LCD_CHR   	movlw	'H'		;5	call	LCD_CHR	movlw	'E'		;6	call	LCD_CHR   	movlw	'R'		;7	call	LCD_CHR	movlw	'M'		;8	call	LCD_CHR	movlw  	'E'		;9	call	LCD_CHR	movlw 	' '		;10	call	LCD_CHR	movlw  	'M'		;11	call	LCD_CHR	movlw  	'A'		;12	call	LCD_CHR	movlw  	'R'		;13	call	LCD_CHR	movlw  	'I'		;14	call	LCD_CHR	movlw  	'N'		;15	call	LCD_CHR	movlw  	'I'		;16	call	LCD_CHR	movlw	0XC0		;ENDEREÇA A DDRAM DO LCD PARA O	call	LCD_CMD	;1º CARACTER DA 2ª LINHA	movlw	'S'		;1	call	LCD_CHR	movlw	'A'		;2	call	LCD_CHR	movlw	'L'		;3	call	LCD_CHR	movlw	'V'		;1	call	LCD_CHR	movlw	'A'		;2	call	LCD_CHR	movlw	'D'		;3	call	LCD_CHR	movlw	'O'		;1	call	LCD_CHR	movlw	'R'		;2	call	LCD_CHR	movlw	' '		;3	call	LCD_CHR	movlw	'C'		;1	call	LCD_CHR	movlw	'A'		;2	call	LCD_CHR	movlw	'R'		;3	call	LCD_CHR	movlw	'R'		;1	call	LCD_CHR	movlw	'A'		;2	call	LCD_CHR	movlw	'S'		;3	call	LCD_CHR	movlw	'C'		;3	call	LCD_CHR	CALL	DELAY_1 	MOVLW	0X1B	CALL	LCD_CMD   	CALL	DELAY_1          	MOVLW	0X1B	CALL	LCD_CMD     	CALL	DELAY_1        	MOVLW	0X1B	CALL	LCD_CMD     	CALL	DELAY_1        	MOVLW	0X1B	CALL	LCD_CMD   	CALL	DELAY_1         	MOVLW	0X1B	CALL	LCD_CMD  	CALL	DELAY_1           	MOVLW	0X1B	CALL	LCD_CMD  	CALL	DELAY_1           	MOVLW	0X1B	CALL	LCD_CMD  	CALL	DELAY_1           	MOVLW	0X1B	CALL	LCD_CMD       	CALL	DELAY_1      	MOVLW	0X1B	CALL	LCD_CMD 	CALL	DELAY_1           	MOVLW	0X1B	CALL	LCD_CMD  	CALL	DELAY_1           	MOVLW	0X1B	CALL	LCD_CMD    	CALL	DELAY_1         	MOVLW	0X1B	CALL	LCD_CMD 	CALL	DELAY_1            	MOVLW	0X1B	CALL	LCD_CMD    	CALL	DELAY_1         	MOVLW	0X1B	CALL	LCD_CMD   	CALL	DELAY_1          	MOVLW	0X1B	CALL	LCD_CMD 	CALL	DELAY_1            	MOVLW	0X1B	CALL	LCD_CMD	CALL	DELAY_2	CALL	DELAY_2 			CALL	DELAY_2 	CALL	DELAY_2	RETURN	;===================================================================;MENSAGEM INICIAL;===================================================================MOSTRA_LCD_START	movlw	0X01		;LIMPA DISPLAY			call	LCD_CMD			movlw	0X80		;ENDEREÇA A DDRAM DO LCD PARA O	call	LCD_CMD	;1º CARACTER DA 1ª LINHA	movlw	'D'		;1		call	LCD_CHR			movlw	'I'		;2	call	LCD_CHR	movlw	'G'		;3	call	LCD_CHR	movlw	'I'		;4	call	LCD_CHR   	movlw	'T'		;5	call	LCD_CHR	movlw	'E'		;6	call	LCD_CHR   	movlw	' '		;7	call	LCD_CHR	movlw	'V'		;8	call	LCD_CHR	movlw  	'A'		;9	call	LCD_CHR	movlw 	'L'		;10	call	LCD_CHR	movlw  	'O'		;11	call	LCD_CHR	movlw  	'R'		;12	call	LCD_CHR	movlw  	' '		;13	call	LCD_CHR	movlw  	'1'		;14	call	LCD_CHR	movlw  	':'		;15	call	LCD_CHR	movlw  	' '		;16	call	LCD_CHR             	movlw	0XC0		;ENDEREÇA A DDRAM DO LCD PARA O	call	LCD_CMD	;1º CARACTER DA 2ª LINHA	movlw	' '		;1	call	LCD_CHR	movlw	'0'		;2	call	LCD_CHR	movlw	'0'		;3	call	LCD_CHR	movlw	' '		;1	call	LCD_CHR	movlw	'+'		;2	call	LCD_CHR	movlw	' '		;3	call	LCD_CHR	movlw	' '		;1	call	LCD_CHR	movlw	'0'		;2	call	LCD_CHR	movlw	'0'		;3	call	LCD_CHR	movlw	' '		;1	call	LCD_CHR	movlw	'='		;2	call	LCD_CHR	movlw	' '		;3	call	LCD_CHR	movlw	' '		;1	call	LCD_CHR	movlw	'0'		;2	call	LCD_CHR	movlw	'0'		;3	call	LCD_CHR	movlw	' '		;3	call	LCD_CHR	RETURN	;===================================================================;MOSTRA MENSAGEM "RESULTADO:" NA PRIMEIRA LINHA DO LCD;===================================================================LCD_RESULT	movlw	0X80		;ENDEREÇA A DDRAM DO LCD PARA O	call	LCD_CMD	;1º CARACTER DA 1ª LINHA	movlw	'R'		;1		call	LCD_CHR			movlw	'E'		;2	call	LCD_CHR	movlw	'S'		;3	call	LCD_CHR	movlw	'U'		;4	call	LCD_CHR   	movlw	'L'		;5	call	LCD_CHR	movlw	'T'		;6	call	LCD_CHR   	movlw	'A'		;7	call	LCD_CHR	movlw	'D'		;8	call	LCD_CHR	movlw  	'O'		;9	call	LCD_CHR	movlw 	':'		;10	call	LCD_CHR	movlw  	' '		;11	call	LCD_CHR	movlw  	' '		;12	call	LCD_CHR	movlw  	' '		;13	call	LCD_CHR	movlw  	' '		;14	call	LCD_CHR	movlw  	' '		;15	call	LCD_CHR	movlw  	' '		;16	call	LCD_CHR	RETURN;===================================================================;SINAL DA OPERAÇÃO;===================================================================LCD_SINAL	movlw	0XC4		;ENDEREÇA A DDRAM DO LCD PARA O	call	LCD_CMD	;1º CARACTER DA 1ª LINHA	BTFSC	REG_OP,6	movlw	'-'		;1		BTFSS	REG_OP,6		movlw	'+'		;2	call	LCD_CHR		RETURN	END

Editado por gandalfnho
inclusão tag Spoiler para diminuir comprimento do post

Compartilhar este post


Link para o post
Compartilhar em outros sites

1. Pinos que eu vou ligar ao barramento de dados do lcd, precisam de resistor? ou apenas a ligação entre eles ja basta.
Apenas a ligação basta, não precisa de resistor algum!

2. Estou utilizando a portab como saida para o lcd, e estou usando o lcd em modo 4 bits, eu precisor levar os pinos d0,d1,d2,d3 ao terra, ou apenas deixo-os flutuando?
Deixe eles flutuando, não é necessário aterra-los.

3. Para trabalhar com o lcd com o pino rw ligado direto ao terra, qual deve ser a minha rotina de delay, considerando um cristal de 4MHz
Não sei te responder, eu programo em C com o compilador CSS ou C18, sempre uso as bibliotecas prontas do LCD e nunca precisei me ater a esse tipo de informação. Desculpe.

4. se eu construir meu circuito exatamente do jeito dessa ffigura(Meu projeto que funciona no proteus), e não funcionar mesmo assim, posso assumir que o problema é no codigo ou exsite algo que eu devo acrescentar/tirar desse circuito?
Eu usaria para o cristal de 4MHz capacitores de 33pF no oscilador.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ja tem um tempinho que não brinco com PIC,mas seu problema deve estar na configuração do Hardware pois se funciona no Proteus,sua lógica deve estar correta.

1-Tente eliminar os capacitores do cristal,o circuito funcionará sem eles(tenho 50 projetinhos com PIC e nunca usei),isso elimina uma ligação errada ou valor errado.

2-Qual gravador esta usando para gravar o Hex no PIC?

3-Verifique se o gravador utiliza baixa ou alta tensão para gravação(& _LVP_OFF ou & _LVP_ON ).

 

 

3. Para trabalhar com o lcd com o pino rw ligado direto ao terra, qual deve ser a minha rotina de delay, considerando um cristal de 4MHz?

 

Utilze estas duas :

Variaveis usadas;    T_MS1    T_MS2    T_US    ;------------------------------------------------------------------------------------DELAYMS:    MOVWF        T_MS2                    ; T_MS2 = WDELAYMS_LOOP1:    MOVLW        .200    MOVWF        T_MS1                    ; T_MS2 = 200    DELAYMS_LOOP2:    NOP                                    ; CICLO DE MAQ. 1us    NOP                                    ; CICLO DE MAQ. 1us    DECFSZ        T_MS1,F                    ; T_MS1 = T_MS1 - 1. T_MS1 = 0?    GOTO        DELAYMS_LOOP2            ; NAO                                        ; SIM    DECFSZ        T_MS2,F                    ; T_MS2 = T_MS2 - 1. T_MS2 = 0?    GOTO        DELAYMS_LOOP1            ; NAO                                        ; SIM    RETURN                                ; FIM DA ROTINA DELAYMS;.....................................................................................................DELAYUS:    MOVWF        T_US                    ; T_US = WDELAYUS_LOOP:    DECFSZ        T_US,F                    ; T_US = T_US - 1. T_US = 0?    GOTO        DELAYUS_LOOP            ; NAO                                        ; SIM    RETURN                                ; FIM DA ROTINA DELAYUS;---------------------------------------------------------------------------------------------

Exemplo de uso:

	MOVLW		.2	CALL		DELAYMS					; DELAY DE 2ms

Sobre os comentários,C é para o colegial e Assembler para faculdade :D

Editado por vtrx

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • O galera eu agadeço muito a ajuda, vtrx o gravador que eu uso é o k150, nao sei a marca, mas imagino q o problema nao seja ele, pois um outro codigo que eu escrevi e gravei com o mesmo gravador funcionou, no mesmo dia ainda.

    Vou tentar tirar os cap do oscilador.

    Qnt a funcionar no proteus, ele funciona tão lindo que quase chorei quando vi, agota imagine a frustraçao quando nao funciono na protoboard.

    Pesquisando na internet me surgiu outra duvida, se vocês olharem na rotina lcd_config, ele envia o comando 0x33 e 0x32 pro lcd_cmd, porém nao achei em lugar nenhum o que esses valores significam, e olhando outros projetos da internet eles contem valores diferentes ou nem apresentam esse valo, porém se eu retiro o 0x32 (o 0x33 parece nao influenciar em nada) o proteus nao funciona de acordo, sera esse valor o ausador dos problemas?


    Por favor se alguem tiver uma rotina simples de lcd junto com o esquema do circuito(para 16f628A) pode me enviar para que eu teste meu lcd?

    Obrigado

    Editado por ratu123

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    ratu123  

     Você disse que o display fica totalmente branco??  O correto seria ele ficar com os quadradinhos no lugar de cada caratere...  Já experimentou aterrar o pino de "VEE", pode parecer um detalhe besta, mas já me aconteceu de errar no comando desse pino, deixando o contraste no máximo, isso faz o display ficar totalmente branco....

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • então, branco que  eu digo é esses caracteres preto mesmo, compilei um codigo de teste, e testei as ligações e funcionou, o problema esta no programa, acho que deve estar na parte de inicialização do lcd... 

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Visitante
    Este tópico está impedido de receber novos posts.





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

    Direitos autorais

    Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

    ×