#include #include"7188hw.h" //#include"..\7188r.h" #define ResetPORT PIO_DATA_0 #define ResetBit 4000H #define DataModePORT PIO_MODE_1 #define DataDirPORT PIO_DIR_1 #define DataPORT PIO_DATA_1 #define DataBit 0x0100 void ClockHigh(void); void ClockLow(void); void ClockHighLow(void); void SetDirToOutput(void) { _asm mov dx,DataDirPORT _asm in ax,dx //(TKT) _asm and ax,NOT DataBit _asm out dx,ax //(TKT) here must use ax _asm mov dx,DataModePORT _asm in ax,dx //(TKT) _asm or ax,DataBit _asm out dx,ax //(TKT) here must use ax } void SetDirToInput(void) { _asm mov dx,DataDirPORT _asm in ax,dx //(TKT) _asm or ax,DataBit _asm out dx,ax //(TKT) here must use ax _asm mov dx,DataModePORT _asm in ax,dx //(TKT) _asm or ax,DataBit _asm out dx,ax //(TKT) here must use ax } void ResetHigh(void) { _asm mov dx,ResetPORT _asm in ax,dx _asm or ax,ResetBit _asm out dx,ax } void ResetLow(void) { _asm mov dx,ResetPORT _asm in ax,dx _asm and ax,NOT ResetBit _asm out dx,ax } void OutData0(void) { _asm mov dx,DataPORT _asm in ax,dx _asm and ax,NOT DataBit _asm out dx,ax } void OutData1(void) { _asm mov dx,DataPORT _asm in ax,dx _asm or ax,DataBit _asm out dx,ax } void pascal Out1ByteData(unsigned char data) { int i; for(i=0;i<8;i++){ if(data&0x01) OutData1(); else OutData0(); ClockHighLow(); data>>=1; } } #define IsDataHigh (inpw(DataPORT) & DataBit) // for 8000 // DS_RST=PIO_14 --> DATA0,0x4000 // DS_IO=PIO_24 --> DATA1,0x0100 void ReadRTC(int addr, int *data) { unsigned int v,j,i,d; v=(addr<<1)+0x81; ClockLow(); ResetHigh(); Out1ByteData(v); SetDirToInput(); v=0; j=1; for(i=0;i<8;i++){ if(IsDataHigh) v+=j; j<<=1; ClockHighLow(); } ResetLow(); SetDirToOutput(); *data=v; }