LED testprogram for 16F628

Funktion
Programmet får en lysdiode til at blinke med 2 Hz. Den interne 4 MHz oscillator bruges.

Hardware
Testprint K4 monteres med resetknap og en lysdiode.

Note: RA4 (pin 3) har såkaldt 'open drain output'. Det betyder, at udgangen ikke selv kan levere spænding - den må tilføres udefra. Hvis RA4 skal bruges til at tænde for lysdioden, skal denne og 470 ohms modstanden forbindes mellem pin 3 og +5V. LED katode forbindes til pin 3, LED anode forbindes til modstanden. Lysdioden vil så tænde, når RA4 = low.


Testprint K4 konfigureret til 628LED.asm

Software i assembler

;************************************************************
; Processor: PIC16F628 at 4 MHz using internal RC oscillator
; Function:  Flash a LED connected to RA2
; Hardware:  Testboard K4
; Filename:  628LED.asm
; Author:    Lars Petersen, oz1bxm@pobox.com
; Website:   www.oz1bxm.dk/PIC/pic.htm
; Credit:    Tony Nixon's LED flasher
;************************************************************

        LIST P=16F628, R=DEC    ; Use the PIC16F628 and decimal system

        #include "P16F628.INC"  ; Include header file

        __config  _INTRC_OSC_NOCLKOUT & _LVP_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_ON

        CBLOCK 0x20             ; Declare variable addresses starting at 0x20
          Loop1,Loop2
        ENDC
;
; -----------
; INITIALIZE
; -----------
;
        ORG    0x000           ; Program starts at 0x000

        CLRF   PORTA           ; Initialize port A
        CLRF   PORTB           ; Initialize port B

        BSF    STATUS,RP0      ; RAM bank 1

        CLRF   TRISA           ; All pins port A output
        CLRF   TRISB           ; All pins port B output

        BCF    STATUS,RP0      ; RAM bank 0
;
; ------------------------
; FUNCTION OF PORT A PINS
; ------------------------
;
        MOVLW    7
        MOVWF    CMCON         ; Comparators off, all pins digital I/O
;
; ----------
; MAIN LOOP
; ----------
;
Main    BSF     PORTA,2        ; Turn on LED connected to RA2
        CALL    delay
        BCF     PORTA,2        ; Turn off LED connected to RA2
        CALL    delay
        GOTO    Main
;
; ---------------
; DELAY 250 MSEC
; ---------------
;
delay   MOVLW   250
        MOVWF   Loop1
Outer   MOVLW   200
        MOVWF   Loop2
Inner   NOP
        NOP
        DECFSZ  Loop2,F
        GOTO    Inner          ; Inner loop = 5 usec.
        DECFSZ  Loop1,F
        GOTO    Outer
        RETURN

        END

Noter
Direktivet  _INTRC_OSC_NOCLKOUT bevirker, at 16F628 bruger den interne 4 MHz RC oscillator. Så kan RA6 og RA7 bruges til I/O. Disse ben bruges ellers ofte til krystaloscillator.

Hvis alle ben på portA skal fungere som digitale indgange eller udgange, skal man skrive værdien 7 til registeret CMCON. Så frakobles komperatorerne. Det sker under FUNCTION OF PORT A PINS.

Man kan godt undlade ekstern reset på ben 4 (RA5) og i stedet konfigurere benet som input. Dette gøres med parameteren _MCLRE_OFF i linien med  __config.

Alle porte kan testes ved at udskifte hovedløkken MAIN LOOP med følgende linier:
;
; ----------
; MAIN LOOP
; ----------
; Apply 2 Hz to all ports
Main    MOVLW b'01010101'
        MOVWF portA
        MOVWF portB
        CALL  delay
        MOVLW b'10101010'
        MOVWF portA
        MOVWF portB
        CALL  delay
        GOTO  Main

Download
Download 628led.zip som indeholder kildekode i assembler samt hexfilen.

Tak
Jeg blev inspireret af Tony Nixon's LED flasher på http://www.piclist.com/techref/microchip/16F877/flashled.htm


Denne side er skrevet 4-10-2002 af Lars Petersen, oz1bxm@pobox.com
Opdateret 8-2-2005.

Tilbage til PIC eksperimenter