Чт апр 20, 2017 23:50:30
Пт апр 21, 2017 00:01:03
Если разберётесь (вырезка из программы под PIC18F26K22)....kotbaris1 писал(а):Можете пример кода показать?
;----------
HighInt
movff STATUS,STATUS_TEMPH
movff WREG,WREG_TEMPH
movff BSR,BSR_TEMPH
BANK1
;----------
btfsc PIR3,SSP2IF
goto SSP2INT
goto HINTEND
;----------
SSP2INT
bcf PIR3,SSP2IF
;
bsf _SSP2INT ; Программный бит (в некоем регистре)
movf SSP2BUF,W
movwf TEMPSSPBUFF ; Отсюда прочитаете значение SSPBUFF после того, как поднимется программный бит _SSP2INT
;----------
HINTEND
;
movff BSR_TEMPH,BSR
movff WREG_TEMPH,WREG
movff STATUS_TEMPH,STATUS
RETFIE FAST
;----------
;*****************************************************************************
WAITSPI2
btfss _SSP2INT
goto WAITSPI2
;
bcf _SSP2INT
;
RETURN
;*****************************************************************************
Пт апр 21, 2017 00:33:40
Аlex писал(а):Блин, да флаг IF нужно проверять, а не BF
Пт апр 21, 2017 00:35:56
Пт апр 21, 2017 00:39:27
Albert_V писал(а):Мне сложно что-то сказать про ваш дебаггер, поскольку у меня ICD3 (оригинальный) и я работаю с реальным "железом".
Пт апр 21, 2017 00:47:31
kotbaris1 писал(а):Еще предупреждение пишет
Пт апр 21, 2017 01:06:20
Albert_V писал(а):kotbaris1 писал(а):Еще предупреждение пишет
Ну и какого вы забиваете буфер, когда он ещё занят?
Документацию читать будете?
movlw 0x20
movwf SSPBUF
sdata40
clrwdt
BTFSS SSPSTAT, BF
GOTO sdata40
btfsc PIR1,SSPIF
goto givemedate
from_givemedate
incf 0x41
bsf TRISA,SS
givemedate
incf 0x30
movf SSPBUF,W
movwf 0x45
bcf PIR1,SSPIF
goto from_givemedate
Пт апр 21, 2017 13:44:18
Сб апр 22, 2017 21:59:31
Albert_V писал(а):Выше я дал вам пример кода.
Если не поняли, после записи байта в SSPBUF надо "сказать" CALL WAITSPI2 и ждать выхода из подпрограммы (и, естественно, в тексте нужно подправить названия регистров).
Не пропустили в моём тексте про то, что нужно всегда читать SSPBUF после окончания передачи байта?
Если хотите трахаться с программой ещё два месяца продолжать проверять флаг SSPSTAT,BF - это ваше право.
-----
P.S.
Специально для вас:
Можете вообще никаких флагов не проверять, поставив "тупую задержку в цикле" после записи байта в SSPBUF на время передачи байта по SPI умноженное на 1,5.
movlw 0x00
bcf TRISA,SS
movlw 0x03
MOVWF SSPBUF
instrycd
clrwdt
BTFSS SSPSTAT, BF
GOTO instrycd
;передача адрес по которому читаем
movlw 0x02
MOVWF SSPBUF
adrd
clrwdt
BTFSS SSPSTAT, BF
GOTO adrd
;передаем 0 чтобы было тактирование
movlw 0x00
movwf SSPBUF
sdata40
clrwdt
BTFSS SSPSTAT, BF
GOTO sdata40
call WAIT
movf SSPBUF,W
movwf 0x45
;btfsc PIR1,SSPIF
;goto givemedate
;from_givemedate
incf 0x41
bsf TRISA,SS
......
......
;получаем данные из памяти
;givemedate
;movf SSPBUF,W
;movwf 0x45
;incf 0x30
;bcf PIR1,SSPIF
;goto from_givemedate
Сб апр 22, 2017 22:02:31
Сб апр 22, 2017 22:05:32
Albert_V писал(а):Так видно?
После записи в SSPBUF очередного байта - по получению прерывания всё равно (надо или нет) нужно читать SSPBUF!!!
Сб апр 22, 2017 22:09:59
Сб апр 22, 2017 22:27:49
Albert_V писал(а):Наконец-то поняли.
Именно ТАК (не зависимо от того что передаёте в понимании, в вашем случае, EEPROM-а)!!!
;передача инструкции на чтение
bcf TRISA,SS
movlw 0x03
MOVWF SSPBUF
instrycd
clrwdt
BTFSS SSPSTAT, BF
GOTO instrycd
;Ждем пока установится SSPIF в 1
SSP1
btfss PIR1,SSPIF
goto SSP1
;Читаем SSPBUF
movf SSPBUF,W
movwf 0x45
;Сбрасываем SSPIF
;bcf PIR1,SSPIF
;передача адрес по которому читаем
movlw 0x02
MOVWF SSPBUF
adrd
clrwdt
BTFSS SSPSTAT, BF
GOTO adrd
;Ждем пока установится SSPIF в 1
SSP2
btfss PIR1,SSPIF
goto SSP2
;Читаем SSPBUF
movf SSPBUF,W
movwf 0x45
;Сбрасываем SSPIF
;bcf PIR1,SSPIF
;передаем 0 чтобы было тактирование
movlw 0x00
movwf SSPBUF
sdata40
clrwdt
BTFSS SSPSTAT, BF
GOTO sdata40
;Ждем пока установится SSPIF в 1
SSP3
btfss PIR1,SSPIF
goto SSP3
;Читаем SSPBUF
movf SSPBUF,W
movwf 0x45
;Сбрасываем SSPIF
;bcf PIR1,SSPIF
bsf TRISA,SS
Сб апр 22, 2017 22:43:29
Сб апр 22, 2017 22:51:06
Albert_V писал(а):Почему закомментировано:
;Сбрасываем SSPIF
;bcf PIR1,SSPIF
???
Сб апр 22, 2017 22:53:38
Сб апр 22, 2017 22:56:58
Albert_V писал(а):В моём примере пробовали разобраться?
Он рабочий (в железе).
Сб апр 22, 2017 22:59:34
kotbaris1 писал(а):Я разобрался как видите....
Сб апр 22, 2017 23:12:04
Albert_V писал(а):kotbaris1 писал(а):Я разобрался как видите....
Не вижу.
У меня, в отличии от вас, работа по прерыванию и нет проверки SSPSTAT,BF.
Так что, это ваша некая редакция некоего текста программы.
Сб апр 22, 2017 23:20:56