#include <windows.h>
#include <stdio.h>
//llamamos a la librería creada por el amigo del IO
#include "io.h"
//creamos una funcion que lee registros del IT8712
unsigned char LeeIT8712(unsigned short base,unsigned char registro)
{
PortOut(base+0x05,registro);
return ( PortIn(base+0x06) );
}
//creamos una función que lee dos registros contiguos del IT8712
unsigned short LeeWordIT8712(unsigned short base,unsigned char registro)
{
return( LeeIT8712(base,registro)<<8 | LeeIT8712(base,registro+1) );
}
//creamos una función que escribe bytes en registros del IT8712
void EscribeIT8712(unsigned short base,unsigned char registro, unsigned char valor)
{
PortOut(base+0x05,registro);
PortOut(base+0x06,valor);
}
//creamos una función que escribe dos bytes en registros contiguos del IT8712
void EscribeWordIT8712(unsigned short base,unsigned char registro, unsigned short valor)
{
EscribeIT8712(base,registro,(unsigned char)(valor>>8));
EscribeIT8712(base,registro+1,(unsigned char)(valor&0xff));
}
//creamos una función que nos finaliza la comunicación
void FinalizaIT8712(void)
{
PortOut(0x2e,0x02);
}
//creamos una función que nos inicia y comprueba el chip
int IniciaIT8712()
{
PortOut(0x2e,0x87);//estos datos vienen predefinidos en el data sheet
PortOut(0x2e,0x01);
PortOut(0x2e,0x55);
PortOut(0x2e,0x55);
//nos garantizamos el fin de las comunicaciones con el chip al terminar
atexit(FinalizaIT8712);
if(LeeIT8712(0x29,0x20)==0x87 && LeeIT8712(0x29,0x21)==0x12)
return 1;
else
return 0;
}
void main()
{
unsigned short dir_base=0x29;
int res,i;
if(LoadIODLL() == 0 && IsDriverInstalled()==0)
{
printf("\n\t\aERROR inicializando driver.");
getch();
exit(1);
}
//iniciamos el IT8712
if(IniciaIT8712()==0)
{
printf("\n\t\aEl chip IT8712 no se encuentra instalado.");
getch();
exit(2);
}
//cambiamos el LDN a 4
EscribeIT8712(dir_base,0x07,0x04);
//comprobamos que el servicio está activo
if (LeeIT8712(dir_base,0x30)==0)
//si no está activo lo activamos
EscribeIT8712(dir_base,0x30,0x01);
//leemos la nueva dirección base
dir_base=LeeWordIT8712(dir_base,0x60);
//Ya estamos, a leer las 3 temperaturas que en este caso están en
//los registros 0x29,0x30 y 0x31 respectivamente
while(!_kbhit())
{
system("Cls");
for(i=0;i<3;i++)
printf("\n\tTemp %d: %d",i+1,LeeIT8712(dir_base,0x29+(unsigned char)i));
//hacemos una pausa de 1s pq las temperaturas tardan en actualizarse
Sleep(1000);
}
}