PIC12F6xx trouble

Jan 17, 2005 28 Replies
ðÒÉ×ÅÔÓÔ×ÕÀ ÷ÁÓ, All!

HÅ ÐÏÍÎÀ ÔÏÞÎÏÇÏ ÓÁÂÖÁ, ÐÏÄ ËÏÔÏpÙÍ × ËÏÎÃÅ 2004 Ñ ×ÙÓËÁÚÁÌ ÂÅÓÐÏËÏÊÓÔ×Ï ÐÏ ÐÏ×ÏÄÕ ÎÅËÏppÅËÔÎÏÊ ÚÁÐÉÓÉ EEPROM × PIC12F629/675 (ÄpÕÇÉÈ ÎÅ ÐpÏ×ÅpÑÌ). ñ ÏÂÅÝÁÌ ÓÏÏÂÝÉÔØ pÅÚÕÌØÔÁÔÙ pÁÚÂÉpÁÔÅÌØÓÔ× Ó ÜÔÏÊ "ÐpÏÂÌÅÍÏÊ". òÅÁÌØÎÏ ÍÎÅ ÏËÁÚÁÌÏÓØ ÌÅÎØ ÜÔÉÍ ÚÁÎÉÍÁÔØÓÑ, Ô.Ë. ÐÏ ÍÅpÅ pÁÚpÁÓÔÁÎÉÑ ÐpÏÇpÁÍÍÙ (ÏÎÁ ÄÁ×ÎÏ × ÖÅÌÅÚÅ) ÇÌÀË ÉÓÞÅÚ. HÏ ÓÏ×ÓÅÍ ÏÓÔÁ×ÉÔØ ÂÅÚ ×ÎÉÍÁÎÉÑ ÜÔÏÔ ×ÏÐpÏÓ ÍÎÅ ÐÏËÁÚÁÌÏÓØ ÎÅÐpÁ×ÉÌØÎÏ. õ ÍÅÎÑ ÎÁÛÌÏÓØ ÎÅÍÎÏÇÏ ×pÅÍÅÎÉ ÐÏÓÌÅ ÏÔÄÙÈÁ ÓÍÏÄÅÌÉpÏ×ÁÔØ ÔÕ ÓÉÔÕÁÃÉÀ, ÉÓÐÏÌØÚÕÑ ÍÉÎÉÍÕÍ ËÏÄÁ; ÐpÏ×ÅpÑÔØ ÜÔÏ ÎÁ ÁÓÍÅ Ñ ÐÏÌÅÎÉÌÓÑ, Ô.Ë. ÐpÅÄÐÏÌÁÇÁÀ, ÞÔÏ ÐpÏÂÌÅÍÁ × ÎÁÞÁÌØÎÙÈ "ÕÓÔÁËÁÎÉ×ÁÎÉÑÈ" ÐÉÔÁÎÉÑ, ÞÔÏ ËÏppÅÌÉpÕÅÔ Ó ÓÉÔÕÁÃÉÅÊ ÏÐÉÓÁÎÎÏÊ íÁËÓÉÍÏÍ ðÏÌÑÎÓËÉÍ. HÁÐÏÍÎÀ, Õ ÎÅÇÏ ÂÙÌÏ "ÎÅËÁÞÅÓÔ×ÅÎÎÏÅ" ÍÁÌÏÍÏÝÎÏÅ ÐÉÔÁÎÉÅ, ÞÔÏ É ×ÙÚÙ×ÁÌÏ ÐpÏÂÌÅÍÙ. ÷ ÐpÉ×ÅÄÅÎÎÏÍ ËÏÄÅ ÐpÏÂÌÅÍÁ ÎÁÂÌÀÄÁÅÔÓÑ ÐpÉ ÎÏpÍÁÌØÎÏÍ ÐÉÔÁÎÉÉ: Ó×ÅÖÁÑ ÂÁÔÁpÅÊËÁ Ó ÌÅÇËÏÓÔØÀ ×ÙÄÁÀÝÁÑ ÁÍÐÅpÙ ÎÁ ÍÏÔÏp ÉÌÉ ÌÁÍÐÏÞËÕ ÉÌÉ 7805 ÐpÁ×ÉÌØÎÏ ÆÉÌØÔpÏ×ÁÎÎÁÑ, - ÎÅ×ÁÖÎÏ. äÌÑ ÜËÓÐÅpÉÍÅÎÔÁ ÎÕÖÅÎ ÔÏÌØËÏ PIC (DIP ÕÄÏÂÎÅÅ ÂÕÄÅÔ), ÐpÏÇpÁÍÍÁÔÏp, ÞÉÔÁÀÝÉÊ EEPROM É éð 3..5÷ (ÐpÉ ÄpÕÇÉÈ ÎÁÐpÑÖÅÎÉÑÈ ÎÅ ÐpÏ×ÅpÑÌ). ðpÉ×ÏÖÕ ËÏÄ, ÔÏÌØËÏ ÐÉÛÕÝÉÊ × EEPROM. çÏpÁÚÄÏ "ÓÍÅÛÎÅÅ" ÂÙÌÏ, ËÏÇÄÁ ÓpÁÚÕ ÐÏÓÌÅ ÚÁÐÉÓÉ Ñ ÅÇÏ ÞÉÔÁÌ × ÂÕÆÅp PIC'Á, - ×ÐÌÏÔØ ÄÏ ÚÁ×ÉÓÁÎÉÑ É ÎÅ×ÙÐÏÌÎÅÎÉÑ ÄÁÌØÎÅÊÛÅÇÏ ËÏÄÁ, ÎÏ ÓÈÏÄÕ Ñ ÎÅ ÓÍÏÇ ÜÔÏ ÐpÏÓÔÏ ÐpÏÄÅÍÏÎÓÔpÉpÏ×ÁÔØ. ïÇpÁÎÉÞÉÌÓÑ ÐÏËÁ ÔÏÌØËÏ ÐpÏÂÌÅÍÏÊ ÚÁÐÉÓÉ. ÷ ÏÂÝÅÍ, ÎÉÞÅÇÏ ÉÎÔÅpÅÓÎÏÇÏ, ÍÏÖÅÔ ËÔÏ É ÐÏ ÉÓÈÏÄÎÉËÕ ÕËÁÖÅÔ ÎÁ ÐÏÔÅÎÃÉÁÌØÎÕÀ ÏÛÉÂËÕ, - Ñ ÎÅ ÓÍÏÇ ÐpÅÄÕÇÁÄÁÔØ É ÐÏÔÅpÑÌ ÏÄÉÎ-Ä×Á ÄÎÑ. éÔÁË.



============[ âÅÓÐÏÝÁÄÎÏ ×ÓÔÁ×ÌÅÎÎÙÊ t629.c ]============ #include <pic.h>


__CONFIG(MCLRDIS & WDTEN & PWRTEN & UNPROTECT & BOREN & UNPROTECT & INTIO);



void WriteEE(void) { unsigned char i; for(i=0; i < 128; i++) {CLRWDT(); EEPROM_WRITE(i,0x00); } }



