Comportamento inesperado do 12F629

Pessoal,
Ontem durante uma programação usando o MikroC do PIC com interrupção via pin change para sair do sleep me deparei com uma coisa nada convencional: dependendo da maneira como você declara o TRIS ele tem um comportamento diferente durante a execução do programa, ou seja, literalmente ele dá um reset (e com watchdog desligado). Vejam abaixo as possibilidades de declaração do TRIS no MikroC e ASM:
1º exemplo:
agora traduzindo isso em assembly, de acordo com que o MikroC gera:
Usando o código em C descrito acima funcionou legal o meu programa. Agora vejam abaixo num segundo exemplo onde eu declaro os TRIS individualmente:
2º exemplo:
agora traduzindo isso em assembly, de acordo com que o MikroC gera:
Declarando os TRISIO de acordo com o 2º exemplo quando acontece a interrupção o PIC dá um reset.
Já fiz isso várias vezes no PIC e deu sempre a mesma coisa.
Alguém sabe explicar o motivo desse comportamento do PIC???
Valeu!
Ontem durante uma programação usando o MikroC do PIC com interrupção via pin change para sair do sleep me deparei com uma coisa nada convencional: dependendo da maneira como você declara o TRIS ele tem um comportamento diferente durante a execução do programa, ou seja, literalmente ele dá um reset (e com watchdog desligado). Vejam abaixo as possibilidades de declaração do TRIS no MikroC e ASM:
1º exemplo:
- Código: Selecionar todos
TRISIO = 0b001100;
agora traduzindo isso em assembly, de acordo com que o MikroC gera:
- Código: Selecionar todos
movlw 12 ;
movwf trisio ;
Usando o código em C descrito acima funcionou legal o meu programa. Agora vejam abaixo num segundo exemplo onde eu declaro os TRIS individualmente:
2º exemplo:
- Código: Selecionar todos
TRISIO.F0 = 0;
TRISIO.F1 = 0;
TRISIO.F2 = 1;
TRISIO.F3 = 1;
TRISIO.F4 = 0;
TRISIO.F5 = 0;
agora traduzindo isso em assembly, de acordo com que o MikroC gera:
- Código: Selecionar todos
bcf trisio, 0 ;
bcf trisio, 1 ;
bsf trisio, 2 ;
bsf trisio, 3 ;
bcf trisio, 4 ;
bcf trisio, 5 ;
Declarando os TRISIO de acordo com o 2º exemplo quando acontece a interrupção o PIC dá um reset.
Já fiz isso várias vezes no PIC e deu sempre a mesma coisa.
Alguém sabe explicar o motivo desse comportamento do PIC???
Valeu!