este es el programa en concreto, y la traduccion a ensamblador es esta, si os fijais no traduce bien la rutina de interrupcion :'(
#include "G:\PIC\intermitente\intermitente.h"
#int_TIMER0
int16 desbordamientos;
void TIMER0_isr(void)
{
set_timer0(6); // lo ponemos a 6 porque queremos que cuente 250
clear_interrupt(INT_TIMER0); // borramos el flag de interrupcion
desbordamientos++;
}
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
set_timer0(6); // lo ponemos a 6 porque queremos que cuente 250
clear_interrupt(INT_TIMER0); // borramos el flag de interrupcion
// por si le hubiese dado tiempo en las lineas de antes a activarse
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
output_bit(PIN_A0,0); // estado inicial de salida
desbordamientos=0;
while(1)
{
while(desbordamientos<2500);
output_toggle(PIN_A0);
desbordamientos=0;
}
}
CCS PCM C Compiler, Version 4.049, 51655 16-feb-08 13:26
Filename: intermitente.lst
ROM used: 91 words (1%)
Largest free fragment is 2048
RAM used: 9 (2%) at main() level
9 (2%) worst case
Stack: 0 locations
*
0000: MOVLW 00
0001: MOVWF 0A
0002: GOTO 004
0003: NOP
.................... #include "G:\PIC\intermitente\intermitente.h"
.................... #include <16F877.h>
.................... //////// Standard Header file for the PIC16F877 device ////////////////
.................... #device PIC16F877
.................... #list
....................
.................... #device adc=8
....................
.................... #FUSES NOWDT //No Watch Dog Timer
.................... #FUSES HS //High speed Osc (> 4mhz)
.................... #FUSES PUT //Power Up Timer
.................... #FUSES NOPROTECT //Code not protected from reading
.................... #FUSES NOBROWNOUT //No brownout reset
.................... #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
.................... #FUSES NOCPD //No EE protection
.................... #FUSES NOWRT //Program memory not write protected
.................... #FUSES NODEBUG //No Debug mode for ICD
....................
.................... #use delay(clock=20000000,RESTART_WDT)
....................
....................
.................... #int_TIMER0
....................
.................... int16 desbordamientos;
.................... void TIMER0_isr(void)
.................... {
.................... set_timer0(6); // lo ponemos a 6 porque queremos que cuente 250
.................... clear_interrupt(INT_TIMER0); // borramos el flag de interrupcion
.................... desbordamientos++;
.................... }
....................
....................
....................
.................... void main()
.................... {
0004: CLRF 04
0005: BCF 03.7
0006: MOVLW 1F
0007: ANDWF 03,F
0008: BSF 03.5
0009: BSF 1F.0
000A: BSF 1F.1
000B: BSF 1F.2
000C: BCF 1F.3
....................
.................... setup_adc_ports(NO_ANALOGS);
*
0010: BSF 03.5
0011: BSF 1F.0
0012: BSF 1F.1
0013: BSF 1F.2
0014: BCF 1F.3
.................... setup_adc(ADC_OFF);
0015: BCF 03.5
0016: BCF 1F.0
.................... setup_psp(PSP_DISABLED);
0017: BSF 03.5
0018: BCF 09.4
.................... setup_spi(SPI_SS_DISABLED);
*
000D: MOVLW FF
000E: BCF 03.5
000F: MOVWF 22
*
0019: BCF 03.5
001A: BCF 14.5
001B: BCF 22.5
001C: MOVF 22,W
001D: BSF 03.5
001E: MOVWF 07
001F: BCF 03.5
0020: BSF 22.4
0021: MOVF 22,W
0022: BSF 03.5
0023: MOVWF 07
0024: BCF 03.5
0025: BCF 22.3
0026: MOVF 22,W
0027: BSF 03.5
0028: MOVWF 07
0029: MOVLW 01
002A: BCF 03.5
002B: MOVWF 14
002C: MOVLW 00
002D: BSF 03.5
002E: MOVWF 14
.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4);
002F: MOVF 01,W
0030: ANDLW C0
0031: IORLW 01
0032: MOVWF 01
.................... setup_timer_1(T1_DISABLED);
0033: BCF 03.5
0034: CLRF 10
.................... setup_timer_2(T2_DISABLED,0,1);
0035: MOVLW 00
0036: MOVWF 78
0037: MOVWF 12
0038: MOVLW 00
0039: BSF 03.5
003A: MOVWF 12
.................... set_timer0(6); // lo ponemos a 6 porque queremos que cuente 250
003B: MOVLW 06
003C: BCF 03.5
003D: MOVWF 01
.................... clear_interrupt(INT_TIMER0); // borramos el flag de interrupcion
003E: BCF 0B.2
.................... // por si le hubiese dado tiempo en las lineas de antes a activarse
.................... enable_interrupts(INT_TIMER0);
003F: BSF 0B.5
.................... enable_interrupts(GLOBAL);
0040: MOVLW C0
0041: IORWF 0B,F
.................... output_bit(PIN_A0,0); // estado inicial de salida
0042: BCF 05.0
0043: BSF 03.5
0044: BCF 05.0
.................... desbordamientos=0;
0045: BCF 03.5
0046: CLRF 21
0047: CLRF 20
.................... while(1)
.................... {
.................... while(desbordamientos<2500);
0048: MOVF 21,W
0049: SUBLW 09
004A: BTFSS 03.0
004B: GOTO 052
004C: BTFSS 03.2
004D: GOTO 048
004E: MOVF 20,W
004F: SUBLW C3
0050: BTFSC 03.0
0051: GOTO 048
.................... output_toggle(PIN_A0);
0052: BSF 03.5
0053: BCF 05.0
0054: MOVLW 01
0055: BCF 03.5
0056: XORWF 05,F
.................... desbordamientos=0;
0057: CLRF 21
0058: CLRF 20
.................... }
0059: GOTO 048
....................
....................
.................... }
005A: SLEEP
Configuration Fuses:
Word 1: 3F32 HS NOWDT PUT NOPROTECT NOBROWNOUT NOLVP NOCPD NOWRT NODEBUG