Buenas, vengo con un problema que me tiene a mal traer... Resulta que en la escuela yo aprendi a programar 8051 en el ide de MCS electronics, en basic... pero resulta que las rutinas se me hacen MUY lentas, entonces, decidi migrar al C de Keil utilizando el uVision. de C tengo alguna idea gracias a lo que aprendi de turboC en la facultad, pero el C de keil es un poco diferente. Resulta que arme la rutina que necesitaba en C y compile, me devolvio el .hex todo muy lindo, pero programo el 8051 (en realidad es un 89S51) y me encuentro con que no funciona. La misma rutina hecha en basic, funciona, lento para mi aplicacion pero funciona, a lo que descarte un problema de hardware o del micro... entonces, dejo aqui el codigo que arme, puede que haya alguna falla en el? o me estoy olvidando de inicializar algun registro?
basicamente lo que hace es en funcion del dato que me entrega un A/D me activa ciertas salidas en un cierto orden, y esta constantemente polleando al a/d
agradeceria si alguien me da una pista! o algun programa hecho en keil C para comparar si me faltan registros o algo de eso... tengan en cuenta que de ASM no caso ni una liebre muerta
saludos
Código:
#include <reg51.h> /* define 8051 registers */
#include <stdio.h> /* define I/O functions */
void main(void){
char meter;
while(1){
meter=P1;
switch(meter>>3){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
P2=0x07;
break;
case 9:
P2=0x06;
break;
case 10:
P2=0x05;
break;
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
case 17:
case 18:
P2=0x0B;
break;
case 19:
P2=0x0A;
break;
case 20:
P2=0x09;
break;
case 21:
case 22:
case 23:
case 24:
case 25:
case 26:
case 27:
case 28:
P2=0x13;
break;
case 29:
P2=0x12;
break;
case 30:
P2=0x11;
break;
case 31:
break;
}
switch (meter>>3){
case 0:
P0=0xFF;
break;
case 1:
case 11:
case 21:
P0=0xFE;
break;
case 2:
case 12:
case 22:
P0=0xFD;
break;
case 3:
case 13:
case 23:
P0=0xFB;
break;
case 4:
case 14:
case 24:
P0=0xF7;
break;
case 5:
case 15:
case 25:
P0=0xEF;
break;
case 6:
case 16:
case 26:
P0=0F;
break;
case 7:
case 17:
case 27:
P0=0xBF;
break;
case 8:
case 18:
case 28:
P0=0x7F;
break;
case 9:
case 10:
case 19:
case 20:
case 29:
case 30:
P0=0xFF;
break;
}
}
}
basicamente lo que hace es en funcion del dato que me entrega un A/D me activa ciertas salidas en un cierto orden, y esta constantemente polleando al a/d
agradeceria si alguien me da una pista! o algun programa hecho en keil C para comparar si me faltan registros o algo de eso... tengan en cuenta que de ASM no caso ni una liebre muerta
saludos