Código en C

/*//BLINKY /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
*
*
* Este programa enciende un LED cuatro veces por segundo colocado en el puerto GP2.
* Según el World Vital Event per Time Unit, éste es el ritmo aproximado de nacimiento
* humano a julio del 2008 (http://www.census.gov/cgi-bin/ipc/pcwe).
*
* Emplea el microcontrolador PIC12F675 con oscilador interno.
*
* vdd__ _ _ _ _ vss
* GP5 _|
_ _ _|_ GP0
* GP4 _|
_ _ _|_ GP1
* GP3 _|_ _ _|_ GP2 >>
*
*
Se usó el compilador PIC-C (gracias Hamilton!) y el grabador EpicWin corriendo en Win 98.
*
alejandro tamayo *** www.thepopshop.org/blinky *** laimagendelmundo@yahoo.ca
*
Bogotá, 07.25.2008
*
*/

//Directivas para el preprocesador //////////////////////////////////////////////////////////////////////////////////////////////////////

#include <12F675.h>
#FUSES NOWDT, INTRC_IO, NOCPD, NOPROTECT, NOMCLR, NOPUT, NOBROWNOUT, BANDGAP_HIGH
#use delay(clock=4000000) // ...................................indica al preprocesador la velocidad del oscilador interno,
//............................................................................. permite el uso de la función delay_ms()
#define GP0 PIN_A0
#define GP1 PIN_A1
#define GP2 PIN_A2
#define GP3 PIN_A3
#define GP4 PIN_A4
#define GP5 PIN_A5
#byte OSCCAL = 0x80

//Configuración ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void init()
{
OSCCAL = 0x80; // ..................................................calibración del oscilador interno

setup_comparator( NC_NC_NC_NC ); // ...................desactiva comparadores
setup_adc_ports( NO_ANALOGS ); // .......................desactiva entradas análogas
setup_adc( ADC_OFF ); // .......................................desactiva análogo-digital
}

//Función principal/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void main()
{
init(); // ................................................................. llamado a la función de configuración
while ( TRUE ) // ................................................... loop que hace que el programa se ejecute continuamente
{
output_high( GP2 ); // ............................................enciende LED
delay_ms( 250 ); // ...............................................espera 250 ms
output_low( GP2 ); // .............................................apaga LED
delay_ms( 250 ); // .............................................. espera 250 ms
}
}

 

 


Blinky

Un microcontrolador enciende un LED cuatro veces por segundo.
Según el World Vital Events per Time Unit, éste corresponde al ritmo humano de nacimiento a la fecha.

A microcontroller blinks an LED four times per second. According to the World Vital Events per Time Unit this is the current human birth rate.

Bogotá, Jul. 25, 2008.



y en Intel HEX

:1000000000308A0004280000FF238316900000308F
:100010008A003628803083168000073083129900CA
:100020008316050803308312A000A00B15281908B9
:100030008C111F1383161F109F101F119F11831205
:100040001F1043282630840000080319352801308A
:10005000A100A001A00B2A28A10B29284A30A0004A
:10006000A00B30283328800B2728003484011F3050
:1000700083051F1383161F109F101F119F11073038
:10008000831299000A288316051183120515FA3088
:10009000A60022208316051183120511FA30A6004E
:0600A0002220432863004A
:02400E009431EB
:00000001FF
;PIC12F675



mismo código en lenguaje ensamblador

CCS PCM C Compiler, Version 4.038, 14959 25-Jul-08 17:55

