program test1 dim n as byte dim por as byte[3] dim i as byte dim Puffer as byte [8] 'Hier werden die Daten vom Empfangspuffer abgelegt dim treffer as byte 'Vorzeichen erkannt? dim bsegment as byte 'B-Segment nötig? 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 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 PORTA.2 = 1 '10er Stelle an PORTA.1 = 1 PORTA.0 = 0 PORTA.4 = BSeg(por[0]) PORTB = por[0] delay_ms(5) PORTA.2 = 1 '10er Stelle aus PORTA.1 = 1 PORTA.0 = 1 PORTA.4 = 1 PORTB = %11111111 delay_ms(1) PORTA.2 = 1 '1er Stelle an PORTA.1 = 0 PORTA.0 = 1 PORTA.4 = BSeg(por[1]) PORTB = por[1] delay_ms(5) PORTA.2 = 1 '1er Stelle aus PORTA.1 = 1 PORTA.0 = 1 PORTA.4 = 1 PORTB = %11111111 delay_ms(1) '1. Nachkomma Stelle an PORTA.2 = 0 PORTA.1 = 1 PORTA.0 = 1 PORTA.4 = BSeg(por[2]) PORTB = por[2] delay_ms(5) PORTA.2 = 1 '1. Nachkomma Stelle aus PORTA.1 = 1 PORTA.0 = 1 PORTA.4 = 1 PORTB = %11111111 delay_ms(1) TMR0 = 0 'Interrupt wieder frei geben INTCON = $20 end sub main: CMCON = $7 ' Alle I/O Ports digital PORTA = 255 ' 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 bsegment=1 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 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 end if end if 'Digitalanzeige ansteuern por[0] = Mask(Puffer[3]) '10er Stelle por[1] = Mask(Puffer[4]) '1er Stelle por[2] = Mask(Puffer[6]) '1. Nachkommastelle wend end.