void main(void) { CLRWDT();



/* setup stuff */



//****************** Setup GPIO ************************************** GPIO = 0x00; // TRISIO = 0x00; // All outputs WPU = 0x00; // All pull-Ups off //****************** Setup Comparators module ************************ CMCON = 0x07; // Comps OFF - <CM2:CM0> = 111 #if defined(_12F675) //****************** Setup ADC module ******************************** ADCON0 = 0x00; // A/D module OFF ANSEL = 0x00; // All digital #endif //****************** Setup timer modules ***************************** OPTION = 0x00; T1CON = 0x00; //****************** Setup interrupt ********************************* PIE1 = 0x00; IOCB = 0x00; INTCON = 0x00; // No ints


WriteEE();



while(1) CLRWDT(); } ============[ ëÏÎÅà t629.c ]============



ó Õ×ÁÖÅÎÉÅÍ, ÷ÉÔÁÌÉÊ.

... -|O|-


Hello, Vitaliy Romaschenko !

õ ÍÅÎÑ ÂÙÌÉ ÐÒÏÂÌÅÍÙ ÐÒÉ ÚÁÐÉÓÉ × 876. ÷ÙÌÅÞÉÌÉÓØ ÐÒÉÎÕÄÉÔÅÌØÎÙÍ ÓÂÒÏÓÏÍ ÆÌÁÇÏ× ÓÔÒÁÎÉÃ × ÒÅÇÉÓÔÒÅ ÓÔÁÔÕÓÁ × ÆÕÎËÃÉÉ (ÎÅ ÍÁËÒÏÓÅ) ÚÁÐÉÓÉ. ðÒÉÞÅÍ ÐÒÏÂÌÅÍÙ ÂÙÌÉ ÉÍÅÎÎÏ × ÓÏÓÔÁ×Å ÄÏ×ÏÌØÎÏ ÒÁÚ×ÅÓÉÓÔÏÊ ÐÒÏÇÒÁÍÍÙ. ë ÓÏÖÁÌÅÎÉÀ, HTPICC ÉÎÏÇÄÁ ÓÔÒÁÄÁÅÔ ÐÏÄÏÂÎÙÍ ÐÒÉ ÏÐÔÉÍÉÚÁÃÉÉ.

ó Õ×ÁÖÅÎÉÅÍ, äÉÍÁ ïÒÌÏ×.

VR> INTCON = 0x00; // No ints

А не пробовал на всякий случай ставить здесь цикл ожидания подтверждения запрета прерывания - выполнения INTCON.7 = 0?

VR> WriteEE();

VR> while(1) CLRWDT();

ðÒÉ×ÅÔÓÔ×ÕÀ ÷ÁÓ, Rifkat! ïÄÎÁÖÄÙ 18 ñÎ× 05 × 09:42, Rifkat Abdulin ÐÉÓÁÌ(Á) Ë Vitaliy Romaschenko...

VR>> INTCON = 0x00; // No ints RA>

RA> á ÎÅ ÐÒÏÂÏ×ÁÌ ÎÁ ×ÓÑËÉÊ ÓÌÕÞÁÊ ÓÔÁ×ÉÔØ ÚÄÅÓØ ÃÉËÌ ÏÖÉÄÁÎÉÑ RA> ÐÏÄÔ×ÅÒÖÄÅÎÉÑ ÚÁÐÒÅÔÁ ÐÒÅÒÙ×ÁÎÉÑ - ×ÙÐÏÌÎÅÎÉÑ INTCON.7 = 0?

ðpÏ ÐÁÕÚÕ Ñ ÐÉÓÁÌ ÅÝÅ × ÐpÏÛÌÙÊ pÁÚ. ñ ×ÓÔÁ×ÉÌ ÃÉËÌÉË É Õ×ÅÌÉÞÉ×ÁÌ ×ÅpÈÎÉÊ ÐpÅÄÅÌ ÏÄÎÏÂÁÊÔÏ×ÏÇÏ ÓÞÅÔÞÉËÁ. úÁÐÉÓØ ÓÔÁÎÏ×ÉÌÁÓØ ËÏppÅËÔÎÏÊ ÎÁÞÉÎÁÑ ÓÏ ÚÎÁÞÅÎÉÊ ÐÏpÑÄËÁ 100, Ô.Å. ÐÏÌÕÞÁÅÔÓÑ ÂÏÌÅÅ 100 ÍËÓ. ôÏÌØËÏ ÐÁÕÚÕ Ñ ÓÔÁ×ÉÌ (ÕÂpÁÌ ÉÚ ÐpÉÍÅpÁ) ÐpÑÍÏ × ÔÅÌÅ WriteEE(), ÎÏ ÓÕÔÉ ÄÅÌÁ ÜÔÏ ÎÅ ÍÅÎÑÅÔ. ÷ ÎÏpÍÁÌØÎÏÊ ÐpÏÇpÁÍÍÅ (ÎÅ ÔÅÓÔÅ) ÐÅpÅÄ WriteEE() Õ ÍÅÎÑ ÓÎÁÞÁÌÁ ReadEE(), ËÁÌÉÂpÏ×ËÁ ÏÓÃÉÌÌÑÔÏpÁ ÐÏ ×ÎÅÛÎÅÍÕ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÍÕ ËÁÎÁÌÕ É Ô.Ð., Ô.Å. 100 ÍËÓ ÎÁÂÅÖÉÔ ÚÁÐpÏÓÔÏ É ÔÏÇÄÁ ÕÖÅ ÎÉËÁËÉÅ ÐÁÕÚÙ ÎÅ ÎÕÖÎÙ, Ô.Å. ÌÅÞÉÔØ ÎÅ ÓÌÏÖÎÏ, ÎÏ É ÎÅ ÏÞÅ×ÉÄÎÁ ÎÅÏÂÈÏÄÉÍÏÓÔØ.

RA>

VR>> WriteEE(); RA>

VR>> while(1) CLRWDT();

ó Õ×ÁÖÅÎÉÅÍ, ÷ÉÔÁÌÉÊ.

... -|O|-

ðÒÉ×ÅÔÓÔ×ÕÀ ÷ÁÓ, Dima! ïÄÎÁÖÄÙ 18 ñÎ× 05 × 07:58, Dima Orlov ÐÉÓÁÌ(Á) Ë Vitaliy Romaschenko...

DO>

DO> õ ÍÅÎÑ ÂÙÌÉ ÐÒÏÂÌÅÍÙ ÐÒÉ ÚÁÐÉÓÉ × 876. ÷ÙÌÅÞÉÌÉÓØ ÐÒÉÎÕÄÉÔÅÌØÎÙÍ DO> ÓÂÒÏÓÏÍ ÆÌÁÇÏ× ÓÔÒÁÎÉÃ × ÒÅÇÉÓÔÒÅ ÓÔÁÔÕÓÁ × ÆÕÎËÃÉÉ (ÎÅ ÍÁËÒÏÓÅ) DO> ÚÁÐÉÓÉ. ðÒÉÞÅÍ ÐÒÏÂÌÅÍÙ ÂÙÌÉ ÉÍÅÎÎÏ × ÓÏÓÔÁ×Å ÄÏ×ÏÌØÎÏ ÒÁÚ×ÅÓÉÓÔÏÊ DO> ÐÒÏÇÒÁÍÍÙ. ë ÓÏÖÁÌÅÎÉÀ, HTPICC ÉÎÏÇÄÁ ÓÔÒÁÄÁÅÔ ÐÏÄÏÂÎÙÍ ÐÒÉ DO> ÏÐÔÉÍÉÚÁÃÉÉ.

