| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| проблем с декрементиране на long пром. в CCS и setup_wdt(); http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=1507 |
Страница 1 от 1 |
| Автор: | jony++ [ Пет Дек 30, 2005 6:07 pm ] | ||||||||||||||||||
| Заглавие: | проблем с декрементиране на long пром. в CCS и setup_wdt(); | ||||||||||||||||||
Здравейте, хвърлете едно око на следната функция: контролерът е PIC16F819
Както ви става ясно това е функция за време закъснение от определени милисекунди оказани чрез ulDelay. Проблемът е че при декрементиране на ulDelay=1000 след 232-то декрементиране се излиза от функцията. Пробвах декрементирането на ulDelay да се извършва извън асемблерския фрагмент, написано на "С" но отново след 232-то декрементиране се излиза от функцията. ulDelay със сигурност е 16 бита. На каков може да се дължи това. Явно аз съм много прост и греша фундаментално някъде Другото което забелязъх е:
На пръв поглед всичко си е точно - настройва си се таймера, настройва си се прескалера, но не се вдига бита (бит 3) в OPTION регистъра оказващ че прескалера ще се използва с WDT. При вас възниквал ли е подобен проблем? |
|||||||||||||||||||
| Автор: | Predator_MF [ Пет Дек 30, 2005 6:24 pm ] |
| Заглавие: | |
A в #include-a указал ли си фуза WDT? |
|
| Автор: | jony++ [ Пет Дек 30, 2005 6:38 pm ] |
| Заглавие: | |
да, указал съм го |
|
| Автор: | Dimiter [ Пет Дек 30, 2005 6:42 pm ] |
| Заглавие: | |
Пич, тука имаш една грешка #define TMR0 0x01 #define INTCON 0x0B #define TMR0IF 2 при CCS това трябва да е така: #BYTE TMR0 = 0x01 #BYTE INTCON = 0x0B #define TMR0IF 2 регистрите се указват с директивата #BYTE за да нямаш ядове с банките (компилатора се оправя сам) Още по тарикатско за флагове е #BIT примерно #BIT T0IF = 0xb.2 и после го манипулираш директно if(T0IF) { do something } else { do something else } По надоло не съм гледал нямам време.. |
|
| Автор: | Gogo [ Пет Дек 30, 2005 6:43 pm ] |
| Заглавие: | |
Ами ти декрементираш само младшия байт на ulDelay: decfsz ulDelay goto again #endasm 1000 десетично е 03Е8 Е8 = 232 |
|
| Автор: | nickich [ Пет Дек 30, 2005 7:35 pm ] |
| Заглавие: | |
абе то хуу си дефинирал unsigned long за ulDelay, обаче после използваш: 'decfsz ulDelay'. Незнам дали 'decfsz' може да се оправи с 'unsigned long' променлива |
|
| Автор: | jony++ [ Пет Дек 30, 2005 7:45 pm ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
Благодаряско за
това не го знаех, отчитам го като грешка. Колкото до
очевидно тук е проблема, ще го коригирам. |
|||||||||||||||||||
| Автор: | jony++ [ Пет Дек 30, 2005 9:13 pm ] | |||||||||
| Заглавие: | ||||||||||
Е не, ще се побъркам. Ето го същото нещо написано само на "С". Сега ефекта е друг, wait_ms(1000); зарежда ulDelay с 232 (еднобайтово число). А в симулатора на MPLAB за ucTime_1ms дава съобщение Restricted Memory. Добре, се използва "С" нетрябва ли компилатора да си се грижи за обработката на Long променлива? А това Restricted Memory защо излиза? Е не, направо ще се метна от балкона.
|
||||||||||
| Автор: | Predator_MF [ Пет Дек 30, 2005 9:25 pm ] |
| Заглавие: | |
И вместо да си тъпчеш главата на празника с главоболия как да прехвърляш Carry флага за да декрементираш long-a, пробвай с едно "ulDelay--" |
|
| Автор: | Gogo [ Пет Дек 30, 2005 11:21 pm ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
Защото ucTime_1ms ти е локална променлива и тъпия симулатор не знае, че я има.
Най-верятно тука всичко е точно. Предполагам, че мплаблския симулатор не се справя с декларацийте на CCS-а (unsigned long на майкрочипското С е 32 бита). И друго - ти гледаш ulDelay, което е само младшата част. Старшата е на следващия адрес (ulDelay+1). |
|||||||||||||||||||
| Автор: | jony++ [ Съб Дек 31, 2005 12:01 am ] |
| Заглавие: | |
Благодарско но всички. За мое щастие се оказа че проблема не е в "задклавиатурното устройство" Оказа се че *.cof файла генериран от CCS не се симулира коректно в MPLAB-а. Още веднъж благдарско и да си изкарате готино утре вечер. Наздраве |
|
| Автор: | ToHu [ Вто Яну 03, 2006 4:09 am ] |
| Заглавие: | |
Абе аз тоя MPLAB тотално съм го забравил, CCS с ICD1 си е супер, а иначе протеуса, не виждам предимство на MPLAB пред него. |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|