Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Wichtig: Bevor Du wegen einem Problem mit der CC2 postest, stelle sicher, daß Du
die neueste OS-Version, die neuseste Compiler-DLL und die neuesten Modulversionen benutzt!
Beachte, daß sich auf der CD zur CC2-Unit/Station auch jetzt noch die ältesten Dateien befinden!
Es gelten folgende Anleitung und Regeln: Regeln CC2Net.de-Forum
Zurück zum Artikel  (Blaue Felder sind Pflichtfelder)


Name:   UserID: 
 E-Mail:
Kategorie
Betreff
Homepage:
Link-Titel:
Link-URL:
Cookie für Name, UserID, E-Mail, Homepage-URL setzen
(Erspart die Neueingabe bei Beiträgen und Antworten)
(Zum Löschen des Cookies hier klicken)
Ich nutze:
C-Control II Unit
C164CI-Controllerboard
C-Control II Station
CCRP5 mit CC2-Unit (Conrad Roboter)
CC2-Application-Board
CC2-StarterBoard
CC2-ReglerBoard
eigenes Board
original OS     OSOPT_V2     OSOPT V3.0 OSOPT V3.1

Kommentar:
Einfügen von HTML im Kommentar:

Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a>
Bild einfügen: <img src="BILDURL">
Text formatieren: <b>fetter Text</b>  <i>kursiver Text</i> <u>unterstrichener Text</u>
Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b>
C2 Quellcode formatieren: <code>Quellcode</code>
ASM Quellcode formatieren: <asm>Quellcode</asm>
(Innerhalb eines Quellcodeabschnitts ist kein html möglich.)
Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst !  

