Свежие обсуждения
Микроконтроллеры

Пожалуйста помогите поправить исходный код для PIC 16F877

Здравствуйте, форумчане, извинюсь сразу, не обладаю должными знаниями что внести изменения в программу самому, поэтому обращаюсь к Вам.

Имеется задача сконструировать миди клавиатуру без клавиш. их роль
играют некие площадки, которые на выходе дают сопротивление
пропорциональное силе нажатия. для реализации был выбран проект
мидирования барабанов.
http://tomscarff.tripod.com/8way_drm2/8way_drm2_1.htm
все устраивает и дисплей и настраиваемая чувствительность и выбор нот,
но по задумке автора команда note-off отправляется через настраиваемое
время задержки после note-on. таким образом, если держать контакт
замкнутым, команд note-on note-off будем море. мне необходимо изменить
эту логику таким образом, чтобы note-off отправлялся только, когда сигнал на
одном из 8 входов ниже установленного значения threshold.
оригинальная прошивка находится здесь
http://tomscarff.tripod.com/downloads/source/vsdp877s.txt

Огромное спасибо вперед за помощь.

 

огромное не обязательно, лучше деньгами.

 

Если кусок кода заменить на такой (измененные строки помечены ";!!!") то может быть всё у вас получится:

;*************************************
; Drum detect loop
;**************************************
drm_det call convert
call convert

movf input9,W ; is drum hit? >threshold=input9
subwf AD_DATA,W ; (f) - (W)--> (dest)
btfsс STATUS,C ; !!!тут изменили условие
goto det ;!!!добавили переход
call noteoff ;ноту гасим тут
return ;выходим

;********** Detect Peak value ******************

det clrf vel1 ; Find first -ve going value ;!!!добавили метку

peak0 call convert
call convert
call set_sens

movf AD_DATA,W
movwf vel2
subwf vel1,W ; (f) - (W)--> (dest)
btfsc STATUS,C ; Skip if result -Ve. ie f<W goto cont_noteon
movf AD_DATA,W ; swap if AD_DATA > vel1
movwf vel1
goto peak0

call set_sens

cont_noteon
call noteon

call sw_dbnc

;call noteoff ;!!!закомментировали

return

 

спасибо, буду пробовать

 

rfc
к сожалению, теперь вообще нет никакой реакции по входам.
инициализация происходит, на дисплее информация отображается и переключения происходят.

во время компиляции получил десяток ворнингов:

Message[302] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 151 : Register in operand not in bank 0. Ensure that bank bits are correct.
Warning[203] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 225 : Found opcode in column 1. (call)
Warning[203] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 227 : Found opcode in column 1. (movf)
Warning[203] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 228 : Found opcode in column 1. (subwf)
Warning[203] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 229 : Found opcode in column 1. (btfsc)
Warning[203] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 230 : Found opcode in column 1. (goto)
Warning[203] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 231 : Found opcode in column 1. (call)
Warning[203] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 232 : Found opcode in column 1. (return)
Warning[203] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 239 : Found opcode in column 1. (call)
Warning[203] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 240 : Found opcode in column 1. (call)
Warning[203] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 242 : Found opcode in column 1. (movf)
Warning[203] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 243 : Found opcode in column 1. (movwf)
Warning[203] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 244 : Found opcode in column 1. (subwf)
Warning[203] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 245 : Found opcode in column 1. (btfsc)
Warning[203] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 246 : Found opcode in column 1. (movf)
Warning[203] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 247 : Found opcode in column 1. (movwf)
Warning[203] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 248 : Found opcode in column 1. (goto)
Warning[203] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 250 : Found opcode in column 1. (call)
Warning[203] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 253 : Found opcode in column 1. (call)
Warning[203] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 255 : Found opcode in column 1. (call)
Warning[203] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 259 : Found opcode in column 1. (return)
Message[302] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 271 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 274 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 275 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 276 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 279 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 296 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 303 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 309 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 313 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 314 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 316 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 318 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 319 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 321 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 324 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 1050 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 1051 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 1052 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 1055 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 1058 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 1069 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 1071 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 1073 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\_HOME\_SCHEMES\MIDI\DRM2\MOD1\VSDP877S_MOD1.ASM 1080 : Register in operand not in bank 0. Ensure that bank bits are correct.

также был еррор на строчку
btfsс STATUS,C ; !!!тут изменили условие

переписал заново также, прошло. вроде просто С русская стоит...

 

ассемблеру не всё равно, в какой позиции строки находятся опкоды. давайте весь ваш проект в упакованном виде сюда или мне в почту. соберу сам. а так смотреть нет смысла - номера строк не совпасть могут.