Dijiste "microcontrolador pequeño y no tenía interfaz, computadora, depurador, compilador o ensamblador". Bueno, puedes sobrevivir sin la computadora, depurador, compilador o ensamblador, pero debes tener algún tipo de interfaz para conectarte con el microcontrolador para cargar el programa.
Antes que nada, olvídate de cualquier lenguaje de alto nivel como C. Luego, la forma más fácil es escribir tu programa en lenguaje ensamblador, pero no uses el ensamblador para traducirlo al código de máquina. En su lugar, busque cada una de las instrucciones de ensamblaje en el manual de programación, encuentre su codificación hexadecimal equivalente y escríbala.
Tendrá que asignar sus propias variables, para que pueda completar las direcciones apropiadas en la parte del operando de las instrucciones. También olvídate de usar la pila y el montón, demasiado trabajo. Cuando termine, tendrá un programa de máquina que se puede cargar directamente en la memoria flash del microcontrolador; tampoco se necesita un vinculador.
Debido a la falta de direcciones externas y buses de datos en casi todos los microcontroladores (ya que tomarían demasiados pines que los puertos y periféricos de E / S necesitan), prácticamente todos los microcontroladores están programados a través de una interfaz especial como esta:
Normalmente, el "programador" de la izquierda estaría conectado a una PC, que descargaría un archivo de máquina generado por un compilador / enlazador.
Sin embargo, si el programador tiene un teclado, como el siguiente:
entonces uno puede ingresar los códigos hexadecimales para un programa generado manualmente directamente en el programador, y programar el dispositivo sin necesidad de un compilador, enlazador o PC, que era lo que estaba preguntando. (El teclado también se usa para editar archivos hexadecimales y generar sumas de verificación).
De acuerdo, muy pocos programadores tienen teclados como este. Este no sería adecuado para un aficionado, ya que probablemente cuesta un par de miles de dólares.
Este programador particular programa partes antes de que se coloquen en un tablero; Las interfaces y los sockets están disponibles para varios PIC y también Atmel AVR, entre otros.