program test1 dim n as byte dim data_a as byte[3] dim data_b as byte[3] dim i as byte dim Puffer as string [12] 'Hier werden die Daten vom Empfangspuffer abgelegt dim treffer as byte 'Vorzeichen erkannt? dim Schritt as byte sub function Mask(dim num as byte) as byte 'Bitmuster für 7-Segmetanzeige erstellen select case num case 0 result = %10000010 case 1 result = %11111010 case 2 result = %01000011 case 3 result = %01100010 case 4 result = %00111010 case 5 result = %00100110 case 6 result = %00000110 case 7 result = %11110010 case 8 result = %00000010 case 9 result = %00100010 case 99 result = %01111111 'trick für sonderzeichen end select 'case end end sub sub function BSeg(dim num as byte) as byte 'Wird das B-Segment der Anzeige benötigt? select case num case 5,6 result = 1 case else result = 0 end select end sub sub procedure interrupt 'Multiplexen der Anzeige -> Routine wird ca 122 mal je Sek aufgerufen PORTA.2 = 1 'alles aus PORTA.1 = 1 PORTA.0 = 1 ' Neue Segmentdaten PORTA.4 = data_a[Schritt] PORTB = data_b[Schritt] select case Schritt case 0 PORTA.0 = 0 '10er Stelle an case 1 PORTA.1 = 0 '1er Stelle an case 2 PORTA.2 = 0 '1. Nachkomma Stelle an end select Schritt = Schritt + 1 IF Schritt > 2 then Schritt = 0 end if TMR0 = 0 'Interrupt wieder frei geben INTCON = $20 end sub main: CMCON = $7 ' Alle I/O Ports digital PORTA = 0 ' initialize porte to 255 PORTB = 0 ' initialize portb to 255 TRISA = %00000000 ' designate porta as input TRISB = %00000000 ' designate portb as output INTCON = $A0 TMR0 = 0 OPTION_REG = $80 'Variablen vorab initialisieren n=0 treffer = 0 Puffer[3]=99 Puffer[4]=99 Puffer[6]=99 Usart_init(9600) ' Initialize USART module (8 bit, 2400 baud rate, no parity bit... while true if Usart_Data_Ready = 1 then 'Daten eingetroffen? i = Usart_Read 'Ja -> UART-Puffer auslesen (ein Zeichen) 'Auf Startkennung (=Vorzeichen + oder -) warten if i = 43 then '+ ? ASCII-Code "+" =43 treffer = 1 PORTA.3 = 1 'Bei + "Minus-LED" aus end if if i = 45 then 'oder - ? ASCII-Code "-" =45 treffer = 1 PORTA.3 = 0 'Bei - "Minus-LED" an end if if treffer = 1 then 'Puffer füllen 'Usart_Read_Text(puffer, delim)'bis LF n = n+1 Puffer [n]=i - 48 'Ankommendes ASCII-Zeichen nach Byte wandeln end if if n >= 7 then 'Alle Zeichen eingetroffen? n = 0 treffer = 0 'Neue Daten berechnen data_b[0] = Mask(Puffer[3]) '10er Stelle data_b[1] = Mask(Puffer[4]) '1er Stelle data_b[2] = Mask(Puffer[6]) '1. Nachkommastelle data_a[0] = Bseg(Puffer[3]) '10er Stelle data_a[1] = Bseg(Puffer[4]) '1er Stelle data_a[2] = Bseg(Puffer[6]) '1. Nachkommastelle end if end if wend end.