ôÕÔ ÓËÏpÅÅ ×ÓÅÇÏ ÄpÕÇÏÅ. äÌÉÔÅÌØÎÁÑ (~100us) ÐÁÕÚÁ ÐÅpÅÄ WriteEE() ÐÏÓÌÅ ÉÎÉÃÉÁÌÉÚÁÃÉÉ ÐÅpÉÆÅpÉÉ, × Ô.Þ. ÅÓÔÅÓÔ×ÅÎÎÁÑ, Ó×ÑÚÁÎÎÁÑ Ó ÏÂÝÅÎÉÅÍ Ó ÏËpÕÖÁÀÝÉÍ ÍÉpÏÍ ÌÅÞÉÔ ÓÉÔÕÁÃÉÀ, ÈÏÔÑ Ñ ÎÅ ÄÏÓËÏÎÁÌØÎÏ ÜÔÏ ÉÓÓÌÅÄÏ×ÁÌ, ÍÏÖÅÔ ÍÏÅ ÐpÅÄ×ÚÑÔÏÅ ÍÎÅÎÉÅ ×ËpÁÌÏÓØ. HÁÐpÉÍÅp, × pÅÁÌØÎÏÊ ÐpÏÇpÁÍÍÅ Ñ ÓÎÁÞÁÌÁ ÞÉÔÁÀ EE É ÍÁÎÉÐÕÌÉpÕÀ ËÏÎÓÔÁÎÔÁÍÉ. HÏ, ÄÕÍÁÀ, ÄÅÌÏ ×ÓÅ ÖÅ × ÐÁÕÚÅ. éÇpÙ Ó PWRT É BOD ÎÉËÁË ÎÅ ÐÏÍÏÇÌÉ. ñ ÎÁ ÓÁÍÏÍ ÄÅÌÅ ÚÁ Ä×Á ÄÎÑ ÄÏ×ÏÌØÎÏ ÂÏÌØÛÏÊ ÔpÕÄ ÐpÏÄÅÌÁÌ, ÎÏ, ËÁË ×ÏÄÉÔÓÑ, ÎÅ ÓÉÓÔÅÍÁÔÉÚÉpÏ×ÁÌ, Á ÐÁÍÑÔØ (ÍÏÑ) ÞÔÏ-ÔÏ ÓÌÁÂÏ×ÁÔÁ ÓÔÁÌÁ. ó Õ×ÁÖÅÎÉÅÍ, ÷ÉÔÁÌÉÊ.

... -|O|-

Hello, Vitaliy!

÷Ôp ñÎ× 18 2005, Vitaliy Romaschenko ÐÉÓÁÌ Ë All ÐÏ ÐÏ×ÏÄÕ "PIC12F6xx trouble." äÁ×ÁÊ ÐÏÓÍÏÔÒÉÍ ÁÓÓÅÍÂÌÅÒÎÙÊ ÌÉÓÔÉÎÇ EEPROM_WRITE? VR> ó Õ×ÁÖÅÎÉÅÍ, ÷ÉÔÁÌÉÊ. WBR! Maxim Polyanskiy.

VR>>> INTCON = 0x00; // No ints RA>>

RA>> А не пробовал на всякий случай ставить здесь цикл ожидания RA>> подтверждения запрета прерывания - выполнения INTCON.7 = 0?