*
0000: MOVLW 00
0001: MOVWF 0A
0002: GOTO 004
0003: NOP
0004: CALL 3FF
0005: BSF 03.5
0006: MOVWF 10
0007: MOVLW 00
0008: MOVWF 0A
0009: GOTO 036
.................... /*//BLINKY ////////////////////////////////////////////////////////////////////////////////
.................... *
.................... *
.................... * Este programa enciende un LED cuatro veces por segundo colocado en el puerto GP2.
.................... * Según el World Vital Event per Time Unit, éste es el ritmo aproximado de nacimiento
.................... * de la especie humana a Jul. del 2008 (http://www.census.gov/cgi-bin/ipc/pcwe)
.................... *
.................... * Emplea el microcontrolador PIC12F675 con oscilador interno.
.................... *
.................... *
vdd__ _ _ _ _ vss
.................... *
GP5 _|_ _ _|_ GP0
.................... *
GP4 _|_ _ _|_ GP1
.................... *
GP3 _|_ _ _|_ GP2 >>
.................... *
.................... * Se usó el compilador PIC-C
(gracias Hamilton!) y el grabador EpicWin corriendo en Win 98.
.................... * alejandro tamayo *** www.thepopshop.org/blinky *** laimagendelmundo@yahoo.ca
.................... * Bogotá, 07.25.2008
.................... *
.................... */
....................
.................... //Directivas para el preprocesador ////////////////////////////////////////////////////////////
....................
.................... #include <12F675.h>
.................... //////// Standard Header file for the PIC12F675 device ////////////////
.................... #device PIC12F675
.................... #list
....................
.................... //#device adc=8 // directiva necesaria cuando se usa el conversor análogo-digital
.................... #FUSES NOWDT, INTRC_IO, NOCPD, NOPROTECT, NOMCLR, NOPUT, NOBROWNOUT, BANDGAP_HIGH
.................... #use delay(clock=4000000) // indica al preprocesador la velocidad del oscilador interno,
*
0022: MOVLW 26
0023: MOVWF 04
0024: MOVF 00,W
0025: BTFSC 03.2
0026: GOTO 035
0027: MOVLW 01
0028: MOVWF 21
0029: CLRF 20
002A: DECFSZ 20,F
002B: GOTO 02A
002C: DECFSZ 21,F
002D: GOTO 029
002E: MOVLW 4A
002F: MOVWF 20
0030: DECFSZ 20,F
0031: GOTO 030
0032: GOTO 033
0033: DECFSZ 00,F
0034: GOTO 027
0035: RETLW 00
.................... // permite el uso de la función delay_ms()
.................... #define GP0 PIN_A0
.................... #define GP1 PIN_A1
.................... #define GP2 PIN_A2
.................... #define GP3 PIN_A3
.................... #define GP4 PIN_A4
.................... #define GP5 PIN_A5
.................... #byte OSCCAL = 0x80
....................
.................... //Configuración //////////////////////////////////////////////////////////////////////////////
....................
.................... void init()
.................... {
.................... OSCCAL = 0x80; // calibración del oscilador interno
*
000A: MOVLW 80
000B: BSF 03.5
000C: MOVWF 00
.................... //set_tris_a( 0b11111011 ); // sets GP2 as output, all other pins as inputs --> esto no es necesario
.................... setup_comparator( NC_NC_NC_NC ); // desactiva comparadores
000D: MOVLW 07
000E: BCF 03.5
000F: MOVWF 19
0010: BSF 03.5
0011: MOVF 05,W
0012: MOVLW 03
0013: BCF 03.5
0014: MOVWF 20
0015: DECFSZ 20,F
0016: GOTO 015
0017: MOVF 19,W
0018: BCF 0C.3
.................... setup_adc_ports( NO_ANALOGS ); // desactiva entradas análogas
0019: BCF 1F.6
001A: BSF 03.5
001B: BCF 1F.0
001C: BCF 1F.1
001D: BCF 1F.2
001E: BCF 1F.3
.................... setup_adc( ADC_OFF ); // desactiva análogo-digital
001F: BCF 03.5
0020: BCF 1F.0
.................... }
0021: GOTO 043 (RETURN)
....................
.................... //Función principal//////////////////////////////////////////////////////////////////////////
....................
.................... void main()
.................... {
*
0036: CLRF 04
0037: MOVLW 1F
0038: ANDWF 03,F
0039: BCF 1F.6
003A: BSF 03.5
003B: BCF 1F.0
003C: BCF 1F.1
003D: BCF 1F.2
003E: BCF 1F.3
003F: MOVLW 07
0040: BCF 03.5
0041: MOVWF 19
.................... init(); // llamado a la función de configuración
0042: GOTO 00A
.................... while ( TRUE ) // loop que hace que el programa se ejecute continuamente
.................... {
.................... output_high( GP2 ); // enciende LED
0043: BSF 03.5
0044: BCF 05.2
0045: BCF 03.5
0046: BSF 05.2
.................... delay_ms( 250 ); // espera 250 ms
0047: MOVLW FA
0048: MOVWF 26
0049: CALL 022
.................... output_low( GP2 ); // apaga LED
004A: BSF 03.5
004B: BCF 05.2
004C: BCF 03.5
004D: BCF 05.2
.................... delay_ms( 250 ); // espera 250 ms
004E: MOVLW FA
004F: MOVWF 26
0050: CALL 022
.................... }
0051: GOTO 043
.................... }
0052: SLEEP

Configuration Fuses:
Word 1: 3194 NOWDT NOCPD NOPROTECT NOMCLR NOPUT INTRC_IO NOBROWNOUT BANDGAP_HIGH