Gast
#230804
Hallo, ich versuche seit zwei Tagen ein Standard-LCD an einem ATMEGA16 zu betreiben und schaffe es einfach nicht. Ich habe mit AVRStudio4 folgendes Programm geschrieben: .include "m16def.inc" .def TEMP = R16 .def DATA = R17 .CSEG RJMP START .ORG $10 START: LDI TEMP,LOW(RAMEND) ;Stack-Initialisierung OUT SPL,TEMP LDI TEMP,HIGH(RAMEND) OUT SPH,TEMP RCALL DINIT LDI DATA,'U' RCALL WRTCHAR RJMP ENDE DINIT: RCALL BUSY LDI DATA,0x38 ;0x38 = 8bit-Mode RCALL WRTCMD LDI DATA,0x0E ;0x0E = Display on, cursor on RCALL WRTCMD LDI DATA,0x02 ;0x02 = cursor at home position RCALL WRTCMD LDI DATA,0x01 ;0x01 = display clear RCALL WRTCMD RET WRTCMD: RCALL BUSY CBI PORTA,PA0 ;RS = 0 -> command ;SBI PORTA,PA2 ;Enable = 1 CBI PORTA,PA1 ;RW = 0 -> write OUT PORTB,DATA ;Kommando aus Register DATA auf PortB ausgeben RCALL PULSE_EN ;CBI PORTA,PA2 ;Enable = 0 RCALL BUSY RET WRTCHAR: SBI PORTA,PA0 ;RS = 0 -> command ;SBI PORTA,PA2 ;Enable = 1 CBI PORTA,PA1 ;RW = 0 -> write OUT PORTB,DATA ;Zeichen aus Register DATA auf PortB ausgeben RCALL PULSE_EN ;CBI PORTA,PA2 ;Enable = 0 RCALL BUSY RET BUSY: CBI PORTA,PA0 ;RS = 0 -> command SBI PORTA,PA2 ;Enable = 1 SBI PORTA,PA1 ;RW = 1 -> read IN R18,PORTB ;PortB in Register R18 ablegen ROL R18 ;Register nach links Rotieren (falls Bit7=1 -> C=1) CBI PORTA,PA2 ;Enable = 0 BRCS BUSY RET PULSE_EN: SBI PORTA,PA2 NOP NOP NOP CBI PORTA,PA2 RET ENDE: RJMP ENDE .EXIT __________________________________________________________ Sieht jemand einen Fehler? Bin für jeden Tipp dankbar!!