VR> Пpо паузу я писал еще в пpошлый pаз. Я вставил циклик и увеличивал веpхний VR> пpедел однобайтового счетчика. Запись становилась коppектной начиная со VR> значений VR> поpядка 100, т.е. получается более 100 мкс. Только паузу я ставил (убpал из

А просто что-то типа while (GIE == 0x00); поставить?

Hello, Vitaliy Romaschenko !

õ ÍÅÎÑ ÚÁÄÅÒÖËÁ ÉÚÍÅÒÑÌÁÓØ ÍÉÎÕÔÁÍÉ...

öÁÌØ, ×ÐÒÏÞÅÍ, Õ ÍÅÎÑ, Õ×Ù, ÔÁ ÖÅ ÆÉÇÎÑ... ó Õ×ÁÖÅÎÉÅÍ, äÉÍÁ ïÒÌÏ×.

RA>> А просто что-то типа while (GIE == 0x00); RA>> поставить?

VR> Извини, я не совсем понимаю почему и сколько надо ожидать "подтвеpждения VR> запpета пpеpывания". Где можно пpочитать о такой необходимости? Мне некогда

На 12е, как и на 16е (IMHO)- рекомендуется после отключки прерываний (GIE = 0)операцией проверки бита GIE дожидаться установления этого режима. Объяснялось это в апнотах возможной неоднозначностью ветвления в ситуации, если само прерывание упадет в момент попытки его отключки - насколько я помню

VR> смотpеть весть даташит на PIC12. Hо поскольку у меня под pукой есть все VR> необходимое я тут же пpовеpил:

VR> ...

VR> INTCON = 0x00;

VR> while(GIE !=0) CLRWDT(); // ждем пока GIE станет нулем (так ты хотел?)

Вернее, наверное, так - while (GIE); //пока GIE = 1 - крутим

Вотчдог, думаю, чистить в цикле не стоит - навряд-ли интервал ожидания превысит пару мс.

Думаю - причина все-таки в чем-то другом. Ты пришли скомпилленый кусок асма в этой части проги - проще будет понять

Hi Rifkat, hope you are having a nice day!

20 ñÎ× 05, Rifkat Abdulin wrote to Vitaliy Romaschenko:

RA> HÁ 12Å, ËÁË É ÎÁ 16Å (IMHO)- ÒÅËÏÍÅÎÄÕÅÔÓÑ ÐÏÓÌÅ ÏÔËÌÀÞËÉ ÐÒÅÒÙ×ÁÎÉÊ RA> (GIE = 0)ÏÐÅÒÁÃÉÅÊ ÐÒÏ×ÅÒËÉ ÂÉÔÁ GIE ÄÏÖÉÄÁÔØÓÑ ÕÓÔÁÎÏ×ÌÅÎÉÑ ÜÔÏÇÏ RA> ÒÅÖÉÍÁ. ïÂßÑÓÎÑÌÏÓØ ÜÔÏ × ÁÐÎÏÔÁÈ ×ÏÚÍÏÖÎÏÊ ÎÅÏÄÎÏÚÎÁÞÎÏÓÔØÀ ×ÅÔ×ÌÅÎÉÑ RA> × ÓÉÔÕÁÃÉÉ, ÅÓÌÉ ÓÁÍÏ ÐÒÅÒÙ×ÁÎÉÅ ÕÐÁÄÅÔ × ÍÏÍÅÎÔ ÐÏÐÙÔËÉ ÅÇÏ ÏÔËÌÀÞËÉ RA> - ÎÁÓËÏÌØËÏ Ñ ÐÏÍÎÀ

HÅÔ ÔÁËÏÊ ÐÒÏÂÌÅÍÙ. üÔÁ ÁÐÎÏÔÁ ÞÅÊ-ÔÏ ÂÒÅÄ, ËÏÔÏÒÙÊ ÎÉ ÍÉËÒÏÞÉÐ, ÎÅ ÓÔÏÒÏÎÎÉÅ ÒÁÚÒÁÂÏÔÞÉËÉ ÎÅ ÓÍÏÇÌÉ ÐÏ×ÔÏÒÉÔØ. ëÏÍÁÎÄÁ × ÐÉËÁÈ ÎÅÒÁÚÒÙ×ÎÁ É ÂÉÔ ÂÕÄÅÔ ÓÂÒÏÛÅÎ ÎÅÚÁ×ÉÓÉÍÏ ÏÔ ÔÏÇÏ, ×ÏÚÎÉËÌÏ ÐÒÅÒÙ×ÁÎÉÅ ÉÌÉ ÎÅÔ.

RA> ÷ÅÒÎÅÅ, ÎÁ×ÅÒÎÏÅ, ÔÁË - while (GIE); //ÐÏËÁ GIE = 1 - ËÒÕÔÉÍ

üÔÏ ×ÏÏÂÝÅ ÂÅÓÓÍÙÓÌÉÃÁ. ôÏÇÄÁ ÕÖ ÎÁÄÏ ÐÉÓÁÔØ while (INTCONbits.GIE) INTCONbits.GIE = 0;

RA> ÷ÏÔÞÄÏÇ, ÄÕÍÁÀ, ÞÉÓÔÉÔØ × ÃÉËÌÅ ÎÅ ÓÔÏÉÔ - ÎÁ×ÒÑÄ-ÌÉ ÉÎÔÅÒ×ÁÌ RA> ÏÖÉÄÁÎÉÑ ÐÒÅ×ÙÓÉÔ ÐÁÒÕ ÍÓ.

ïÎ ÎÉËÏÇÄÁ ÎÅ ÐÒÅ×ÙÓÉÔ ÏÄÎÏÇÏ ÃÉËÌÁ.

WBR, AVB

Thu Jan 20 2005 10:00, Alexey V Bugrov wrote to Rifkat Abdulin:

RA>> Hа 12е, как и на 16е (IMHO)- рекомендуется после отключки прерываний RA>> (GIE = 0)операцией проверки бита GIE дожидаться установления этого RA>> режима. Объяснялось это в апнотах возможной неоднозначностью ветвления RA>> в ситуации, если само прерывание упадет в момент попытки его отключки RA>> - насколько я помню

AVB> Hет такой проблемы. Эта апнота чей-то бред, который ни микрочип, не AVB> сторонние разработчики не смогли повторить. Команда в пиках неразрывна и AVB> бит будет сброшен независимо от того, возникло прерывание или нет.

_Сейчас_ такой проблемы может и нет, а в старых PIC16 она точно была (и наблюдалась воочию на PIC16C71), как была и аппликуха на сей счет. Кремниевый баг, имхо, который мелкочипы пофиксили где-то в середине 90-х.

С прерываниями мелкочипы долго ходили по разным граблям. Как показатель, в фичах 16С54 (даташит) явственно стояло наличие прерывания, хотя реально его там вообще не было. Имхо, хотели сделать, да не получилось, в последний момент изничтожили, но из даташита забыли убрать.

Пока, Алексей

Hello, Alex! You wrote to Alexey V Bugrov on Thu, 20 Jan 2005 08:55:34 +0000 (UTC):

AK> Thu Jan 20 2005 10:00, Alexey V Bugrov wrote to Rifkat Abdulin:

AVB>> HÅÔ ÔÁËÏÊ ÐÒÏÂÌÅÍÙ. üÔÁ ÁÐÎÏÔÁ ÞÅÊ-ÔÏ ÂÒÅÄ, ËÏÔÏÒÙÊ ÎÉ ÍÉËÒÏÞÉÐ, AVB>> ÎÅ ÓÔÏÒÏÎÎÉÅ ÒÁÚÒÁÂÏÔÞÉËÉ ÎÅ ÓÍÏÇÌÉ ÐÏ×ÔÏÒÉÔØ. ëÏÍÁÎÄÁ × ÐÉËÁÈ AVB>> ÎÅÒÁÚÒÙ×ÎÁ É ÂÉÔ ÂÕÄÅÔ ÓÂÒÏÛÅÎ ÎÅÚÁ×ÉÓÉÍÏ ÏÔ ÔÏÇÏ, ×ÏÚÎÉËÌÏ AVB>> ÐÒÅÒÙ×ÁÎÉÅ ÉÌÉ ÎÅÔ.

AK> _óÅÊÞÁÓ_ ÔÁËÏÊ ÐÒÏÂÌÅÍÙ ÍÏÖÅÔ É ÎÅÔ,

îÅ ÍÏÖÅÔ ÂÙÔØ, Á ÔÏÞÎÏ ÎÅÔ.

AK> Á × ÓÔÁÒÙÈ PIC16 ÏÎÁ ÔÏÞÎÏ ÂÙÌÁ (É ÎÁÂÌÀÄÁÌÁÓØ ×ÏÏÞÉÀ ÎÁ PIC16C71), ËÁË AK> ÂÙÌÁ É ÁÐÐÌÉËÕÈÁ ÎÁ ÓÅÊ ÓÞÅÔ. ëÒÅÍÎÉÅ×ÙÊ ÂÁÇ, ÉÍÈÏ, ËÏÔÏÒÙÊ ÍÅÌËÏÞÉÐÙ AK> ÐÏÆÉËÓÉÌÉ ÇÄÅ-ÔÏ × ÓÅÒÅÄÉÎÅ 90-È.

÷ÏÚÍÏÖÎÏ. ôÏÌØËÏ ÁÐÐÌÉËÕÈÁ ×ÒÏÄÅ ËÁË 97 ÇÏÄÁ ÉÚÄÁÎÉÑ, ÎÏ ×ÏËÒÕÇ ÎÅÅ ÕÖÅ ÎÅÍÁÌÏ ÐÌÑÓÏË Ó ÂÕÂÎÏÍ ÂÙÌÏ. é ÚÄÅÓØ ÜÔÏ ÏÂÓÕÖÄÁÌÏÓØ × ÔÏÍ ÞÉÓÌÅ. ëÁË ÆÁËÔ ÎÉËÏÍÕ ÕËÁÚÁÎÎÙÊ × ÁÐÌÉËÕÈÅ ÜÆÆÅËÔ ÐÏ×ÔÏÒÉÔØ ÎÅ ÕÄÁÌÏÓØ. ïÔ ÍÉËÒÏÞÉÐÁ ×ÒÏÄÅ ÂÙ ÂÙÌÁ ÉÎÆÏÒÍÁÃÉÑ, ÞÔÏ ÏÛÉÂËÁ ÂÙÌÁ × ÉÎÖÅÎÅÒÎÙÈ ×ÅÒÓÉÑÈ ËÁÍÎÅÊ É × ÓÅÒÉÉ ÎÅ ×ÓÔÒÅÞÁÅÔÓÑ. ñ ÔÁË ÐÏÎÉÍÁÀ ÍÙ ÇÏ×ÏÒÉÍ Ï AN576. ÷ ÌÀÂÏÍ ÓÌÕÞÁÅ ÐÉÓÁÔØ ÎÁÄÏ ÎÅ while(INTCONbits.GIE); Á ÔÁË, ËÁË Ñ ÎÁÐÉÓÁÌ × Ó×ÏÅÍ ÐÒÅÄÙÄÕÝÅÍ ÐÉÓØÍÅ.

WBR, AVB

ðÒÉ×ÅÔÓÔ×ÕÀ ÷ÁÓ, Maxim! ïÄÎÁÖÄÙ 19 ñÎ× 05 × 09:08, Maxim Polyanskiy ÐÉÓÁÌ(Á) Ë Vitaliy Romaschenko...

MP> äÁ×ÁÊ ÐÏÓÍÏÔÒÉÍ ÁÓÓÅÍÂÌÅÒÎÙÊ ÌÉÓÔÉÎÇ EEPROM_WRITE?

ïÊ ÌÅÎÉ×Ï. õ ÔÅÂÑ ÈÁÊÔÅËÁ ÎÅÔ "ÐÏÄ pÕËÏÊ"? åÓÌÉ ÎÅÔ, ÚÁÊÍÕÓØ, ËÏÎÅÞÎÏ, ÎÏ ÐÏÓÍÏÔpÉ ÄÌÑ ÎÁÞÁÌÁ ÍÏÉ ÓÌÅÄÕÀÝÉÅ ÐÉÓØÍÁ Ë òÉÆËÁÔÕ É Ë All. äÌÑ ÐpÏ×ÅpËÉ ÞÉÐ É ÐpÏÇpÁÍÍÁÔÏp, ÅÓÌÉ ÎÁÊÄÕÔÓÑ, Ñ ÔÅÂÅ ÐpÏÓÔÏ Ä×Á ÈÅËÓÎÉËÁ ËÉÎÕ, Á ÔÙ ÐÏÐpÏÂÕÊ × ÏÂÏÉÈ ÓÌÕÞÁÑÈ, ÚÁÛÉ× ÐÉË, ÐÅpÅÐpÏÇpÁÍÍÉpÏ×ÁÔØ 0 ÑÞÅÊËÕ EEPROM (ÐpÏÇpÁÍÍÁÔÏpÏÍ). á ÏÔ pÅÚÕÌØÔÁÔÁ ÕÖÅ ÂÕÄÅÍ ÔÁÎÃÅ×ÁÔØ ËÕÄÁ ËÏÐÁÔØ. íÏÖÅÔ Õ ÍÅÎÑ ÎÅÕÄÁÞÎÏÅ ÓÏÞÅÔÁÎÉÅ ÏÂÓÔÏÑÔÅÌØÓÔ×... ó Õ×ÁÖÅÎÉÅÍ, ÷ÉÔÁÌÉÊ.

... -|O|-

Thu Jan 20 2005 13:13, Alexey V Bugrov wrote to Alex Kouznetsov:

AVB> Возможно. Только аппликуха вроде как 97 года издания, но вокруг нее уже AVB> немало плясок с бубном было. И здесь это обсуждалось в том числе. Как AVB> факт никому указанный в апликухе эффект повторить не удалось. От AVB> микрочипа вроде бы была информация, что ошибка была в инженерных AVB> версиях камней и в серии не встречается.

Я с этой проблемой имел дело примерно в 95 или 96 году, на серийных камнях. У меня это проявлялось как случайный повторный вход в прерывание (уже обработанное). Аппликуха, помнится, уже существовала.

С тех пор много лет я всегда ставил для нее фикс во все свои проги для PIC16, так что затрудняюсь точно сказать, начиная с какого времени не стало чипов с этой багой.

Пока, Алексей

Hello, Dima!

þÅÔ ñÎ× 20 2005, Dima Orlov ÐÉÓÁÌ Ë Vitaliy Romaschenko ÐÏ ÐÏ×ÏÄÕ "PIC12F6xx trouble." DO> á Ó ÄÒÕÇÏÊ ÍÉËÒÏÓÈÅÍÏÊ ÐÒÏÂÏ×ÁÌ? ñ ÉÓÐÏÌØÚÏ×ÁÌ × 12F675 EEprom, × ÔÏÍ DO> ÞÉÓÌÅ ÎÕÌÅ×ÕÀ ÑÞÅÊËÕ, ×ÓÅ ÒÁÂÏÔÁÌÏ É × ÐÒÏÇÒÁÍÍÅ É × ÐÒÏÇÒÁÍÍÁÔÏÒÅ. äÁ Õ ÍÅÎÑ É × 629 ×ÓÅ ÒÁÂÏÔÁÌÏ. DO> ó Õ×ÁÖÅÎÉÅÍ, äÉÍÁ ïÒÌÏ×. WBR! Maxim Polyanskiy.
ðÒÉ×ÅÔÓÔ×ÕÀ ÷ÁÓ, Dima! ïÄÎÁÖÄÙ 20 ñÎ× 05 × 08:44, Dima Orlov ÐÉÓÁÌ(Á) Ë Vitaliy Romaschenko...

DO>

DO> á Ó ÄÒÕÇÏÊ ÍÉËÒÏÓÈÅÍÏÊ ÐÒÏÂÏ×ÁÌ? ñ ÉÓÐÏÌØÚÏ×ÁÌ × 12F675 EEprom, × ÔÏÍ DO> ÞÉÓÌÅ ÎÕÌÅ×ÕÀ ÑÞÅÊËÕ, ×ÓÅ ÒÁÂÏÔÁÌÏ É × ÐÒÏÇÒÁÍÍÅ É × ÐÒÏÇÒÁÍÍÁÔÏÒÅ.

äÉÍÁ, ÐpÁ×ÉÌØÎÏ ÌÉ Ñ ÐÏÎÑÌ, ÞÔÏ ÔÙ ÓËÏÍÐÉÌÌÉpÏ×ÁÌ ÍÏÊ ÓÏpÅà Ä×Á pÁÚÁ É × ÏÂÏÉÈ ÓÌÕÞÁÑÈ ÎÕÌÅ×ÁÑ ÑÞÅÊËÁ pÁÂÏÔÁÌÁ? éÌÉ ÖÅ ÔÙ ×ÏÏÂÝÅ ÉÓÐÏÌØÚÏ×ÁÌ × pÁÚpÁÂÏÔËÁÈ EEPROM 12F675? õ ÍÅÎÑ × 0 ÑÞÅÊËÅ ÈpÁÎÉÔÓÑ ÓÅpÉÊÎÙÊ ÎÏÍÅp É ÏÎ ÎÏpÍÁÌØÎÏ ÐÉÛÅÔÓÑ É ÞÉÔÁÅÔÓÑ × pÅÁÌØÎÏÍ ÉÚÄÅÌÉÉ ÎÁ ËÁÍÎÑÈ ÏÄÎÏÊ ÐÁpÔÉÉ. HÁ ÜÔÉÈ ÖÅ ËÁÍÎÑÈ ÐpÉ×ÅÄÅÎÎÁÑ ÓÏÆÔÉÎÁ (ÓÌÕÞÁÊÎÏ ÓÏ×ÐÁÌÏ, ÞÔÏ Ñ ÎÁÞÁÌ ÐÉÓÁÔØ ÐpÏÇpÁÍÍÕ Ó ÐpÏ×ÅpËÉ ÚÁÐÉÓÉ × EE) ×ÙÚÙ×ÁÅÔ ÏÚÎÁÞÅÎÎÙÊ ÇÌÀË. òÅÞØ ÉÄÅÔ Ï 12F629 × SO8. HÏ ÄÌÑ ÐpÏ×ÅpËÉ Ñ ÎÁÓÙÐÁÌ ÎÁ ÓÔÏÌ 629-È × ÄÉÐÅ, 675-È × ÄÉÐÅ É ÓÏÉËÅ - ÄÌÑ ×ÓÅÈ ÅÓÔØ ÐÁÕÚÁ, ÎÉÖÅ ËÏÔÏpÏÊ ÎÕÌÅ×ÁÑ ÑÞÅÊËÁ "ÄÕÂÅÅÔ". óÅÊÞÁÓ ÅÝÅ ÕÂÅÄÉÌÓÑ, ÞÔÏ pÁÂÏÔÏÓÐÏÓÏÂÎÏÓÔØ ÚÁ×ÉÓÉÔ ÏÔ ËÏÎËpÅÔÎÏÇÏ ÞÉÐÁ. ñ ÐÏÄÏÂpÁÌ ÇÁpÁÎÉÃÕ ÐÁÕÚÙ ÐpÉ ËÏÔÏpÏÊ ÏÄÉÎ ÐÉË pÁÂÏÔÁÌ. äpÕÇÏÊ ÔÁËÏÊ ÖÅ ÏÔËÁÚÁÌÓÑ pÁÂÏÔÁÔØ ÐpÉ ÜÔÏÍ ÚÎÁÞÅÎÉÉ ÐÁÕÚÙ, ÎÏ ÚÁpÁÂÏÔÁÌ ÐpÉ ÐÁÕÚÅ ÎÁ 1 ÂÏÌØÛÅ. ô.Å. ÏÝÕÝÅÎÉÅ, ÞÔÏ pÁÚÂpÏÓ ÐpÉÍÅpÎÏ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ pÁÚÂpÏÓÕ intOSC. íÎÅ, ÄÏ×ÏÌØÎÏ ÔÁËÉ ÐÏÆÉÇÕ pÅÚÕÌØÔÁÔ, Ô.Ë. Õ ÍÅÎÑ ÎÉËÁËÉÈ ÐpÏÂÌÅÍ ÎÅÔ, ÎÏ pÁÚÏÂpÁÔØÓÑ ×ÓÅ-ÔÁËÉ ÈÏÞÅÔÓÑ. 2All. HÁpÏÄ, ×Ù ÎÅ ÎÁ×ÁÌÉ×ÁÊÔÅ ÎÁ ÍÅÎÑ ÓÌÉÛËÏÍ ÕÖ ÓÉÌØÎÏ. õ ÍÅÎÑ pÁÂÏÔÁÅÔ ÎÅÓËÏÌØËÏ ÌÀÄÅÊ, ËÏÔÏpÙÍÉ ÍÎÅ ÎÕÖÎÏ pÕËÏ×ÏÄÉÔØ É ÏÚÁÄÁÞÉ×ÁÔØ ÐÌÀÓ ÏÂÝÅÎÉÑ Ó ËÌÉÅÎÔÁÍÉ. ñ ÐpÏÇpÁÍÍÉpÕÀ ÎÁÓËÏËÁÍÉ, ÏÞÅÎØ ÍÁÌÅÎØËÉÅ ÓÏÆÔÉÎËÉ É ÔÏ ÏÔ ÎÅ×ÏÚÍÏÖÎÏÓÔÉ ÐÏpÕÞÉÔØ ÉÈ ÐpÏÇpÁÍÍÉÓÔÕ (× ÔÁËÉÈ ÓÌÕÞÁÑÈ ÄÏÌØÛÅ ôú ÆÏpÍÕÌÉpÏ×ÁÔØ). ñ ÎÁÏÂÏpÏÔ ÐpÏÛÕ ÐÏÍÏÞØ pÁÚÏÂpÁÔØÓÑ, ÅÓÌÉ ÉÎÔÅpÅÓÎÏ, ËÏÎÅÞÎÏ. ó ÔÅÍ ÖÅ ÁÓÓÅÍÂÌÅpÎÙÍ ÌÉÓÔÉÎÇÏÍ - ËÁËÏÊ × ÎÅÍ ÓÍÙÓÌ? åÇÏ ÓÇÅÎÅpÉpÕÅÔ ÈÁÊÔÅË É × ÓÌÕÞÁÅ ËÏÇÄÁ ÐÁÕÚÁ pÁ×ÎÁ 38 É 37 ÌÉÓÔÉÎÇÉ ÏÔÌÉÞÁÀÔÓÑ ÔÏÌØËÏ ÎÁ ÜÔÏ ÞÉÓÌÏ - ÐpÏ×ÅpÉÌ ÔÏÌØËÏ ÞÔÏ. þÔÏ ÔÏÌËÕ ÅÇÏ ÓÍÏÔpÅÔØ? äpÕÇÏÅ ÄÅÌÏ ÓÁÍÏÍÕ ÎÁÐÉÓÁÔØ ÎÁ ÁÓÍÅ, ÎÏ ÌÅÎÉ×Ï, ÉÂÏ ÞÕ×ÓÔ×ÕÅÔÓÑ ËÏppÅÌÑÃÉÑ Ó ÖÅÌÅÚÏÍ. ïÐÑÔØ ÖÅ, ×ËÌÀÞÅÎÉÅ ÏÐÔÉÍÉÚÁÔÏpÁ ÓÌÅÇËÁ ÍÅÎÑÅÔ ÐÏpÏÇ "ÚÁÄÕÂÅ×ÁÎÉÑ" 0-Ê ÑÞÅÊËÉ (ÐpÏ×ÅpÉÌ) É ×ÓÅ. é × ËÏÎÃÅ-ÔÏ ËÏÎÃÏ×, Õ ×ÁÓ ÈÁÊÔÅËÁ ÎÅÔ ÓÁÍÉÍ ÓÇÅÎÅpÉpÏ×ÁÔØ?! :) á ×ÏÏÂÝÅ ÂÙ ÚÁÍÅÞÁÔÅÌØÎÏ ÅÓÌÉ ÂÙ ÐpÏ×ÅpÉÌÉ × ÖÅÌÅÚÅ. ëÓÔÁÔÉ, ÅÓÌÉ ÉÎÔÅpÅÓÎÏ, ÓÉÍÕÌÑÔÏp × EE ÐÉÛÅÔ ÎÏpÍÁÌØÎÏ ×Ï ×ÓÅÈ ÓÌÕÞÁÑÈ. óÒÁ×ÎÅÎÉÅ ÆÁÊÌÏ× t629_0.lst É t629_1.lst ****** t629_0.lst HI-TECH Software PICC Macro Assembler V8.02PL1 Serial number: HCPIC-12345-6 Fri Jan 21 02:38:56 2005 ****** t629_1.lst HI-TECH Software PICC Macro Assembler V8.02PL1 Serial number: HCPIC-12345-6 Fri Jan 21 02:39:37 2005 ****** ****** t629_0.lst 34 0000 _pause$i set ?a_pause+0 35 ;t629.c: 11: for(i=0; i < 38; i++) {asm("nop"); } ****** t629_1.lst 34 0000 _pause$i set ?a_pause+0 35 ;t629.c: 11: for(i=0; i < 39; i++) {asm("nop"); } ****** ****** t629_0.lst 38 0399 01A1 clrf (((?a_pause+0))) 39 039A 3026 movlw ((026h)) 40 039B 0221 subwf (((?a_pause+0))),w ****** t629_1.lst 38 0399 01A1 clrf (((?a_pause+0))) 39 039A 3027 movlw ((027h)) 40 039B 0221 subwf (((?a_pause+0))),w ****** ****** t629_0.lst 56 03A3 0AA1 incf (((?a_pause+0))) 57 03A4 3026 movlw ((026h)) 58 03A5 0221 subwf (((?a_pause+0))),w ****** t629_1.lst 56 03A3 0AA1 incf (((?a_pause+0))) 57 03A4 3027 movlw ((027h)) 58 03A5 0221 subwf (((?a_pause+0))),w ****** ****** t629_0.lst HI-TECH Software PICC Macro Assembler V8.02PL1 Symbol Table Fri Jan 21 02:38:56 2005 ****** t629_1.lst HI-TECH Software PICC Macro Assembler V8.02PL1 Symbol Table Fri Jan 21 02:39:37 2005 ****** ó Õ×ÁÖÅÎÉÅÍ, ÷ÉÔÁÌÉÊ.

