cordial saludo,,
tan amables tengo una duda no se si podría implementarse, en este caso tengo un pic16f676 el cual tiene RA0 <>RA5 y RC0<>RC5 requiero hacer una secuencia pero de 8 bits y como a ambos puertos les faltan el 6 y el 7 estoy loco.
se podría implementar una variable y asignarle a0,a1,a2,a3,a4,a5 y agregar c0,c1 para obtener 8 bits y luego manejarla como si fuera un puerto?.
gracias de antemano.
Hay varias maneras, pero este pseudocódigo tal vez lo puedas comprender.Gracias por tu respuesta, aquí seria estar llamando la función cada que envíe un dato como si fuera a un puerto verdad?Código: C
void miPuertoDe8bits(unsigned char valor) { unsigned char i; PortA = Valor; if (valor <= 0x3F) // si valor es menor o igual a un número de 6 bits, equivale a bit 7 y bit 6 de valor están en 0 0 {.........
Hay varias maneras, pero este pseudocódigo tal vez lo puedas comprender.las variables podrian ser tipo int?Código: C
void miPuertoDe8bits(unsigned char valor) { unsigned char i; PortA = Valor; if (valor <= 0x3F) // si valor es menor o igual a un número de 6 bits, equivale a bit 7 y bit 6 de valor están en 0 0 {.........
Hay varias maneras, pero este pseudocódigo tal vez lo puedas comprender.Gracias por tu respuesta, aquí seria estar llamando la función cada que envíe un dato como si fuera a un puerto verdad?Código: C
void miPuertoDe8bits(unsigned char valor) { unsigned char i; PortA = Valor; if (valor <= 0x3F) // si valor es menor o igual a un número de 6 bits, equivale a bit 7 y bit 6 de valor están en 0 0 {.........
DominusDRRlo preguntaba porque en ccs uso "int8"
¿Por qué necesitas int que es mayor a 8 bits?
CitarDominusDRRlo preguntaba porque en ccs uso "int8"
¿Por qué necesitas int que es mayor a 8 bits?
DominusDRRsiiiii, char es igual que int
CitarDominusDRRsiiiii, char es igual que intCódigo: C++
Especificadores de tipo: unsigned define un número de 8 bits sin signo unsigned int define un número de 8 bits sin signo int define un número de 8 bits sin signo char define un número de 8 bits sin signo long define un número de 16 bits sin signo long int define un número de 16 bits sin signo signed define un número de 8 bits con signo signed int define un número de 8 bits con signo signed long define un número de 16 bits con signo float define un número de 32 bits en punto flotante short define un bit short int define un bit
cordial saludo,,
tan amables tengo una duda no se si podría implementarse, en este caso tengo un pic16f676 el cual tiene RA0 <>RA5 y RC0<>RC5 requiero hacer una secuencia pero de 8 bits y como a ambos puertos les faltan el 6 y el 7 estoy loco.
se podría implementar una variable y asignarle a0,a1,a2,a3,a4,a5 y agregar c0,c1 para obtener 8 bits y luego manejarla como si fuera un puerto?.
gracias de antemano.
#define output_AC(x) {output_a(x) ; output_c(x>>6) ;}
y para escribir los puertos: output_AC(valor8) ; #define output_AC(x) {output_a(x) ; \
output_c((x>>6) | input_c() ) ;}
#byte porta = getenv("SFR:PORTA")
#byte portc = getenv("SFR:PORTC")
struct {int8 l:6 , h:2 ;} valor ;
#define output_AC(x) {porta=x ; \
portc&=3 ; \
portc|=x.h ;}
y lo llamás: valor = 0x55 ;
.......................................
output_AC(valor) ;
Eduardo2gracias por responderme, podrías enseñarme a entender...
Lo mismo que esto último pero mas eficiente, y mas declaraciones :( :
Código: [Seleccionar]
#byte porta = getenv("SFR:PORTA")
#byte portc = getenv("SFR:PORTC")
struct {int8 l:6 , h:2 ;} valor ;
#define output_AC(x) {porta=x ; \
portc&=3 ; \
portc|=x.h ;}
y lo llamás:
Código: [Seleccionar]
valor = 0x55 ;
.......................................
output_AC(valor) ;
se podría implementar una variable y asignarle a0,a1,a2,a3,a4,a5 y agregar c0,c1 para obtener 8 bits y luego manejarla como si fuera un puerto?.No, una variable no...
Citarse podría implementar una variable y asignarle a0,a1,a2,a3,a4,a5 y agregar c0,c1 para obtener 8 bits y luego manejarla como si fuera un puerto?.No, una variable no...
Todos los metodos que te entregaron hasta ahora es Macros o funciones.... Personalmente odio las macros. Y en esas macros en realidad son "funciones" por lo que tampoco tiene mucho sentido escaparle a la funcion.
Si queres manejar los 2 puertos con una variable que tuviera bits: a5,a4,a3,a2,a1,a0,c1,c0. Es decir, pasar una variable de 8 bits y que los primeros 6 salgan por el PORTA y los 2 restantes por el PORTC
Entonces:Código: C
static inline void output_AC(x) { PORTA = (x>>2); PORTC = (PORTC & 0xFC ) | (x & 0x3);} // Para no modificar los otros bits del PORTC
Si requeris tomar los datos de los puertos y que te devuelva una variable de 8 bits entonces:Código: C
static inline int8 input_AC() { int8 aux; aux = (PORTA << 2); aux |= PORTC & 0x3 return aux;}
....Correcto, es cómodo si se trata de una rutina que vas a compilar para diferentes micros.
gracias por responderme, podrías enseñarme a entender...
#byte porta = getenv("SFR:PORTA")
#byte portc = getenv("SFR:PORTC") devolverían la dirección correspondiente a los puertos?
struct {int8 l:6 , h:2 ;} valor ; creo 2 variables tipo int "l" y otra "h"No exactamente, la variable "valor" está formada por valor.l (los bits 0..5) y valor.h (los bits 6..7)
#define output_AC(x) {porta=x ; \ como se leería de acá hacia abajo?
portc&=3 ; \ aqui seria hacer and (&)con puerto c para que no modifique los otros bits del puerto?
portc|=x.h ;}
#define output_AC(x) {porta=x ; \
portc&=~3 ; \
portc|=x.h ;}
Que es lo mismo que escribir#define output_AC(x) {porta=x ; portc&=~3 ; portc|=x.h ;}
porta=valor ;
portc&=~3 ;
portc|=valor.h ;
"valor" y "x" son variables? de ser así hay que declararlas como int globales?Para el macro "valor" es un texto que debe reemplazar donde le aparezca "x" .