por lipesh » 17 Fev 2008 20:03
Ueh, que estranho !
Simplesmente mudei o nome do arquivo a incluir, e aí deu uma série de erros, apenas variando o endereço (de 0x0 até 0x25):
"Overlap in .cseg: addr=0x0 conflicts with 0x0:0x40"
"Overlap in .cseg: addr=0x1 conflicts with 0x0:0x40"
"Overlap in .cseg: addr=0x2 conflicts with 0x0:0x40"
...
Aí, ao incluir o arquivo, em vez de colocar logo abaixo de include "m88def.inc" eu coloquei na última linha do código fonte. Não sei se deveria, mas deu certo... Vai entender. Vou postar o código aqui abaixo caso sirva para esclarecer algo:
contador.asm (esta é a versão do código que funcionou)
______________________________________________________________________________________
.include "m88def.inc"
.def W=R16 ;NOMES MAIS FÁCEIS PARA ENTENDER O PROGRAMA
.def AUXD=R17
.def TEMPO0=R18
.def TEMPO1=R19
.def AUX2=R20
.EQU DISPLAY = PORTD ;DISPLAY
.EQU ENABLE = 2
.EQU RS = 1
.org 0x00
RJMP CONFIG
;----------------------------------------------------------------------------------------------------------------------
;
CONFIG:
LDI W,LOW(RAMEND) ;CONFIGURA PILHA
OUT SPL,W
LDI W,HIGH(RAMEND)
OUT SPH,W
LDI W,0b11111111 ;CONFIGURA PORTD
OUT DDRD,W
RCALL INI_DISPLAY ;CONFIGURA DISPLAY
LDI AUX2,10
RJMP INICIO
;----------------------------------------------------------------------------------------------------------------------
;
INICIO:
CBI DISPLAY,RS ;CONFIGURA DISPLAY PARA COMANDOS
LDI W,1 ;CHAMA DELAY
RCALL DELAY_MS
LDI W,0X82 ;COMANDO PARA POSICIONAR O CURSOR NA LINHA 0 E COLUNA 2
RCALL ESCREVE
SBI DISPLAY,RS ;SELECIONA DISPLAY PARA DADOS
INC AUX2
MOV W,AUX2
RCALL ESCREVE
LDI W,255
RCALL DELAY_MS
RJMP INICIO
;----------------------------------------------------------------------------------------------------------------------
; DELAY PROPORCIONAL A W
DELAY_MS:
MOV TEMPO1,W ; CARREGA TEMPO1
DEL_INI:
LDI W,250
MOV TEMPO0,W ; CARREGA TEMPO0
NOP_INI:
NOP
NOP
NOP
NOP
DEC TEMPO0
IN W,SREG
SBRS W,1 ; FIM DE TEMPO0 ?
RJMP NOP_INI ; NÃO - VOLTA
; SIM - PASSOU-SE 1MS
DEC TEMPO1
IN W,SREG
SBRS W,1 ; FIM DE TEMPO1 ?
RJMP DEL_INI ; NÃO - VOLTA
; SIM
RET ; RETORNA
;----------------------------------------------------------------------------------------------------------------------
;
.include "TST.asm"
______________________________________________________________________________________
e este é o TST.asm (antigo LCD.asm)
______________________________________________________________________________________
;----------------------------------------------------------------------------------------------------------------------
; SUBROTINAS PRONTAS PARA TRABALHAR COM LCD
;
; AS VARIÁVEIS DAS FUNÇÕES SÃO:
;
; DISPLAY -> PORT A SER USADO PELO LCD. O NIBBLE MAIS SIGNIFICATIVO SÃO AS VIAS DE DADOS
; RS -> BIT DO PORT DO DISPLAY
; ENABLE -> BIT DO PORT DO DISPLAY
; W -> REGISTRADOR DE TRABALHO
; AUXD -> REGISTRADOR AUXILIAR
;
; AS SUBROTINAS ABAIXO DEPENDEM DA SUBROTINA "DELAY_MS"
.EQU MASC = 0b11110000 ;MASCARA PARA ESCRITA NO NIBBLE MAIS SIGNIFICATIVO
;----------------------------------------------------------------------------------------------------------------------
; CONFIGURAÇÕES INICIAIS DO DISPLAY
;
; A ROTINA INICIALIZA O DISPLAY P/ COMUNICAÇÃO DE 4 VIAS, 2 LINHAS, E CURSOR APAGADO COM DESLOCAMENTO À DIREITA.
INI_DISPLAY:
CBI DISPLAY,RS ;SELECIONA O DISPLAY P/ COMANDOS
LDI W,0X30 ;ESCREVE COMANDO 0X30 PARA
RCALL ESCREVE ;INICIALIZAÇÃO
LDI W,4
RCALL DELAY_MS ;DELAY DE 4MS (EXIGIDO PELO DISPLAY)
LDI W,0X30 ;ESCREVE COMANDO 0X30 PARA
RCALL ESCREVE ;INICIALIZAÇÃO
LDI W,0X30 ;ESCREVE COMANDO 0X30 PARA
RCALL ESCREVE ;INICIALIZAÇÃO
LDI W,0b00100000 ;ESCREVE COMANDO PARA
RCALL ESCREVEE ;INTERFACE DE 4 VIAS DE DADOS
LDI W,0b00101000 ;ESTABELECE CONDIÇÕES DE UTILIZAÇÃO
RCALL ESCREVE ;(4 VIAS DE DADOS, DUAS LINHAS E MATRIZ DE 7X5)
LDI W,0b00000001 ;ESCREVE COMANDO PARA
RCALL ESCREVE ;LIMPAR TODO O DISPLAY
LDI W,2
RCALL DELAY_MS ;DELAY DE 2MS
LDI W,0b00001100 ;ESCREVE COMANDO PARA
RCALL ESCREVE ;LIGAR O DISPLAY SEM CURSOR
LDI W,0b00000110 ;ESCREVE COMANDO PARA INCREM.
RCALL ESCREVE ;AUTOMÁTICO À DIREITA
SBI DISPLAY,RS ;SELECIONA O DISPLAY P/ DADOS
RET
;----------------------------------------------------------------------------------------------------------------------
; ROTINA DE ESCRITA DE UM CARACTER NO DISPLAY
;
; ROTINA QUE ENVIA UM CARACTER PREVIAMENTE COLOCADO EM W PARA O LCD.
ESCREVE:
MOV AUXD,W ;PASSA W PARA AUXD
ANDI W,MASC ;FAZ UM E LÓGICO COM A MASCARA 11110000
RCALL ESCREVEE
LSL AUXD ;DESLOCA QUATRO BITS À ESQUERDA
LSL AUXD
LSL AUXD
LSL AUXD
MOV W,AUXD ;COLOCA AUXD EM W
ANDI W,MASC ;MASCARA NOVAMENTE
RCALL ESCREVEE
RET
ESCREVEE:
SBRC W,7 ;TESTA SE O BIT 7 DE W ESTÁ ZERADO
RJMP SB7 ;NÃO: ENTÃO SETA BIT 7 DO DISPLAY
CBI DISPLAY,7 ;SIM: ENTÃO ZERA BIT 7 DO DISPLAY
RJMP TB6
SB7:
SBI DISPLAY,7 ;SETA BIT 7 DO DISPLAY
TB6:
SBRC W,6 ;TESTA SE O BIT 6 DE W ESTÁ ZERADO
RJMP SB6 ;NÃO: ENTÃO SETA BIT 6 DO DISPLAY
CBI DISPLAY,6 ;SIM: ENTÃO ZERA BIT 6 DO DISPLAY
RJMP TB5
SB6:
SBI DISPLAY,6 ;SETA BIT 6 DO DISPLAY
TB5:
SBRC W,5 ;TESTA SE O BIT 5 DE W ESTÁ ZERADO
RJMP SB5 ;NÃO: ENTÃO SETA BIT 5 DO DISPLAY
CBI DISPLAY,5 ;SIM: ENTÃO ZERA BIT 5 DO DISPLAY
RJMP TB4
SB5:
SBI DISPLAY,5 ;SETA BIT 5 DO DISPLAY
TB4:
SBRC W,4 ;TESTA SE O BIT 4 DE W ESTÁ ZERADO
RJMP SB4 ;NÃO: ENTÃO SETA BIT 4 DO DISPLAY
CBI DISPLAY,4 ;SIM: ENTÃO ZERA BIT 4 DO DISPLAY
RJMP CONT
SB4:
SBI DISPLAY,4 ;SETA BIT 4 DO DISPLAY
CONT:
NOP ;PERDE 1US PARA ESTABILIZAÇÃO
NOP
NOP
SBI DISPLAY,ENABLE ;ENVIA UM PULSO DE ENABLE AO DISPLAY
NOP
NOP
CBI DISPLAY,ENABLE ;RETIRA O PULSO DE ENABLE DO DISPLAY
LDI W,1
RCALL DELAY_MS ;DELAY DE 1MS
RET ;RETORNA
;----------------------------------------------------------------------------------------------------------------------
______________________________________________________________________________________
include "Dominar_o_AVR.asm"