Hier nochmal die richtige Version.
Die Delay-Zeiten sind für 8Mhz angepasst, kann manCode:;************************************* ; ; Includedatei für den PIC16F628A list p=16f628a include "p16f628a.inc" ;************************************* ; Configuration festlegen ; 8Mhz Resonator: Brown out Reset on, Data Protection off, Power up Timer on, Watchdog off, LV-Programmierung off __CONFIG _BODEN_ON & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_OFF & _HS_OSC & _LVP_OFF ;***** VARIABLEN****************** w_temp EQU 0x70 ; context saving status_temp EQU 0x71 ; context saving Flags equ H'0072' ; count equ H'0020' tempa equ H'0021' tweek equ H'0022' ;********************************* ; Pinfunktion festlegen org 0x0000 ;Programmstart goto INIT org 0x004 ; Interruptbehandlung INTSERV movwf w_temp ; W register retten movf STATUS,w ; status register nach W register movwf status_temp ; STATUS register retten bcf STATUS,RP0 ; Bank0 bcf STATUS,RP1 ; hier kommt später Code hin ; für eventuelle Interrupts IntEnd movf status_temp,w ; STATUS register movwf STATUS ; wieder herstellen swapf w_temp,f swapf w_temp,w ; W register wieder herstellen ; ( Inhalt wie vor Interrupt) retfie ; Rücksprung aus Interruptbehandlung ;**************************************************************** INIT clrf INTCON ; keine Interrupts zulassen bcf STATUS,IRP bcf STATUS,RP0 bcf STATUS,RP1 ; Bank0 movlw 0x07 ;Comperators off movwf CMCON ;I/O Funktion ermöglichen clrf PORTA clrf PORTB ; alle Ausgänge Low BCF STATUS, RP1 ;Bank 1 auswählen BSF STATUS, RP0 movlw 0x3F ;Pins config movwf TRISA ;PORTA 0-5 Input movlw 0x00 ;PortB Output movwf TRISB bcf STATUS, RP0 ;Bank 0 auswählen ; hier bei Bedarf andere Register ; für Timer,CCP,EEprom,Usart,Vref ; initialisieren ;*********************************************** ;Taster abfragen , Led ausgeben ;Hier steht das eigentliche Programm ; Start btfss PORTA,0 ; "überspringe nächsten Befehl,wenn Taster nicht gedrückt goto LedAn bcf PORTB,0 ; Led aus ;andere Aufgaben hier goto Start LedAn bsf PORTB,0 ; Led an goto Start ;**********SUB _Routinen************************* DEL1MS movlw D'198' ;t=(n-1)*5+2(call)+6(ret)+7(Kopf) movwf count nop goto $+1 goto $+1 DLY1MS goto $+1 decfsz count,f goto DLY1MS return DEL200MS movlw D'199' movwf tempa DLY200 call DEL1MS decfsz tempa,f goto DLY200 movlw D'132' movwf count TWEEK200 decfsz count,f goto TWEEK200 nop return DELAY500 movlw D'250' movwf tempa DLY500 call DEL1MS decfsz tempa,f goto DLY500 movlw D'64' movwf tweek TWEEK500 decfsz tweek,f goto TWEEK500 movlw D'250' movwf tempa DLY501 call DEL1MS decfsz tempa,f goto DLY501 movlw D'64' movwf tweek TWEEK501 decfsz tweek,f goto TWEEK501 return end
immer wieder mal gebrauchen.
Ansonsten hat das Programm bei mir im Simulator(MPLAB)
funktioniert.
Viel Erfolg!
Digger







Zitieren

Lesezeichen