00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include <C8051F340.h>
00017
00018 #include "CD_Main.h"
00019
00020 volatile unsigned int cuenta_desbordes;
00021 volatile unsigned int cp_cuenta_desbordes;
00022 volatile unsigned char cp_TH1,cp_TL1;
00023 volatile unsigned char lock_DIF;
00024
00025
00026 void CD_DigitalFrecInput_Init (void)
00027 {
00028
00029
00030 EA = 0;
00031
00032 CKCON &= ~0x08;
00033
00034
00035 TR1=0;
00036 TF1=0;
00037
00038 TMOD &= 0x0F;
00039 TMOD |= 0x10;
00040 TH1=0;
00041 TL1=0;
00042
00043 cuenta_desbordes = 0;
00044
00045 ET1 = 1;
00046
00047
00048
00049 IT0 = 1;
00050 IE0 = 0;
00051
00052 IT01CF &= ~0x07;
00053 IT01CF |= 0x03;
00054
00055 EX0 = 1;
00056
00057
00058 EA = 1;
00059
00060 lock_DIF = 0;
00061
00062 TR1 = 1;
00063 }
00064
00065
00066 void CD_DIF (unsigned char *msg) large {
00067
00068 unsigned char subdevice;
00069 unsigned long val;
00070 unsigned char i;
00071
00072 char num[10];
00073
00074
00075 if (CD_HexaStrTo_u8(msg, 2, &subdevice)) {
00076 CD_LinkMsgError(CD_Error_DAQBadSubdevice);
00077 return;
00078 };
00079
00080
00081 if (subdevice != 0x10) {
00082 CD_LinkMsgError(CD_Error_DAQBadSubdevice);
00083 return;
00084 };
00085
00086
00087 lock_DIF = 1;
00088
00089 val = cp_cuenta_desbordes;
00090 val <<= 8;
00091 val |= cp_TH1;
00092 val <<= 8;
00093 val |= cp_TL1;
00094
00095 lock_DIF = 0;
00096
00097 if (val > 1000000L) {
00098 val = 1;
00099 } else {
00100 val = 1000000L/val;
00101 }
00102
00103
00104
00105
00106
00107 for (i=0;i<10;i++) {
00108 num[i]='0'+ val % 10;
00109 val /= 10;
00110 }
00111
00112 CD_LinkTXStr("#!");
00113
00114 for (i=0;i<10;i++) {
00115 CD_LinkTXChar(num[9-i]);
00116 }
00117
00118 CD_LinkTXChar('\x0D');
00119
00120 }
00121
00122
00123 void timer1_ISR (void) interrupt 3 {
00124
00125 if (cuenta_desbordes != 65535) {
00126 cuenta_desbordes++;
00127 }
00128 }
00129
00130
00131 void int0_ISR (void) interrupt 0 {
00132
00133 TR1 = 0;
00134
00135 if (lock_DIF == 0) {
00136 cp_TH1 = TH1;
00137 cp_TL1 = TL1;
00138 cp_cuenta_desbordes = cuenta_desbordes;
00139 }
00140
00141 TH1 = 0;
00142 TL1 = 0;
00143 cuenta_desbordes = 0;
00144
00145 TR1 = 1;
00146 }
00147