Subversion Repositories svnkaklik

Rev

Go to most recent revision | Details | Last modification | View Log

Rev Author Line No. Line
2 kaklik 1
#nolist
2
//#define  PTT PIN_A2                 // PTT control
3
//#define  TXo PIN_C0                 // To the transmitter modulator
4
#define  PERIODAH delay_us(222)     // Halfperiod H 222;78/1200     500;430/500
5
#define  TAILH delay_us(78)
6
#define  PERIODAL delay_us(412)     // Halfperiod L 412;345/1200    1000;880/500
7
#define  TAILL delay_us(345)
8
#byte    STATUS = 3                 // CPUs status register
9
 
10
byte SendData[16] = {'A'<<1, 'L'<<1, 'L'<<1, ' '<<1, ' '<<1, ' '<<1,  0x60,
11
                     'C'<<1, 'Z'<<1, '0'<<1, 'R'<<1, 'R'<<1, 'R'<<1, 0x61,
12
                     0x03, 0xF0};
13
 
14
boolean bit;
15
int fcslo, fcshi;    // variabloes for calculating FCS (CRC)
16
int stuff;           // stuff counter for extra 0
17
int flag_flag;       // if it is sending flag (7E)
18
int fcs_flag;        // if it is sending Frame Check Sequence
19
int i;               // for for
20
 
21
void flipout()       //flips the state of output pin a_1
22
{
23
	stuff = 0;        //since this is a 0, reset the stuff counter
24
	if (bit)
25
   {
26
     bit=FALSE;      //if the state of the pin was low, make it high.
27
   }
28
   else
29
   {
30
     bit=TRUE;	  	   //if the state of the pin was high make it low
31
   }
32
}
33
 
34
void fcsbit(byte tbyte)
35
{
36
#asm
37
   BCF    STATUS,0
38
   RRF    fcshi,F             // rotates the entire 16 bits
39
   RRF    fcslo,F			      // to the right
40
#endasm
41
   if (((STATUS & 0x01)^(tbyte)) ==0x01)
42
   {
43
         fcshi = fcshi^0x84;
44
         fcslo = fcslo^0x08;
45
   }
46
}
47
 
48
void SendBit ()
49
{
50
	if (bit)
51
   {
52
      output_high(TXo);
53
      PERIODAH;
54
      output_low(TXo);
55
      PERIODAH;
56
      output_high(TXo);
57
      PERIODAH;
58
      output_low(TXo);
59
      TAILH;
60
    }
61
    else
62
    {
63
      output_high(TXo);
64
      PERIODAL;
65
      output_low(TXo);
66
      TAILL;
67
    };
68
}
69
 
70
void SendByte (byte inbyte)
71
{
72
   int k, bt;
73
 
74
   for (k=0;k<8;k++)    //do the following for each of the 8 bits in the byte
75
   {
76
     bt = inbyte & 0x01;            //strip off the rightmost bit of the byte to be sent (inbyte)
77
     if ((fcs_flag == FALSE) & (flag_flag == FALSE)) fcsbit(bt);    //do FCS calc, but only if this
78
						                                                //is not a flag or fcs byte
79
     if (bt == 0)
80
     {
81
       flipout();
82
     }  			               // if this bit is a zero, flip the output state
83
     else
84
     {                          			      //otherwise if it is a 1, do the following:
85
       if (flag_flag == FALSE) stuff++;      //increment the count of consequtive 1's
86
       if ((flag_flag == FALSE) & (stuff == 5))
87
       {       //stuff an extra 0, if 5 1's in a row
88
         SendBit();
89
         flipout();               //flip the output state to stuff a 0
90
       }//end of if
91
     }//end of else
92
     // delay_us(850);				 //introduces a delay that creates 1200 baud
93
     SendBit();
94
     inbyte = inbyte>>1;          //go to the next bit in the byte
95
   }//end of for
96
}//end of SendByte
97
 
98
void SendPacket(char *data)
99
{
100
    bit=FALSE;
101
 
102
   fcslo=fcshi=0xFF;       //The 2 FCS Bytes are initialized to FF
103
   stuff = 0;              //The variable stuff counts the number of 1's in a row. When it gets to 5
104
		                     // it is time to stuff a 0.
105
 
106
//   output_low(PTT);        // Blinking LED
107
//   delay_ms(1000);
108
//   output_high(PTT);
109
 
110
   flag_flag = TRUE;       //The variable flag is true if you are transmitted flags (7E's) false otherwise.
111
   fcs_flag = FALSE;       //The variable fcsflag is true if you are transmitting FCS bytes, false otherwise.
112
 
113
   for(i=0; i<10; i++) SendByte(0x7E); //Sends flag bytes.  Adjust length for txdelay
114
                                       //each flag takes approx 6.7 ms
115
   flag_flag = FALSE;      //done sending flags
116
 
117
   for(i=0; i<16; i++) SendByte(SendData[i]);      //send the packet bytes
118
 
119
   for(i=0; 0 != *data; i++)
120
   {
121
      SendByte(*data);     //send the packet bytes
122
      data++;
123
   };
124
 
125
   fcs_flag = TRUE;       	//about to send the FCS bytes
126
   fcslo =fcslo^0xff;      //must XOR them with FF before sending
127
   fcshi = fcshi^0xff;
128
   SendByte(fcslo);        //send the low byte of fcs
129
   SendByte(fcshi);        //send the high byte of fcs
130
   fcs_flag = FALSE;		   //done sending FCS
131
   flag_flag = TRUE;  		//about to send flags
132
   SendByte(0x7e);         // Send a flag to end packet
133
}
134
 
135
#list