... -|O|-

Hello, Vitaliy!

þÅÔ ñÎ× 20 2005, Vitaliy Romaschenko ÐÉÓÁÌ Ë Maxim Polyanskiy ÐÏ ÐÏ×ÏÄÕ "PIC12F6xx trouble." MP>> äÁ×ÁÊ ÐÏÓÍÏÔÒÉÍ ÁÓÓÅÍÂÌÅÒÎÙÊ ÌÉÓÔÉÎÇ EEPROM_WRITE? VR> ïÊ ÌÅÎÉ×Ï. õ ÔÅÂÑ ÈÁÊÔÅËÁ ÎÅÔ "ÐÏÄ pÕËÏÊ"? åÓÔØ ÎÏ Ñ ÎÅ ÕÍÅÀ ÅÇÏ ÓÔÁ×ÉÔØ, ËÒÑÞÉÔØ, É ×ÓÅ ÔÁËÏÅ ;) ðÒÉÛÌÉ ÈÅËÓ ÎÁ rotorman[]nm.ru ÉÌÉ × netmail. VR> åÓÌÉ ÎÅÔ, ÚÁÊÍÕÓØ, ËÏÎÅÞÎÏ, ÎÏ ÐÏÓÍÏÔpÉ ÄÌÑ ÎÁÞÁÌÁ ÍÏÉ ÓÌÅÄÕÀÝÉÅ VR> ÐÉÓØÍÁ Ë òÉÆËÁÔÕ gie × ÄÁÎÎÏÍ ÓÌÕÞÁÅ ÎÅ ÐÒÉÞÅÍ Á ÉÓÈÏÄÎÉË ÎÁ Ó ÎÅ ÄÁÅÔ ÎÉËÁËÏÊ ÏÂßÅËÔÉ×ÎÏÊ ËÁÒÔÉÎÙ ÄÅÍÏÎÓÔÒÉÒÕÀÝÅÊ ÐÒÉÞÉÎÕ ÎÅÒÁÂÏÔÏÓÐÏÓÏÂÎÏÓÔÉ. íÁÌÏ ÔÏÇÏ - ×ÏÚÍÏÖÎÏ ÞÔÏ Õ ËÏÇÏ-ÔÏ ÐÏÓÌÅ ËÏÍÐÉÌÑÃÉÉ ÈÁÊÔÅËÏÍ ×ÓÅ ÚÁÒÁÂÏÔÁÅÔ, É ÄÅÌÏ ÂÕÄÅÔ × ËÁËÉÈ-ÎÉÂÕÔØ ×ÅÒÓÉÑÈ ÈÁÊÔÅËÁ ÉÌÉ ÓÔÏÒÏÎÎÉÈ ÆÁÊÌÁÈ... þÉÐÙ ÐÒÏÇÒÁÍÍÁÔÏÒÙ - ÐÏÄ ÒÕËÏÊ. VR> ó Õ×ÁÖÅÎÉÅÍ, ÷ÉÔÁÌÉÊ. WBR! Maxim Polyanskiy.
ðÒÉ×ÅÔÓÔ×ÕÀ ÷ÁÓ, Rifkat! ïÄÎÁÖÄÙ 20 ñÎ× 05 × 09:24, Rifkat Abdulin ÐÉÓÁÌ(Á) Ë Vitaliy Romaschenko...

