wklejam wycinek kodu. problem polega na tym że wywołania procedury SEN_RAM powoduje wyłczenie przerwania z T0, przerwanie z UARTA działa
Sama procedura wykonuje swoje zadanie.
Wina jest na pewno tej procedury, w przerwaniu od T0 robie CPL ledowi. Przestaje on migać w momencie powrotu z SEN_RAM (mam za CALL SEN_RAM postawione jmp $)
wklejony kod to to co testowałem na symulatorze. w pewnym momencie stos zrywa sie z łańcucha i jeźdzo po całym ramie ;/
Nie wiem czy to wina symulatora, ale program w procku nie leci w maliny- wyłącza sie tylko przerwanie
Sama procedura wykonuje swoje zadanie.
Wina jest na pewno tej procedury, w przerwaniu od T0 robie CPL ledowi. Przestaje on migać w momencie powrotu z SEN_RAM (mam za CALL SEN_RAM postawione jmp $)
ORG 0000H
JMP MAIN
ORG 000BH
JMP TMR0
ORG 0023H
JMP UART_INT
MAIN:
MOV R0, #20H
MAI1: MOV @R0, #0
INC R0
MOV A, R0
CJNE A, #128,MAI1
MOV SP, #05h
SETB P3.0
SETB P3.1
MOV IE, #10010010B ;ZEWOLENIE NA PRZERWANIA OD: UART, T0
MOV SCON, #01000000B ;UART W TRYBIE PIERWSZYM
MOV TMOD, #00100001B ;T1 JAKO LICZNIK 8 BITOWY Z AUTOPRZELADOWANIEM, T0 JAKO LICZNIK 16 BITOWY
MOV PCON, #10000000B ;SMOD=1, PODWOJENIE PREDKOSCI DLA UARTA (ABY BYLO 19200)
MOV TH1, #0FDh ;UART BEDZIE PRACOWAL Z PREDKOSCIA 19200
SETB PS ;PRZERWANIE Z UARTA BEDZIE MIEC NAJWYZSZY PRIORYTET
SETB TR1 ;START LICZNIKÓW
SETB TR0
SETB REN ;SPRZETOWE ODBLOKOWANIE UARTA
CLR P3.2
CLR RI
call sen_ram
jmp $
SER: INC R0 ;ZWIEKSZ WSKAZNIK ADRESU
JNB TI, $
CLR TI
SEN_RAM: ;WYSLANIE ZAWARTOSCI RAMU OD ADRESU PODANEGO W R0 DO ADRESU R1
MOV SBUF, @R0
MOV A, R0
CJNE A, AR1, SER
RET
UART_INT:
clr ri
clr ti
reti
TMR0:
reti
ENDwklejony kod to to co testowałem na symulatorze. w pewnym momencie stos zrywa sie z łańcucha i jeźdzo po całym ramie ;/
Nie wiem czy to wina symulatora, ale program w procku nie leci w maliny- wyłącza sie tylko przerwanie