00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include <C8051F340.h>
00013
00014 #include "CD_Main.h"
00015
00016 sbit linea_servo=P2^3;
00017
00018 volatile unsigned char high_h, high_l, low_h, low_l;
00019
00020
00021
00022 void CD_DigitalFrecOutput_Init (void)
00023 {
00024
00025 TR0=0;
00026 TF0=0;
00027
00028 EA=0;
00029
00030
00031 CKCON &= 0xF8;
00032 CKCON |= 0x02;
00033
00034 TR0=0;
00035 TF0=0;
00036 TMOD&=0xF0;
00037 TMOD|=0x01;
00038
00039
00040 ET0=1;
00041 EA=1;
00042 }
00043
00044
00045 void CD_DOF (unsigned char *msg) large {
00046
00047 unsigned char subdevice;
00048 unsigned int val;
00049
00050
00051 if (CD_HexaStrTo_u8(msg, 2, &subdevice)) {
00052 CD_LinkMsgError(CD_Error_DAQBadSubdevice);
00053 return;
00054 };
00055
00056
00057 if (subdevice != 0x20) {
00058 CD_LinkMsgError(CD_Error_DAQBadSubdevice);
00059 return;
00060 };
00061
00062
00063 if (CD_HexaStrTo_u16(msg+2, 4, &val)) {
00064 CD_LinkMsgError(CD_Error_BadValue);
00065 return;
00066 };
00067
00068 val = 65536 - val;
00069 high_l = val & 0xFF;
00070 high_h = val >>8;
00071
00072
00073 if (CD_HexaStrTo_u16(msg+6, 4, &val)) {
00074 CD_LinkMsgError(CD_Error_BadValue);
00075 return;
00076 };
00077
00078 val = 65536 - val;
00079 low_l = val & 0xFF;
00080 low_h = val >> 8;
00081
00082
00083
00084 linea_servo = 1;
00085 TL0=high_l;
00086 TH0=high_h;
00087 TR0=1;
00088
00089 CD_LinkMsgOK();
00090 }
00091
00092
00093 void Timer0_ISR (void) interrupt 1
00094 {
00095 if(linea_servo==1) {
00096
00097 linea_servo = 0;
00098 TR0=0;
00099
00100 TL0=low_l;
00101 TH0=low_h;
00102 TR0=1;
00103 } else {
00104
00105 linea_servo = 1;
00106
00107 TR0=0;
00108 TL0=high_l;
00109 TH0=high_h;
00110 TR0=1;
00111 }
00112 }
00113
00114
00115