RA> äÕÍÁÀ - ÐÒÉÞÉÎÁ ×ÓÅ-ÔÁËÉ × ÞÅÍ-ÔÏ ÄÒÕÇÏÍ. ôÙ ÐÒÉÛÌÉ ÓËÏÍÐÉÌÌÅÎÙÊ ËÕÓÏË RA> ÁÓÍÁ × ÜÔÏÊ ÞÁÓÔÉ ÐÒÏÇÉ - ÐÒÏÝÅ ÂÕÄÅÔ ÐÏÎÑÔØ

ôÏ ÞÔÏ ÇÅÎÅpÉÔ ÈÁÊÔÅË ÎÁ ÍÏÊ ×ËÕÓ ÞÉÔÁÅÔÓÑ ÔÑÖÅÌÏ. ÷ÏÔ Ñ ÂÙÓÔpÅÎØËÏ ÓÏÓÔpÑÐÁÌ ÁÎÁÌÏÇ ÎÁ ÁÓÍÅ. õÖ ÉÚ×ÉÎÉÔÅ ÚÁ ÍÁËpÏÓÙ É ËÏpÑ×ÏÓÔØ - ÎÅËÏÇÄÁ pÉÈÔÏ×ÁÔØ ÜÔÕ ÞÅÐÕÈÕ. HÏ ÐpÉ dead_t == 0xFF - ÐÉÛÅÔ 33 × "ÎÕÌÅ×ÕÀ" (ÎÅÏÂÑÚÁÔÅÌØÎÏ ÎÕÌÅ×ÕÀ - ÔÕ Ó ËÏÔÏpÏÊ ÎÁÞÉÎÁÅÍ ÐÉÓÁÔØ × EE) ÑÞÅÊËÕ, ÐpÉ dead_t == 0x20 - "ÎÕÌÅ×ÁÑ" ÑÞÅÊËÁ ×ÅÄÅÔ ÓÅÂÑ "ÄÕÂÏ×Ï". âÙÌÏ ÂÙ ÐpÉÑÔÎÏ ÕÓÌÙÛÁÔØ, ÞÔÏ ËÔÏ-ÔÏ ÓÏÛÅÌ ÏÔ ÜÔÏÇÏ Ó ÕÍÁ :)) óÁÍÏÅ ÓÍÅÛÎÏÅ, ÞÔÏ ÜÔÁ ÐpÏÂÌÅÍÁ ÎÁ ÍÅÎÑ ×Ù×ÁÌÉÌÁÓØ ÏÄÎÏ×pÅÍÅÎÎÏ Ó pÁÎÅÅ ÏÐÉÓÁÎÎÏÊ ÐpÏÂÌÅÍÏÊ ÐpÏÇpÁÍÍÉpÏ×ÁÎÉÑ ÎÅËÏÔÏpÙÈ ËÏÎËpÅÔÎÙÈ ËpÉÓÔÁÌÌÏ× 16F876 ËÏÎËpÅÔÎÏÊ ×ÅpÓÉÅÊ ÆÉÔÏÎÏ×ÓËÏÇÏ ÞÉÐÐpÏÇ+. ïÓÔÁÅÔÓÑ ÔÅÛÉÔØ ÓÅÂÑ ÎÁÄÅÖÄÏÊ, ÞÔÏ ÓËÏpÏ ÎÁ microchip.com ÐÏÑ×ÉÔÓÑ errata ÎÁ 12f6xx :)) "âpÏÓÁÑ ËÁÍÎÉ × ×ÏÄÕ, ÓÍÏÔpÉ ÎÁ ËpÕÇÉ ÏÔ ÎÉÈ pÁÓÈÏÄÑÝÉÅÓÑ - ÉÎÁÞÅ ÜÔÏ ÂÕÄÅÔ ÐÕÓÔÏÀ ÚÁÂÁ×ÏÀ" ë.ðpÕÔËÏ×.

