B1R2 EQU 8+2                             'przydzielenie pamieci dla zmiennych
B1R3 EQU 8+3
B2R1 EQU 16+1

FLAGA EQU 20H
NADAJE EQU FLAGA.0

BUFOR EQU 10H

BUF_N EQU 30H
BUF_NE EQU BUF_N+BUFOR
BUF_O EQU BUF_NE
BUF_OE EQU BUF_O+BUFOR

STOS EQU 60H

;TIMER 0
T0_G EQU 0
T0_C EQU 0
T0_M EQU 0
TIM0 EQU T0_M+T0_C*4+T0_G*8
;TIMER 1
T1_G EQU 0
T1_C EQU 0 
T1_M EQU 2
TIM1 EQU T1_M+T1_C*+T1_G*8

TMOD_SET EQU TIM0+TIM1*16

TR_M EQU 1
TR_R EQU 1

SCON_SET EQU TR_M*64+TR_R*16

TH1_SET EQU 256-192
TL1_SET EQU 256-192

BANK0 MACRO
CLR RS0
MACEND

BANK1 MACRO
SETB RS0
MACEND

LJMP START          'skocz na poczatek programu

ORG 23H
PUSH ACC        'obsuga przerwania od uart
PUSH PSW
BANK1
SETB RS0
MACEND

JBC TI,NAD                
CLR RI
MOV @R1,SBUF         'odebrano znak z uart i zapisanie do bufora odbiorczeo
INC R3
INC R1
CJNE R1,#BUF_OE,ODB_E             
MOV R1,#BUF_0        'jesli bufor przepeniony, wyzeruj bufor       

ODB_E:
POP PSW
POP ACC
RETI

NAD:
CJNE R2,#0,NAD_N    'jesli w bufor nadawczy nie jest pusty to wyslij znak
CLR NADAJE
POP PSW              
POP ACC
RETI

NAD_N:
MOV SBUF,@R0         ' tu by bad (sbu > sbuf) Nadaj znak z bufora nadawczego
DEC R2
INC R0
CJNE R0,#SBUF_NE,NAD_E
MOV R0,#SBUF_N

NAD_E:
POP PSW
POP ACC
RETI

ORG 100H

START:
MOV SP,#STOS                 'przesu poczatek stosu poza obszar zmiennych

MOV SCON,#SCON_SET                ' konfiguracja uart
ORL PCON,#80H
MOV TMOD,#TMOD_SET              'konfiguracja timera do taktowania Uartem sprawdz w dokumentacji 8051 co i jak
MOV TH1,#TH1_SET
MOV TL1,#TL1_SET
SETB TR1                         'wacz T1

CLR NADAJE

MOV R0,#BUF_N
MOV R1,#BUF_o
BANK1
SETB RS0
MACEND
MOV R0,#BUF_N
MOV R1,#BUF_O
MOV R2,#0
MOV R3,#0
BANK0
CLR RS0
MACEND
SETB EA
SETB ES

LCALL LCD_CLR                        'czysc wywietlacz lcd, wczesniej powinna byc inicjalizacja lcd!! 
                                      ' samej obslugi lcd tu tez nie ma w tym pliku  
LOOP:
MOV A,B1R3
JZ ODB_NO
MOV A,@R1
LCALL WRITE_DATA           'brak etykiety/podprogrsmu Write_Data!!!!
DEC B1R3
INC R1
CJNE R1,#BUF_OE,LOOP
MOV R1,#BUF_O
SJMP LOOP

ODB_NO:
LCALL TEST_ENTER           ' test_enter tez nie ma
JC LOOP

WPISZ:
LCALL LCD_CLR                            
LCALL WAIT_KEY      'Brak podprogramw!!

PUSH ACC
MOV A,#BUFOR

LP2:
CJNE A,B1R2,LP3
SJMP LP2

LP3:
POP ACC
MOV @R0,A
INC R0
INC B1R2

JB NADAJE,LP4
SETB NADAJE
SETB TI

LP4:
INC DPTR
CJNE R0,#BUF_NE,LP2
MOV R0,#BUF_N
SJMP LP2

TEXT:
DB 'ABCDE',0



