;------------------------------------;
; eetst.asm  teste eeprom - maio.2003;
; display 16 caract 2 linhas         ;
; * * *  Eng David m Risnik   * * *  ;
;------------------------------------;

EN              EQU P3.6               
RS              EQU P3.5               

data1          EQU 08H   
data2          EQU 09H   
data3          EQU 0AH   
data4          EQU 0BH   
data5          EQU 0CH   
data6          EQU 0DH   
data7          EQU 0EH
data8          EQU 0FH
dly            EQU 1FH   


CONT        EQU 15H     
m1          EQU 0400H   
m2          EQU 0430H   
m3          EQU 0460H          
m4          EQU 0490H          
m5          EQU 04C0H          
branco      EQU 0550H
numero      EQU 0580H

SDA   EQU   P1.1
SCL   EQU   P1.0
                ORG 0000H
                JMP iniG

                ORG 0100H
                   
iniG:           MOV SP,#70H
                mov dptr,#8000h 

                LCALL INI_DISP
                call clear
                call linha1
                mov dptr , #m1
                call escrever
                call padrao1

                
                mov R1 , #08H    
                mov B , #40h     
                mov R4 , #49h    
                call WBL      

               
                call atraso
                call atraso


                call clear
                call linha1
                mov dptr , #m2
                call escrever
                call padrao2
                
                mov R0 ,  #08H
                mov B , #40h
                mov R4 , #49h   
                call RBL
                call atraso
                call atraso
                
                call compara
                call clear
                call linha1
                mov dptr , #m5
                call escrever
                jmp $
;-------------------------
err:        call clear
            call linha1
            mov dptr , #m4
            call escrever
            jmp $
;-------------------------

compara:
             call padrao1
             mov A , 08H
             cjne A , data1 , err
             mov A  , 09H
             cjne A , data2 , err
             mov A  , 0AH
             cjne A , data3 , err
             mov A  , 0BH
             cjne A , data4 , err
             mov A  , 0CH
             cjne A , data5 , err
             mov A  , 0DH
             cjne A , data6 , err
             mov A  , 0EH
             cjne A , data7 , err
             mov A  , 0FH
             cjne A , data8 , err
             ret
;-------------------------
padrao1:
        mov data1 , #80
        mov data2 , #82
        mov data3 , #84
        mov data4 , #86
        mov data5 , #88
        mov data6 , #90
        mov data7 , #92
        mov data8 , #94    
        ret
;-------------------------
padrao2:
        mov data1 , #35
        mov data2 , #36
        mov data3 , #37
        mov data4 , #38
        mov data5 , #39
        mov data6 , #40
        mov data7 , #41
        mov data8 , #41    
        ret

;-------------------------
erro:          call linha2
               mov dptr , #m3  
               call escrever
               jmp $            
;-------------------------
clear:          call linha1
                mov dptr , #branco
                call escrever
                call linha2
                mov dptr , #branco
                call escrever
                ret
;--------------------------
;valor:          mov R1 , #04    
                clr RS
                nop
                nop
                nop
                LCALL WRC
                nop
                SETB RS             
                mov R0 , #3
prox:
                mov A , @r1     
                MOV DPTR , #NUMERO
                MOVC A , @A +DPTR
                mov dptr,#8000h
                MOVx @dptr,A    
                call atraso3
                dec R1
                DJNZ R0 , prox
                RET
;-------------------------------
ATRASO:         mov r1 , #20h
again:          lcall atraso2
                djnz r1 , again
                ret
;-------------------------------
linha1:         
                CLR RS         
                MOV A,#080H    
                LCALL WRC
                SETB RS
                RET
;-------------------------------
linha2:
                CLR RS         
                MOV A,#0c0H    
                LCALL WRC
                SETB RS
                RET
;-------------------------------
limpa:          CLR RS                 
                MOV A,#080H
                LCALL WRC
                SETB RS
                RET
;-------------------------------
atraso2:        MOV  dly,#00
                DJNZ dly,$
                DJNZ dly,$
                DJNZ dly,$
                DJNZ dly,$
atraso3:        DJNZ dly,$
                DJNZ dly,$
                DJNZ dly,$
                DJNZ dly,$
                RET