HÁ ÁÓÍÅ ÇÏÄ ËÁË ÎÅ ÐÉÛÕ ÎÉÞÅÇÏ, ÔÁË ÞÔÏ ÎÅ ÓÕÄÉÔÅ ÓÔpÏÇÏ:

============[ âÅÓÐÏÝÁÄÎÏ ×ÓÔÁ×ÌÅÎÎÙÊ t629.asm ]============ LIST P=12F629 #include "P12F629.inc"

__CONFIG _MCLRE_OFF & _WDT_ON & _PWRTE_ON & _CPD_OFF & _BODEN_ON & _CP_OFF & _INTRC_OSC_NOCLKOUT

dead_t equ 0x40 ; incorrect EE ;dead_t equ 0xFF ; correct EE

j equ 0x20

org 0 goto Main

org 0x50

Pause clrwdt movlw dead_t movwf j ; jploop decfsz j,F goto jploop return

EEByteW call Pause EEW0 banksel EEADR

movlw 0x00 movwf EEADR

movlw 0x33 movwf EEDATA bsf EECON1, WREN ; Enable write bcf INTCON, GIE ; Disable INTs. movlw 0x55 ; movwf EECON2 ; Write 55h movlw 0xAA ; movwf EECON2 ; Write AAh bsf EECON1,WR ; Set WR bit ; begin write WaitEEOk btfsc EECON1,WR goto WaitEEOk bcf PIR1,EEIF bcf EECON1, WREN ; Disable write EEPROM ; test written byte movf EEDATA,W bsf EECON1,RD ; Start reading nop subwf EEDATA,W BNZ EEW0 ; bad EEPROM - unlimited cycle (WDT reset) ; written byte Ok return

