cpu.lst
来自「显示屏驱动源代码」· LST 代码 · 共 1,256 行 · 第 1/5 页
LST
1,256 行
966 1 #ifdef REMO_RC5
967 1 {
968 2 BYTE i;
969 2
970 2 i = tm01 & 0x07;
971 2 if( i>=1 && i<=2 )
972 2 RemoPhase1 = P3_2;
973 2 else if( i>=5 && i<=6 )
974 2 RemoPhase2 = P3_2;
975 2 else
976 2 ;
977 2 if( i==0 ) { //every 8 tm01
978 3 if( RemoPhase1==RemoPhase2 ) { // error
979 4 ClearRemoTimer();
980 4 EnableRemoconInt();
981 4 return;
C51 COMPILER V7.06 CPU 02/21/2008 14:00:25 PAGE 17
982 4 }
983 3 if( tm01<=(8*8) ) { // start control system
984 4 RemoSystemCode <<=1;
985 4 if( RemoPhase1==1 && RemoPhase2==0 )
986 4 RemoSystemCode |=1;
987 4 }
988 3 else { // data
989 4 RemoDataCode <<=1;
990 4 if( RemoPhase1==1 && RemoPhase2==0 )
991 4 RemoDataCode |=1;
992 4 }
993 3 }
994 2 if( tm01 > (8*14) ) {
995 3 RemoDataReady++; //LJY051502 RemoDataReady = 1; // new key
996 3 ClearRemoTimer();
997 3 //RemoOver = 0;
998 3 }
999 2 }
1000 1
1001 1 #elif defined REMO_NEC
{
if( RemoDataReady ) return;
switch( RemoStep ) {
case 0:
if( P3_2==0 ) {
RemoLcnt++;
if( RemoLcnt==0xff ) goto RemoError;
}
else {
RemoHcnt = 0;
RemoStep++;
}
break;
case 1:
if( P3_2==1 ) {
RemoHcnt++;
if( RemoHcnt==0xff ) goto RemoError;
}
else {
if( RemoLcnt>=15*3 && RemoLcnt<=17*3 ) {
if( RemoHcnt>=3*3 && RemoHcnt<=5*3 ) {
RemoStep = 3;
RemoDataReady = 2;
break;
}
else if( RemoHcnt>=7*3 && RemoHcnt<=9*3 ) {
RemoStep++;
RemoPhase = 0;
RemoLcnt = 0;
RemoNum = 0;
RemoBit = 0;
break;
}
}
else goto RemoError;
}
break;
C51 COMPILER V7.06 CPU 02/21/2008 14:00:25 PAGE 18
case 2:
if( RemoPhase==0 ) {
if( P3_2==0 ) // Phase=0 Input=0
RemoLcnt++;
else { // Phase=0 Input=1
RemoPhase = 1;
RemoHcnt = 0;
}
}
else {
if( P3_2==1 ) // Phase=1 Input=1
RemoHcnt++;
else { // Phase=1 Input=0
RemoPhase = 0;
if( RemoLcnt>=1 && RemoLcnt<=5 ) {
if( RemoHcnt<=2*3 ) // bit 0
RemoData[RemoNum] <<= 1;
else if( RemoHcnt<=4*3 ) { // bit 1
RemoData[RemoNum] <<= 1;
RemoData[RemoNum]++;
}
else goto RemoError;
if( ++RemoBit>=8 ) {
RemoBit = 0;
if( ++RemoNum>=4 ) {
RemoDataReady = 1;
RemoStep++;
}
}
RemoLcnt = 0;
}
else goto RemoError;
}
}
break;
case 3:
break;
}
return;
RemoError:
ClearRemoTimer(); //TimerFor208us();
EnableRemoconInt();
}
#endif // REMO_NEC
1095 1 }
1096
1097
1098 void delay(BYTE cnt)
1099 {
1100 1 WORD ttic01;
1101 1
1102 1 ttic01 = ( tic01 + cnt ) % 100;
1103 1 do {
1104 2 ;
1105 2 } while( tic01 != ttic01 );
C51 COMPILER V7.06 CPU 02/21/2008 14:00:25 PAGE 19
1106 1 }
1107
1108
1109 //=============================================================================
1110 // Time
1111 //=============================================================================
1112 #define _24H_SECS 86400L // 24*60*60
1113 WORD GetTime_ms(void)
1114 {
1115 1 WORD tms;
1116 1
1117 1 tms = tic01;
1118 1 tms += ( SystemClock % 60 ) * 100;
1119 1 return tms; // in ms
1120 1 }
1121 BYTE GetTime_H(void)
1122 {
1123 1 return ( SystemClock / 60 / 60 ) % 24 ;
1124 1 }
1125
1126 BYTE GetTime_M(void)
1127 {
1128 1 return ( SystemClock / 60 ) % 60 ;
1129 1 }
1130
1131 BYTE GetSleepTimer(void)
1132 {
1133 1 WORD val;
1134 1
1135 1 val = SleepTimer;
1136 1 if( val ) { // already set, display rest of time
1137 2 val = ( SleepTime >> 8 ) * 60 + ( SleepTime & 0xff );
1138 2 val -= ( GetTime_H() * 60 + GetTime_M() );
1139 2 }
1140 1 return (BYTE)val;
1141 1 }
1142
1143 void SetSleepTimer(BYTE stime)
1144 {
1145 1 SleepTimer = stime;
1146 1 if( SleepTimer==0 )
1147 1 SleepTime = 0xffff;
1148 1 else {
1149 2 SleepTime = GetTime_H() + ( GetTime_M() + SleepTimer ) / 60;
1150 2 SleepTime = ( SleepTime << 8 ) | ( ( GetTime_M() + SleepTimer ) % 60 );
1151 2 }
1152 1
1153 1 #ifdef DEBUG_TIME
dPrintf("\r\n++(SetSleepTimer) SleepTime:0x%x__", (WORD)SleepTime);
#endif
1156 1 }
1157
1158 BYTE OKSleepTime(void)
1159 {
1160 1 if( GetTime_H() == ( SleepTime >>8 ) &&
1161 1 GetTime_M() == ( SleepTime & 0xff ) ) {
1162 2 SleepTimer=0;
1163 2 SleepTime = 0xffff;
1164 2 return 1;
1165 2 }
1166 1 return 0;
1167 1 }
C51 COMPILER V7.06 CPU 02/21/2008 14:00:25 PAGE 20
1168
1169 WORD DiffTime_ms( WORD stime, WORD etime )
1170 {
1171 1 //#ifdef DEBUG
1172 1 //dPrintf("\r\n(DiffTime) stime:%d, etime:%d", (WORD)stime, (WORD)etime );
1173 1 //#endif
1174 1 if( etime < stime ) { // resetted
1175 2 return etime + (6000 - stime);
1176 2 }
1177 1 else {
1178 2 return etime - stime;
1179 2 }
1180 1 }
1181
1182 // cCount X 0.01 sec delay
1183 void SetDelayCount(BYTE cCount)
1184 {
1185 1 cDelayCounter = cCount;
1186 1 }
1187
1188 BYTE GetDelayCount(void)
1189 {
1190 1 return cDelayCounter;
1191 1 }
1192
1193 // cCount X 0.01 sec delay
1194 // Don't call this function between "ssMeasureSetup" state and "ssModeDetect" state.
1195 void WaitDelay(BYTE cWaitCount)
1196 {
1197 1 cDelayCounter = cWaitCount;
1198 1 do {
1199 2 ;
1200 2 } while(cDelayCounter);
1201 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1430 ----
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?