Práctica 5 Frecuencia Respiratoria Ingeniería biomédica
Enviado por Ninoka • 6 de Octubre de 2018 • 642 Palabras (3 Páginas) • 385 Visitas
...
#define BUSFREQ 275 /* para obtener 1 mS con 1.1 Mhz */
#define fintabla 0x096
#define ELCD_xor (5) // ref
#define E_LCD (5) /* Enable P3.5 */
#define RS_LCD (4) /* RS P3.4 */
const unsigned char t[]={0x03,0x03,0x02,0x02,0x0C,0x00,0x0C,0x00,0x01,0x00,0x06,fintabla};
// const asigna la variable tipo arreglo en un segmento de flash
extern unsigned char bandera;
unsigned char band_exhopr;
void Wait1ms(void){
unsigned int i;
i = BUSFREQ ; /* DCO=1.1mHZ / 4 ciclos / 275 = 1Khz = 1mSeg */
do (i--); /* 4 ciclos de maquina efectivos en ensamblador */
while (i != 0);
}
void WaitNms(int n){
/* This function waits for N ms. */
do {n--;
Wait1ms(); } /* 4 ciclos de maquina efectivos en ensamblador */
while (n != 0);
}
void Toggle(void){
/* This function toggles the E line (LCD). */
P4OUT ^=(1/* (xor.b #0x20)=0 */
WaitNms(2);
P4OUT ^=(1/* (xor.b #0x20)=1 */
}
void MergePTO(unsigned char dato){
static unsigned char respt4;
dato &=0x0F;
respt4 =P4OUT & 0xF0;
P4OUT = respt4 | dato;
Toggle();
}
void LCD_Init(void)
{
/* Inicialización LCD */
unsigned char position=0;
P4OUT &=~(1/* RS =0 escribe comando */
WaitNms(15);
while (t[position]!=fintabla)
{
MergePTO(t[position]); /* Función de asignar dato al nibble menos significativo del PTC */
Wait1ms();
position++;
}
WaitNms(15);
}
void Imprime_cadena(char *str){
/* Funcion de impresion de cadena en forma de String */
char *strptr;
strptr = str;
P4OUT |=(1/* RS = 1 ESCRIBIR DATO */
while ((*strptr) != '\0'){
MergePTO((*strptr) >> 4); /* Escritura parte alta ASCII */
MergePTO(*strptr); /* Escritura parte baja ASCII */
Wait1ms();
strptr++;
}
}
void Imprime_numero(int numero){
unsigned int unidades;
unsigned int decenas;
//unsigned int centenas;
//unsigned int miles;
unidades = (numero%10); //unidades = (numero%10);
decenas = (numero%100)/10; // decenas = (numero%60/10);
//centenas = (numero/100); //centenas = (numero%600/60);
//miles = (numero/600); //miles = (numero/600);
P4OUT |= (1/* RS = 1 ESCRIBIR DATO */
//MergePTO(0x03); /*Decenas DDRAM */
//MergePTO(miles);
//MergePTO(0x03); /*Unidades DDRAM */
//MergePTO(centenas);
//MergePTO(0x03); /*Unidades DDRAM */
//MergePTO(0x0A);
MergePTO(0x03); /*Decenas DDRAM */
MergePTO(decenas);
MergePTO(0x03); /*Unidades DDRAM */
MergePTO(unidades);
}
void Comando_LCD(unsigned char var_comando){
P4OUT &=~(1/* RS = 0 ESCRIBIR comando */
MergePTO((var_comando) >> 4); /* desplaza a la derecha 4 envia parte alta a la baja */
MergePTO(var_comando); /* envía parte baja */
Wait1ms();
}
LCD.h
void Wait1ms(void);
void WaitNms(int n);
void Toggle(void);
void MergePTO(unsigned char dato);
void LCD_Init(void);
void Imprime_cadena(char *str);
void Imprime_numero(int numero);
void Comando_LCD(unsigned char var_comando);
...