> Hi, > > habe ein "kleines" Programm in Assembler geschrieben, das das externe LCD an Port 1 ansteuern soll. > Zunächst einmal habe ich noch nicht herausgefunden, welcher Zeichensatz für das mit dem Aplication Board > mitgelieferte LCD zutrifft, aber ich bekomme auch nur eher komische Ausgaben. Der folgende Code lässt den > Cursor kurz aufblinken und zeigt dann eine 4 an. Diese steht jedoch nicht am Anfang der Zeile sondern mittendrin. > Das Busy-Flag habe ich wieder auskommentiert, die Aufrufe sind also wirkungslos. Andernfalls bekomme ich > gar keine Ausgabe...hoffe mir kann da jemand helfen. > > Das Programm läuft ohne OS im Segment 0. Hier der Code: > > <asm> > $case > $nonsegmented ;keine Segmentierung, da nur in Seg0 gearbeitet wird > $model(medium) > $extend > $nomod166 > $stdnames(reg164ci.def) > > regdef R0-R15 > > text EQU 'H' > > ;---------------------------------------------------------------------- > ;Reset-Vektor > ;---------------------------------------------------------------------- > start SECTION CODE WORD AT 0 > jump2_main PROC NEAR > JMP main > jump2_main ENDP > start ENDS > > ;---------------------------------------------------------------------- > ;Interrupt-Vektor fr Timer 7 > ;---------------------------------------------------------------------- > T7_INT SECTION CODE WORD AT 0F4h > int_T7 PROC NEAR > JMP tim7_int > int_T7 ENDP > T7_INT ENDS > > ;---------------------------------------------------------------------- > ;logische Sektion fr Programmcode > ;---------------------------------------------------------------------- > code_s SECTION CODE WORD AT 200h > > ;---------------------------------------------------------------------- > ;Timer-3-Initialisierung > ;---------------------------------------------------------------------- > init_timer3 PROC NEAR > > MOV R4,#0 > MOV T3,R4 ;T3 zurcksetzen > MOV T3IC,R4 ;Interupt fr T3 deaktivieren > MOV T3CON,#100B ;Aufl???ung=6,4us > > RET > init_timer3 ENDP > > ;---------------------------------------------------------------------- > ;Timer-7-Initialisierung > ;---------------------------------------------------------------------- > init_timer7 PROC NEAR > > MOV R3,#1011000B ;Konfiguration fr T7IC > MOV R4,#0 ;Startwert fr T7 > > MOV T7,R4 ;T7 zurcksetzen > MOV T7REL,R2 ;Reload-Wert Timer 7 = R2 > MOV T7IC,R3 ;Interupt T7 ein > MOV T78CON,#1000100B ;Timer 7 starten, Periode=420ms > > BSET IEN ;Interrupt Enable > RET ;Rcksprung > init_timer7 ENDP > > ;---------------------------------------------------------------------- > ;Interrupt-Routine fr Timer 7 > ;---------------------------------------------------------------------- > timer7_int PROC TASK INTNO=3Dh > > tim7_int: XOR P1L,R10 ;LEDs invertieren > RETI ;Rcksprung vom Interrupttimer_int > > timer7_int ENDP > > ;---------------------------------------------------------------------- > ;Hauptprogramm > ;---------------------------------------------------------------------- > pa4cc2 PROC NEAR > > main: ;Initialisierung > DISWDT ;Watchdogtimer beenden > MOV STKOV,#0FA00H ;Stackgrenzen initialisieren > MOV STKUN,#0FC00H > MOV SP,#0FC00H ;Stack-Pointer initialisieren > MOV CP,#0FC00H ;Context-Pointer initilisieren > BFLDL BUSCON0,#37H,#15H ;Buskonfiguration > BFLDH BUSCON0,#12H,#00H > BFLDL SYSCON,#04H,#04H ;Systemkonfiguration > BFLDH SYSCON,#0FFH,#00H > EINIT ;Ende der Initialisierung > > EXTR #1 ;extended Register > MOV DP1L,#0FFh ;P1L.6 auf Ausgang > > CALL init_timer3 ;Timer initialisieren > > MOV R14,#30 ;sleep(30) > CALL sleep > CALL check_bf > > BCLR P1L.0 ;Funktionsmodus > MOV R14,#10 > CALL sleep > ;CALL check_bf > > > MOV R14,#20 ;sleep(2) > CALL sleep > ;CALL check_bf > > > MOV R2,#30h ;8-Bit Modus > CALL lcd_write_nibble > MOV R14,#20 ;sleep(2) > CALL sleep > CALL check_bf > MOV R2,#08h ;2-zeilig > CALL lcd_write_nibble > MOV R14,#20 ;sleep(2) > CALL sleep > CALL check_bf > MOV R2,#20h ;4-Bit, 1-zeilig, 5x8-Punkt > CALL lcd_write_nibble > MOV R14,#20 ;sleep(2) > CALL sleep > CALL check_bf > > > ;MOV R2,#20h+8h ;Function_Mode+Two_Line > MOV R2,#28h > CALL lcd_write_4_Bit > MOV R14,#50 ;Sleep 5 > CALL sleep > CALL check_bf > ;MOV R2,#20h+8h ;Function_Mode+Two_Line > MOV R2,#28h > CALL lcd_write_4_Bit > MOV R14,#200 ;Sleep 2 > CALL sleep > CALL check_bf > MOV R2,#40 ;Entry_Mode > CALL lcd_write_4_Bit > MOV R14,#20 ;Sleep 2 > CALL sleep > CALL check_bf > MOV R2,#400 ;Entry_Mode > CALL lcd_write_4_Bit > MOV R14,#20 ;Sleep 2 > CALL sleep > CALL check_bf > ;MOV R2,#8h+4h ;display+display_on > MOV R2,#0Ch > CALL lcd_write_4_Bit > MOV R14,#20 ;Sleep 2 > CALL sleep > CALL check_bf > MOV R2,#80h ;Set DDRAM > CALL lcd_write_4_Bit > MOV R14,#20 ;Sleep 2 > CALL sleep > CALL check_bf > > BSET P1L.0 ;Datenmodus > MOV R14,#10 > CALL sleep ;Sleep 1 > CALL check_bf > > BCLR P1L.0 ;Funktionsmodus > MOV R14,#100 > CALL sleep ;Sleep 1 > CALL check_bf > > MOV R2,#1 ;Clear Display > CALL lcd_write_4_Bit > > MOV R14,#100 > CALL sleep ;1Sek warten > CALL check_bf > > MOV R2,#0Fh ;Cursor einschalten > CALL lcd_write_4_Bit > > MOV R14,#1000 > CALL sleep ;1Sek warten > CALL check_bf > > > BSET P1L.0 ;Datenmodus > MOV R14,#10 > CALL sleep ;Sleep 1 > CALL check_bf > > ;BSET P1L.0 ;Datenmodus > ;MOV R14,#1000 > ;CALL sleep > > MOV R2,#10101011b > CALL lcd_write_4_Bit > > > > > endl: JMP endl ;Endlosschleife > > lcd_write_nibble: > ;Daten in R2 > BCLR P1L.1 ;Schreibmodus > MOV R14,#10 > CALL sleep > ;CALL check_bf > > AND R2,#0F0h ;Low-Nibble loeschen > > MOV R1,P1L ;High-Nibble loeschen > AND R1,#0Fh > ;AND P1L,R1 > > ;SHR R2,#4 ;->Low-Nibble > ;MOV P1L,R2 ;Set Nibble > > OR R1,R2 ;Set Nibble > MOV P1L,R1 > > BSET P1L.2 ;Pulse > MOV R3,#800 ;8xNOP > CALL nop_wait > ;CALL check_bf > > BCLR P1L.2 > MOV R14,#60 > CALL sleep ;sleep 6ms > ;CALL check_bf > > RET > > lcd_write_4_Bit: > ;Daten in R2 > BCLR P1L.1 ;Schreibmodus > MOV R4,R2 ;Temp > > ;Daten - Low-Nibble loeschen > AND R2,#0F0h > > ;P1L > MOV R1,P1L ;High-Nibble loeschen > AND R1,#0Fh > > OR R1,R2 ;Set Nibble > MOV P1L,R1 > > > > MOV R14,#10 > CALL sleep > > > ;AND R2,#0F0h ;Low-Nibble loeschen > ;SHR R2,#4 ;->Low-Nibble > ;MOV P1L,R2 ;Set Nibble > > BSET P1L.2 ;Pulse > MOV R3,#800 > CALL nop_wait > BCLR P1L.2 > CALL nop_wait > > ;CALL check_bf > > ;Low-Nibble of Byte > MOV R2,R4 ;Temp->R2 > AND R2,#0Fh ;HIGH-Nibble loeschen > SHL R2,#4 ;Low->High-Nibble > > ;P1L > MOV R1,P1L > AND R1,#0Fh ;High-Nibble loeschen > > OR R2,R1 > MOV P1L,R2 ;Set Nibble > > MOV R14,#100 > CALL sleep > > > BSET P1L.2 ;Pulse > MOV R3,#800 > CALL nop_wait > BCLR P1L.2 > CALL nop_wait > > ;CALL check_bf > > RET > > > check_bf: ;BCLR P1L.0 > ;BSET P1L.1 > wait_bf: ;JB P1L.7,wait_bf > RET > > > nop_wait: > ;Anzahl der OP in R3 > CMPD1 R3,#0 ;Vergleich R3 mit 0 und Dek. um 1 > JMPR cc_NE,nop_wait > RET > > > > > > > > ;---------------------------------------------------------------------- > ;Warte-Routine (R14*1 ms) > ;---------------------------------------------------------------------- > sleep: MOV T3,#0 > BSET T3R > > sl_loop: CMPD1 R14,#0 ;R14==0?, R14=R14-1 > JMPR CC_EQ, sl_end ;Wartezeit beendet=>sl_end > CALL timer3 ;1 ms warten > JMP sl_loop ;zum Schleifenanfang > > ;Ende der Sleepzeit > sl_end: BCLR T3R ;Timer beenden > RET ;Rcksprung > > ;Timerschleife > timer3: > MOV R4,T3 ;Timer 7 in r4 laden > CMP R4,#156 ;Periodenende? > JMPR cc_UGE, timeout ;wenn ja -> timeout > JMP timer3 ;weiter prfen > > ;Timerberlauf > timeout: MOV T3,#0 ;Timer zurcksetzen > RET ;Rcksprung in sl_loop > > pa4cc2 ENDP > > code_s ENDS > END > </asm> > > Vielen Dank schonmal für eure Hilfe > > Gruß > > Thomas
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB