;********************************************************************** ; Diese Datei ist eine grundlegende Vorlage für die Code Generie- * ; rung zum Programmieren des Microchips PIC16F84A. Diese Datei ent- * ; die grundlegenden Code Bausteine. * ; * ; Wenn Interrupts nicht genutzt werden, kann der komplette Code * ; zwischen der ORG 0x004 Direktiven und die Hauptetiketten entfernt * ; werden. In Anlehnung daran, können auch die Variablen Zuweisungen * ; für "w_temp" und "status_temp" entfernt werden. * ; * ; Für weitere Informationen über die Assembler Codes kann das MPLAB * ; USERS GUIDE zu Rate gezogen werden. * ; * ; Für weitere Informationen über den Befehlssatz kann das jeweilige * ; Datenblatt zu Rate gezogen werden. * ; * ; Der temporäre Dateiaufbau nutzt MPLAB V4.00 mit MPASM V2.20 und * ; MPLINK 1.20 als Übersetzungswerkzeug * ; * ;********************************************************************** ; * ; Filename: Lauflicht am Port B.asm * ; Date: 10.02.08 * ; File Version: 2 * ; * ; Author: Kampmeier, René * ; Company: * ; * ; * ;********************************************************************** ; * ; Files required: 16F84A.H * ; 16f84.lkr * ; f84atmpo.asm * ; * ;********************************************************************** ; * ; Notes: Das Programm wurde von www.sprut.de übernommen und * ; zum Funktionstest des MPLAB ICD2 genutzt un etwas * ; optimiert. Desweiteren wurde es für Schulungszwecke * ; erfolgreich eingesetzt. Es wurde ein Programmfehler * ; gefunden und ausgemerzt * ; * ;********************************************************************** list p=16F84 ; Direktive zur Definition des verwendeten Prozessors #include ; Einbindung der Include Datei, die Datei ist erforderlich ; um Prozessorspezifische Variablen zu definieren. __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ; Die'__CONFIG' Direktive wird benutzt um Konfigurationsdaten in das .asm file einzubetten. ; Die Etiketten welche den Direktiven folgen sind in der entsprechenden .inc file zu finden. ; Im entsprechenden Datenblatt sind genauere Informationen unter dem Stichwort "configuration word" ; zu finden. ;****** VARIABLEN DEFINITION (Beispiel) ; Beispiel zur Nutzung uninitialisierter Datenbereiche INT_VAR UDATA 0x0C ; Festlegung des Speicherbereiches der Variablen???????????????? w_temp RES 1 ; Variable wird zum zusammenhängenden Speichern genutzt status_temp RES 1 ; Variable wird zum zusammenhängenden Speichern genutzt ; Beispiel zur Nutzung überlagerter, uninitialisierter Datenbereiche ; In diesem Beispiel sind beide Variablen mit der gleichen GPR Lage des ; linkers versehen. G_DATA UDATA_OVR ; Explizite Adresse kann hier angegeben werden flag RES 2 ; Temporäre Variable (gemeinsamer Speicherort = G_DATA) G_DATA UDATA_OVR count RES 2 ; Temporäre Variable (gemeinsamer Speicherort = G_DATA) ;********************************************************************** RESET_VECTOR CODE 0x000 ; Prozessor Reset Vektor goto start ; gehe zum Programmbeginn ;INT_VECTOR CODE 0x004 ; Speicherort der Interruptvektoren ; movwf w_temp ; lade den Inhalt des Arbeitsregisters W in die Variable "w_temp" ; movf STATUS,w ; kopiere den Inhalt des STATUS-Registers in das Arbeitsregister W ; movwf status_temp ; lade die Variable "status_temp" mit dem Inhalt des Arbeistregisters W ; ISR Code kann hier eingefügt werden oder anderswo als "call subroutine" hinterlegt werden ; movf status_temp,w ; kopiere den Inhalt der Variablen "status_temp" in das Arbeitsregister W ; movwf STATUS ; lade das STATUS-Register mit dem Inhalt des Arbeitsregisters W swapf w_temp,f ; vertauschen der oberen und unteren 4 Bits der Variablen "w_temp", das ; Ergebnis wird in der Speicherzelle f gespeichert. swapf w_temp,w ; vertauschen der oberen und unteren 4 Bits der Variablen "w_temp", das ; Ergebnis wird im Arbeitsregister W gespeichert. retfie ; Kehre aus dem Interrupt zurück. ;*********************************************************************** MAIN CODE start ;*********************************************************************** ; VARIABLENDEKLARATION wait equ 0x20 wait2 equ 0x21 wait12 equ 0x22 ;*********************************************************************** ; Hauptprogramm Init bsf STATUS, RP0 movlw b'00000000' movwf TRISB bcf STATUS, RP0 clrf PORTB Mahee movlw b'11111111' movwf PORTB call waitX clrf PORTB call waitXX goto Mahee waitX movlw D'250' movwf wait2 X1 decfsz wait2 goto X1 return waitXX movlw D'250' movwf wait12 XX1 decfsz wait12 goto XX1 return END