Ensamblaje de mezcla y C [cerrado]

-4

¿Es posible usar una mezcla de estos 2?

Usando un pic4550 y mplabc18

Digamos que tengo un microcontrolador, que en mi puerto B (B0 B1 B2 B3 B4 B5 B6 B7) 1 byte, lo puse a '00000001'

¿Es posible asignar ese valor a un valor int de C y luego realizar operaciones lógicas en C, como un XOR?

Digamos mi resultado final al XORAR los datos del puerto B con los datos del puerto A, termina siendo Remanent = '10000000', ahora quiero generar ese valor en los puertos C y E en mi microcontrolador utilizando una combinación de C y montaje

  void main(void)
  {
  TRISA = 1;   //Pto A as input (A0 A1 A2 A3) Polinomio
  TRISB = 1;   //Pto B as input (B0 B1 B2 B3 B4 B5 B6 B7) Byte
  TRISC = 0    //Pto C as output  (C4 C5 C6 C7) Outpout
  TRISE = 0;   //Pto E as output  (D0 D1 D2 D3 D4 D5 D6 D7) Output

 while(1){
       //Inicio del codigo
    PORTA = int Polinomio;
    PORTB = int Byte;}
    }

si algo como esto es posible, ¿cuál es la forma correcta de codificar utilizando una combinación de ensamblaje y C en el mismo código?

    
pregunta GoatZero

2 respuestas

3

Por lo general, no es necesario que se ocupe de los comandos de ensamblaje directamente. Habrá macros específicas del compilador y del dispositivo predefinidas para acceder a los registros de hardware como PORT y TRIS (en un PIC), < em> pero ignorar por completo la hoja de datos de hardware es una receta para los problemas. Por ejemplo, rápidamente descubrirá que los pines tienen múltiples funciones y que el valor predeterminado puede no ser lo que necesita.

Un ejemplo de un archivo de encabezado: PORTA equ 0005h

Como ya sabrá, "PORTA" no es parte del estándar C, pero el equ anterior (una directiva de preprocesador similar a un #define en C) en un archivo de encabezado le permite usar la etiqueta PORTA sin preocuparse sobre la dirección hexadecimal exacta a la que se refiere.

También encontrarás macros en C como esta

bit volátil RA0 @ ((sin firma) & PORTA * 8) +0;

... que le permite utilizar C asignar declaraciones en bits individuales de (en este caso) PORTA, por ejemplo:

RA0 = 1;

Debes estudiar el manual del compilador, los ejemplos y los archivos de encabezado para descubrir cómo hacer esto en tu compilador.

La inmersión en lenguaje ensamblador (ya sea en línea o vinculando rutinas de lenguaje ensamblador) a menudo es innecesaria con los procesadores modernos, incluso en las partes más críticas, como las rutinas de servicio de interrupción. Casi siempre puedes hacerlo, pero no deberías hacerlo innecesariamente.

Si estás tratando con bits individuales, es mejor usar variables sin signo en C.

    
respondido por el Spehro Pefhany
1

Sí, puede acceder a los registros asignados en memoria y hacer XOR y otras operaciones a nivel de bits en C. La mayoría de los microcontroladores tienen compiladores de C. Puede encontrar esta lista de los operadores de C útil. Aquí están los operadores bit a bit

AND: &

O: &

XOR: ^

NO: ~

No puedo enseñarte todo el lenguaje C aquí, pero hay muchos tutoriales en Internet.

    
respondido por el Adam Haun

Lea otras preguntas en las etiquetas