;-------------------------------
INI_DISP:       CLR RS                  
                MOV A,#38H              
                LCALL wrc             
                MOV A,#38H
                LCALL wrc
                MOV A,#06H              
                LCALL wrc             
                MOV A,#0EH              
                LCALL wrc             
                MOV A,#01H              
                LCALL wrc             
                MOV A,#0CH              
                LCALL wrc
                SETB RS
                RET
;-----------------------------
WRC:            push dpl
                push dph
                mov dptr,#8000h
                MOVx @dptr,A     
                pop dph
                pop dpl
                lcall atraso2
                RET
;------------------------------
escrever:       mov a, #0
                movc a, @A + DPTR
                cjne a, #'$', wr_
                ret
;------------------------------
wr_:                     
                lcall wrc
                inc dptr
                sjmp escrever
fin:            ret
;------------------------------
STT:    SETB    SCL             
        SETB    SDA             
        LCALL   atraso3         
        CLR     SDA             
        LCALL   atraso3         
	RET
;------------------------------
STP:    CLR     SCL             
        CLR     SDA             
        LCALL   atraso3
        SETB    SCL             
        LCALL   atraso3
        SETB    SDA             
        LCALL   atraso3
	RET
;------------------------------
WRTBIT:      
        MOV     R7,#08H         
LOPWRB:      
        CLR     SCL             
        RLC     A               
        MOV     SDA,C           
        LCALL   atraso3
        SETB    SCL             
        LCALL   atraso3
        DJNZ    R7,LOPWRB       
	RET
;------------------------------
WRTBYT:  CALL   WRTBIT       
        CLR     SCL          
        SETB    SDA          
        LCALL   atraso3
        SETB    SCL          
        LCALL   atraso3
        JNB     SDA,SAIWRT   
        CLR     SCL          
	NOP
        CLR     SDA          
        LCALL   atraso3 
        LCALL   STP  
        JMP ERRO
        POP     ACC         
	POP     ACC
        AJMP    WBL      
SAIWRT:        
	RET
;------------------------------
WBL:
        LCALL   STT          
        MOV     A,#10100000B    
        LCALL   WRTBYT          
        MOV     A,B             
        LCALL   WRTBYT          
LOPWRT: 
        MOV     A,@R1           
        LCALL   WRTBYT          
        INC     B               
        INC     R1              
        MOV     A,R4            
        CJNE    A,0F0H,LOPWRT   
        LCALL   STP          
	RET
;------------------------------
REDBIT:
        MOV     R7,#08H         
LOPREB:
        CLR     SCL             
        SETB    SDA             
        LCALL   atraso3
        SETB    SCL             
        LCALL   atraso3
        MOV     C,SDA           
        RLC     A               
        DJNZ    R7,LOPREB       
	RET
;------------------------------
REDBYT:
        LCALL   REDBIT          
        CLR     SCL             
        CLR     SDA             
        LCALL   atraso3
        SETB    SCL             
        LCALL   atraso3
	RET
;------------------------------ 
RBL:
        LCALL   STT          
        MOV     A,#10100000B    
        LCALL   WRTBYT          
        MOV     A,B             
        LCALL   WRTBYT          
        CLR     SCL             
        LCALL   atraso3
        LCALL   STT          
        MOV     A,#10100001B    
        LCALL   WRTBYT          
	DEC     R4
;------------------------------
LOPRED:
        LCALL   REDBYT          
        MOV     @R0,A           
        INC     B               
        INC     R0              
        MOV     A,R4            
        CJNE    A,0F0H,LOPRED   
        LCALL   REDBIT          
        CLR     SCL             
        LCALL   atraso3
        SETB    SCL             
        LCALL   atraso3
        MOV     @R0,A  
        LCALL   STP 
	RET
;------------------------------
            org m1
                DB 'Gravando    $'
                                                           
            org m2
                DB 'Lendo       $'

            org m3
                DB 'erro NO  ACK $'

            org m4
                DB 'Erro R/W     $'

            org m5
                DB 'R/W = OK     $'

            org branco
                DB '              $'

            org NUMERO
                DB '0123456789 '

            
                END
