pic 12c508 замена на аналоги
Доброго всем дня!
Помогите пожалуйста решить проблему:
Есть код под pic12c508:
;
;-----------PROGRAMM of TRAFFIC LIGHT------------
;
list p=12c508
__config H'000A'
errorlevel 1
;
incl*ude "d:\p12c508.inc";проверьте путь к файлу!
;
;----------- Constants -----------------
;
CLKOUT = .4000000/4
;
LSB equ 0
MSB equ 7
;
org 07h
;
OutPort res 1
Count res 1
TimeCount res 1
;
;------------------------------------
TRIS_GPIO = b'11001000'
;
;
;---------- GPIO Pin Name -------------
;
GreenRight equ 0;output
GreenLeft equ 1;output
Yellow equ 2;output
Mode equ 3; input
RedRight equ 4;output
RedLeft equ 5;output
LIGHT MACRO RL, RR, Y, GL, GR, TIME
;
IF RL == 1
bcf OutPort, RedLeft
ELSE
bsf OutPort, RedLeft
ENDIF
;аналогично для "красного справа"
IF RR == 1
bcf OutPort, RedRight
ELSE
bsf OutPort, RedRight
ENDIF
;аналогично для "желтого"
IF Y == 1
bcf OutPort, Yellow
ELSE
bsf OutPort, Yellow
ENDIF
;аналогично для "зеленого слева"
IF GL == 1
bcf OutPort, GreenLeft
ELSE
bsf OutPort, GreenLeft
ENDIF
;аналогично для "зеленого справа"
IF GR == 1
bcf OutPort, GreenRight
ELSE
bsf OutPort, GreenRight
ENDIF
;
movf OutPort, W
movwf GPIO
IF TIME != 0
movlw TIME
ELSE
movlw 1
ENDIF
movwf TimeCount
call TimeEnd
ENDM
;
;-------------------- Start address ------------------------------
;
org 01FF ;вектор сброса
b begin
org 0 ;начало
begin
movlw b'10000111';OPTION BYTE
option
;
movlw TRIS_GPIO
tris GPIO
;
movlw 0FF
movwf OutPort
movwf GPIO ;погасить все светодиоды
;
main
btfss GPIO, Mode;проверить режим (обычный <-> мигающий)
b PulseYellow
; ;обычный режим
LIGHT 1,0,0,0,1, .20
LIGHT 1,0,0,0,0, .1
LIGHT 1,0,0,0,1, .1
LIGHT 1,0,0,0,0, .1
LIGHT 1,0,0,0,1, .1
LIGHT 1,0,0,0,0, .1
LIGHT 1,0,0,0,1, .1
LIGHT 1,0,1,0,0, .4
LIGHT 0,1,0,1,0, .20
LIGHT 0,1,0,0,0, .1
LIGHT 0,1,0,1,0, .1
LIGHT 0,1,0,0,0, .1
LIGHT 0,1,0,1,0, .1
LIGHT 0,1,0,0,0, .1
LIGHT 0,1,0,1,0, .1
LIGHT 0,1,1,0,0, .4
b main
PulseYellow
LIGHT 0,0,1,0,0, .1
LIGHT 0,0,0,0,0, .1
b main
; -------
TimeEnd
movlw .500000/.256/.256
movwf Count
TimePlus
movlw 1
movwf TMR0
TimeLoop
nop
movf TMR0, W
bnz TimeLoop
decfsz Count, F
b TimePlus
decfsz TimeCount, F
b TimeEnd
return
;=================================================================
;
END
Ну так вот…как я понимаю для того чтобы записать этот код на pic 12c508a необходимо исправить строчу incl*ude? или я не правильно понимаю? просто я так делал…и запорол уже несколько контроллеров=(. Можно ли ли вместо pic12c508 использовать аналоги на флеш памяти(12f629,12f675)…и много ли при этом надо будет переделывать код?
Да и еще вопросик может ли picprog(мне его одолжили, так как больше ничего нет) прошивать 12f629 и 12f675? Ато как я понял после прочтения форума поддержка picprog прекратилась и он не поддерживает новые типы контроллеров…
Заранее примного благодарен.
Иногда шью одним и тем же HEX-файлом и 12С508, и 12С508А и 12С509. Короче что под рукой в данный момент есть. Все работает без всяких изменений кода.
ТО есть можно откомпилировать этот код и залить его в контроллер?.. 😕 тогда в чем проблема? я его залил в контроллер, контроллер вставил в схему, а она категорически отказывается работать…при этом контроллер до прошивки был чистым(проверял), а при записи выдал ошибку какую-то(чето там про адрес памяти 0040h…что-то такое…)…но как понял она должна была вылезти…так что в чем проблема не знаю=(
Если у Вас при программировании появляется ошибка, то, во-первых, нечего и пытаться использовать такой контроллер, во-вторых, текст ошибки надо переписывать тщательно, с точностью до буковки, чтобы на него можно было посмотреть и осмысленный совет дать.
Есть код под pic12c508:
----- skipped ----
Ну так вот…как я понимаю для того чтобы записать этот код на pic 12c508a необходимо исправить строчу incl*ude? или я не правильно понимаю?
В этом инклюде стоит ссылка на файл с перечнем регистров, адресов и прочей требухи, относящейся к данному контороллеру. У 508(А) и 509(А) они одинаковы, кроме размера самого кода, который можно записать в контроллер. Поэтому, можно ничего не менять. Кроме того, в МРЛАБе вообще нет файлов *.inc для этих контроллеров с буковками А, только P12F508.INC и P12F509.INC
просто я так делал…и запорол уже несколько контроллеров=(. Можно ли ли вместо pic12c508 использовать аналоги на флеш памяти(12f629,12f675)…и много ли при этом надо будет переделывать код?
Вместо 508 можно использовать только 509. Для 629, 675 надо переделывать т.н. “шапку” программы, т.к. у них “больше регистров” и их надо как-то “инициализировать”. Сам код не меняется. Надо на микрочипе взять руссий даташит на них и посмотреть, в чём разница.
Да и еще вопросик может ли picprog(мне его одолжили, так как больше ничего нет) прошивать 12f629 и 12f675? Ато как я понял после прочтения форума поддержка picprog прекратилась и он не поддерживает новые типы контроллеров…
Заранее примного благодарен.
Думаю, прошьет, хотя в описании на него эти м/к почему-то не фигурируют. Я шью программой IC-Prog. И только 629, 675, т.к., во-первых, их можно стирать (что немаловажно для отладки программ) и, во-вторых, они дешевле 508-509 при большем функционале.
P.S. И исходники какие-то странные…
org 01FF ;вектор сброса
b begin
… что они хотели этим сказать?
Еще раз залил эту же прошивку в контроллер. снова вылезла ошибка:
Ошибка по адресу 00001FF: записано 0800 вместо 0А00
затем друг за другом выскочили:
ошибка верификации(5.5в)
ошибка верификации(3.0в)
Чтобы это все значило…програматор PicProg
Еще раз залил эту же прошивку в контроллер. снова вылезла ошибка:
Ошибка по адресу 00001FF: записано 0800 вместо 0А00
затем друг за другом выскочили:
ошибка верификации(5.5в)
ошибка верификации(3.0в)
Чтобы это все значило…програматор PicProg
Ну, а я что пишу:
P.S. И исходники какие-то странные…
org 01FF ;вектор сброса
b begin
… что они хотели этим сказать?
По адресу 01FF у 508 находится калибровочная константа. Я бы вообще убрал эти строчки из программы… Или посмотрел в бинарнике, что в 1FF находится. И нормальная прога вообще не будет ничего писать по этому адресу - по крайней мере должна “ругаться” на попытку занести туда что-то не то…
P.S. Еще раз посылаю всех с аналогичными вопросами на тот же Казус - там более специализированная публика…
Эти строчки видимо нужны,так как если их убрать из кода, то hex даже не получается…=( так что думаю проблема не в этом…
Эти строчки видимо нужны,так как если их убрать из кода, то hex даже не получается…=( так что думаю проблема не в этом…
- Если строчки убрать из кода - всё отлично получается.
- Если их оставить - то как раз по адресу 01FF и вылазит 0A00.
А как я писал:
По адресу 01FF у 508 находится калибровочная константа.
Вы знаете, что такое калибровочная константа? Просто тяжело рассуждать о решении дифуров с тем, кто не знает даже таблицу умножения
Вы хотите посеовноваться со мной в решении диф.уров? это как раз у меня намного лучше получаетя чем програмирование;-)
Что такое калибровочная констатнта если честно не знаю…но в дебугере если убрать эти 2 строчки, то программа начинает работать совершенно неадекватно