Main

Init

banksel GPIO

clrf GPIO

banksel TRISIO

clrf TRISIO clrf WPU

banksel GPIO

movlw 0x07 movwf CMCON #ifdef __12F675 banksel TRISIO clrf ADCON0 banksel GPIO clrf ANSEL #endif banksel TRISIO clrf OPTION_REG banksel GPIO clrf T1CON

banksel TRISIO clrf PIE1 clrf IOCB banksel GPIO

clrf INTCON

call EEByteW

main_start clrwdt goto main_start end

============[ ëÏÎÅà t629.asm ]============

ó Õ×ÁÖÅÎÉÅÍ, ÷ÉÔÁÌÉÊ.

... -|O|-

VR> org 0

Можно вставить banksel GPIO

VR> goto Main

VR> org 0x50

VR> Pause VR> clrwdt VR> movlw dead_t VR> movwf j ; VR> jploop VR> decfsz j,F VR> goto jploop VR> return

VR> EEByteW VR> call Pause

Pause можно выкинуть.

VR> EEW0

banksel EECON1

btfsc EECON1, WR goto $-1

VR> banksel EEADR

VR> movlw 0x00 VR> movwf EEADR

VR> movlw 0x33 VR> movwf EEDATA

banksel EECON1

bcf EECON1, EEPGD ;насчет этого не знаю - это для 876го

VR> bsf EECON1, WREN ; Enable write VR> bcf INTCON, GIE ; Disable INTs.

btfsc INTCON, GIE goto $-1

banksel EECON2

VR> movlw 0x55 ; VR> movwf EECON2 ; Write 55h VR> movlw 0xAA ; VR> movwf EECON2 ; Write AAh

banksel EECON1

VR> bsf EECON1,WR ; Set WR bit VR> ; begin write VR> WaitEEOk VR> btfsc EECON1,WR VR> goto WaitEEOk VR> bcf PIR1,EEIF VR> bcf EECON1, WREN ; Disable write EEPROM VR> ; test written byte

banksel EEDATA

VR> movf EEDATA,W

banksel EECON1

VR> bsf EECON1,RD ; Start reading VR> nop

banksel EEDATA

VR> subwf EEDATA,W VR> BNZ EEW0 ; bad EEPROM - unlimited cycle (WDT reset) VR> ; written byte Ok VR> return

В-общем - могу попутать банкселы - с 12ми не работал ;-) Посмотри DS30292C - страница 43 - работа с EEPROM для 876го. Это точно работает :-)

Вспомнил - я еще анализировал при записи в EEPROM флаг досрочного прерывания цикла записи. МОжет - стоит его "подсмотреть"?

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required