pic 12c508 замена на аналоги

MrPayne

Доброго всем дня!
Помогите пожалуйста решить проблему:
Есть код под 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 прекратилась и он не поддерживает новые типы контроллеров…
Заранее примного благодарен.

BigDaddy

Иногда шью одним и тем же HEX-файлом и 12С508, и 12С508А и 12С509. Короче что под рукой в данный момент есть. Все работает без всяких изменений кода.

MrPayne

ТО есть можно откомпилировать этот код и залить его в контроллер?.. 😕 тогда в чем проблема? я его залил в контроллер, контроллер вставил в схему, а она категорически отказывается работать…при этом контроллер до прошивки был чистым(проверял), а при записи выдал ошибку какую-то(чето там про адрес памяти 0040h…что-то такое…)…но как понял она должна была вылезти…так что в чем проблема не знаю=(

AlexN

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

Voldemaar
MrPayne:

Есть код под pic12c508:
----- skipped ----
Ну так вот…как я понимаю для того чтобы записать этот код на pic 12c508a необходимо исправить строчу incl*ude? или я не правильно понимаю?

В этом инклюде стоит ссылка на файл с перечнем регистров, адресов и прочей требухи, относящейся к данному контороллеру. У 508(А) и 509(А) они одинаковы, кроме размера самого кода, который можно записать в контроллер. Поэтому, можно ничего не менять. Кроме того, в МРЛАБе вообще нет файлов *.inc для этих контроллеров с буковками А, только P12F508.INC и P12F509.INC

MrPayne:

просто я так делал…и запорол уже несколько контроллеров=(. Можно ли ли вместо pic12c508 использовать аналоги на флеш памяти(12f629,12f675)…и много ли при этом надо будет переделывать код?

Вместо 508 можно использовать только 509. Для 629, 675 надо переделывать т.н. “шапку” программы, т.к. у них “больше регистров” и их надо как-то “инициализировать”. Сам код не меняется. Надо на микрочипе взять руссий даташит на них и посмотреть, в чём разница.

MrPayne:

Да и еще вопросик может ли picprog(мне его одолжили, так как больше ничего нет) прошивать 12f629 и 12f675? Ато как я понял после прочтения форума поддержка picprog прекратилась и он не поддерживает новые типы контроллеров…
Заранее примного благодарен.

Думаю, прошьет, хотя в описании на него эти м/к почему-то не фигурируют. Я шью программой IC-Prog. И только 629, 675, т.к., во-первых, их можно стирать (что немаловажно для отладки программ) и, во-вторых, они дешевле 508-509 при большем функционале.
P.S. И исходники какие-то странные…
org 01FF ;вектор сброса
b begin
… что они хотели этим сказать?

16 days later
MrPayne

Еще раз залил эту же прошивку в контроллер. снова вылезла ошибка:
Ошибка по адресу 00001FF: записано 0800 вместо 0А00
затем друг за другом выскочили:
ошибка верификации(5.5в)
ошибка верификации(3.0в)

Чтобы это все значило…програматор PicProg

Voldemaar
MrPayne:

Еще раз залил эту же прошивку в контроллер. снова вылезла ошибка:
Ошибка по адресу 00001FF: записано 0800 вместо 0А00
затем друг за другом выскочили:
ошибка верификации(5.5в)
ошибка верификации(3.0в)
Чтобы это все значило…програматор PicProg

Ну, а я что пишу:

Voldemaar:

P.S. И исходники какие-то странные…
org 01FF ;вектор сброса
b begin
… что они хотели этим сказать?

По адресу 01FF у 508 находится калибровочная константа. Я бы вообще убрал эти строчки из программы… Или посмотрел в бинарнике, что в 1FF находится. И нормальная прога вообще не будет ничего писать по этому адресу - по крайней мере должна “ругаться” на попытку занести туда что-то не то…
P.S. Еще раз посылаю всех с аналогичными вопросами на тот же Казус - там более специализированная публика…

MrPayne

Эти строчки видимо нужны,так как если их убрать из кода, то hex даже не получается…=( так что думаю проблема не в этом…

Voldemaar
MrPayne:

Эти строчки видимо нужны,так как если их убрать из кода, то hex даже не получается…=( так что думаю проблема не в этом…

  1. Если строчки убрать из кода - всё отлично получается.
  2. Если их оставить - то как раз по адресу 01FF и вылазит 0A00.
    А как я писал:
Voldemaar:

По адресу 01FF у 508 находится калибровочная константа.

Вы знаете, что такое калибровочная константа? Просто тяжело рассуждать о решении дифуров с тем, кто не знает даже таблицу умножения

7 days later
MrPayne
Voldemaar:
  1. Если строчки убрать из кода - всё отлично получается.
  2. Если их оставить - то как раз по адресу 01FF и вылазит 0A00.
    А как я писал:

Вы знаете, что такое калибровочная константа? Просто тяжело рассуждать о решении дифуров с тем, кто не знает даже таблицу умножения

Вы хотите посеовноваться со мной в решении диф.уров? это как раз у меня намного лучше получаетя чем програмирование;-)
Что такое калибровочная констатнта если честно не знаю…но в дебугере если убрать эти 2 строчки, то программа начинает работать совершенно неадекватно