list p=16f627 ;************************************************************** ; Includedatei für den 16F627 einbinden ; #include ; ; Configuration festlegen ; ; bis 4 MHz: Power on Timer, kein Watchdog, XT-Oscillator ; __CONFIG _PWRTE_ON & _WDT_OFF & _XT_OSC ; ; ab 4 MHz: Power on Timer, kein Watchdog, HS-Oscillator __CONFIG _PWRTE_ON & _WDT_OFF & _HS_OSC ; ;************************************************************** loops Equ 0x22 ; Zaehler für Warteschleife loops2 Equ 0x23 ; Zaehler für Warteschleife byte Equ 0x24 ; Byte für Ausgabe #define Bit0 PORTA,0 #define Bit1 PORTA,1 #define Bit2 PORTA,2 #define Bit3 PORTA,3 #define Bit4 PORTB,5 #define Bit5 PORTB,0 #define Bit6 PORTB,3 #define Bit7 PORTB,4 ;************************************************************** Init clrf PORTA ; PortA movlw 0x07 ; auf movwf CMCON ; Digital IO bcf STATUS, RP1 ; umschalten bsf STATUS, RP0 ; auf Bank 1 umschalten movlw B'11110000' movwf TRISA movlw B'11000110' movwf TRISB bcf STATUS, RP0 ; auf Bank 0 zurückschalten ; USART initialisieren bsf STATUS,RP0 ; Bank1 movlw 0x20 ; Sender: RS232 movwf TXSTA ; bcf STATUS,RP0 ; Bank 0 movlw 0x90 ; Empfänger: RS232 movwf RCSTA ; ; USART Baudrate einstellen bsf STATUS,RP0 ; Bank1 movlw 25 ; Set Baud rate 2,4 kBPS bei 4 MHz movwf SPBRG bcf TXSTA, BRGH ; BRGH=0 bcf STATUS,RP0 ; Bank 0 Main btfss PIR1,RCIF ; sind Daten da ? goto Main ; nein, noch keine Daten da movfw RCREG ; RS232-Register auslesen bcf PIR1,RCIF call ShowByte ; empfangenes Byte auf den LEDs ausgeben goto Main ;********************************************************** ; ein Byte ausgeben ShowByte call Clear movwf byte btfsc byte, 0 bsf Bit0 btfsc byte, 1 bsf Bit1 btfsc byte, 2 bsf Bit2 btfsc byte, 3 bsf Bit3 btfsc byte, 4 bsf Bit4 btfsc byte, 5 bsf Bit5 btfsc byte, 6 bsf Bit6 btfsc byte, 7 bsf Bit7 movfw byte movwf TXREG ; Byte wieder zurücksenden return ;********************************************************** ; alle Ausgänge auf LOW Clear bcf Bit0 bcf Bit1 bcf Bit2 bcf Bit3 bcf Bit4 bcf Bit5 bcf Bit6 bcf Bit7 ;clrf PORTB ;clrf PORTA return ;********************************************************** ; Warteschleife 250 ms Wait movlw D'250' ; 250 ms Pause movwf loops Wai movlw .110 ; Zeitkonstante für 1ms movwf loops2 Wai2 nop ; nop nop nop nop nop decfsz loops2, F ; 1 ms vorbei? goto Wai2 ; nein, noch nicht ; decfsz loops, F ; 250 ms vorbei? goto Wai ; nein, noch nicht retlw 0 ; das Warten hat ein Ende end