Ampliación de ingeniero de pruebas de la respuesta:
En primer lugar, un par de hechos sobre los niveles: inactivo (marca) estado de la línea debe ser de menos de -3V (y no menos de -15) cuando un RS232 compatible con el dispositivo conectado. Por el contrario, el estado de inactividad de un TTL de serie del dispositivo debe estar entre 0 y 0,8 V.
Entonces, creo que la manera más fácil de detectar que tipo de dispositivo es conectado es algo como lo siguiente:
simular este circuito – Esquema creado mediante CircuitLab
Para TTL a nivel de las señales, el aparato se tire Rx pin en la junta a 5V, y así el microcontrolador sentido pin aparecerá una lógica de alta. Cuando un RS232 compatible con dispositivo está conectado, el estado de inactividad de la línea será de entre -3V y -15V. Las dos resistencias forman un divisor, por lo que el sentido pin verá menos de 0.8 V (cuando la entrada es de -3V). D1 impide el sentido pin de pasar más de un par de cientos de milivoltios por debajo de la tierra para las señales más fuertes, y el zener D2 protege contra aportaciones positivas es mayor de +5V (RS232 espacio de estado).
Dependiendo de la velocidad en baudios el escáner usa, el circuito de arriba pueden ser suficientes para condicionar la entrada (es decir, usted podría ser capaz de conectar el micro-controlador de la RX pin y el sentido de pin a la línea etiquetada "Para uController sentido pin". La única dificultad con esto es que, RS232 utiliza voltajes negativos para representar el 1 y tensiones positivas para representar a 0, que al contrario de lo que se utiliza en TTL-tierra. Para solucionar esto, usted querrá agregar una puerta XOR, así:
simular este circuito
Ahora, el "de la uC de invertir" la línea está conectada a una salida en el micro. Cuando es alto, se invierte la señal recibida, y cuando baja la pasa normalmente.