>>> RESOLVIDO <<< PIC12F683 + CCS 3.43 / 3

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

>>> RESOLVIDO <<< PIC12F683 + CCS 3.43 / 3

Mensagempor Mersin » 05 Nov 2010 19:27

Olá pessoal,

Estou usando o PIC12F683 e quando compilo o seguinte programa em C, o CCS tem sucesso em compilar, porém não salta para o endereço correto da Rotina Main, e sim vai para a última posição de memória - 0x7FF, gerando mensagem de erro ao executar. Detalhes abaixo:

O Programa em C é o seguinte:
//### Definições e includes
#include <12f683.h>

#use delay(clock=8000000, restart_wdt)
#fuses INTRC_IO, WDT, NOCPD, NOMCLR, PUT, NOBROWNOUT, PROTECT
#use fast_io(a)
#opt 9
#use rs232(stream=CH1, baud=9600, xmit=PIN_A1, rcv=PIN_A3, restart_wdt, ERRORS) //, disable_ints, time_out=1000)

//### Início do programa principal
void main ()
{
//### Habilita WDT
setup_wdt( WDT_ON | WDT_DIV_65536 ); // 12F683

for (;;)
{ //### Refresca WDT
restart_wdt();

} //### Fim do loop infinito While
} //### Fim da Rotina Main


Quando compilado, fica como abaixo:
1: //### Definições e includes
000 3000 MOVLW 0
001 008A MOVWF 0xa
002 2804 GOTO 0x4
003 0000 NOP
004 3007 MOVLW 0x7
005 008A MOVWF 0xa
006 27FF CALL 0x7ff
007 1683 BSF 0x3, 0x5
008 0090 MOVWF 0x10
009 3000 MOVLW 0
00A 008A MOVWF 0xa
00B 280C GOTO 0xc
2: #include <12f683.h>
3:
4: #use delay(clock=8000000, restart_wdt)
5: #fuses INTRC_IO, WDT, NOCPD, NOMCLR, PUT, NOBROWNOUT, PROTECT
6: #use fast_io(a)
7: #opt 9
8: #use rs232(stream=CH1, baud=9600, xmit=PIN_A1, rcv=PIN_A3, restart_wdt, ERRORS) //, disable_ints, time_out=1000)
9:
10: //### Início do programa principal
11: void main ()
12: {
00C 0184 CLRF 0x4
00D 301F MOVLW 0x1f
00E 0583 ANDWF 0x3, F
00F 131F BCF 0x1f, 0x6
010 1683 BSF 0x3, 0x5
011 141F BSF 0x1f, 0
012 149F BSF 0x1f, 0x1
013 151F BSF 0x1f, 0x2
014 159F BSF 0x1f, 0x3
015 3007 MOVLW 0x7
016 1283 BCF 0x3, 0x5
017 009F MOVWF 0x1f
018 1485 BSF 0x5, 0x1
13: //### Habilita WDT
14: setup_wdt( WDT_ON | WDT_DIV_65536 ); // 12F683
019 3017 MOVLW 0x17
01A 0098 MOVWF 0x18
15:
16: for (;;)
17: { //### Refresca WDT
18: restart_wdt();
01B 0064 CLRWDT
19:
20: } //### Fim do loop infinito While
01C 281B GOTO 0x1b

Então quando ele executa o call do endereço 0x006, aparece a seguinte mensagem de erro:
"CORE-W0014: Halted due to PC incrementing over the Maximum PC address and wrapping back to Zero"

Nossa, realmente preciso da ajuda de vcs.

Um Muito Obrigado a quem puder me ajudar!
Editado pela última vez por Mersin em 07 Nov 2010 16:54, em um total de 1 vez.
Mersin
Mersin
Byte
 
Mensagens: 121
Registrado em: 22 Out 2006 13:07
Localização: Goiânia

Mensagempor aureo.oliveira » 05 Nov 2010 19:38

é assim mesmo, no endereço 0x7FF tem um ret xx (retorna o valor de calibraçao do oscilador RC). Confere isso no data-sheet.
HEHEHEHE!!!!!!
aureo.oliveira
Bit
 
Mensagens: 27
Registrado em: 11 Out 2006 19:28
Localização: Goiânia-Goiás

Mensagempor Mersin » 06 Nov 2010 21:10

Oi Aureo,

O problema é que depois do Call 0x7FF, ele retorna é para o endereço 0x000 e não sai disso, como deveria.

Tem alguma idéia?
Mersin
Mersin
Byte
 
Mensagens: 121
Registrado em: 22 Out 2006 13:07
Localização: Goiânia

Mensagempor Mersin » 07 Nov 2010 12:00

... Completando

Então, oulhei outros projetos meus usando chip também da família 12F e realmente o CCS sempre coloca no início código assembler essa chamada ao último endereço de memória, porém, depois da chamada a execussão retorna ao endereço posteior ao Call e o que está acontecendo aqui é que depois da chamada ele está retornando ao endereço 0x00.

That is the problem my friends!!! What can I do now????
Mersin
Mersin
Byte
 
Mensagens: 121
Registrado em: 22 Out 2006 13:07
Localização: Goiânia

Mensagempor Mersin » 07 Nov 2010 16:42

RESOLVIDO PESSOAL

Eu burlei a falta de vergonha do CCS e coloquei "Forçadamente" no último endereço da Flash o código assembler RETLW 0.

Valeu a ajuda gente!!!
Mersin
Mersin
Byte
 
Mensagens: 121
Registrado em: 22 Out 2006 13:07
Localização: Goiânia


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x