Hab den Code doch noch auf dem USB Stick gefunden... war zwar nicht ganz komplett aber habe den rest noch ergänzt...![]()
bitte nicht hauen für die Programmierunges wird dann schon noch alles schön mit senderoutinen und so gemacht, ist halt einfach für den ersten test...
gruss bluesmash
Code:;----------------------------------------------------------------------------------------------------------------- ; LCD Ansteuerung ;----------------------------------------------------------------------------------------------------------------- ; ; Autor: Roman Sutter ; Datum: 28.04.2007 ; Filename: LCD.asm ; ;----------------------------------------------------------------------------------------------------------------- ; ; Programmfunktion: ; Name auf LCD ausgeben ; ;----------------------------------------------------------------------------------------------------------------- ; ; ; ; ; ; ; ; ; ; ; ; ;----------------------------------------------------------------------------------------------------------------- ;----------------------------------------------------------------------------------------------------------------- ; Definition des Prozessors: ;----------------------------------------------------------------------------------------------------------------- list p=16f873 #include <p16f873a.inc> __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF ;----------------------------------------------------------------------------------------------------------------- ; Makros Bankumschaltung ;----------------------------------------------------------------------------------------------------------------- BANK_0 MACRO BCF STATUS,5 BCF STATUS,6 ENDM BANK_1 MACRO BSF STATUS,5 BCF STATUS,6 ENDM BANK_2 MACRO BCF STATUS,5 BSF STATUS,6 ENDM BANK_3 MACRO BSF STATUS,5 BSF STATUS,6 ENDM ;----------------------------------------------------------------------------------------------------------------- ; Variablen Definitionen ;----------------------------------------------------------------------------------------------------------------- w_temp EQU 0x70 status_temp EQU 0x71 counter EQU 0x72 ;Variablen für Wait Zähler1 EQU 0x22 Zähler2 EQU 0x23 Zähler3 EQU 0x24 ;----------------------------------------------------------------------------------------------------------------- ; Konstanten ;----------------------------------------------------------------------------------------------------------------- FOSC = .4000000 ;Oszillator Frequenz Zeitkonstante = .100 ;Konstante für Wartezeit *10ms ;----------------------------------------------------------------------------------------------------------------- ; Definitionen ;----------------------------------------------------------------------------------------------------------------- #DEFINE lcd_e PORTA,2 #DEFINE lcd_rs PORTA,5 #DEFINE lcd_rw PORTC,1 ;----------------------------------------------------------------------------------------------------------------- ; Adresse für Programm Start und Interrupt Vektor ;----------------------------------------------------------------------------------------------------------------- ORG 0x000 ;Prozessor Reset Vector clrf PCLATH ;PC cleared goto HW_Config ;An den Anfang des Programms springen ORG 0x004 ;Interrupt Vector movwf w_temp ;Inhalt des W-Register speichern movfw STATUS ;Statusregister in W-Register kopieren movwf status_temp ;Status in status_temp speichern HW_Config ;----------------------------------------------------------------------------------------------------------------- ; Configuration Ports ;----------------------------------------------------------------------------------------------------------------- BANK_1 ;Ausgänge für LED movlw 0x00 ;0=Output 1=Input movwf TRISC ;Alle Pin's an Portc als Ausgänge definieren ;Ports für Matrixtastatur movlw B'11110000' ;PortB4-B7 Als Eingänge, B0-B3 als Ausgänge Definieren movwf TRISB bcf OPTION_REG,7 ;Pull-UP Widerstände aktivieren ;Ports für LCD Display movlw B'11011011' ;PortA2+5 als Ausgänge, Rest Eingänge movwf TRISA ;----------------------------------------------------------------------------------------------------------------- ; Start Programm ;----------------------------------------------------------------------------------------------------------------- BANK_0 call lcd_init call wait_1s ;Zeichen Ausgeben bcf lcd_e bsf lcd_rs bcf lcd_rw movlw b'00000101' ;High Nibble movwf PORTB bsf lcd_e NOP bcf lcd_e call wait_2ms movlw b'00001001' ;Low Nibble movwf PORTB bsf lcd_e NOP bcf lcd_e call wait_2ms warten goto warten ;#####--Subroutine LCD Initialisieren--##### lcd_init call wait_1s ;Steuerleitungen setzen bcf lcd_e bcf lcd_rs bcf lcd_rw ;LCD in 4-Bit Modus Schalten movlw b'00000010' movwf PORTB bsf lcd_e bcf lcd_e call wait_2ms ;4-Bit datenlänge, 2-Zeiliges Display, 5x7 Font movlw b'00000010' ;High Nibble movwf PORTB bsf lcd_e bcf lcd_e call wait_2ms movlw b'00001000' ;Low Nibble movwf PORTB bsf lcd_e bcf lcd_e call wait_2ms ;Display ein. Cursor ein, Cursor blinken movlw b'00000000' ;High Nibble movwf PORTB bsf lcd_e bcf lcd_e call wait_2ms movlw b'00001111' ;Low Nibble movwf PORTB bsf lcd_e bcf lcd_e call wait_2ms ;Display löschen, Cursor auf 1. Spalte von 1. Zeile movlw b'00000000' ;High Nibble movwf PORTB bsf lcd_e bcf lcd_e call wait_2ms movlw b'00000001' ;Low Nibble movwf PORTB bsf lcd_e bcf lcd_e call wait_2ms ;Cursor Auto-Increment movlw b'00000000' ;High Nibble movwf PORTB bsf lcd_e bcf lcd_e call wait_2ms movlw b'00000110' ;Low Nibble movwf PORTB bsf lcd_e bcf lcd_e call wait_2ms return ;#####--Subroutine 2ms Warten--##### wait_2ms movlw .3 ;Schleife mit 3 * 750us movwf Zähler2 Schleife2 movlw .250 movwf Zähler1 ;Schleife mit 250 Durchgängen ca. 750us Schleife1 DECFSZ Zähler1 goto Schleife1 DECFSZ Zähler2 goto Schleife2 return ;#####--Subroutine 1s Warten--##### wait_1s movlw .100 ;Zähler3 mit Wert für 1s Schleifendurchläufe laden movwf Zähler3 Schleife_3 movlw .13 ;Schleife für Zählung der 10ms Schleifendurchläufe movwf Zähler2 Schleife_2 movlw .250 movwf Zähler1 ;Schleife mit 250 Durchgängen ca. 750us Schleife_1 DECFSZ Zähler1 goto Schleife_1 DECFSZ Zähler2 goto Schleife_2 DECFSZ Zähler3 goto Schleife_3 return END (für Assembler)







Zitieren
Lesezeichen