))чудес не бывает, а вот г... случается
вот подпрограмка записи в уарт
quart_wr:
; Подпрограмма записи во внешний UART
; R7 - address
; R6 - data;
clr ea
mov P0, r7
setb P3.3
nop
clr P3.3
mov a, blic
anl a, #10111111b
ORL a, #10000000b
mov blic, a
mov p0, blic
setb P3.4
nop
clr P3.4
clr P3.2
mov P0, r6
setb P3.2
mov a, blic
anl a, #10111111b
ORL a, #11000000b
mov blic, a
mov p0, blic
setb P3.4
nop
clr P3.4
setb ea
ret
а вот обработчик прерывания от таймера
what_time_is_it_now:
nop
nop
clr ea
CLR TF0
push PSW
push ACC
push DPP
push DPL
push DPH
mov b_temp, b
mov r0_temp, r0
mov r1_temp, r1
mov r2_temp, r2
mov r3_temp, r3
mov r4_temp, r4
mov r5_temp, r5
;mov r6_temp, r6
;mov r7_temp, r7
inc drive
mov a, drive
cjne a, #02h, no_drive_1
setb adc_conv
no_drive_1:
cjne a, #04h, no_drive_2
setb flag
no_drive_2:
cjne a, #06h, no_drive_3
setb hook
no_drive_3:
cjne a, #08h, no_drive_4
setb adc_conv1
mov drive, #0
no_drive_4:
inc msCnt
inc timer24
inc OU_COUNT
inc T0ImpCnt
mov a, T0ImpCnt
cjne a, #04h, _160ms
mov T0ImpCnt, #0
inc TH2
inc TL2
inc RCAP2L
inc __160__
mov a, __160__
cjne a, #0A0h, _160ms
mov __160__, #0
inc KDU1_SilenceCnt
inc KDU2_SilenceCnt
inc KDU3_SilenceCnt
;call time_out
_160ms:
;_____________________________________________
;
;Для интервала в 10ms\и других>
;_____________________________________________
;*************************************чтение из внешнего уарта каждые 0.5 мс**********************************************
MOV A, #01h
cjne a, OU_COUNT, no_ouart
setb time_to_read
;call tablo
mov OU_COUNT, #00h
no_ouart:
;*******************************************************************************
*************************************************
MOV A, #0FAH
cpl a
add a, timer24
cpl a
jnz nexX
mov timer24, #0
inc msCnt_1
MOV A, #08h
cpl a
add a, msCnt_1
cpl a
jnz nexX
;call lamp1
;lcall lamp
mov a, bit_mig
cpl a
anl a, #00000001b
mov bit_mig, a
mov msCnt_1, #0
;*****************************************Таймер включения питания на ключах*****************************************
nexX:
;MOV A, #07H
;cpl a
;add a, msCnt
;cpl a
;jnz next_
MOV A, #02h
cjne a, msCnt, no_tablo
;call tablo
mov msCnt, #00h
no_tablo:
;call swich_on
;next_:
;MOV A, #09h
;cpl a
;add a, msCnt
;cpl a
;jnz no_
;setb key
;no_:
;MOV A, #0AH
;cpl a
;add a, msCnt
;cpl a
;jnz exit_count
;mov msCnt, #00h
;call swich_off
;*******************************************************************************
*************************************************
exit_count:
pop PSW
pop ACC
pop DPP
pop DPL
pop DPH
mov b, b_temp
mov r0, r0_temp
mov r1, r1_temp
mov r2, r2_temp
mov r3, r3_temp
mov r4, r4_temp
mov r5, r5_temp
;mov r6, r6_temp
;mov r7, r7_temp
mov TH0, #0EAh
mov TL0, #66h
SETB TR0;<------------------------------------Restart
setb ea
reti
между двух строк я просто вставлял код записи в уарт, для теста.
Уарт - это внешняя микросхема (8 канальный). На другом блоке аналогичный код работает. Может я некорректно с ХRAMом работаю. Если что, вот аська 221542155
Если запретить прерывание - ошибки исчезают, но это грубое решение