Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: 8 bit Anzeige ??

  1. #11
    Registriert seit
    14.01.2004
    Ort
    Hattorf
    Beiträge
    3.201
    Danke
    297
    Erhielt 311 Danke für 266 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    bei S7 ist ein Umwandler dabei Integer zu BCD, der kann aber nur ±999 darstellen, müßtes also noch etwas tricksen oder den Integer in DI wandeln und dann in BCd DI-BCD das wäre bis 7Stellen. Latch bedeutet speichern, das heißt hierbei die 4 BCD Leitungen von den Anzeigen liegen alle paralell, nun mußt Du ein Programm dafür schreiben das jede Dezimalstelle nacheinander aufruft, sobald z.B. die Zehnerstelle dran ist wird die 2. BCD Anzeige gespeichert, bei Hunderter die 3. usw. so könnte man auch mit einer Anzeige nacheinander den Wert darstellen, müßtes dann nur 5 Ausgänge beobachten, z.B. A0.0 sind die Einerstellen, A0.1 die Zehner usw.
    mfg

    dietmar

    Nichts ist so beständig wie ein Provisorium.

  2. #12
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Zitat Zitat von spsks
    Hallo,

    was ist "Latch" ?
    Ein Zwischenspeicher. Bei Anzeigen mit Latch kannst du mehrere an den gleichen Ausgängen betreiben: Du gibst zuerst den Wert für die 1.Anzeige auf die Ausgänge. Über einen weiteren Ausgang gibst du dann der Anzeige einen Impuls, worauf sie die Daten ins Latch übernimmt.
    Danach gibst du den Wert für die 2.Anzeige auf die Ausgänge. Die erste ändert sich nicht, sondern zeigt weiterhin an, was im Latch gespeichert wurde. Über einen weiteren Ausgang gibst du dann der 2. Anzeige einen Impuls, worauf sie die Daten ins Latch übernimmt.
    Zitat Zitat von spsks
    Würde es funktionieren, wenn ich der SPS sage, sie solle es nach BCD umwandeln? Da ist doch ein FB integriert.
    Ja, schon, aber du brauchst dann zusätzliche Ausgänge an der SPS, die nur für die Anzeigen da sind.

    Dann habe ich aber nur eine 2-stellige Anzeige.
    Würde teilweise reichen, aber nicht immer.

    Gruß Klaus[/quote]

  3. #13
    Registriert seit
    14.01.2004
    Ort
    Hattorf
    Beiträge
    3.201
    Danke
    297
    Erhielt 311 Danke für 266 Beiträge

    Standard

    Hallo,
    habe noch mal alles durcchgelesen, wenn Du eine S5-90/95/100/115 hast wirst Du Probleme beim Wandeln bekommen, alternativ Lösungen: OP 3993III (wobei hier ein DB6 in der Steuerung erstellt werden Muß) oder ein PG 615 (dort wird dann aber nur Hex angezeigt, glaube ich), beides so um die30-50€ bei ebay und keine Bastelei, keine Ausgänge die blockiert werden, und weitere Beobachtungs und Steuermöglichkeiten.
    mfg

    dietmar

    Nichts ist so beständig wie ein Provisorium.

  4. #14
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.262
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard

    8 Bit reichen für eine zweistellig BCD-7-Segment-Anzeige (z.Bsp. bei Konrad zu beziehen) (Step7 --> wandeln mit Standard-FC, Step5 --> kleines Vorbereitungsprogramm + FB241 (BCD-Wandlung).
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  5. #15
    Registriert seit
    11.07.2004
    Beiträge
    1.597
    Danke
    10
    Erhielt 213 Danke für 183 Beiträge

    Standard

    also mit PIC Controller könnte das so aussehen (erstellt im Parsic, nur im Simulator getestet!):

    Code:
    ; Source created with Parsic Version 3.x
    
    ; at              : 01.09.2005 13:33:56
    
    
    ; Project File    : Z:\8Bit.PIC
    
    ; Project Version : 1.0.8
    
    ; Created         : 24.07.2001 15:00:00
    
    ; Last change     : 01.09.2005 13:29:00
    
    	PROCESSOR 16F877
    
    	INCLUDE P16F877.INC
    
    	RADIX DEC
    
    
    	__IDLOCS H'0100'
    
    	__CONFIG _CP_OFF & _PWRTE_ON & _WDT_ON & _BODEN_ON & _XT_OSC & _LVP_OFF & _CPD_OFF & _DEBUG_OFF
    
    ; Diverses
    
    ZERO	EQU Z	; ZERO-Flag
    CARRY	 EQU C	; CARRY-Flag
    
    
    ; Variable
    
    S1	= 32	; located in Bank 0
    TR1	= 33	; located in Bank 0
    TR1_HI	= 34	; located in Bank 0
    S7	= 35	; located in Bank 0
    S0	= 36	; located in Bank 0
    S6	= 37	; located in Bank 0
    OS1_FD	= 38	; located in Bank 0
    OS2_FD	= 39	; located in Bank 0
    OS3_FD	= 40	; located in Bank 0
    ZV1	= 41	; located in Bank 0
    ZV1_FD	= 42	; located in Bank 0
    Z100	= 43	; located in Bank 0
    S2	= 44	; located in Bank 0
    S4	= 45	; located in Bank 0
    Z10	= 46	; located in Bank 0
    S5	= 47	; located in Bank 0
    Z1	= 48	; located in Bank 0
    S3	= 49	; located in Bank 0
    RAM	= 50	; located in Bank 0
    SYS_TMP1	= 115	; located in Bank 0, 1, 2, 3
    SYS_WSAV	= 116	; located in Bank 0, 1, 2, 3
    SYS_SSAV	= 117	; located in Bank 0, 1, 2, 3
    SYS_PSAV	= 118	; located in Bank 0, 1, 2, 3
    SYS_TMP2	= 119	; located in Bank 0, 1, 2, 3
    SYS_TMP3	= 120	; located in Bank 0, 1, 2, 3
    SYS_TMP4	= 121	; located in Bank 0, 1, 2, 3
    
    	ERRORLEVEL -302	; disable warning (Bankswitching)
    	ERRORLEVEL -306	; disable warning (Pageswitching)
    
    ;****************************************
    ;Programmanfang
    ;****************************************
    
    	ORG 0
    
    	CLRF STATUS	; switch to RAM-Bank 0
    	MOVLW HIGH SYS_INIT	; set page
    	MOVWF PCLATH
    	GOTO SYS_INIT
    
    ;****************************************
    ;Interrupt-Adress
    ;****************************************
    
    	MOVWF SYS_WSAV	; save register
    	SWAPF STATUS,W
    	CLRF STATUS	; bank 0
    	MOVWF SYS_SSAV
    	MOVFW PCLATH
    	MOVWF SYS_PSAV
    	CLRF PCLATH
    
    	BCF INTCON,T0IF	; Interrupt quitieren
    
    	BCF STATUS,RP0	; Bank 0
    	BCF STATUS,RP1	; Bank 0
    	INCFSZ TR1,F
    	GOTO SYS_INT_LABEL_0
    	INCF TR1_HI,F
    
    SYS_INT_LABEL_0
    
    EXITINT
    	MOVFW SYS_PSAV
    	MOVWF PCLATH
    
    	SWAPF SYS_SSAV,W	; Register zurück
    	MOVWF STATUS
    	SWAPF SYS_WSAV,F
    	SWAPF SYS_WSAV,W
    
    	RETFIE	; RETurn From Interrupt and Enable GIE
    
    
    ;****************************************
    ; Multiplication 8 - Bit
    ;****************************************
    
    SYSMUL8
    	CLRF SYS_TMP3
    	MOVLW 8
    	MOVWF SYS_TMP4
    
    SYSMUL8_1
    	MOVFW SYS_TMP1
    	RRF SYS_TMP2,F
    
    	BTFSC STATUS,CARRY
    	ADDWF SYS_TMP3,F
    
    	RLF SYS_TMP1,F
    	DECFSZ SYS_TMP4,F
    
    	GOTO SYSMUL8_1
    
    	RETURN
    
    ;****************************************
    ; Division 8 - Bit
    ;****************************************
    
    SYSDIV8
    	MOVF SYS_TMP2,F
    	BTFSC STATUS,ZERO
    	GOTO SYSDIV8_ERROR
    	CLRF SYS_TMP3	; Ergebnis löschen
    	MOVLW 1
    	MOVWF SYS_TMP4
    
    SYSDIV8_0
    	BTFSC SYS_TMP2,7	; OP2 linksbündig
    	GOTO SYSDIV8_1
    	INCF SYS_TMP4,F
    	BCF STATUS,CARRY
    	RLF SYS_TMP2,F
    	GOTO SYSDIV8_0
    
    SYSDIV8_1
    	MOVFW SYS_TMP2	; vergleichen
    	SUBWF SYS_TMP1,F	; F-W -> W
    
    	BTFSC STATUS,CARRY
    	GOTO SYSDIV8_2
    	ADDWF SYS_TMP1,F	; F+W -> F
    	BCF STATUS,CARRY
    
    SYSDIV8_2
    	RLF SYS_TMP3,F
    	RRF SYS_TMP2,F
    	DECFSZ SYS_TMP4,F
    	GOTO SYSDIV8_1
    
    	RETURN
    
    SYSDIV8_ERROR
    	MOVLW 255
    	MOVWF SYS_TMP3
    	RETURN
    
    ;****************************************
    ; Subroutines
    ;****************************************
    
    
    ;****************************************
    ;Initialisierung
    ;****************************************
    
    
    SYS_INIT
    
    	MOVLW B'00100000'
    	MOVWF INTCON
    
    ; Ausgangs-Pegel setzen, bevor die Richtung gesetzt wird
    
    	BCF STATUS,RP0	; Bank 0
    	BCF STATUS,RP1	; Bank 0
    	MOVLW B'00000000'
    	MOVWF PORTA
    
    	MOVLW B'01111111'
    	MOVWF PORTB
    
    	MOVLW B'00000000'
    	MOVWF PORTC
    
    	MOVLW B'00000000'
    	MOVWF PORTD
    
    	MOVLW B'00000000'
    	MOVWF PORTE
    
    	MOVLW 143
    	BSF STATUS,RP0	; Bank 1
    	MOVWF OPTION_REG
    
    	MOVLW 6	; all Digital
    	MOVWF ADCON1
    
    ; Richtung setzen
    
    	MOVLW B'11111111'
    	MOVWF TRISA
    
    	MOVLW B'10000000'
    	MOVWF TRISB
    
    	MOVLW B'11111000'
    	MOVWF TRISC
    
    	MOVLW B'11111111'
    	MOVWF TRISD
    
    	MOVLW B'00000111'
    	MOVWF TRISE
    
    ; init vars
    
    
    ; Clear RAM
    
    	BCF STATUS,IRP
    	MOVLW 32
    	MOVWF FSR
    CR1
    	CLRF INDF
    	INCF FSR,F
    	
    	BTFSS FSR,7
    	GOTO CR1
    	BSF FSR,5
    CR2
    	CLRF INDF
    	INCF FSR,F
    	MOVLW H'F0'
    	SUBWF FSR,W
    	BTFSS STATUS,ZERO
    	GOTO CR2
    	BSF STATUS,IRP
    	MOVLW 16
    	MOVWF FSR
    CR3
    	CLRF INDF
    	INCF FSR,F
    	MOVLW H'70'
    	SUBWF FSR,W
    	BTFSS STATUS,ZERO
    	GOTO CR3
    	MOVLW 144
    	MOVWF FSR
    CR4
    	CLRF INDF
    	INCF FSR,F
    	MOVLW H'F0'
    	SUBWF FSR,W
    	BTFSS STATUS,ZERO
    	GOTO CR4
    
    
    	BCF STATUS,RP0	; Bank 0
    	BCF STATUS,RP1	; Bank 0
    	CLRF TMR0
    	BCF INTCON,T0IF
    	BSF INTCON,GIE	; Interrupt freigeben
    
    ;**********************************
    ;******* Haupt-Programm ***********
    ;**********************************
    
    MAIN
    
    	CLRWDT
    
    ;***************************************************
    ; Unterprogramm BIN_TO_7SEG aufrufen
    ;***************************************************
    
    	MOVLW HIGH BIN_TO_7SEG	; set page
    	MOVWF PCLATH
    	BCF STATUS,RP0	; Bank 0
    	BCF STATUS,RP1	; Bank 0
    	MOVFW S0
    
    	CALL BIN_TO_7SEG
    
    	BCF STATUS,RP0	; Bank 0
    	BCF STATUS,RP1	; Bank 0
    	MOVWF S1
    
    	BSF INTCON,GIE
    	BCF PCLATH,3	; Page 0
    	BCF PCLATH,4	; Page 0
    ;***************************************************
    ; Timer -> TR1
    ;***************************************************
    
    	MOVLW 0	; Test auf >=
    	SUBWF TR1_HI,W	;F-W -> W
    	BTFSS STATUS,ZERO
    	GOTO LABEL_TR1_CHECK
    	MOVLW 8
    	SUBWF TR1,W	;F-W -> W
    LABEL_TR1_CHECK
    	BTFSS STATUS,CARRY
    	GOTO LABEL_TR1_ENDE
    
    LABEL_TR1_RESET
    	MOVLW 0	; Test auf >=
    	SUBWF TR1_HI,F	;F-W -> F
    	MOVLW 8
    	SUBWF TR1,F	;F-W -> F
    	BTFSS STATUS,CARRY
    	DECF TR1_HI,F
    
    LABEL_TR1_SET	; toggel output
    	BTFSC S7,0
    	GOTO LABEL_TR1_CLR
    	BSF S7,0
    	GOTO LABEL_TR1_ENDE
    LABEL_TR1_CLR
    	BCF S7,0
    LABEL_TR1_ENDE
    
    ;***************************************************
    ; Multiplexer -> MX1
    ;***************************************************
    
    	CLRF SYS_TMP1
    	BCF STATUS,RP0	; Bank 0
    	BCF STATUS,RP1	; Bank 0
    	MOVFW ZV1
    	BTFSS STATUS,ZERO
    	GOTO LABEL_MX1_CHECKCONTROL1
    
    	MOVFW Z1
    	MOVWF S0
    	GOTO LABEL_MX1_END
    
    LABEL_MX1_CHECKCONTROL1
    	INCF SYS_TMP1,F
    	BCF STATUS,RP0	; Bank 0
    	BCF STATUS,RP1	; Bank 0
    	MOVFW ZV1
    	SUBWF SYS_TMP1,W
    	BTFSS STATUS,ZERO
    	GOTO LABEL_MX1_CHECKCONTROL2
    
    	MOVFW Z10
    	MOVWF S0
    	GOTO LABEL_MX1_END
    
    LABEL_MX1_CHECKCONTROL2
    	INCF SYS_TMP1,F
    	BCF STATUS,RP0	; Bank 0
    	BCF STATUS,RP1	; Bank 0
    	MOVFW ZV1
    	SUBWF SYS_TMP1,W
    	BTFSS STATUS,ZERO
    	GOTO LABEL_MX1_CHECKCONTROL3
    
    	MOVFW Z100
    	MOVWF S0
    	GOTO LABEL_MX1_END
    
    LABEL_MX1_CHECKCONTROL3
    
    LABEL_MX1_END
    
    ;***************************************************
    ; UND - Gatter -> UG12
    ;***************************************************
    
    LABEL_UG12_1
    	BCF STATUS,RP0	; Bank 0
    	BCF STATUS,RP1	; Bank 0
    	BTFSC S6,0
    	GOTO LABEL_UG12_FALSE
    LABEL_UG12_2
    	BTFSC S6,1
    	GOTO LABEL_UG12_FALSE
    LABEL_UG12_3
    	BTFSS S6,4
    	GOTO LABEL_UG12_FALSE
    
    LABEL_UG12_TRUE
    	BSF PORTC,0
    	GOTO LABEL_UG12_ENDE
    LABEL_UG12_FALSE
    	BCF STATUS,RP0	; Bank 0
    	BCF STATUS,RP1	; Bank 0
    	BCF PORTC,0
    LABEL_UG12_ENDE
    ;***************************************************
    ; UND - Gatter -> UG13
    ;***************************************************
    
    LABEL_UG13_1
    	BTFSS S6,0
    	GOTO LABEL_UG13_FALSE
    LABEL_UG13_2
    	BTFSC S6,1
    	GOTO LABEL_UG13_FALSE
    LABEL_UG13_3
    	BTFSS S6,4
    	GOTO LABEL_UG13_FALSE
    
    LABEL_UG13_TRUE
    	BSF PORTC,1
    	GOTO LABEL_UG13_ENDE
    LABEL_UG13_FALSE
    	BCF STATUS,RP0	; Bank 0
    	BCF STATUS,RP1	; Bank 0
    	BCF PORTC,1
    LABEL_UG13_ENDE
    ;***************************************************
    ; UND - Gatter -> UG14
    ;***************************************************
    
    LABEL_UG14_1
    	BTFSC S6,0
    	GOTO LABEL_UG14_FALSE
    LABEL_UG14_2
    	BTFSS S6,1
    	GOTO LABEL_UG14_FALSE
    LABEL_UG14_3
    	BTFSS S6,4
    	GOTO LABEL_UG14_FALSE
    
    LABEL_UG14_TRUE
    	BSF PORTC,2
    	GOTO LABEL_UG14_ENDE
    LABEL_UG14_FALSE
    	BCF STATUS,RP0	; Bank 0
    	BCF STATUS,RP1	; Bank 0
    	BCF PORTC,2
    LABEL_UG14_ENDE
    ;***************************************************
    ; One Shot -> OS1
    ;***************************************************
    
    
    	BTFSS S7,0
    	GOTO LABEL_OS1_1
    	BTFSC OS1_FD,0
    	GOTO LABEL_OS1_1
    	BSF OS1_FD,0
    	BSF S6,5
    	GOTO LABEL_OS1_2
    LABEL_OS1_1
    	BCF STATUS,RP0	; Bank 0
    	BCF STATUS,RP1	; Bank 0
    	BCF S6,5
    	BTFSC S7,0
    	GOTO LABEL_OS1_2
    	BCF OS1_FD,0
    LABEL_OS1_2
    ;***************************************************
    ; One Shot -> OS2
    ;***************************************************
    
    
    	BCF STATUS,RP0	; Bank 0
    	BCF STATUS,RP1	; Bank 0
    	BTFSC S6,5
    	GOTO LABEL_OS2_1
    	BTFSC OS2_FD,0
    	GOTO LABEL_OS2_1
    	BSF OS2_FD,0
    	BSF S6,6
    	GOTO LABEL_OS2_2
    LABEL_OS2_1
    	BCF STATUS,RP0	; Bank 0
    	BCF STATUS,RP1	; Bank 0
    	BCF S6,6
    	BTFSS S6,5
    	GOTO LABEL_OS2_2
    	BCF OS2_FD,0
    LABEL_OS2_2
    ;***************************************************
    ; One Shot -> OS3
    ;***************************************************
    
    
    	BCF STATUS,RP0	; Bank 0
    	BCF STATUS,RP1	; Bank 0
    	BTFSC S6,6
    	GOTO LABEL_OS3_1
    	BTFSC OS3_FD,0
    	GOTO LABEL_OS3_1
    	BSF OS3_FD,0
    	BSF S6,7
    	GOTO LABEL_OS3_2
    LABEL_OS3_1
    	BCF STATUS,RP0	; Bank 0
    	BCF STATUS,RP1	; Bank 0
    	BCF S6,7
    	BTFSS S6,6
    	GOTO LABEL_OS3_2
    	BCF OS3_FD,0
    LABEL_OS3_2
    ;***************************************************
    ; RS-FLIP-FLOP -> RS1
    ;***************************************************
    
    	BCF STATUS,RP0	; Bank 0
    	BCF STATUS,RP1	; Bank 0
    	BTFSC S6,5
    	GOTO LABEL_RS1_RESET
    	BTFSS S6,7
    	GOTO LABEL_RS1_ENDE
    	BSF S6,4	; Ausgang setzen
    	GOTO LABEL_RS1_ENDE
    LABEL_RS1_RESET
    	BCF STATUS,RP0	; Bank 0
    	BCF STATUS,RP1	; Bank 0
    	BCF S6,4	; Ausgang zurücksetzen
    LABEL_RS1_ENDE
    
    ;***************************************************
    ; Zähler -> ZV1
    ;***************************************************
    
    	BCF STATUS,RP0	; Bank 0
    	BCF STATUS,RP1	; Bank 0
    	BTFSS S6,2	; Reset ?
    	GOTO LABEL_ZV1_COUNT
    	CLRF ZV1
    	GOTO LABEL_ZV1_SETOUT
    
    LABEL_ZV1_COUNT
    
    ; Test auf negative Flanke
    
    	BCF STATUS,RP0	; Bank 0
    	BCF STATUS,RP1	; Bank 0
    	BTFSC S6,5
    	GOTO LABEL_ZV1_SETFD
    	BTFSS ZV1_FD,0
    	GOTO LABEL_ZV1_SETFD
    
    	BCF ZV1_FD,0
    
    
    	BTFSC S6,3	; Vorwärts oder Rückwärts ?
    	GOTO LABEL_ZV1_BACKWARD
    
    	INCF ZV1,F
    	GOTO LABEL_ZV1_SETOUT
    
    LABEL_ZV1_BACKWARD
    	BCF STATUS,RP0	; Bank 0
    	BCF STATUS,RP1	; Bank 0
    	DECF ZV1,F
    
    LABEL_ZV1_SETOUT
    
    ; Output Q0
    
    	BCF STATUS,RP0	; Bank 0
    	BCF STATUS,RP1	; Bank 0
    	BTFSS ZV1,0
    	GOTO LABEL_ZV1_SETOUT0
    	BSF S6,0
    	GOTO LABEL_ZV1_SETOUT0_END
    LABEL_ZV1_SETOUT0
    	BCF S6,0
    LABEL_ZV1_SETOUT0_END
    
    ; Output Q1
    
    	BTFSS ZV1,1
    	GOTO LABEL_ZV1_SETOUT1
    	BSF S6,1
    	GOTO LABEL_ZV1_SETOUT1_END
    LABEL_ZV1_SETOUT1
    	BCF S6,1
    LABEL_ZV1_SETOUT1_END
    
    ; Output Q2
    
    	BTFSS ZV1,2
    	GOTO LABEL_ZV1_SETOUT2
    	BSF S6,2
    	GOTO LABEL_ZV1_SETOUT2_END
    LABEL_ZV1_SETOUT2
    	BCF S6,2
    LABEL_ZV1_SETOUT2_END
    
    
    LABEL_ZV1_SETFD
    
    ; Test auf positive Flanke
    
    	BCF STATUS,RP0	; Bank 0
    	BCF STATUS,RP1	; Bank 0
    	BTFSS S6,5
    	GOTO LABEL_ZV1_EXIT
    	BSF ZV1_FD,0
    
    LABEL_ZV1_EXIT
    
    ;***************************************************
    ; Verteiler -> BV1
    ;***************************************************
    
    	BTFSC S1,0
    	GOTO LABEL_BV1_0
    	BSF PORTB,0
    	GOTO LABEL_BV1_0_END
    LABEL_BV1_0
    	BCF PORTB,0
    LABEL_BV1_0_END
    
    ;**********************************************
    
    	BTFSC S1,1
    	GOTO LABEL_BV1_1
    	BSF PORTB,1
    	GOTO LABEL_BV1_1_END
    LABEL_BV1_1
    	BCF PORTB,1
    LABEL_BV1_1_END
    
    ;**********************************************
    
    	BTFSC S1,2
    	GOTO LABEL_BV1_2
    	BSF PORTB,2
    	GOTO LABEL_BV1_2_END
    LABEL_BV1_2
    	BCF PORTB,2
    LABEL_BV1_2_END
    
    ;**********************************************
    
    	BTFSC S1,3
    	GOTO LABEL_BV1_3
    	BSF PORTB,3
    	GOTO LABEL_BV1_3_END
    LABEL_BV1_3
    	BCF PORTB,3
    LABEL_BV1_3_END
    
    ;**********************************************
    
    	BTFSC S1,4
    	GOTO LABEL_BV1_4
    	BSF PORTB,4
    	GOTO LABEL_BV1_4_END
    LABEL_BV1_4
    	BCF PORTB,4
    LABEL_BV1_4_END
    
    ;**********************************************
    
    	BTFSC S1,5
    	GOTO LABEL_BV1_5
    	BSF PORTB,5
    	GOTO LABEL_BV1_5_END
    LABEL_BV1_5
    	BCF PORTB,5
    LABEL_BV1_5_END
    
    ;**********************************************
    
    	BTFSC S1,6
    	GOTO LABEL_BV1_6
    	BSF PORTB,6
    	GOTO LABEL_BV1_6_END
    LABEL_BV1_6
    	BCF PORTB,6
    LABEL_BV1_6_END
    
    ;**********************************************
    
    
    ;***************************************************
    ; GND
    ;***************************************************
    
    	BCF S6,3	; immer Low
    
    ;***************************************************
    ;AF1
    ;***************************************************
    
    	MOVFW S3
    	MOVWF SYS_TMP1
    	MOVLW 100
    	MOVWF SYS_TMP2
    	MOVLW HIGH SYSDIV8
    	MOVWF PCLATH
    	CALL SYSDIV8
    	MOVLW HIGH LABEL_AF1
    	MOVWF PCLATH
    LABEL_AF1
    	MOVFW SYS_TMP3
    	MOVWF Z100
    
    LABEL_AF1_EXIT
    ;***************************************************
    ;AF2
    ;***************************************************
    
    	MOVFW Z100
    	MOVWF SYS_TMP1
    	MOVLW 100
    	MOVWF SYS_TMP2
    	MOVLW HIGH SYSMUL8
    	MOVWF PCLATH
    	CALL SYSMUL8
    	MOVLW HIGH LABEL_AF2
    	MOVWF PCLATH
    LABEL_AF2
    	MOVFW SYS_TMP3
    	MOVWF S2
    
    LABEL_AF2_EXIT
    ;***************************************************
    ;AF3
    ;***************************************************
    
    	MOVFW S2
    	SUBWF S3,W	; F - W -> W
    	MOVWF S4
    
    LABEL_AF3_EXIT
    ;***************************************************
    ;AF4
    ;***************************************************
    
    	MOVFW S4
    	MOVWF SYS_TMP1
    	MOVLW 10
    	MOVWF SYS_TMP2
    	MOVLW HIGH SYSDIV8
    	MOVWF PCLATH
    	CALL SYSDIV8
    	MOVLW HIGH LABEL_AF4
    	MOVWF PCLATH
    LABEL_AF4
    	MOVFW SYS_TMP3
    	MOVWF Z10
    
    LABEL_AF4_EXIT
    ;***************************************************
    ;AF5
    ;***************************************************
    
    	MOVFW Z10
    	MOVWF SYS_TMP1
    	MOVLW 10
    	MOVWF SYS_TMP2
    	MOVLW HIGH SYSMUL8
    	MOVWF PCLATH
    	CALL SYSMUL8
    	MOVLW HIGH LABEL_AF5
    	MOVWF PCLATH
    LABEL_AF5
    	MOVFW SYS_TMP3
    	MOVWF S5
    
    LABEL_AF5_EXIT
    ;***************************************************
    ;AF6
    ;***************************************************
    
    	MOVFW S5
    	SUBWF S4,W	; F - W -> W
    	MOVWF Z1
    
    LABEL_AF6_EXIT
    ;***************************************************
    ; Verteiler -> BV2
    ;***************************************************
    
    	MOVLW 0 
    	BTFSC PORTA,0	; IN0
    	IORLW 1
    	BTFSC PORTA,1	; IN1
    	IORLW 2
    	BTFSC PORTA,2	; IN2
    	IORLW 4
    	BTFSC PORTA,3	; IN3
    	IORLW 8
    	BTFSC PORTA,4	; IN4
    	IORLW 16
    	BTFSC PORTA,5	; IN5
    	IORLW 32
    	BTFSC PORTE,0	; IN6
    	IORLW 64
    	BTFSC PORTE,1	; IN7
    	IORLW 128
    	MOVWF S3	; OUT
    
    ;****************************************
    
    	GOTO MAIN
    
    	ORG 8175
    ;***************************************************
    ; Table -> BIN_TO_7SEG
    ;***************************************************
    
    BIN_TO_7SEG
    
    	MOVWF SYS_TMP1
    	MOVLW HIGH BIN_TO_7SEG_WERTE
    	MOVWF PCLATH
    	MOVFW SYS_TMP1
    	BCF INTCON,GIE
    	ADDWF PCL,F
    
    BIN_TO_7SEG_WERTE
    
    	RETLW 63	; // INDEX 0
    	RETLW 6	; // INDEX 1
    	RETLW 91	; // INDEX 2
    	RETLW 79	; // INDEX 3
    	RETLW 102	; // INDEX 4
    	RETLW 109	; // INDEX 5
    	RETLW 125	; // INDEX 6
    	RETLW 7	; // INDEX 7
    	RETLW 127	; // INDEX 8
    	RETLW 111	; // INDEX 9
    	RETLW 63	; // INDEX 10
    
    
    	END
    Erforderlicher PIC: PIC 16F877-20P, 40 polig, Preis bei Reichelt: 6,10 Euro. 3 Stellige 7-Segment Anzeige (Multiplex)

  6. #16
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    PIC-Code habe ich nicht drauf. Ich bezweifel aber, daß 8-bit Multiplikationen und Divisionen nötig sind. Natürlich kann der PIC das und im Sinne von wiederverwendbarem Code ist es auch ganz in Ordnung. Aber für einen Anfänger ist ein Tippfehler in der Division wahrscheinlich ein Grund zum Aufgeben. Daher hier eine einfache Art, eine Zahl zw 0 und 255 in 3 BCD-Stellen zu wandeln ohne Schleifen und Divisionsbefehle.
    S7-AWL wegen der allgemeinen Verständlichkeit hier. Verfahren geht natürlich auch auf nem PIC.
    Die Variablen =H_2, =H_2...Z_1 sind Bits, vor dem Strichsteht, zu welcher Stelle sie gehören, dahinter die Wertigkeit. Alle sollen mit 0 vorgbelegt sein.



    L =byte
    L 200
    <I // größer als 200 ?
    SPB N200 //nein, alles klar
    -I //ja, 200 abziehen
    T =byte
    SET
    = =3_2 //und Bit für 2 der Hunderter-Stelle setzen
    N200: NOP 0

    L =byte
    L 100
    <I
    SPB N100
    -I
    T =byte
    SET
    = =H_1
    N100: NOP 0
    //
    // Jetzt steht in byte nur noch eine Zahl zwischen 0 und 99
    //
    L =byte
    L 80
    <I
    SPB N280
    -I
    T =byte
    SET
    = =Z_8
    N280: NOP 0

    L =byte
    L 40
    <I
    SPB N240
    -I
    T =byte
    SET
    = =Z_4
    N240: NOP 0

    L =byte
    L 20
    <I
    SPB N220
    -I
    T =byte
    SET
    = =Z_2
    N220: NOP 0

    L =byte
    L 10
    <I
    SPB N210
    -I
    T =byte
    SET
    = =Z_1
    N210: NOP 0
    //
    // Jetzt steht in byte nur noch eine Zahl zwischen 0 und 9. Das ist die letzte Stelle
    //

  7. #17
    Registriert seit
    11.07.2004
    Beiträge
    1.597
    Danke
    10
    Erhielt 213 Danke für 183 Beiträge

    Standard

    Ich kann kein Assembler, ich benutze deshalb Parsic um mal schnell eben was zu machen. Da brauche ich auch nicht all zu viel Wissen über die jeweilgen µC haben. Der Nachteil ist halt daß man manches etwas "anders" machen muß um zum Ziel zu kommen. Wen's interessiert, hier gibt's auch eine Demoversion:
    http://www.parsic.de/

    (Aber Vorsicht, nur für's Basteln zu teuer)

  8. #18
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.262
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @Oberchefe

    Aber der C-Compiler für den PIC gefällt mit da wesentlich besser, macht auch super Code.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 23.04.2010, 06:00
  2. anzeige von db's auf dem op7
    Von linuxluder im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 25.03.2008, 09:14
  3. Anzeige FUP-AWL
    Von manas im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 02.09.2007, 11:07
  4. Cpu 315 Anzeige SF
    Von fritz67 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 04.03.2007, 20:36
  5. LED Anzeige
    Von Dirk LXXVI im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 10.08.2006, 22:01

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •