;------------------------------------; ; 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