IDENTIFICATION SYSTEM USING PREDETERMINED INTERVAL STROBED SIGNALS

Abstract: An identification system is implemented according to the invention in which the identification data of a wireless transmitter is divided into multiple bursts (154, 156, 158, 160, and 162). Instead of transmitting the entire identification in a single burst, the identification is split among bursts, so that it takes a period of time to uniquely identify a particular transmitter. However, the time between bursts (tA1, tA2, tA3, tA4, and tA5) falls under tight tolerance, so that once a transmitter is identified, it can be further identified based on when it transmits as opposed to what it transmits. In this way, high tractability can be maintained without repeatedly transmitting the entire identification code of the transmitter.

Description: IDENTIFICATION SYSTEM USING PREDETERMINED INTERVAL STROBED SIGNALS A portion of the disclosure of this patent document contains material which is subject to (copyright or mask work) protection. The (copyright or mask work) owner has no objection to the facsimile reproduction by anyone of the patent document or the patent disclosure, as it appears in the Patent and Trademark Office patent file or records, but otherwise reserves all (copyright or mask work) rights whatsoever. This invention relates to identification, location, and telemetry systems, and more particularly, to a system for positively identifying and receiving telemetry from devices on assets and individuals using reduced power and reduced channel occupancy. Identification, location and tracking systems identify the presence, the absence, or movement of unique devices affixed to people and objects within a predefined area. These systems find increasing application in all areas of automation, accounting, manufacturing, and materials handling areas as well as medical facilities and other areas where real time location and identification can be critical. In a typical system, one or more objects or individuals are provided with transmitting devices, commonly known as "TAGs," which can be tracked by an array of receivers in a given tracking area. Each TAG periodically transmits a unique digital identification number which is sensed by one or more receivers. The receiver information is then forwarded to a data processing system for storage and tracking. A number of systems have been developed using various techniques, such as radio frequency (RF), and ultrasound for continuously tracking location. Such systems typically employ radio frequency or ultrasonic based transmitters and sensors. RF systems can provide a high degree of accuracy while maintaining a comparably favorable ratio of range per watt of power. A system using RF tracking methods is disclosed in 1 U.S. Patent No. 5,119,104 to Heller, which is hereby incorporated by reference. The Heller patent discloses a system which addresses some of the issues associated with RF tracking systems. As disclosed, radio frequency transmissions can be susceptible to interference from multipath reflections, as well as signal attenuation through certain objects which tends to distort the accuracy of the location data. The Heller patent offers a method for incorporating a plurality of receivers and time-of-arrival data to more accurately identify target location. The Heller patent also offers power conservation by including a motion detector with each TAG transmitter. By transmitting identification information when the target is in motion, but reducing transmissions when motionless, the system can conserve power during motionless periods. The receiving system simply uses the last recorded transmission to identify location. However, one power consumption issue of that system is that if the object is moving, the system of the Heller patent does require higher power consumption for more frequent transmissions. The technique according to the invention provides for an abundance of devices present in the same area, with real time supervision for presence and for changes in sensory telemetry. The technique employs transmitters, which use the same carrier frequency, but having a unique identification. The system reduces transmitter power consumption by only transmitting a portion of that identification in any one burst. Thus, the transmitters use miniscule amounts of power but can be detected at long ranges. The system also provides for an antenna that receive signals at the transmit frequency and a signal processor that supervises the devices for presence and for telemetry. The system also provides for antennae that are located at similar points in space that can measure the signal strength of the incident signals in such a way as to determine their approximate sector or angle of reception of the incident signal. Hand-held antennae can be used as "finders", and systems of antennas can be constructed as location grids. A technique according to the invention provides for transmitting identification, location, and telemetry data while conserving power and increasing available bandwidth. According to the invention, each transmitter identification is split into multiple, smaller, timed transmission packets. The transmitter then transmits a portion of that identification (such as a single bit) periodically, such as once per second. The period of time between transmissions is precise, such that once the system identifies a transmitter, it can then accurately identify the transmitter based upon the next transmission packet's time of arrival. Because of the small bandwidth occupied by and the limited energy used in each single transmission bot the individual transmissions and resulting identifications are resistant to collisions from other transmitters, as well as from noise. The receiver receives and accurately time-stamps each transmission. This information is then transmitted over a network by sending a map of the received transmission. The received transmission is then processed to identify the device that transmitted and any other data that may have been sent. In one embodiment, the packet is sent over a network that may accommodate other receivers, all feeding a signal processor used for device identification, storage, and/or forwarding of the further processed information. A signal processor, (currently, a server over an RS-485 bus) receives such packets from all receivers, recognizes identifications from previously "unacquired" transmitters, and maintains information on previously acquired transmitters. From the start of receiving transmissions (or "symbols") that are unexpected or unscheduled, the signal processor establishes an interval from the periodicity of the transmitted symbols. The signal processor attempts to lock onto a transmitter that was newly introduced into the field of the receiver based on the transmission interval. The signal processor does so by correlating the unexpected and unscheduled symbols and calculates a transmission period, or interval. It then predicts times to expect future symbols. As future symbols are received, their additional identification information is accumulated into the system, which both reinforces the algorithm's assurance that future receptions .are from a given transmitter and more positively identifies that transmitter. Though the average delay between symbols may vary randomly somewhat, or drift, the repeatability of symbols each second (i.e., jitter) is highly accurate. This repeatability allows the system to identify, and infer with an increasingly higher degree of certainty, the presence of a particular transmitter based on its transmission's time of arrival at the receiver. When an unexpected symbol is first received, the system holds that uncorrelated symbol in a queue, and waits for the transmission of subsequent, associated symbols to establish an interval. Once that interval is established, the signal processor accumulates subsequent transmissions to establish the transmitter's identity. Partial identifications may be used to establish a probable identity. Once associated, approximately or exactly, the signal processor expects subsequent symbols at the predetermined interval. Lack of arrival of expected symbols is tolerated, but with locking lost after a certain number of "missed" symbols. As information packets reflecting subsequent receipts of symbols are detected, the information is added to the identification within the system. If no matching identification appears in the database, the new transmitter data is then added to the database. Once all data bits have been received, the identification of the transmitter is positively known. Successive transmissions of symbols received at known transmission periods allow for the continuous supervision of the device without the device transmitting the entire identification on every transmission, unnecessarily using the energy and unnecessarily occupying channel space by continuously transmitting that complete identification code. One advantage of the technique is that once an interval is acquired, the transmitter can be identified based primarily when it transmits, with the actual transmitted symbol verifying the identity of the transmitter. The transmission of a symbol, however, which is only a portion of the identification code, takes a proportionally low amount of power to transmit. For example, assume a system which transmits an identification code once every second requires some predetermined power to transmit. By dividing the identification code into some number of portions and transmitting only one portion every second or so, the disclosed transmitter could require over an order of magnitude less power than the prior system, while maintaining the same transmission, and thus tracking, rate. Particularly advantageous is the immunity of a device's identification to various kinds of noises. A smaller packet containing the "same data" will have a smaller possibility of being lost to noise. Losing data to noise is a function of the time that the data occupies the channel. Therefore, the smaller the data packet, for the same amount of data, the greater the noise immunity. Assume a typical system would take 64 milliseconds to transmit a 64 bit identification packet. Since the disclosed embodiment takes approximately 600 microseconds for each bit, then the noise immunity of transmitting a single bit, rather than 64 bits is increased over 100 times, providing 20db more noise immune. Prior systems could reduce power by transmitting less frequently, but that would cut down on the ability of the system to supervise the presence of a "TAG", or device, in real time, as well as obviating the practical use of an antenna for "finding" the device. Once again, by using the disclosed techniques, the present system has longer life on the same battery, has an abundance of devices that can exist in the same area, provides a high tracking rate, and has greatly increased immunity to noise. Noise immunity occurs for all forms of noise, including other like devices' transmissions, other same frequency but dissimilar transmissions, and man- made and more natural Gaussian, Schott and impulse noise. Further, when an antenna receives a transmission by a particular device, it encodes the received data in such a way that future changes in both transmission format and system parameter do not require modifications of the antenna. Specifically, rather than deciphering the meaning of a particular transmission, a receiver encodes the received transmission as a "pulse map" of energy received in distinct packets of time. This pulse map can be set to a variety of lengths depending on the particular data transmission formats used. For example, a startup transmission "symbol" may be a pulse followed by a particular silent period followed by a second pulse; a " 1 " identification bit could be a start pulse followed by a second interval and then a second pulse; and a "0" bit could be a start pulse followed by yet a third interval and then a second pulse. If it is desired to have multiple identification bits, or additional data to be appended to that initial data, the pulse map could be extended until data is not received, or multiple pulse maps could be sent for a string of data. But by mapping the received pulses as a map, rather than deciphering their meaning them at the antenna, the antenna maintains a great deal of flexibility without having to know the exact protocols of a particular implementation. The received data is transmitted in the form of pulse maps along with time stamps and other information over the network to the signal processor, which processes the maps, identifies transmitters, accumulates data associated with the transmissions, and otherwise monitors all transmitters within the range of the system. Figure 1 is a block diagram illustrating a tracking system implemented according to the invention; Figures 2A-2C are illustrations of transmissions of identifying data according to one embodiment of the invention; Figure 3 is a diagram illustrating potential antenna reception patterns according to the invention; Figure 4 is a diagram illustrating the timing of transmitted and received signals according to one embodiment of the invention; Figure 5 is a block diagram illustrating a multi-directional antenna implemented according to the invention; Figure 6 is a block diagram of a room illustrating antenna reception patterns according to the invention; Figure 7 is a flow diagram illustrating the transmission of data from a transmitter to an antenna over a network and to a central server to process the data; Figure 8 is a block diagram illustrating the encryption and authentication of data transmitted by a transmitter according to the invention; Figures 9A-9G are illustrations of data structures used in the signal processor according to the invention; Figures 10A-10B are flow charts illustrating transmitter identification according to the invention; Figure 11 and 12 are timing diagrams illustrating a transmission format of another embodiment according to the invention; Figures 13 A and 13B are timing diagrams illustrating received data according to the invention; Figure 14 is a block diagram illustrating pulse mapping interpretation according to the invention; Figures 15A .and 15B are tables illustrating the interpretation of data by the signal processor according to the invention; Figure 16 is a block diagram illustrating transmitter circuitry according to the invention; Figure 17 is a schematic illustration of a transmitter according to the invention; and Figure 18 is a schematic illustration of a receiver according to the invention. Turning to Figure 1 , shown is a block diagram illustrating a presence detection and identification system S according to the invention. In the shown system S, a wireless transmitter W A 100 and a wireless transmitter W B 102 each transmit identification information along with data. As is further described in detail below, the identification information is generally not transmitted as a single periodic burst of data. Instead, the transmitters W A 100 .and W B 102 separate their identification data into a series of components, which are individually transmitted periodically over time. These transmissions are received by one or more directional or non-directional antennas A, 104, A 2 106 and A 3 108. These antennas 104, 106 and 108 are preferably coupled to a network 110 and timestamp each received transmission from one of the transmitters W A 100 or W B 102. The antennas 104, 106 and 108 transmit both the timestamp and the corresponding received data to a signal processor or other controller 112. The signal processor 112 is connected to a second network 114, which provides the information gathered by the signal processor 112 to various work stations 116a and 116b, or to other devices 118, such as a phone system controller. Alternatively, or in connection with the system S of Figure 1, work stations and devices 120 can be connected to the network 110, where the network 110 could be a standard Ethernet or other type of local operating network (LON), local area network (LAN), or wide area network (WAN). The tr.ansmissions from the wireless transmitters W A 100 and W B 102 are of a particularly advantageous format. Specifically, these transmitters W A 100 and W B 102 can have 64-bit identification values that uniquely identify each transmitter 100 or 102. In typical previous systems, this identification was transmitted in a single burst, alone or along with telemetry (such as a button push), which was then received by antennas. The transmitter identification was then immediately known if the packet was received without a collision. The packet may have contained error detection logic, such as parity, CRC, or forward correcting codes, but even so, a collision could prevent positive identification. For real-time location purposes, there is a tradeoff between the frequency of transmission and bandwidth of the area (the number of devices in the area). For applications where an increase in the real-time location capability was desired, system tradeoffs included: 1. an increase in cost and size of battery, 2. an increase in cost of receiver to increase the bandwidth (hence reducing the time of transmission), 3. a limit to the number of devices in the area, 4. a reduced number of unique identification numbers (because fewer bits of identification data reduced power requirements), or 5. addition of a receiver to the tag so that the device will only "transmit" when commanded. These tradeoffs increase the devices complexity and cost, so previously the periodic transmission interval would be increased until all the design requirements could be satisfied. Often marketing research and prototype testing could lead to a reasonable solution, but the system would be limited by these parameters in future applications. With these settled parameters, the manufacturer would be required to make products according to those predefined parameters. As further demonstration of the tradeoffs regarding real time location capability, if a transmitter transmitted ten times a second, for most applications the real time location of the transmitter would be considered excellent. However, with similar devices passing under the same sensor, the increased transmission rate would lead to a greater number of collisions. A 50 millisecond identification transmitted every 100 milliseconds would occupy 50% of the bandwidth of a receiver. To the receiver trying to capture one of the transmitters, another would appear as noise and hence create havoc for the reception of the other TAGs identification. By decreasing the number of unique identification numbers (less bits to transmit) the system would occupy less bandwidth, but with reduced flexibility and future expansion capabilities. To improve battery life, prior systems have implemented techniques such as motion sensors for adjusting the period between transmissions up for less active or nonmoving TAGs. According to the invention, however, the transmitter can transmit at relatively high powers, relatively frequently, and with extended battery life. This is achieved by transmitting only a portion of the identification from each transmitter W A 100 or W B 102 at a periodic interval. Thus, instead of transmitting the entire identification in one burst, the transmission of the identification is spread out over, for example, a period of thirty seconds to one minute. The transmission of symbols (a portion of the identification data), however, occurs once a second, for example. Further, the period between each transmission is repeatable over several seconds such that the intelligent signal processor 112 can predict and schedule the next expected transmission. When received within the predicted scheduled time, the system then knows with 10 a high degree of confidence which device transmitted that information. Following the collection of some or all of the identification code, the signal processor 112 can then associate that identification with each single symbol it predictably receives. Using this protocol, the system may take several symbols to initially determine that a unique device is responsible for repeatable intervals of symbols and begin to accumulate the full identification. Algorithms discussed below match "recently seen TAGs" to fragments of identifications that the signal processor receives. From this information, the signal processor infer the actual identification prior to the identification number's complete. Turning to Figures 2A and 2B, various details of one data format transmitted by the wireless transmitters W A 100 and W B 102 are shown. Figure 2A illustrates a wireless identification number (WIN) that is associated with each of the transmitters W A 100 and W B 102. Specifically, a WIN A 150 is shown to be a 64-bit hexadecimal value 64'h02468ACE02468ACE, while a WIN B 152 is shown to be a hexadecimal value 64'hl3579BDF13579BDF. The WIN A 150 is transmitted as the identification of the wireless transmitter W A 100, while the WIN B 152 is transmitted as the wireless identification number of the transmitter W B 102. Although the WIN A 150 and the WIN B 152 are shown to be repeating numbers, generally they will be seemingly random to one another as a function of their manufacture date and other parameters, and are unlikely to have consecutive identical values. Concerning how these identification values are transmitted, referring to Figure 2B, a typical transmission sequence for the 64-bit WIN A 150 is shown. For example, the 64-bit identification value is divided into a series of sixteen, 4-bit nibbles. These nibbles are then transmitted in the intervals approximately one second apart. Referring to Figure 2B, in a first period 154, for example, the first nibble (4'h0) is transmitted in a burst over a period of time t A1 11 154 then, a second nibble is transmitted during a period t^ 156, which begins T A1 period of time later. Preferably, the period t A1 is orders of magnitude less than the length of time T A1 . For example, the period t A1 could be 500 microseconds, while T A1 is one second, yielding a duty cycle and a same channel occupancy of less than .05%. Further, the first nibble is transmitted using a symbol 164, of which there are seventeen in the disclosed embodiment, sixteen for the four nibbles and one for a header value. Symbols are discussed further below in conjunction with the transmission format of the transmitters W A 100 and W B 102. The period between transmissions T^ tends to be much larger than the transmission period t^ itself. Further, while the symbol 164 is transmitted as a portion of the WIN A 150, data 166 can also be appended to the transmission. Thus, some transmissions may be longer than others because of this additional data 166, having a period t d . The reception of symbols and data is the domain of the receiver. Both symbols and data are short as compared to T^ and entirely detected by the receiver. The symbol and data are time stamped and sent the signal processor 116 for its determination of: 1. which device transmitted it, 2. an accumulation of the new data with prior data from the same device, 3. a predication or scheduling of the next symbol that it may receive and forwarded as programmed by the user or an applications program based on the event of a symbol arriving, and 4. the newly obtained TAG identification in the area or a change in the telemetry that came in as data. 12 Turning to Figure 2C, it will be appreciated that the amount of energy necessary to transmit the WIN A 150 according to the disclosed embodiment is lower than if the WIN A 150 were transmitted in its entirety at each of the periodic transmissions 154-162. Shown in Figure 2C is a series of transmissions 168 by the wireless transmitter W A 100 and a series of a transmissions 170 by the wireless transmission W B 102. The series of transmissions 168 are continuous transmissions separated by the period T A „ with a header symbol being transmitted followed by a transmission of a symbol for (0), then (0), then (1), etc. making up the WIN A 150. In this disclosed embodiment, each symbol is repeated twice to assist the system of Figure 1 in determining which transmitter is transmitting a particular sequence of symbols. According to the invention, however, this is not necessary - instead, the WIN A 150 can be transmitted as a sequence of changing symbols making up the entirety of the WIN A 150, without repeating each symbol. Such an embodiment is discussed below in conjunction with Figures 11-15B. It can be assumed that a certain amount of energy is necessary to transmit a certain amount of data. Because during each of the periods T^ only 4 bits of data are being transmitted rather than 64 bits, the energy used for such a transmission is thus reduced. At the same time, the period T A is sufficiently short to provide suitable tracking of an object or person that is moving. In this way, and by transmitting only portions of the WIN A 150 in each period, power consumption is reduced without reducing the periodicity of the transmission, and thus without reducing the real time detectability of the wireless transmitter W A 100. Turning to Figures 3 and 4, illustrated are an antenna system employing the antennas A, 104, A 2 106 and A 3 108 to track the presence and location of wireless transmitters W A 100 and W B 102. It is assumed that A 2 106 is an omni-directional antenna while A, 104 is a directional antenna. The transmitter W A 100 is shown to be within an extended range 200 of the 13 omnidirectional antenna A 2 106, as well as within an angular range 202 of the directional antenna A, 104. W B 102, in contrast, is only within the range of the omnidirectional antenna A 2 106. The omnidirectional A 2 106 is also shown to have a reduced range 204, which by employing signal strength monitoring can further be used to locate the transmitters W A 100 and W B 102. Turning to Figure 4, shown are a transmission sequence 206 that is transmitted by the wireless transmitter W A 100, and a transmission sequence 208 that is transmitted by the wireless transmitter W B 102. The transmission 206, as discussed above in conjunction with Figure 2C, can include a series of nibbles of data in the form of symbols, with each once repeated for ease of identification and matching of subsequent symbols with a previous symbol. Alternatively, the data can be single bits, as discussed below, in conjunction with Figures 11-15B. In the transmission 206, a header symbol is transmitted twice, followed by the symbol reflective of the first nibble of the WIN A 150, then the second nibble of the WIN A 150, followed by the third nibble of the WIN A 150, etc. The transmitter W B 102 transmits a header symbol twice, again followed by a symbol reflected with the first nibble of the WIN B 152, then the second nibble of the WIN B 152, etc. It should be remembered that the transmission 206 by the transmitter W A 100 and the transmission 208 by the transmitter W B 102 are in general decoupled from each other. Although they are shown being interleaved, and both starting with a header symbol, in general the transmissions 206 and 208 will be randomly related, drift with respect to each other, and may even collide at particular times. The inter-relationships of Figure 4 are simply shown for illustrative purposes of what a particular antenna would receive. The antennas A, 104 and A 2 106 receive these transmissions 206 and 208, or some portion of these transmissions 206 and 208. The antenna A, 104 receives a series of transmissions 210, which are simply the transmitted symbols of the wireless transmitter W A 100 transmitted in the 14 transmission sequence 206. The transmission sequence 208 is not received because the transmitter W B 102 is not within the range of the antenna A ] 104. In contrast, the antenna A 2 106, which is omnidirectional, receives a transmission sequence 212, which is shown to be the combined transmissions 206 and 208 of the transmitter W A 100 and W B 102. The header symbol of the transmitter W A 100 is received, followed by the header symbol of the transmitter W B 102, and the sequence continues to alternate. As illustrated by the transmission sequence 212, it will be appreciated that because of the very low duty cycle of the transmissions (200 microseconds on, 1 second off), the chances of a collision are very low. Referring back to Figure 3, it will be appreciated that the antenna A, 104 sends data packets over the network 110 indicating the time of arrival of each of the transmissions from transmitter W A 100. Those data packets can include data indicative of the signal strength of the transmitter W A 100. If such is the case, the system S of Figure 1 can determine not only that the transmitter W A 100 is within the angle of reception 202 of the antenna A, 104, but also a particular area 214 within which that particular signal strength would be present. This would be determined by a signal strength indication added to the packet of data transmitted over the network 110 by the antenna A, 104 and by the antenna A 2 106. Further, it will be appreciated that rather than simply having an angled antenna A, 104, a multi-directional antenna can be provided which include six independent antennas as illustrated in Figure 5. As illustrated in Figure 5, the antenna is provided with six independent antennas, A 4 216 through A, 226. Using such a sectored antenna, the entire periphery as illustrated in Figure 3 can be divided up into sectors. If an antenna is located in a corner of a room, one could instead sector the room into multiple subsectors without having a full 360E angle of reception. 15 A wide variety of antenna configurations is possible, and by suitably selecting the configuration, objects can be located by the intersection of the reception areas of the various antennas. Referring to Figure 6 for example, shown is a room with four antennas A 10 228, A π 230, A 12 232 and A I3 234 in each of the corners of the room. Each antenna includes three Asub- antennas≤, thus effectively dividing the room into three regions for each antenna. Employing these four antennas A 10 228 through A !3 234, the room can be broken up into twenty-five regions Rj through R 25 . In this way, by employing intersections of the regions covered by each of the antennas 228 through 234, the location of a transmitter W A 100 or W B 102 can be precisely determined based on which antennas are receiving a signal from those transmitters 100 or 102 and which are not. Note that even further accuracy in identifying the locations of each of the transmitters W A 100 or W B 102 can be achieved by employing signal strength to determine the distance of the transmitter from a particular antenna A 10 228 through A 13 234. Turning to Figure 7, a sample of the data flow in the system S of Figure 1 is illustrated. Specifically, shown is exemplary data flow from the wireless transmitter W A 100 to one of the antennas A 2 106, then over the network 110 to the signal processing server 112. Over a period of time, the wireless transmitter W A 100 periodically transmits identification WIN A 150, along with any additional data that may be desired, such as motion status or temperature. This results in a series of data packages 300 transmitted in short bursts, together forming WIN A [0..15], which is 16, 4-bit nibbles forming WIN A 150. The first of these pulses containing WIN A [0] is received by the antenna A 2 106. This antenna is a Asmart≤ networked antenna. It includes a relatively stable clock to provide a timestamp for time of arrival. It also includes its own identification A 2m and, preferably, can determine the signal strength of the data 300 transmitted by the wireless transmitter W A 100. 16 After receiving the first pulse from W A 100, the antenna A 2 106 forms a packet of data 302, which includes the portion of the WIN A 150 transmitted in the first burst by the transmitter W A 100, includes the antenna identification A 2ID , includes any associated data, includes the timestamp of TOA (i.e., time of arrival), and includes an indication of transmit strength. The format of this data can be varied, and items such as the antenna ID A 2m could be in an object ID format as described in U.S. patent 5,572,195, issued November 5, 1996, entitled Sensougard Control System for Local Area Networks, which is hereby incorporated by reference. Further, rather than transmitting deciphered data as the packet of data 302, the antenna A 2 106 can instead transmit a "pulse map" of the received data as is discussed below in conjunction with Figures 11-15B. This allows for different transmitters to be provided in the system with different transmission formats without the need to modify the software, the antenna A 2 106. The received data and transmit strength could also be similarly "pulse" and "amplitude" mapped. Such a package of data 302 is transmitted by the antenna A 2 106 for each burst of data received from the wireless antenna W A 100. The package of data 302 is transmitted over the network 110 to the server 112. Because the antenna A 2 106 stamps the data with a time of arrival, transmission latency over network 110, as long as it is not highly excessive, will have little effect on the operation of the system. The server 112 is then running software 304 which receives the packets from the various antennas A, 104, A 2 106, and A 3 108, as well as other antennas and potentially touch-sensitive receivers as well. The software 304 employs a digital signal processing algorithm described below to identify, locate, and track the various wireless transmitters. Specifically, a data table is created containing, for each transmitter such as W A 100, the identification number (WIN), a calculated transmit interval, and an expected time of arrival 17 of the next transmission. Then, when the server 112 receives a packet such as the packet 302 that has a time of arrival stamp that falls within an expected time of arrival, the server 112 can compare the portion of the WIN within that packet to the expected next portion of the WIN as defined by the data item 306. If they match, it can be deduced with a high degree of certainty that the packet was in fact transmitted by the transmitter W A 100. At this point, it is instructive to understand that the data formats and transmission intervals can be varied in different embodiments. For example, although Figure 2C illustrates a transmission format in which each nibble of the transmission is repeated, that is done to assist the software within the server 112 to determine when two successive nibbles are being transmitted by the same transmitter W A 100 or W B 102. Instead, by employing an intelligent algorithm (described below) within the server 112, the nibbles need not be repeated as shown in Figure 2C, but instead the software 304 within the server 112 can determine when successive symbols are transmitted by the same transmitter W A 100 or W B 102 based on the intervals between transmissions. If the intervals are fixed, for example, if a sequence of three transmitted symbols has two identical periods T N between the transmissions, it can be determined with a high degree of certainty that the same transmitter W A 100 or W B 102 is transmitting the symbol. This is because the Ajitter≤ between consecutive transmission periods is preferably very low. Further, although as shown in Figures 2A-2C the WIN A 150 or WIN B 152 is broken up into a sequence of nibbles, it could instead be encoded, encrypted, digitally signed, or otherwise re-arranged. This is illustrated in Figure 8, where a WIN 400 is combined with a random value 402 (which could instead be a sequential counter to eliminate the transmission of unneeded, random data). This yields combined data 404, which is then passed both through a public key and a private key algorithm 406. This algorithm encrypts the data 404 with a public key known 18 to the server 112, and encrypts the data 404 with a private key unique to the transmitter W A 100 or W B 102. As is known in the encryption arts, this has the effect of both digitally signing and digitally encrypting the data 404. This results in signed and encrypted data 408, which is transmitted through the antenna such as the antenna A 2 106, over the network 110, and to the server 112. Within the server software 304, a public key and private key corresponding to the private key and public key used in the algorithm 406, are employed in a step 410, where the private key encryption of step 406 is reversed using the public key associated with the transmitter W A 100, and the public key encryption of step 406 is decrypted with a private key associated with the server 112. In this way, the data is authenticated by the private key/public key combination and decrypted with the public key/private key combination. This decrypted authenticated data 412, once fully gathered in a sequence of transmissions, is then stored as the data 306 within the server 112, yielding a wireless identification number WIN 414. But again, even though the data 404 is encrypted and signed in a step 406, that encrypted signed data 408 is still divided into a sequence of symbols which are transmitted in a series of bursts as illustrated in Figure 2C. That is, all of the data forming the encrypted data 408 is in general transmitted in a series of descrete transmissions, such that the server 112 first receives a series of packets 302 over a period of time before it can identify the transmitter W A 100 or W B 102 with certainty. Preferably, the "random" number 402 is actually a sequential counter that is incremented for each series of packets containing a WIN. By employing a sequential counter, it is ensured that over time, encrypted data item 408 will be different. This way, an eavesdropper cannot capture a series of bursts that together form all of the identification data of a transmitter and then retransmit that, "spoofing" the transmitter. This is because the software 304 will expect a next 19 sequential number 402, rather than a previously transmitted number, and will thus know that the "spoofed" transmission is invalid. Referring back to Figure 7, many variations are possible. For example, within the data 306, an interval is stored which corresponds with a particular transmitters interval T N as is illustrated in Figure 2B. Although this interval is shown as being fixed, it will be appreciated that the interval is more generally arbitrary, rather than necessarily fixed. For example, a known, pseudo-random offset can be added to each succeeding interval T N so that two transmitters will not become in Alock step≡ and continuously collide. This pseudo-random offset could be based on a variety of values. For example, the offset of the interval for the next transmission could be a hash function or other function of the random (or counter) number 402 as illustrated in Figure 8. Then, when the server software 304 receives both the WIN 400 and the random number (or counter) 402 as illustrated in Figure 8, it can calculate a series of next intervals T N for the next sequence of transmissions of the encrypted WIN. Alternatively, it is possible to base the Arandom≤ offset on the symbol that was last transmitted by the transmitter W A 100. Because each transmitter has its own unique WIN, such as the WIN A 150 or the WIN B 152, .and because the succeeding symbols in general differ among the transmitters, by providing that the next interval will have an offset based on the particular symbol transmitted in the current transmit period (such as the transmit period 154, Figure 2B), a Apseudo-random≤ interval can be determined to adjust the expected time of arrival of the next transmitted symbol. Although "pseudo-random," the offset is both arbitrary and deterministic, in that the server 112 can calculate based on previous transmissions what that next Apseudo-random≤ offset will be. Further, it will be appreciated that although the wireless transmitters W A 100 and W B 0102 should have low unanticipated Ajitter≤ between subsequent transmission periods (such as 20 the period T A1 and T^, see Figure 2B), it will not adversely affect the operation of the systems if over time period T N drifts. This is because the server 112 can compensate for slight drifts over time by adjusting the determined interval within the data 306. This is particularly advantageous, because it is fairly simple to construct a transmitter that has little jitter between subsequent transmissions, but a change in temperature or operational characteristics of components will often cause drift of transmission periods over time. Also, while it might be difficult to synchronize the clocks within the antennas A, 104, A 2 106 and A 3 108, this is not strictly necessary as long as the clocks do not have much jitter themselves. This is true because the server 112 and its software 304 can normalize all the antennas A, 104, A 2 106 and A 3 108 to a single time base. This is done when two of the antennas, such as A, 104 and A 2 106 both receive a transmission by a single transmitter such as W A 100. In that case, that transmission can be used as a reference point for the clocks for both of the antennas, with an offset between the two antenna clocks calculated by the server 112. Over time, the clocks speeds can similarly be scaled, such that the relationship of the clocks within the antennas A, 104, A 2 106 and A 3 108 are ultimately correlated to a high degree of precision within the server 112. Referring to Figures 9A-9F, shown are various data items employed by the server software 304 discussed below in conjunction with Figure 10. Turning to Figure 9A, shown is an EVENT data item 500, which is transmitted over the network 110. This data item 500 is essentially a packet of data transmitted by an antenna that has received a transmission from a transmitter. As illustrated, the EVENT data item 500 includes five elements in the disclosed embodiment, a SYMBOL item, an ANTENNA D item, a DATA item, a TO A (time of arrival) item, and a SIGNAL_STRENGTH item. As discussed previously and below, this data item 21 could instead include pulse maps rather than the SYMBOL item and the DATA item, and then the pulse maps can be deciphered by the signal processing server 112 rather than at one of the antennas. The SYMBOL item is the nibble that has been received as a symbol by one of the antennas, such as the symbol 164 of Figure 2B. It is indicated that the SYMBOL can be up to 64 bits, however. This would be for implementations in which it is desired to at some times transmit an entire identification at one time. For example, the wireless transmitter W A 100 could employ the low power, split transmission of the WIN A 150 in normal operation, but could also include a physical touch port that would allow the wireless transmitter W A 100 to actually be used as a Akey≡. By touching the physical touch port of the wireless transmitter W A 100 to a receiver port, it would then be desirable to immediately transmit the entire ID. In such an instance, the SYMBOL data item would actually include all 64 bits (i.e., 16 symbols worth) of the identification data, or WIN, of the wireless transmitter. In such a circumstance, the ANTENNA ID field would include a sensor identification value. The ANTENNA_ID field is shown to be a 16-bit value. It could be more or less, however, an it could employ an object ID technology as described in the previously incorporated U.S. patent entitled Sensory and Control System for Local Area Networks. In any case, the ANTENNA_ID field identifies the particular antenna or sensor which has received the data, such as the antennas A, 104, A 2 106 and A 3 108 of Figure 1. The DATA field could include any associated data (such as the data 166 of Figure 2B) transmitted on the particular transmission, here shown to be between 0 and 256 bytes. Typically, a data transmission associated with a symbol transmission would include a header value that indicates the amount of data to be transmitted, followed by the data itself. Preferably, large 22 amounts of data that are transmitted via wireless transmission would be split up among transmission periods such as the transmission periods 154-162 of Figure 2B, so that if there is a collision involving any particular packet of data, only a portion of the transmitted data is invalid. The TOA field is shown to be 32 bits. It again could be larger or smaller. Further, the time of arrival field is preferably the value transmitted by the antenna/sensor, but could be normalized upon receipt to a common time-base before it is stored as discussed above. In any case, because the antenna/sensor is known, the TOA can at some point be normalized to a common time base for the server 112 in the systems as discussed above. A SIGNAL STRENGTH field shown to be 8 bits to indicate relative minimal and maximal strength between 256 values. The SIGNAL STRENGTH field is preferably set within an antenna by sensing the signal level of the received transmission. While the EVENT item 500 preferably reflects each received burst transmission by an antenna, this could mean that multiple EVENT items will be received for each signal transmission if more than one antenna has received that item. For example, if the three of the antennas A, 104, A 2 106 and A 3 108 all receive a transmitted symbol, three EVENT items will be generated from three packets of data. These three EVENT items are then stored in a queue until they can be processed by the software 304. The software 304 will either normalize the TOA field of the received EVENT item based on the ANTENNA ID field, or can wait to normalize the TOA field when the EVENT item is processed. In either case, for purposes of identifying a particular transmitter such as the transmitter W A 100 or W B 102, the software 304 normalizes the three EVENT items to a single time of arrival and a single symbol, which are stored as a SINGLE item 502 within a SINGLES_TABLE 23 504. Alternatively, the software 304 can normalize the three EVENT items to three SINGLE items 502, each reflecting a different received packet. In that case, it is preferable that the SINGLES item 502 further include an ANTENNAJD item (not shown) so that the software 304 can appropriately determine which antenna a particular SINGLES item 502 is associated with. The SINGLES item 502 includes a 4-bit SYMBOL item, which reflects the particular symbol transmitted by a particular transmitter in the system, and its associated time of arrival (TOA), the 32-bit value normalized to a common server 112 time base. These SINGLES items 502 are stored in a SINGLESJTABLE 504 of Figure 9C. The SINGLESJTABLE 504 is an array of SINGLE items 502. Although shown to contain 16 data items, this is more of a function of how many transmitters are expected within the system S, how widespread the system S is intended to be, and the processing power of the server 112. The SINGLESJTABLE 504 is employed by the software 304 to determine when subsequent symbols are being received from the same wireless transmitter such as W A 100, and then to positively identify that transmitter such as W A 100. Specifically, for the various single transmissions in the SINGLESJTABLE 504, a list of possible pairs of symbols is generated and formed into a data table SINGLE_INTERVAL_TABLE 506, illustrated in Figure 9D. The SINGLE_INTERVAL_TABLE 506 is an array of POSSIBLE_PAIR data items, which are of a type PAIRS 508, illustrated in Figure 9E. Each of the PAIRS data items 508 includes a FIRST_SINGLE and a SECOND_SINGLE data item, which are each a pointer to a particular SINGLE data item 502 within the SINGLESJTABLE 504. Each PAIRS data item 508 further includes a 16-bit value which indicates the time interval between the two SINGLE data items 502 24 TOA value. Thus, each of the PAIRS data items 508 effectively points to a received transmission and denotes the interval of that transmission. As is further discussed below in conjunction with Figure 10A and 10B, when three symbols are successfully received from a transmitter such as the wireless transmitter W A 100, those three transmissions could be matched up as follows. First, the interval between the first transmission and the second transmission, as compared to the interval between the second transmission and the third transmission will be the same (or of a known relationship). Thus, the software 304 can examine the SINGLEJTABLE 506, and the INTERVAL values within that table 506, to determine if a previous possible pair had an interval that matched the interval between the present received data item under investigation and the second data item of the possible pair. This will be further understood in the discussion of the software and Figures 10A and 10B, but to summarize, when three data items have intervals that are the same or related in a known way, and the middle data item is the same for both potential pairs, then it is determined that the three data items were transmitted from the same transmitter W A 100. Once a particular transmitter, such as the transmitter W A 100, has been either partially or fully identified, it is placed into an IDENTITY TABLE 510, illustrated in Figure 9F. This IDENTITY includes a WIN field of 64 bits, which stores a wireless identification number. Although the WIN field is 64 bits, it will be understood that when a transmitter such as the W A 100 is first partially identified, not all 64 bits stored in the WIN field will be valid. The number of bits that are presently valid within the WIN field is indicated by an IDENTIFIED field, which is a 4-bit counter of the number of valid nibbles in the WIN field. As additional symbols are received via the antennas and identified based on time of arrival, that identity is added to the 25 WIN field and the IDENTIFIED variable is incremented until it reaches a value of 15, including all 16 nibbles have been identified. Further, a SYMBOL INDEX value is an index into the WIN field to indicate what the next expected symbol is going to be. Of note, if the SYMBOL INDEX value exceeds the IDENTIFY value, the next symbol is still unknown because the WIN has not yet been fully received. Two values, a LASTJTOA and a NEXT TOA value, indicate the normalized 32-bit time of arrival of the last received symbol for this transmitter, and the normalized next expected time of arrival for this transmitter. This next expected time of arrival in NEXT TOA is in part determined based on an INTERVAL field, which indicates the basic determined interval for the transmitter. As previously discussed, generally the interval will be constant, but it could be arbitrarily altered to reduce collisions. Finally, a SYMBOL_COUNTER field is a counter of the number of times a particular transmitter has transmitted. This counter is preferably included in a portion of the data transmitted by the transmitter itself. Specifically, the SYMBOL COUNTER field would preferably correspond to the data 402 of Figure 8. These various identities are stored in an IDENTITY TABLE 512, illustrated in Figure 9G, which is simply an array of types of IDENTITY 510. It will be appreciated that variety of other data items can be associated with the structures of Figures 9A-9G. Specifically, the structures of Figures 9A-9G are principally directed to identifying transmitters, rather than the accumulation of data and the processing of data. Other structures could be employed for data processing and accumulation, as well as identifying a 26 particular location for a transmitter. Further, a variety of other data items could be employed for the acquisition of telemetry data from a transmitter. Turning to Figures 10A and 10B, illustrated is a flow chart of a typical routine used by the software 304 of the server 112 to identify particular transmitters within the system S. The routine begins at a step 600 when a packet of data has been received from one of the antennas A, 104, A 2 106, or A 3 108. This packet is in the form of an EVENT structure 500. Beginning at a step 602, the EVENT structure 500 is received, and it is assumed in this embodiment that the TOA field is normalized to the time base of the server 112. Proceeding to a step 604, it is determined whether the TOA within the EVENT structure 500 is found within the IDENTITYJTABLE 512. Specifically, it is determined whether one of the IDENTITY structures 510 includes a NEXT TOA field that matches the TOA of the EVENT, plus or minus certain error tolerance. If so, in the disclosed embodiment it is_presumed that the received symbol is in fact part of an already identified transmitter, such as the transmitter W A 100. So, control proceeds to step 606, where it is determined whether the SYMBOL field of the received EVENT 500 matches the corresponding symbol within the IDENTITY structure 510 with the matching NEXTJTOA field. This would not be true if the IDENTITY 510 has not been fully established, and the SYMBOL NDEX field is greater than the IDENTIFIED field of the matched IDENTITY 510. If the SYMBOL value of the EVENT 500 is not known at step 606, control proceeds to step 608, where the SYMBOL value of the EVENT 500 is stored within the WIN field of the IDENTITY structure 510 at a location specified by the SYMBOLJNDEX value of the matched IDENTITY 510. 27 If at step 606, however, the SYMBOL is known within the matched IDENTITY structure 510, control proceeds to step 610, where it is determined whether the SYMBOL value of the present EVENT 500 matches the symbol within the IDENTITY 510 as specified by the SYMBOL INDEX value into the WIN. These values should match, indicating that the received symbol is in fact from the identified transmitter such as W A 100. If not, control proceeds to step 612, where in the present embodiment, the packet is discarded. There are other potential approaches to handling an "incorrect" received symbol, such as reverting a previously identified transmitter to a non-identified status, but for the simplicity they are not shown here. From step 608, from step 612, and from step 610 if the SYMBOL does match the expected value, control proceeds to step 614, where various aspects of the matched IDENTITY structure 510 are updated. For example, the SYMBOLJNDEX value is incremented if a valid symbol was received, the IDENTIFIED value is incremented if it is not yet equal to 15, the NEXTJTOA value and LASTJTOA value are calculated and stored, the SYMBOL_COUNTER is incremented if the received value is a header value, and various other housekeeping is performed. In this regard, it should be noted that a header symbol, when received, is used to align the WIN of an identity. For example, a new transmitter may enter the omnidirectional antenna A 2 106 range, but the first values received would generally not be a header value. But the system can continue to receive and store nibbles of the WIN until a header value is received, at which point, the SYMBOL INDEX and the values stored in the WIN are adjusted so that the first nibble is in the appropriate position. From step 614, control proceeds to step 616, with processing of the received packet begun at step 600 complete. The routine will be reentered when another packet is received. 28 From step 604, if the TOA is not present in the IDENTITYJTABLE 512, the received symbol is not a part of a previously identified transmitter. Control in this case proceeds to step 618, where it is determined whether the SYMBOL portion of the received EVENT 500 is present in the SINGLES TABLE 504. If so, this means another antenna has already transmitted and the server 112 has already stored this particular symbol with its corresponding TOA as a SINGLE item 502 within the SINGLES TABLE 504. So, this particular received symbol does not need to again be stored in the SINGLES TABLE 504. Therefore, control proceeds to step 620, where any additional antenna information is stored if desired. This may be desired because at this point, it is clear that more than one antenna, such as the antennas A, 104, A 2 106 and A 3 108, has received this particular tr.ansmitted symbol from a particular transmitter such as W A 100 or W B 102. By storing additional antenna information, the particular location of the transmitter can ultimately be determined. Control proceeds from step 620 to step 616, where the routine is complete. From step 618, if the received SYMBOL and the EVENT 500 are not in the SINGLES TABLE 504, control instead proceeds to step 622. In this step, potential intervals are calculated between the symbol and TOA within the current EVENT 500 and previously stored SINGLES data items 502 within the SINGLESJTABLE 504. This process generally involves matching a symbol and TOA within the current EVENT 500 with any SINGLE data items 502 that occurred a certain amount of time earlier. For example, assume it is known that all transmitters in the system transmit with a periodicity of one second plus or minus ten percent. Then, any SINGLES data items 502 that occurred outside that window earlier cannot be from the same transmitter, with such appearing with the current symbol and TOA within the current EVENT 500 is impossible. Thus, such "out of range" previous SINGLES data items 502 are not 29 stored with the current EVENT 500 as a potential interval. Only those intervals which are permissible are actually calculated to be potential intervals. Proceeding to step 624, the calculated intervals are looked up in the SINGLESJNTERVALJTABLE 506. Specifically, the interval calculated in step 622 is looked up in the various PAIRS data items 508 within the SINGLEJNTERVALJTABLE 506. If the interval is the same as a previous interval, control proceeds from a step 626 to step 628, where it is determined whether the stored INTERVAL item of the PAIRS item 508 which is a match can be the correct pair. Specifically, even if the two intervals match, the SECOND SINGLE must correspond to the SINGLE with which the present events symbol has been used to calculate the present interval. That is, the series of symbols must be FIRST SINGLE and then SECOND_SINGLE of a particular pair, followed by the SYMBOL within the present EVENT 500. If so, as determined at a step 630, control proceeds to step 632. At step 632, a partial identity is stored as an IDENTITY item 510 within the IDENTITY JTABLE 512. Further, the SINGLESJTABLE 504 and the SINGLEJNTERVALJTABLE 506 is "cleaned up" by removing any corresponding singles, intervals, and possible pairs corresponding to the identified items. From step 632, control proceeds to step 634, where the routine is complete. At this point, it should be appreciated that this disclosed technique is illustrative only. For example, it may be required that more than three consecutive received symbols be identified as having the same intervals to positively identify a particular transmitter. At step 626, if calculated intervals are not found in the SINGLEJNTERVALJTABLE 506, and at step 630, if the interval is not positively identified, control instead proceeds to step 636, where the SYMBOL and the TOA of the present EVENT 500 is added to the 30 SINGLESJTABLE 504 as a SINGLE item 502. Control then proceeds to step 638, where the calculated possible intervals are added to the SINGLEJNTERVALJTABLE 506 possible pairs. From step 638, control proceeds to step 634, where the routine is complete. Other software would also typically be involved in the identification and tracking system according to the invention. For example, background "watch dog" software would monitor the SINGLESJTABLE 504 and the SINGLESJTABLE 506 and eliminate any stale data. Further, error checking and handling software can process spurious or out of tolerance data. Further, once a particular transmitter is identified, error handling and monitoring software, including portions of the routine of Figures 10A and 10B, can remove an item as identified once symbols are no longer being received from that transmitter. Exemplary code for acquiring the various transmitters is attached as Appendix A. Further, the particular code used for location tracking is not shown. Once a transmitter is identified, however, it is tracked and its presence located based on each symbol received. For example, the IDENTITY data item 510 within the IDENTITYJTABLE data item 512, would typically include further data items corresponding to which antennas had most recently received data from that particular transmitter. Then, tracking software can determine the location of the transmitter based on that data. This is further understood in conjunction with U.S. patent 5,119,104, entitled Location System Adapted for use in Multipath Environments, issued June 2, 1992; U.S. patent 5,276,496, entitled Optical Receiver for Area Location System, issued January 4, 1994; U.S. patent 5,387,993, entitled Method for Receiving and Transmitting Optical Data and Control Information to and from Remotely Located Receivers and Transmitters in an Optical Locator System, issued February 7, 1995; U.S. patent 5,355,222, entitled Optical Receiver for Area Location System, issued October 11, 1994; and U.S. patent 5,548,637, entitled Method and 31 Apparatus for Locating Personnel and Objects in Response to Telephone Inquiries, issued August 20, 1996. Turning to Figures 11 - 15B, illustrated is a simplified embodiment in which each transmitter has a 9-bit identification value. This simplified system is useful for demonstration purposes, both in illustrating the acquisition of the identification, the tracking by multiple antennas, the bandwidth occupation, the protocol of particular symbols, and how those particular symbols are transmitted from an antenna to the signal processor. This alternative embodiment is also exemplary of the variety of actual implementations available while using the techniques according to the invention. The embodiment of Figures 11-15B could be used in a 64-bit identification value technique while only transmitting one bit per second, and could be used in a variety of other transmit rates using a variety of pulse mapping techniques. Referring to Figure 11, transmissions from two transmitters .are shown. A first transmission 800 from a first transmitter illustrates the periodic transmission of a 9-bit identification value "9'6010000001". Slightly offset and asynchronous to that transmission 800 is a transmission 802, which is a transmission by a second transmitter of a identification 9'b 000111010. The transmission format is a start of transmission, or STX, symbol followed by nine either 0 or 1 symbols. The format of these symbols are discussed in more detail below in conjunction with Figures 13A and 13B. Referring to the details of the transmission 800, however, Figure 12 shows the timing of these symbols. The STX symbol, as well as the various 0 and 1 symbols, are each transmitted in this embodiment in approximately one millisecond or less. The time between symbols is approximately one second. Thus, the bandwidth is around 0.1 percent per transmitter. The bandwidth could be reduced to much less by reducing the 32 amount of time used to transmit a particular symbol. This can be done in a variety of ways, and again is discussed below in conjunction with Figures 13A and 13B. In this particular embodiment, the amount of time between an initial and a second pulse establishes what type of symbol is being transmitted. In this particular embodiment, additional telemetry data, ranging pulses, and the like are not employed. They could, however, be appended to each transmission. Further, a single bit is transmitted during each transmission. Again, this can be modified as desired, allowing some other multiple of bits to be transmitted during each transmission period, such as 4 bits as is disclosed in Figures 2A-2C. Turning to Figures 13A and 13B, details of the particular transmission format as well as how the transmitted pulses are received and then transmitted on to the signal processor 112 is shown. Referring to Figure 13 A, shown is a timing diagram with the timing of a 0 symbol 804, a 1 symbol 806, and a STX symbol 808. The transmission of the 0 symbol 804 is addressed first. In this embodiment, a 100 microsecond start bit 810 is first transmitted, followed by a 300 microsecond silent period 812, and then a 100 microsecond pulse 814. The start and end pulses 810 and 814 are preferably formed by turning on a 900 megahertz carrier transmitter for 100 microseconds. The 1 symbol 806 and the STX symbol 808 are similarly formed with start and end bits 816, 818, 820, .and 822, but the 1 bit includes a 700 microsecond off period 824 and the STX symbol has a 1000 microsecond off period 826. The timing of these symbols can be greatly reduced. For example, the 100 microsecond pulses could be reduced to 10 microseconds, and the off periods could similarly be reduced by an order of magnitude. Doing so, however, requires the receiver to have a higher "pulse map" resolution, as is now discussed. In the disclosed embodiment of Figure 1, it would be possible for the antenna Al 104, for example, to itself detect the 100 microsecond pulse 810, the 300 33 microsecond off period 812, and then the 100 microsecond on 814 forms a 0 symbol 804. It could then transmit that 0 symbol on to the signal processor 112. According to the present embodiment of the invention, however, the antenna does not decipher the meaning of the transmitted signals and then forward the deciphered information on to the server 112. Instead, the antenna creates a "pulse map" which effectively is a time slot mapping showing when the carrier is being received. The server 112 then deciphers the meaning of that pulse map. Using this technique, the "intelligence" can be embedded in the server 112, and as different transmitters are introduced into the system which may have different transmission formats, it is unnecessary to alter the antennas. To this end, each antenna includes an internal clock that counts at a high rate of speed. Here, a first interval 828 is shown during which each of the three exemplary symbols starts transmitting its first pulse. This interval 828 in the illustrated embodiment is approximately 70 microseconds. When a 900 megahertz transmission is received during a particular interval, the antenna recognizes this as the start of a symbol transmission. It waits for three 70 microsecond intervals 830, and then begins acquiring data which will become the pulse map. Specifically, in this embodiment, the following 16 intervals 832 are monitored, and whenever a 900 megahertz transmission is received during any portion of an interval, a 1-bit is assigned in the pulse map corresponding to that interval. Otherwise, a 0-bit is assigned corresponding to that interval. This pulse map could be extended indefinitely, such as until no 900 megahertz transmission is received for at least a predetermined number of 70 microsecond intervals. In any case, referring to the symbol 0 804, it is seen that during the first two intervals of the pulse map 834 and 836, no 900 megahertz transmission is received from the transmitter, so these are mapped as 0 bits. During the following two intervals 838 and 840, however the pulse arrives, so these two intervals 34 are mapped as binary 1 bits. The following 12 intervals 842 receive no transmission, and are thus assigned a value of binary 0. Thus, when the 0 symbol 804 is sent by a tr.ansmitter, the antenna receives it in Figure 13A as a 16'h 3000 value, which is transmitted over the network 110 to the signal processor 112. Similarly, a 1 symbol maps to 16'h01C0 and the STX symbol 808 maps as a lό'hOOOC. Turning to Figure 13B, it is seen that different pulse maps can be generated for the same symbol. Specifically, in Figure 13B, three start pulses 843 A, 843B, and 843C occur early in a first interval 844. This results in corresponding end pulses 845A, 845B, and 845C falling into slightly different intervals within the pulse map. Therefore, in this case the 0 symbol maps as 16'h0700, the 1 symbol maps as 16'h0180, and the STX symbol maps as 16'hOOlC. These slightly different exceptions can occur both because of the transmission rate of the transmitters, the fact that the transmitters and the antennas clocks are not synchronized, and spreading that can result from reflections and noise during the transmission of the pulse. Using intelligence algorithms, the variation in the pulse maps is readily accommodated by the signal processor 112. Referring to Figure 14, the particular decoding for these pulse maps is shown. Specifically, an STX symbol is determined to have occurred whenever a pulse map 846 occurs - specifically, when one of the final 7 values is a 1. Similarly, a 1 is decoded when a pulse map 848 occurs again where one of the middle three values is a 1. Finally, a 0 is decoded when a pulse map such as 850 occurs - that is, when one of the initial six intervals mapping as a l. But the particular deciphering of the pulse map is not critical - the point is the deciphering occurs not at one of the antennas, such as the antenna A, 104, A 2 106, or A 3 108, but instead at the signal processor 112. Therefore, if different transmitters are used employing a 35 different protocol, the older antennas can still be used, as long as software within the signal processor 112 is updated. That is, employing pulse mapping allows the decoding of symbols and transmissions into their particular meaning to occur at the signal processor 112 rather than within one of the intelligent antennas. Turning to Figures 15A and 15B, shown are both the data packets transmitted by a particular antenna or receiver, as well as that data as decoded by the signal processor 112. Whenever a receiver receives a transmission such as illustrated in Figures 11-14, that receiver then transmits a data packet over the network 110 as illustrated in Figure 15. First, it transmits a header symbol 852. It then transmits a sequence number 854. This is simply a incrementing value between 0 and 256 which allows the signal processor 112 to ensure it has not missed any data packets from a particular receiver. Next included in the data packet is a packet type 858. This is normally a space character, or " ", but would be an exclamation point, or "!" for a data packet intended to indicate to the signal processor 112 that the receiver is "still alive". The next data item in a data packet is a receiver number 860. This is preferably a 16-bit value that represents a unique receiver identification within the system. Next is a time of arrival 862, which in the disclosed embodiment is a 32-bit value that, represents 70 microsecond tics of the receiver's counter. Similarly, the pulse map is a 16-bit value representing the pulse map as discussed in Figures 11-14 previously. In Figure 15 A, two packets of data 864 and 866 are shown transmitted to the signal processor 112 by a receiver EC03 and a receiver EC05. It is seen that the time of arrival 862 of these packets is slightly different, perhaps because the clocks of the two receivers are not synchronized. But, these represent the same received pulse by the two separate receivers. In this case, these packets represent a "1 " symbol. 36 Turning to Figure 15B, it is appreciated how the signal processor 112 decodes the packets transmitted by the various receivers and antennas here has corresponded packets sent over the network by a first receiver 868 with packets received by a second receiver 870. By corresponding various transmissions, such as the STX 872, the "TOA" of the first receiver and the second receiver can be correlated. That is, using a variety of transmissions, the 70 microsecond clock of the first receiver 868 and the second receiver 870 can be synchronized. In any case, it is seen that a sequence of symbols 874 and 876 have been received by the first and second receivers 868 and 870 which correspond to a transmitter that is transmitting an STX symbol followed by a sequence of identification bits that map to 9'bO 10000001. (One transmitted packet 878 is discarded because it is a "keep alive" packet transmitted by the receivers 868 and 870). Referring back to Figure 15A, the packets 864 and 866 are seen to correspond to the received 1 symbol 880 in Figure 15B. It will be further appreciated that additional antennas or receivers could be added to the system, and that the presence of a transmitter to one receiver but its absence to another can be used for location of the transmitter. Turning to Figures 16 and 17, the construction of a transmitter within the wireless transmitter W A 100 is shown. Preferably, the transmitter transmits a 900 megahertz signal generated by Colpitts oscillator. That oscillator is turned on and off to generate an appropriate sequence of pulses. Block and schematic diagrams of the wireless transmitter W A 100 is shown in Figures 16 and 17. As illustrated, a logic sense and control unit 700 can have an input from a motion switch 702 and a push button 704 as optional features. Further, a watchdog timer 706 periodically wakes up the logic sense and control unit 700 at appropriate times for transmission. This reduces overall power consumption. An external serial port 708 can be provided which can provide an external ID, or include memory, temperature, or addressable transistor inputs, as well 37 as a binary switch close sense input. The logic sense and control unit uses all of these inputs to create appropriate strobes via transmission circuitry 710. Turning to Figure 17, shown as typical transmitter circuitry that would be used according to the invention. The motion sensor 702 and push button switch 704 both have direct inputs to logic sense and control circuit 700, which in the disclosed embodiment is a PIC 12C508 processor. This is controlled by the watchdog timer 706, which in the disclosed embodiment is an MN1381-E. The logic sense and control circuit 700 controls the RF transmitter block 710, which is effectively a Colpitts oscillator. A battery circuit 712 powers the entire system. Exemplary software for execution by a logic sense and control circuit 700 is illustrated in the attached Appendix B. Turning to Figures 18 A and 18B, shown is a sample receiver section for the antenna such as the antenna A, 104, A 2 106, or A 3 108, that is connected to the server 112. Circuitry block 900 is simply a standard receiver section for receiving a signal of around 900 megahertz. It includes various components such as a mixer 902, an antenna 904, a crystal 906, and provides an output signal 908. This is fed into processing section 910, shown in Figure 18B. This processing section further processes received data that has been received from the mixer section 900, and provides output data on a data signal 912. This data signal is provided to a microcontroller section 914. This microcontroller section 914 includes a microcontroller 916, here a PIC12C508 microcontroller. It processes data, .and then provides signals to the server 112 over a network via connectors 918 and 920. Exemplary software for execution by the microcontroller 916 is illustrated in Appendix C. Therefore, according to the invention, a transmission and reception system is provided in which identification data is distributed over a number of discreet transmission periods. After 38 acquiring enough identification data to either tentatively or affirmatively identify a particular transmitter, the receiving system can identify a particular transmitter based not on the data transmitted, but instead on when it is transmitting a particular discreet burst. This can be used in either a wireless or a wired system. Further, using smart receivers, the receivers can pulse map the received data rather than actually interpret the meaning of the data itself. By transmitting these pulse map and then time stamped received transmissions over a network, a server can process packets received by a number of antennas or receivers, and positively identify both the identity and the location of a particular transmitter. Further, various security features can be embedded, such as encrypting the actual identification transmitted by the transmitters, and by providing an arbitrary interval between various transmission which is not necessarily the same from transmission to transmission, but is determinable at the receivers. Using this system, a large amount of identification data can be transmitted, with a relatively high transmission frequency, but with greatly reduced power consumption. This is desirable in battery powered transmitter for both identification, location, and transmission of telemetry data in a system. The foregoing disclosure and description of the invention are illustrative and explanatory thereof, and various changes in the size, shape, materials, components, circuit elements, wiring connections and contacts, as well as in the details of the illustrated circuitry and construction and method of operation may be made without departing from the spirit of the invention. 39 APPENDIX A 40 // identify, h const double timelntervalMax » (double) (10.0) ; const double timeDeltaMax = (double) (10.0); const int MaxRecentlntervalCount = 10; // number of elements in floating average struct APac et ( int TransID; int SymbolValue; double ΪOA; double DeltaTime; ); // NewID structures class ASinglePacket { public: ASinglePacket () ; ASinglePacket) APacket* ptr ); int SymbolValue; double TOA; double DeltaTime; ASingleFacket * next; I; class ASinglePdcketList ( public: ASinqlePacketLlst () ( m_pHead - NULL; ) -ASinglePacketList () ( delete m_pHead; ) void Add ( ASinglePacket* ) ; void Removef ASinglePacket* ptr ); ASinglePacket* m_pHead; // since we're ditching duplicates, no need for ΞymbolValue in Interval. // mm and max time of intervals, in seconds ((define MIN_INTERVAL_TIME (25.0) ((define MAX_INTLRVAL_TIME (5000.0) class ASinglelnterval I public : ASinglelnterval! ASinglePacket* p_pBeg, ASinglePacket* p_pEnd ) ; ASinglelnterval ( const ASinglelntervals ) ; double delta; ASinglePacket* pBeg; ASinqlelMcket* pEnd; ASinglelnterval* next; I; class ASinglelntervalList ( public : ASinglelntervalList () ( m_pHead = NULL; ) -ASinglelntervalList;) ( delete m pHead; ) void Peιnuve( ASinglePacket* pPacket ); void Ada' ASinglelnterval* ptr ); ASinglelnterval* m_pHead; ); // holds partially and fully identified id's, class Aldent ( public. Aldent ( int firstbit, double interval, double origin ), void IncrementExpTOA( double actualTOA ) ( m_ExpectedTOA - actualTOA + m_Interval; ) int m_bldentιfled; // true if all 32 bits have been received long m_Ident, int m Bitctr; // 0- 3 l; next expected bit of Ident // floating average variables double m lπterval; // statistically stable int m RecentlntervalCount, // divisor used in computing averages double Recentlntervals [MaxRecentIntervalCount ) ; double m RecentlntervalSum; double m ExpectedTOA, // always changing Aldent* next, I. class AReceiver { public AReceiver ( int transid ) ( // m pSinglePackets = new ASinglePacket! symbols ), m_SιnglePacketLιst .m_pHead = NULL, m SinglelntervalList .m_pHead = NULL, m pIdentList = NULL, TransID = transid, next = NULL; ) -AReceiver ( ) ( if ( next ) delete next, // delete I) m_pSιnglePackets; ) int Handleldent ( double TOA, int symbolValue ); int CalculatelntervalSet ( ASinglePacket* pNewPacket, ASinglelntervalList* pList ), int ProcessIntervalSe ( ASinglelntervalList* NewList ), void AddlntervalSet ( ASinglelntervalList* NewList ), int TransID, ASinglePacketList m_S ingle Packet List ; ASinglelntervalList m_SmgleIntervalLιs ; Aldent * m pIdentList , AReceiver * next . / / class tha t handles the entire process . /* class AldentifyProcess ( public. void ProcessPacket ( APacket* pPacket ) ; AReceiver* GetReceιver( int TransID ); int ReadNumericl int handle, char* buffer, int bufsize ), // the main processing algorithm void ProcessPacket ( APacket* pPacket ); int CompareTimes ( double tl, double t2 ), int CompareDeltas ( double tl, double t2 ) ; 42 // identify. cpp ((include "stdafx.h" ((include <memory.h> ((include "identify. h" // globals AReceiver* pReceiverList = NULL; // the mam processing algorithm void ProcessPacket! APacket* pPacket ) I AReceiver* pReceiver = GetReceiverf pPacket->TransID ); if ( pReceιver->HandleIdent ( pPacket->TOA, pPacket->SymbolValue )) return; ASinglelntervalList NewList; ASinglePacket* pNewPacket = new ASinglePacket! pPacket ) ; pReceιver->CalculateIntervalSet ( pNewPacket, SNewList ); if ( pReceιver->ProcessIntervalSet ( SNewList ) »= 1 ) ( delete pNewPacket, return; ) pReceιver->AddIntervalSet ( SNewList ) ; pReceιver->m_SιnglePacketLιst . Add ( pNewPacket ), I // if the receiver does not exist, create it. AReceiver* GetReceiver! int transID ) ( AReceiver* ptr; for ( ptr = pReceiverList; ptr; ptr = ptr->next ) if ( transID == ptr->TransID ) return ptr; ptr = new AReceiver! transID ); ptr->next = pReceiverList; pReceiverList = ptr; return ptr, I int AReceiver. Handleldent! double TOA, int symbolValue ) I Aldent* ptr; for ( ptr = m_pIdentLιst; ptr; ptr = ptr->next ) I if ( CompareTimes ( ptr->m_ExpectedTOΛ, TOA )) I if ( ptr->m_bldentιfled ) I if ( ( (ptr->m_Ident s ( 1 << ptr->m_Bltctr )) ' 1 : 0 ) == symbolValue ) ( ) else // received wrong symbol ( ) ptr->m_Bιtctr++; if ( ptr->m_Bιtctr >= 2 ) ( ptr->m_Bitctr = 0; I ) else // not all 2 bits have been received I ptr->m_Ident <<= 1; if ( symbolValue ) 43 //ptr->m_Ident |= ( 1 << ptr->m_Bιtctr ), ptr->m_Ident 1= 1, ptr->m_Bιtctr++, // lust received last ( 2 nd) bit, mark identified if ( ptr->m_Bιtctr >= 3 2 ) ( ptr->m_Bιtctr = 0, ptr->m_bldentιfled = 1, ) ) // want to do this in a rotating array inst of memmove if ( ptr->m_RecentIntervalCount == MaxRecentlntervalCount ) ptr->m_RecentIntervalSum -•= ptr->m_RecentIntervals [ptr >m_RecentIntervalCount - 1), memmove! sptr->m_RecentIntervals [1] , Sptr->m_RecentIntervals [0] , sizeof ptr->m_RecentIntervals (0) * ( MaxRecentlntervalCount - 1 )), if ( ptr->m_RecentIntervalCount < MaxRecentlntervalCount ) ptr->m_RecentIntervalCount++, ptr->m_RecentIntervals [01 = TOA - (ptr->m_ExpectedTOA - ptr >m_Interval ) ptr->m_RecentIntervalSum += ptr->m_RecentIntervals [0] , ptr->m_Interval « ptr->m_RecentIntervalSum / ptr->m_RecentIntervalCount ptr->m_ExpectedTOA = TOA + ptr->m_Interval , return 1, ) ) return 0 ) // compares an expected TOA with an actual TOA int CompareTimes ( double tl, double t2 ) ( double dt = t2 - tl, if ( dt < 0 ) dt = - dt, return ( dt < timelntervalMax ) , ) // compares one interval with another (e g 500 ms vs 505 ms ) int CompareDeltas ( double tl, double t2 ) I double dt = t2 - tl, if ( dt < 0 ) dt = - dt, return ( dt < timeDeltaMax ) , ) int AReceiver CalculatelntervalSet! ASinglePacket* pNewPacket, ASinglelntervalList* pList ) ( double result, for ( ASinglePacket* ptr = m_SιnglePacketLιst m_pHead, ptr, ptr = ptr->next ) ( result = pNewPacket->TOA - ptr->TOA, if ( result >= MIN_INTERVAL_TIME SS result <= MAX_INTERVAL_TIME ) pLιst->Add( new ASinglelnterval! ptr, pNewPacket )), ) return 1, ) t AReceiver ProcessIntervalSet ( ASinglelntervalList* pNewList ) I ASinglelnterval* ptr, ASinglelnterval* pList, // pNewList is a possible interval set Each interval must be // checked against established intervals to see if there's a match for ( ptr = pNewLιst->m_pHead, ptr, ptr «■ ptr->next ) 44 I for ( pList = m_SmgleIntervalLιst .m pliead; pList; pList = pLιst->next ) ( if ( CompareDeltas! ptr->delta, pLιst->delta ) SS p r->pDeg->TOΛ -= pLιst->pEnd->TOA ) ( m_SιnglePacketLιst . Remove ( pLιst->pBeg ) ; m SinglePacketList . Remove ( pLιst->pEnd ), m_SιngleIntervalLιs .Remove ( pLιst->pBeg ) ; Aldent* pNewIdent = new Alden ( pt r->pEnd->SymbolValue, ptr- >delta, pt ι->prnd->TOA ), pNewIdent->next = m_pIdentLlst ; m pIdentList = pNewIdent; return 1 ; ) ) I 1 e t u t n 0 ) // need to copy pNewList (not 311st incorporate it) because it's // declared on the stack void ARereiver AddlntervalSet ( ASinglelntervalList* pNewList ) I ASinglelnterval' pPrevHead = m_SιngleIntervalLιst m_pHead, ΛS 1 nglol nt orval * ptL -= pNewList- >m_pMead ; foi ( pi: = pNewl.ιst->m_pHead, ptr; ptr = ptr->next ) I SinglelntervalList m_pHead = new ASinglelnterval! (const ASinglelnterval) (*ptr) ); m SinglelntervalList . m_pllead->next = pPrevHead, pPrevHead = m_SιngleIntervalLιst .m pHead; I /' if ( pti ) I while ( ptr->next ) ptr = ptr->next; ptι->next = m SinglelntervalList .m_pllead, I ιn_SιnyleIntervalLιst .m_pllead = pNewLιst->m_pllead; '/ I // a match foi a packet (pPacket) has been found, so delete // all liHPivn associated with it void ΛSi nt] le I nt ervalLis t . • Remove ( ASinglePacke * pPacket ) I ASinglelnterval* pList, ASinglelnterval* pPrev; pList = m pliead; pPiev = NULL; while ( pList ) ( if ( pLιst->pBeg == pPacket I I pLιst->pEnd == pPacket ) ( if ( pPrev == NULL ) ( m pliead = pLιst->next; delete pList; pList = m_pllead; ) else I pPrev->next = pLιst->next; delete pList; pList = pPrev->next; 45 ) else // default increment ( pPrev = pList; pList = pLιst->next; ) ) ) void ASinglelntervalList :: Add ( ASinglelnterval* ptr ) ( ptr->next = m_pHead; m_pHead = ptr; ) void ASinglePacketLis :: Remove ( ASinglePacket* pRem ) ( ASinglePacket* pList, ASinglePacket* pPrev; pPiev = NULL, pList = pHead; whi le ( pList ) I if ( pList == pRem ) I if ( pPrev == NULL ) ( m_pHead = pLιst->next; delete pList, pList = m_pHead; ) else I pPrev->next = pLιst->next; delete pList; pList = pPrev->next; pPrev = pList; pList = pLιst->next; ) ) ) void ASinglePacketList • : Add ( ASinglePacket* ptr ) t ptι->next = m_pHead, m_pHead = ptr; I // constructors ASinglePacket -ASinglePacket!) [ SymbolValue = 0; TOA = 0.0; DeltaTime =■ 0.0; next = NULL; ) ASinglePacket • : ASinglePacket ( APacket* ptr ) ( SymbolValue = ptr->SymbolValue; TOA = ptr->TOA; DeltaTime = ptr->DeltaTιme; next = NULL; ) ASinglelnterval .: ASinglelnterval ( ASinglePacket* p_pBeg, ASinglePacket* p pEnd ) I 46 pEnd = p pEnd; pBeg ■= p pBeg; delta = pEnd->TOA - pBeg->TOA; next = NULL; ) ASinglelnterval. ASinglelnterval! const ASmglelntervals me ) ( pEnd = e.pEnd; pBeg = me pBeg, delta = me delta; next = NULL, ) Aldent :: Aldent ( t firstbit, double interval, double origin ) ( m_bldentι led = 0, m_Ident = firstbit, m_Bιtctr = 1; m_lnterval = interval, m_ExpectedTOA = origin + interval; m_Recent IntervalCount = 0, memset! (void* ) ( Sm_RecentIπtervals) , 0, sizeof m_RecentIntervals ) m_RecentIntervalSum = 0.0; next = NULL, ) 47 // Process h main header file for the PROCESS application // (tif 'defιned(AFX_PROCESS_H_F7ClF785_lC8._llDl_BFA6_ACF800C10000 INCLUDED_) fidefine AFX_PROCESS_H F7C1F7B5_1C8 -_11D1_BFA6_ACF800C10000 INCLUDED_ #ιf _MSC_VER >= 1000 ((pragma once (tendif // _MSC_VER >-= 1000 difndef AFX IN_H ((error include 'stdafx h' before including this file for PCH (tendif ((include "resource h" // main symbols ((define WM_PROCESS__ELEMENT (WM__USER + 100) /// III III ' I II 11 II I III II 11 III III III I III III III 111 III III I III III 111 III ' III 11 II CProcessApp // See Process cpp for the implementation of this class // class CProcessApp public C inApp ( public CProcessApp { ) , // Overrides // ClassWizard generated virtual function overrides //( (AFX_VIRTUAL (CProcessApp) public virtual BOOL Initlnstance ( ) , //) )AFX_VIRTUAL // Implementation // I (AFX MΞG (CProcessApp) II) )AFX_MSG DECLARE_MESSAGE_MAP ( ) ), II II II 11 lit (AFX_INSERT_LOCATION) ) // Microsoft Developer Studio will insert additional declarations immediately before the previous line (tendif // 'defιned(ΛFX PROCESS 11 F7C1F785 1C84 11D1 BFA6 ACF800C10000 INCLUDED ) 48 // Process. cpp . Defines the class behaviors for the application. // ((include "stdafx.h" ((include "Process. " ((include "ProcessDlg.h" ff ifdef _DEBUG ((def ine new DEBUG_NEW flundef THIS_FILE static char THIS_FILE [ ) = FILE ; (tendi f in i mimmmmimimmmm/immmmiimii/ii/iim mi mm II CProcessApp BEGIN_MESSΛGE_MAP (CProcessApp, CWinApp) //( (AFX_MSG_MAP (CProcessApp) //) )ΛFX_MSG ON_COMMAND(ID_HELP, CWinApp: :OnHelp) END_MESSAGE_MAP ( ) II I II CProcessApp construction CProcessApp' : CProcessApp ( ) ( ) mmmiimimiimimmiimmmmmmimmmiii/i/im I I The one and only CProcessApp object CProcessApp theApp; i/miimi IIII mmmmimm/imiiiiimmmmmii/iiiii mn mn II CProcessApp initialization BOOL CProcessApp. : Imtlnstance ( ) ( // Standard initialization ((l def _AFXDLL Enable dControls () ; // Call this when using MFC in a shared DLL ((else Enable dControlsStatιc () ; // Call this when linking to MFC statically Kendif CProcessDlg dig; pMa Wnd = Sdlg ; int nResponse = dig . DoModal ( ) ; i f (nResponse == IDOK) ( ) else if (nResponse == IDCANCEL) I ) // Since the dialog has been closed, return FALSE so that we exit the // apolication, rather than start the application's message pump, return FALSE; 49 // ProcessDlg h header file // It if ' defined (AFX_PROCESSDLG_H F7C1F787_1C8._11D1_BFA6_ACF800C10000 INCLUDED_) ((define AFX_PROCESSDLG_H F7C1F787_1C84_11D1_BFA6_ACF800C10000 INCLUDED_ (fif _MSC_VER >= 1000 ((pragma once (lendif // MSC VER >= 1000 I ll/l I II Ill/Ill I I I l/l/lllll III l/lll/ll Ill/Ill/////// III III III/ III// III 1/ CProcessDlg dialog class CProcessDlg public CDialog I // Construction public CProcessDlg (CWnd* pParent = NULL), // standard constructor // Dialog Data //( I AFX DATA (CProcessDlg) enum ( IDD = IDD_PROCESS_DIALOG ), CListBox m_SιngleLιst, CListBox m_IntervalLlst, CListBox m_IDLιst, //) )AFX_DATA // Class izard generated virtual function overrides //( (AFX VIRTUAL (CProcessDlg) protected virtual void DoDataExchange (CDataExchange* pDX) , // DDX/DDV support //) 1AFX VIRTUAL void UpdateUI () , UINT m_nTιmerID, int m_DataHandle, BOOL m StartStop, // Implementation protected HICON m_hIcon, // Generated message map functions // ( (ArX SG (CProcessDlg) virtual BOOL OnlmtDialog ( ) , afx_msg void OnSysCommand (UINT nID, LPARAM lParam), afx_msg void OnPaintO, afx_msg HCURSOR OnQueryDraglcon ( ) , afx_msg LRESULT OnProcessTime ( PARAM wParam, LPARAM lParam) , afx_msg void OnCloseO, afx_msg void OnTιmer(UINT nIDEvent), afx msg void OnStopO, //) )AFX_MSG DECLARE MESSAGE MAP ( ) ). //( (AFX_INΞERT_LOCATION) ) // Microsoft Developer Studio will insert additional declarations immediately before the previous line (lendif // 'defined (AFX PROCESSDLG H F7C1F787 1C8. 11D1 BFA6 ACF800C10000 INCLUDED ) 50 // ProcessDlg cpp • implementation file // //((include <sys/types h> //Ainclude <sys/slat.h> ((include "stdafx h" (t include <ιo . h> ((include <fcnll h"> ((include "identify. h" Kinclude "Process. h" Hinclude " Prot e sDlg . " mt ReadNuineric! int handle, char' buffer, int bufsize ); int KeadUntilCOL ( ml handle ), // qlobals extern AReceiver* pReceiverList, Kifdef DEBUG ltdefine new DEBUG_NEW Kundef THIS TILE static char T1IIS_F1LE[] = FILE ; (lendif III 111111 l/l // 11 / 1111111111111111111111111111 / 111 /// 11111111 / 1 / 1111 / 11 / 11111 / II CΛlioutlllq dialog used loi Λpp About class CAboutDlg public CDialog I publ ic : CAboutDlg () ; // Dialog Data //( (ΛEX DATA (CAboutDlg) onum I IDD = IDD_ΛBOUTB0X ) ; //) )AFX_DΛTA // ClassWizard geneialed virtual function overrides // [ (ΛrX_VIRTUΛL (CAboutDlg) protect ed • virtual void DoDataExchange (CDataExchange* pDX) ; // DDX/DDV support //) IAFX VIRTUAL // Implementation pt otected: //( I ΛFX_MSG (CAboutDlg) //) |ΛFX_MSG DECLARE MESSAGE MAP ( ) CAboutDlg: : CAboutDl () : CDialog (CAboutDlg :: IDD) I IH (AFX_DATA_INIT (CAboutDlg) //) )ΛΓX_DΛTΛ_INIT 1 void CAboutDlg : • DoDataExchange (CDataExchange* pDX) I CDialog : : DoDataExchange (pDX) ; //( (AFX DATA MAP (CAboutDlg) //) )ArX lΛTΛ_MΛP ) BEGIN_MΓ.SSΛGE_MAP (CAboutDlg, CDialog) //( |ΛFX_MSG_MΛP (CAboutDlg) //) }AF .SG_MΛP END MESSAGE MAP!) ' ' ' I ' i 111 / 111111 I 1111111111111111111111111 / / 111111111111 It 11 I 111111111 I 11111 I CFiccessDlg: CPiocessDlg (C nd* pPaient /*=NULL*/) : CDialog (CProcessDlg: : IDD, pParent) ( //IIΛFX l)ΛTΛ_INIT (CProcessDlg) //) )ΛI X DATA INTT in hit on At GnlΛpp!) • Load I e on ( 1 DR MAINFRAME); I vii ul I l'ι in !• • ! ιHlι| liiiD.it .ιl. xi (( D.il .ιl xι lι.ιni|<-' pl)X) I ( I) I a I 141 lloll.il ii I. xi I in ιπ,t' (pl)X) , // ( IΛI X DATA MΛI'(( loc e ..plι|) DDX ( out l ul (pDX, IDC I 1 ng 1 (-1.1 .1 , III .".1 ng 1 el.t .t ) ; DDX_Contιol (pϋX, IDC Inteival isL, m lntervalLis t ) ; DDX Contiol fpDX, IDC IDList, m_IDList) ; II) )ΛFX DΛTΛ MΛP ) BEGIN_MESSAGE_MΛP (CProcessDlg, CDialog) //( |ΛFX HSG MΛP (CProcessDlg) 0N_WM_SYSC0MMAND ( ) ON_WM_PAINT ( ) ON_WM_QUERYDRAGICON ( ) 0N_MESSAGE (WM_PROCESS_ELEMENT, OnProcessTime ) ON_WM_CLOSE ( ) ON_ M_TIMER() ON_BN_CLICKED(IDC_Stop, OnStop) //) )AFX_MSG_MAP END_MESSAGE_MAP ( ) in/mi nm n 11111 n m 1111 / 111111111111111 m m 111111111 / 11 m 1111 n i n / 1 II CProcessDlg message handlers BOOL CProcessDlg: : OnlnitDialog () I CDialog: OnlnitDialog!); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT! ( IDM_ABOUTBOX S OxFFFO) == IDM_ABOUTBOX) ; ASSERT! IDM_ABOUTBOX < OxFOOO) ; CMenu* pSysMenu = GetSystemMenu (FALSE) ; if (pSysMenu != NULL) ( CString strAboutMenu; strΛboutMenu.LoadString(IDS ABOUTBOX) ; if (! StrAboutMenu. IsEmpty () ) { pSysMenu->AppendMenu (MF_SEPARATOR) ; pSysMenu->AppendMenu(MF_STRING, IDM ABOUTBOX, StrAboutMenu); I 1 Setlcon (m hlcon, TRUE); // Set big icon Setlcon (m_hIcon, FALSE); // Set small icon m DataHandle = open! "data.dat", _0_BINARY I _O_RD0NLY ); if ( m DataHandle == -1 ) return FALSE; m nTimerlD = ::SetTimer( GetSafeHwnd ( ) , 0, 1000, NULL ) ; m StartStop = TRUE; 52 PostMessage! WM_PROCESS_ELEMENT ), // fire off initial processing return TRUE, // return TRUE unless you set the focus to a control // _close ( m_DataHandle ), ) void CProcessDlg OnSysCommand (UINT nID, LPARAM IParam) I if ((nID S OxFFFO) =« IDM_ABOUTBOX) I CAboutDlg dlgAbout, dlgAbout DoModalO, ) else I CDialog OnSysCommand (nID, IParam), I I // If you add a minimize button to your dialog, you will need the code below // to draw the icon For MFC applications using the document/view model, // this is automatically done for you by the framework void CProcessDlg OnPaint!) I if (Islconic ( ) ) I CPaintDC dc(thιs), // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc GetSafeHdc () , 0), // Center icon in client rectangle int cxlcon = GetSystemMetrics (SM CXICON) , int cylcon = GetSystemMetrics (SM_CYIC0N) , CRect rect, GetClientRect (Srect) , int x = (rect WidthO - cxlcon + 1) 1 2 , int y = (rect Height!) - cylcon + 1) / 2, // Draw the icon dc Drawlconlx, y, m hlcon) , ) else CDialog OnPaint!), ) HCURSOR CProcessDlg OnQueryDraglcon ( ) I return (HCURSOR) m_hIcon, ) APacket packet LRESULT CProcessDlg OnProcessTime (WPARAM wParam, LPARAM IParam) I int re, if ( m_otartStop == FALSE ) leturn OL, char numbuf[80), // m ctlCancel EnableWindowf FALSE ), if ( ReadNumeric! m_DataHandle, numbuf, sizeof numbuf ) == -1 ) return OL, packet TransID = atoι( numbuf ), if ( ReadNumeric! m_DataHandle, numbuf, sizeof numbuf ) == -1 ) return OL, packet TOA = atof( numbuf ), 53 I I I hi i.lllln.i. I I , | ιιι I' ll ill in, III i.uiiil.iil >| /4i..l I I I i ul ill II Ul I I | | ii - Hιι..ιlMιιιιιnι 11 I III hit .ill. mil I ιι, iiiiinl m I , ilfi'nl niiiiilnir ) ) I I I .-I ill ii III I f ( 1 ' - , ) // 1 r ill. I π.,1 I 4-1.1 1 I l [ ( Im llJii! I I I HI. ( in I In I n llnn'l I n ) I I r rι I π r π (H , | ιi4i -l Ii4i I I π I I mn - πl <.. ( iiiiinl n I T ) : I I 4.1 i-i il 4. 1-4-1 ( /.pn. I i-l I I ll | ..lιl .illl I 1 // |',, lH,-ιιιιj44| WM I'ltlll l 'i . I l I Ml II I I , I ul III II III , I vi, I, I i l .Dl I ll .l il i.lll ( I I Mi I 111, i ,l Hcsol C onl out ( ) , in l nt ci v.i I I,ι st . Resct out ent ( ) ; in '»ι ng I . ,ι 'i t . ResetCont ent ( ) , foi ( AReceiver* pRecv = pReceiverList; pRecv; pRecv - pRecv->next ) I l i ( ASinglePacket* pPkt = pRecv->m_SιnglePacketLιst .m pliead, pPkt, pPkt - ppkt->next ) I csBuf. Format ( "%d\t%d\t%7.7f", pRecv->TransID, pPkt->SymbolValue, pPkt- >TOA ) ; m_SingleLιst .AddString ( (LPCTSTR) csBuf ); ) for ( ASinglelnterval* plntv = pRecv->m_SιngleIntervalList .m_pHead; plntv; plntv = plntv->next ) I csBuf .Forma ( "%d\t%7.7f (%d,%d)", pRecv->TransID, plntv->delta, plntv- >pBeg->SymbolValue, pIntv->pEnd->SymbolValue ) ; m_IntervalLιst .AddString ( (LPCTSTR) csBuf ); ) lot ( Aldent* pID = pRecv->m_pIdentList ; pID; pID = pID->next ) I char strident [ 33 ) ; unsigned long l = 0x80000000; t ctr = 0; while ( l > 0 ) I if ( pID->m_Ident S l ) strident [ctr) = • 1 ' ; else strident (ctr) = ' 0 ' ; l >>= 1; ctr++; ) strident [ctr) = '\0'; csBuf. Format ( "%d %c % 3 2s\t%7f\t%7f", pRecv->TransID, (pID- >m_bldentιfled^'X' : ' '), strident, pID->m_Interval, pID->m_ExpectedTOA ) ; m_IDLιst.AddString ( (LPCTSTR) csBuf ) ; ) ) ) // read until terminated by tab, CR, EOF, or bufsize exceeded. // return 0 if normal read, -1 if EOF. mt ReadNumeric! int handle, char* buffer, int bufsize ) I ASSERT! handle ) ; 54 int re, // eat white space while ( 1 ) I re = _read ( handle, sbuffer(O), 1 ); if ( re <= 0 ) I buffer(O) = '\0\ return -1; ) if ( buffer[0) > ' ' ) break, ) int ctr - 1; while ( 1 ) I re = _read ( handle, sbuffer [ctr] , 1 ); if ( re <= 0 ) I buffer[ctr] = 'Nonreturn -1, ) if ( buffer(ctr) <= ' ' I I buffer[ctr] == ' , ' ) I bufferlctr] = '\0'; if ( bufferlctr] == ' \n ' ) return -2, return 0, ) ct r++; I ) int ReadUntilEOL! int handle ) I t re, int ch, while ( 1 ) I l = _read( handle, Sch, 1 ) ; it ( re <= 0 ) return -1; if ( ch == ' \n' ) return 0; I ) void CProcessDl • OnClose ( ) I delete pReceiverList, • KillTimerf NULL, m_nTιmerID ); CDialog OnClose (); ) void CProcessDlg: :OnTιmer (UINT nIDEvent) I PostMessage! WM_PROCESS_ELEMENT ); CDialog OnTimer (nIDEvent) ; ) void CProcessDlg: :OnStop() I m_StartΞtop = (m_StartStop ~> FALSE : TRUE ); ) 55 // stdafx h include file for standard system include files, // or project specific include files that are used frequently, but // are changed infrequently // II i f ' def ined <AFX_STDAFX_H F7C1 F789_1C84_11 D1_BFA6_ACFBOOC10000 INCLUDED Ddef ine AFX_STDAFX_H F7C1 F789_1C84_11D1_BFA6_ACF800C10000 INCLUDED_ rfif _MSC_VER >= 1000 Upragma once llendif // _MΞC_VER >= 1000 Udefme VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers Hinclude <afxwιn h> // MFC core and standard components Sinclude <afxext h> // MFC extensions Hifndef _AFX_NO_AFXCMN_SUPPORT Sinclude <afxcmn h> // MFC support for Windows Common Controls llendif // _ΛFX_NO_AFXCMN_ΞUPPORT // I I AFX_IMSERT_LOCATION) ) // Microsoft Developer Studio will insert additional declarations immediately before the previous line llendif // 'definedlAFX STDAFX H F7C1F789 1C84 11D1 BFA6 ACF800C10000 INCLUDED ) 56 // stdafx.cpp : source file that includes just the standard includes // Process. pch will be the pre-compiled header // stdafx.obj will contain the pre-compiled type information ((include "stdafx.h" 57 APPENDIX B 58 ,RF OM A ASM TEST OF SHORT PULSES LIST LIST P=12C508 SN BYTE EQU 00 ;MSB OF SERIAL NUMBER SN BYTE1 EQU 00 SN BYTE2 EQU 00 SN_BYTE3 EQU 00 SN BYTE4 EQU 00 SN BYTE5 EQU 00 .SIXTH BYTE OF SERIAL NUMBER SN BYTE6 EQU H'OO' .SEVENTH BYTE OF SERIAL NUMBER SN BYTE7 EQU 0X09 , LSB BYTE OF SERIAL NUMBER RF_ON—WAKES UP FROM SLEEP AND TRANSMITS TWO RF PULSES EACH 100 MICROSECONDS IN WIDTH THE SPACING OF THE PULSES CONTAINS THE INFORMATION BEING TRΛNSMITED THIS VERSION SENDS ONLY THE SERIAL NUMBER OF THE UNIT AS A RUN LENTH ENCODED NUMBER, UP TO SIXTY FOUR BITS IN LENGTH THE SPACE BETWEEN THE TWO 100 MICRO SECOND PULSES WILL BE AS FOLLOWS 300 MICRO SECONDS FOR A LOGIC " 0 " 700 MICRO SECONDS FOR A LOGIC " 1 " 1000 MICRO SECONDS FOR A START OF FRAME. Revision History IFNDEF 12C508 MESSG "Processor-header file mismatch Verify selected processor ENDIF Register Definitions W EQU H' ' 0000' ;workιng register in 12C508 F EQU H' '0001' ;memory location INDF EQU H' ' 0000' ; indirect addressing location' TMR0 EQU H' '0001' ; timer register PCL EQU H' '0002' . • program counter low byte STATUS EQU H' '0003' ;status register FSR EQU H 1 '000 ' ; index register-indirect address OSCCAL EQU H' '0005' . • calibration for internal clock GPIO EQU H' '0006' ;I/0 port STATUS Bits GPWUF EQU H' '0007 ; reset due to sleep wake up PA0 EQU H' '0005 ;page select lower 512 bytes NOT_TO EQU H' '0004 ;no watch dog timeout occured NOT PD EQU H' '0003 ;no sleep instruction 59 z EQU H'0002 ; zero flag DC EQU H'OOOl ;half carry (low digit carry) C EQU H'0000 ; carry flag OPTION Bits NOT_GPWU EQU H '0007 0= sleep wake up on pin change NOT_GPPU EQU H '0006 0= weak pull ups (GPO, GP1,GP3) TOCS EQU H 1 '0005 TIMERO 1=EXTERNAL 0=INTERNAL TOSE EQU H' '0004 TIMERO EDGE SELECT 0=LOW-HIGH PSA EQU H' '0003 PRESCALER ASSIGNMENT 0=TIMERO PS2 EQU H' '0002 3 BITS DEFINE TIMERO PRESCALE PS1 EQU H' '0001 VALUE=X PRESCALE =(2"X) X 2 PSO EQU H' 0000 OR FOR WATCH DOG IS (2 Λ X) X 1 OURSETUP EQU H 1 0042 NO PULL UP'S DIVIDE CLOCK BY 8 RAM Definition- ORG 0X07 ;SET RAM STARTING ADDRESS FRAMEBIT RES 2 ; FRAME BIT COUNTER REGISTER SDATA RES 8 ; STORAGE FOR DATA BITS SCRATCH RES 8 ; LOCATIONS FOR BIT MANIPULATION TEMP RES 1 ;TEMPERARY STORAGE MAXRAM H'lF' 32 ram locations CHARGE EQU H ■ 2E' ; CHARGE TIMMING CAP- GI05 LOW TO ACTIVATE HOLD EQU H '2E' ;SET GPIO-5 TO INPUT TO HOLD CAPACITOR CHARGE WAKEDATA EQU H' '2E' ;SET GI05 HIGH AND GI04 LOW (ALL OTHERS DOUN'T CARE) WAKEGPIO EQU H' ' 0E' ;GIO 5 AND GI04 AS OUTPUTS RFON EQU H 1 '3E' ;SET GI04 HIGH TO ACTIVATE RF RFPULSE EQU H 1 1 FC ;SET TIMER FOR 100 MICROSECONDS ONEPULSE EQU H' 'A9' ;700 MICRO SECOND OFF TIME FOR A 1 ZEROPULS EQU H' DA' ;300 MICROSECONDS OFF TIME FOR A ZERO FRAME EQU H' 83' ;1000 MICRO SECOND OFF TIME FOR NEW FRAME Configuration Bits _MCLRE_ON EQU H ΌFFF ;$fff _MCLRE_OFF EQU H ΌFEF _CP_ON EQU H '0FF7 ; $ FF7 _CP_OFF EQU H ΌFFF _WDT_ON EQU H 1 ΌFFF _WDT_OFF EQU H' ΌFFB _LP_OSC EQU H' ΌFFC _XT_OSC EQU H' ΌFFD _IntRC_OSC EQU H' FFE _ExtRC_OSC EQU H' ΌFFF 1 THIS CONFIG EQU H' 0FEA' •;MCLR,CP,WDTE=OFF AND INTERNAL OSC ORG 0000 ****************************************************************************** SET UP INTERNAL OSCILATOR FREQUENCY AND ADJUST TO COMPENSATE FOR 3VDC POWER SUPPLY (ADD 3 TO CALIBRATION NUMBER) . SET UP OPTION REGISTER FOR NO PULL UPS AND CLK/8. ************* ********************* START: MOVWF TEMP ;SET UP CALIBRATE BYTE MOVLW H'10' ;ADD 1 TO CALIBRATION BYTE FOR 3 VOLT OPERATION ADDWF TEMP.W ;DUE TO LOWER OSCILATOR FREQUENCY AT LOW VOLTAGE BTFSS STATUS, C ; CHECK TO SEE IF ADDITION CREATED A GOOD VALUE GOTO DO SETUP ;NO CARRY SO CONTINUE WITH SETUP 60 MOVLW H ' FO ' ;MAXIMIUM VALUE OF CALIBRATION BYTE ALLOWED X)_SETUP MOVWF OSCCAL MOVLW OURSETUP ; option register set up -TIMER CLK/8 OPTION **************************** ************** CHARGE CAPACITOR FOR 1 MILLISECOND. DURING THE CHARGE TIME EXAMINE THE SERIAL NUMBER TO DETERMINE THE LENGTH OF TRANSMIT DATA (DO NOT TRANSMIT LEADING ZERO'S) THEN AFTER 1 MILLISECOND DISCONNECT CAPACITOR FROM CHARGE VOLTAGE AND TURN ON RF FOR 100 MICROSECONDS. WHILE RF IS ON DECIDE IF OFF TIME REPRESENTS START OF FRAME, O OR 1. *************************************************************************** MOVLW CHARGE ; PRESET DATA FOR I/O PORT OUT PUT ON WAKE UP MOVWF GPIO MOVLW WAKEGPIO ;PORT CONFIGURATION FOR GPIO TO CHARGE TIMING TRIS GPIO ; CAPACITOR FOR NEXT SLEEP INTERVAL TIME OUT. BTFSC STATUS, 7 ;SEE IF SLEEP RESET OR POWER UP RESET GOTO RECHARGE ; SLEEP WAKEUP CLRF FRAMEBIT ; CLEAR POINTER TO PREVENT STRANGE LOCKUPS INCF FRAMEBIT, F ;TO READ ONE SET UP THE TIMING CAPACITOR FOR NEXT SLEEP CYCLE CHECK THE FRAME BUFFER STATUS AND REFILL IF NECESSARY ************************ . *********************** RECHARGE MOVLW H'83' ;256-(1200/8)=106 =H ' 6A ' = 1.2 MILLISECOND. MOVWF TMRO ;PRE LOAD FOR 1MILLISECOND TIME OUT DECFSZ FRAMEBIT, F ;CHECK FOR LAST BIT TO TRANSMIT GOTO ENDFRAME ;SKIP AROUND FRAME SETUP CODE MOVLW H'OF' ; EEDED - SET UP NEW FRAME MOVWF FRAMEBIT+1 ;SAVE STATUS OF FRAME BITS CALL BYTE ;READ MOST SIGNIFICANT BYTE OF SERIAL NUMBER MOVWF SDATA ;SAVE BYTE FOR TRANSMISSION MOVWF SCRATCH SAVE BYTE FOR DATA MANIPULATION CALL BYTE1 2ND BYTE MOVWF SDATA+1 MOVWF SCRATCH+1 CALL BYTE2 THIRD BYTE MOVWF SCRATCH+2 MOVWF SDATA+2 CALL BYTE3 FOURTH BYTE MOVWF SDATA+3 MOVWF SCRATCH+3 CALL BYTE4 FIFTH BYTE MOVWF SDATA+4 MOVWF SCRATCH+4 CALL BYTE5 SIXTH BYTE MOVWF SCRATCH+5 MOVWF SDATA+5 CALL BYTE6 SEVENTH BYTE MOVWF SDATA+6 MOVWF SCRATCH+6 CALL BYTE7 EIGHTH BYTE MOVWF SDATA+7 MOVWF SCRATCH+7 ************ THIS ROUTINE FINDS THE HIGHEST ORDER BIT USED IN THE SERIAL NUMBER, SO THAT THE SERIAL NUMBER CAN BE RUN LENGTH ENCODED. THIS PROVIDES FASTER CODE SYNC DUE TO SHORTER DATA LENGTH. ************************ MOVLW H'41' ; SERIAL 11-64 BIT LENGTH+1 FOR PREDECREMENT MOVWF FRAMEBIT ;SET MAX. NUMBER IN TO BIT COUNTER CHECKBIT BCF STATUS, C ; CLEAR CARRY RLF SCRATCH+7,F ; ROTATE LSB RLF SCRATCH+6, F ROTATE BYTE RLF SCRATCH+5,F ROTATE BYTE RLF SCRATCH+4', F ROTATE BYTE RLF SCRATCH+3,F ROTATE BYTE RLF SCRATCH+2,F ROTATE BYTE RLF SCRATCH+1,F ROTATE BYTE 61 RLF SCRATCH, F ROTATE MSB BTFSS STATUS, C CHECK TO SEE IF A BIT WAS FOUND GOTO CHECKO NO BITS YET GOTO ENDFRAME FOUND A BIT CONTINUE CHECKO DECF FRAMEBIT, F DECREMENT THE FRAME BIT BTFSS STATUS, CHECK TO SEE IF A NUMBER HAS BEEN PROGRAMED GOTO CHECKBIT REPEAT LOOP INCF FRAMEBIT, F THIS MEANS THAT IF UNIT IS NOT PROGRAMED WITH SERIAL NUMBER IT WILL SEND START OF FRAME ENDFRAME CALL TIMEROO ;ON EACH TRANSMISION. ****** ******** END OF FRAME COUNT MOVLW HOLD TRI S GPIO SET HI-IMPEDENCE ON GPIO-5 TO HOLD CAP VOLTAGE RFON1 MOVLW RFON TURNON RF SIGNAL (FOR 100 MICROSECONDS) MOVWF GPIO RF_ON MOVLW RFPULSE ;256-(100/8)=243 = H ' F3 ' FOR 100 MICROSECONDS MOVWF TMRO ;SET UP THE TIMER FOR TRANSMITTER ON TIME. BTFSS FRAMEBIT+1, 3 ; CHECK TO SEE IF NEW FRAME STARTING GOTO GET DATA CLRW ;ZERO FOR FRAME SET UP CLRF FRAMEBIT+1 GOTO END RF1 GET DATA: BCF STATUS, C : CLEAR CARRY RRF SDΛTΛ, F : ROTATE EIGHT BYTE RRF SDATA+1,F ROTATE SEVENTH BYTE RRF SDATΛ+2.F ROTATE SIXTH BYTE RRF ΞDATA+3,F ROTATE FIFTH BYTE RRF SDATA+4,F ROTATE FORTH BYTE RRF SDATA+5,F ROTATE THIRD BYTE RRF SDATA+6,F ROTATE SECOND BYTE RRF SDATA+7,F ROTATE FIRST BYTE BTFSS STATUS, C CHECK TO SEE IF A BIT WAS FOUND GOTO ITS_A_0 A "ZERO" IS TO BE SENT MOVLW H'2' ;A "ONE" IS TO BE SENT GOTO END_RF1 ITS_A_0 MOVLW H'l' ; INDICATE A "ZERO" IS TO BE SENT END_RF1 MOVWF FRAMEBIT+1 ; STORE NEXT OPERATION UNTIL AFTER TIMER OVERFLOW CALL TIMEROO BCF GPIO, 4 SHUT OFF THE RF PULSE MOVF FRAMEBIT+1,W , GET NEXT TASK OFFSET ADDWF PCL, F ;JUMP TO NEXT TASK GOTO NEWFRAME ; SEND START OF FRAME GOTO SENDO ; SEND A ZERO MOVLW ONEPULSE ;256-(700/8)=169 = H'A9' FOR 700 MICROSECONDS MOVWF TMRO ;SET UP TIMER FOR "l's DATA" GOTO DOJTIMER SENDO MOVLW ZEROPULS ;256- (300/8)=218 = H'DA' FOR 300 MICROSECONDS MOVWF TMRO ;SET UP THE TIMER FOR "O's DATA" GOTO DOJTIMER NEWFRAME MOVLW FRAME MOVWF TMRO DOJTIMER CALL TIMERO 0 ;WAIT FOR TIME OUT BSF GPIO, 4 TURN ON RF PULSE MOVLW RFPULSE 100 MICRO SECOND TIMER SETUP MOVWF TMRO CALL TIMEROO TURNON RF SIGNAL (FOR 100 MICROSECONDS) BCF GPIO, TURN OFF RF PULSE MOVF GPIO.W READ PORT INPUT DATA FOR SLEEP. SLEEP TIMEROO MOVF TMR0,W ;READ TIMER BTFSS STATUS, Z ; CHECK TO SEE IF OVERFLOW OCCURED. GOTO TIMEROO ,-LOOP UNTIL ZERO (OVERFLOW) RETLW 0 62 STORAGE LOCATIONS FOR SERIAL NUMBER AND CALIBRATE DATA ******* ORG H'OFO' ; SERIAL NUMBER LOCATION ******* *** ****** * ******************************** BYTE RETLW SN BYTE ;MSB OF SERIAL NUMBER BYTE1 RETLW SN " BYTE1 BYTE2 RETLW SN " BYTE2 BYTE 3 RETLW SN " _BYTE 3 BYTE4 RETLW SN " " BYTE4 BYTE5 RETLW SN " " BYTE5 BYTE6 RETLW SN " " BYTE6 BYTE7 RETLW SN " [BYTE7 ;LSB OF SERIAL NUMBER '' ORG H*ι 01FF' ; VARIABLE FOR CALIBRATION END ************ 'END 63 APPENDIX C 64 MPASM 02.01 Released LOC OBJECT CODE LINE SOURCE TEXT VALUE 00001 ; 916f.ASM test version of 916e.asm 00002 00003 ; CI1ANC 1:WD TIMER ENTRY POINT INCLUDES INTERUPT INITIALIZATION 00004 ; 2:CHANGES WERE MADE CREATE A MORE EXACT 16 BIT IMAGE OF RF PULSES 00005 ; 3:CHANGES WERE MADE TO ALLOW INTERUPT ROUTINE LONGER TIME TO COMPLETE 00006 ; 4:TIMER READ ROUTINES CHANGED SERVICE. 00007 00008 ; E checks each and every place in the buffer to make sure it is not getting messed 00009 00010 LIST p=16C554 ooon 00012 00013 00014 IFNDEF 16C554 00015 MESSG "Processor-header file mismatch. Verify selected processor. 00016 ENDIF 00017 *************************** 00018 SERIAL NUMBER AND CALIBRATE VARIABLE 00019 ********************************************** 00020 000000EC 00021 SN_BYTE1 EQU OXEC ;MSB OF BOARD SERIAL NUMBER 00000002 00022 SN BYTE2 EQU 0X02 ;LSB OF BOARD SERIAL NUMBER 00023 00024 00025 Register Definitions 00026 00027 00028 Register Files- 00029 00000002 00030 PCL EQU H '0002 00000003 00031 STATUS EQU H '0003 00000004 00032 FSR EQU H '0004 00000005 00033 PORTA EQU H ■ 0005 00000006 00034 PORTB EQU H '0006 O000OOOA 00035 PCLΛTH EQU H ΌOOA 0000000B 00036 INTCON EQU H' ΌOOB 00000081 00037 OPTION_REG EQU H' '0081 00000085 00038 TRISA EQU H' • 0085 00000086 00039 TRISB EQU H' • 0086 0000008E 00040 PCON EQU H' 008E 00000000 00041 INDF EQU H 1 0000 ;memory location $000 00000001 00042 TMRO EQU H' 0001 00043 00044 00045 STATUS Bits 00046 00000007 00047 IRP EQU H • 0007 00000006 00040 RP1 EQU H '0006 00000005 00049 RPO EQU H '0005 00000004 00050 NOT_TO EQU H '0004 00000003 0(1051 NOT_PD EQU H '0003 00000002 00052 Z EQU H '0002 00000001 00053 DC EQU H' '0001 65 MPAΞM 02.01 Released LOC OBJECT CODE LINE SOURCE TEXT VALUE 00054 H'0000' 00055 00056 INTCON Bits 00057 00000007 00058 GIE EQU H 0007 00000005 00059 TOIE EQU H 0005 00000004 00060 INTE EQU H 0004 00000003 00061 RBIE EQU H 0003 00000002 00062 TOIF EQU H 0002 00000001 00063 INTF EQU H 0001 00000000 00064 RBIF EQU H 0000 00065 00066 OPTION Bits 00067 00000007 00068 NOT_RBPU EQU H 0007 00000006 00069 INTEDG EQU II 0006 00000005 00070 TOCS EQU 11 0005 00000004 00071 TOSE EQU 11 0004 00000003 00072 PSA EQU H 0003 00000002 00073 PS2 EQU H 0002 00000001 00074 PS1 EQU H 0001 00000000 00075 PSO EQU H 0000 00076 0007; PCON Bits 00078 00079 EQU H'0001' 00080 00081 00082 O0OB3 RAM Definition 00084 00085 00086 00087 4AXRΛM H'09F' 00088 BADRAM H'07 , -H'09' HOC -H'lF', H'70'-H'7F' OO089 BADRAM H'87'-H'89' H'8C -H'8D', H'BF'-H'SF" 00090 00091 00092 00093 Configuration Bits 00094 00095 00096 OOO0OOCF 00097 CP_ON EQU H OOCF 00003FFF 00098 ^CP_OFF EQU H 3FFF 00003FFF 00099 PWRTE_OFF EQU H 3FFF 00003FF7 00100 PWRTE_ON EQU H 3FF7 00003FFF 00101 WDT_ON EQU H 3FFF 00003FFB 00102 WDT OFF EQU H 3FFB 00003FFC 00103 LP OSC EQU II 3FFC 00003FFD 00104 XT OSC EQU H 3FFD 00003FFE 00105 HS_OSC EQU H 3FFE 00003FFF 00106 RC OSC EQU 11 3FFF 66 MPΛSM 02.01 Released 916F.ASM 13-47:22 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00107 00108 00109 NOTE: The clock rate is 3.6864mhz giving 17.36111 microseconds per bit at 00110 57.6k baud for RS4 85 DATA. 00111 The bit rate is set up to exactly 16 clock cycles per bit. 00112 No code bias 1 nd zero's are exactly 16 machine cycles. 00113 00114 00115 VARIABLE DEFINATIONS 00116 00117 00000001 0011B me EQU H '0001 ; SAME AS F 00000001 00119 R EQU H '0001 ; SAME AS F 00000007 00120 MSB EQU H '0007 00000000 00121 W EQU H 0000 ; MOVE DATA TO WORKING REGISTER 00000001 00122 F EQU H 0001 ; MOVE DATA TO MEMORY 00000005 00123 TX EQU PORTΛ ; RS485 SEND 00000006 00124 DAT EQU PORTB ; RF OR RS485 DATA IN 00000001 00125 ON EQU H 0001 ,- Transmit Pin ( Bit 1 of PORTA) 00000000 00126 ENABLE EQU H 0000 ; Enable Transmitter (Bit 0 PORTA) 00000000 00127 RF_IN EQU H 0000 ;DATA FOR RF INPUT PULSE (0 PORT Bl 00000007 00128 RS485IN EQU H 0007 ;RS-485 RECIEVER INPUT (PORT B) 00000004 00129 LIGHT EQU H 0004 ; TRANSMIT ON (PORT A) 00000002 00130 I IGHT EQU H 0002 ;RECIEVE DATA (PORT B) 00000001 00131 RF_LIG1!T EQU H 0001 ;RF IN LIGHT (PORT Bl 00132 00000007 00133 NOT_GPWU EQU H 0007 ;blt 7 00000006 00134 NOT_GPPU EQU H 0006 00000005 00135 T0CS EQU H 0005 00000004 00136 T0SE EQU H 0004 00000003 00137 PSA EQU H 0003 00000002 00138 PS2 EQU H 0002 00000001 00139 PS1 EQU H 0001 00000000 00140 PS0 EQU H 0000 ;blt 0 00141 00142 00143 00144 RAM Definition 00145 00146 00147 00148 MAXRΛM H'09F' 00149 BADRAM H ' OT -H ' 09 ' H'OC'-H'IF', H'70'-H'7F' 00150 BADRAM H'87'-H'89' H'βC'-H'βD', H'BF'-H'9F' 00151 00152 0020 00153 ORG 0X20 ; DUMMY ORG TO START MEMORY ALLOCATION 0020 00154 Count RES ; Counter for dof Bits Transmitted 0021 00155 PACKET RES ; PACKET NUMBER FOR IDENTIFICATION 0022 00156 BUFFERTMP RES ; BUFFER TEMPERARY STORAGE 0023 00157 XmtReg RES ;DATA TO BE TRANSMITTED 0024 00158 TnisBlt RES ; RS485 BIT BEING SENT 0025 00159 DELAY2 RES , DECREMENTING COUNTER FOR LOOK AHEAD 67 MPΛSM 02.01 Released 916F.ASM LOC OBJECT CODE LINE SOU RCE TEXT VALUE 0026 00160 DELAY 1 ; DECREMENTING COUNTER FOR LOOK AHEAD 0027 00161 RD TIME 1 ,-TIMER READ AT TIMER INTERUPT 0028 00162 COUNTERO 2 ;HIGH ORDER BITS OF TIMERO 002A 00163 COUNTER1 ; STORAGE FOR UNSENT MESSAGE 002E 00164 COUNTER2 ; STORAGE FOR UNSENT MESSAGE 0032 00165 COUNTER3 ; STORAGE FOR UNSENT MESSAGE 0036 00166 IMAGELOW ; RAILING 8 BITS OF RF INPUT MESSAGE 0037 00167 IMAGEHIGH ; EADING 8 BITS OF RF INPUT MESSAGE 0038 00168 IMAGEHI1 ; STORAGE BUFFER FOR RF IMAGES 0039 00169 IMAGELOl ; STORAGE BUFFER FOR RF IMAGES 003A 00170 IMAGEDI2 ; STORAGE BUFFER FOR RF IMAGES 003B 00171 IMAGEL02 ; STORAGE BUFFER FOR RF IMAGES 003C 00172 IMAGEHI3 ; STORAGE BUFFER FOR RF IMAGES 003D 00173 I AGEL03 ; STORAGE BUFFER FOR RF IMAGES 003E 00174 W0RD_NUM ;RS4B5 CHARACTER POSITION 003F 00175 W TEMP ;TEMP STORAGE OF W REGISTER 0040 00176 STΛT CHK 0041 00177 IMAGE_CNT ;RF BIT IMAGE COUNTER 0042 00178 STΛT_TEMP ; STATUS TEMP STORAGE 0043 00179 DLY_CNT 0044 00180 RF_BIT ;RF ON DURING BIT TIME FOR IMAGE DATA 0045 00181 RF TIMER ; NUMBER OF CHECKS TO PERFORM FOR IMAGE 00182 == * = * ==,-«»»».» 00183 0000 001B4 ORG 0000 00105 0000 2005 00186 START GOTO BEGIN ; ESET VECTOR TO START 00187 0001 34EC 00188 SN MSB RETLW SN BYTE1 ; MSB OF SERIAL NUMBER IN HEX 0002 3402 00189 SN_LSB RETLW SN_BYTE2 ; LSB OF SERIAL NUMBER IN HEX 0003 0000 00190 NOP 00191 0004 290D 00192 INTERUPTS GOTO GETJTIME ; LOCATION OF INTERUPT ROUTINES 00193 0005 1283 00194 BEGIN BCF STATUS, RPO ;BANK 0 MEMORY SELECT 0006 1E03 00195 BTFSS STATUS, NOT TO; CHECK FOR WATCH DOG TIME OUT 0007 2810 00196 GOTO WD RESET ;THIS WAS A WATCH DOG RESET. NO INIT_LOOP 0008 3020 00197 MOVLW 0x20 ; FIRST MEMORY LOCATION 0009 0084 00198 MOVWF FSR ,-TO INDEX REGISTER 000A 0180 00199 INIT LUP CLRF INDF ,-CLEAR LOCATION POINTED TO BY INDEX REGISTER 000B 0Λ84 00200 INCF FSR, F ; INCREMENT INDEX POINTER OOOC 0804 00201 MOVF FSR.W ;END OF MEMORY 20-6F HEX 000D 3C6F 00202 SUBLW 0X6F 000E 1803 00203 BTFSC STATUS, C CLEAR TO 6F 000F 280A 00204 GOTO INIT LUP 0010 3038 00205 WD_RESET MOVLW 0X38 TURN ON ALL INTERUPTS AND CLEAR FLAGS 0011 OOBB 00206 MOVWF INTCON 0012 301E 00207 MOVLW 0X1E OUT PUT LEVELS FOR PORT A 0013 0085 00208 MOVWF PORTA 0014 309F 00209 MOVLW 0X9F SET ALL OF PORT B HIGH EXCEPT BIT5 AND BIT6 0015 0086 00210 MOVWF PORTB 0016 1683 00211 BSF STATUS, PO CHANGE MEMORY BANK 0017 0103 00212 CLRW 68 MPASM 02.01 Released 916F.ASM LOC OBJECT CODE LINE SOURCE TEXT VALUE Message[302) Register in operand not in bank 0. Ensure that bank bits are correct 001B 0085 00213 MOVWF TRISA ;SET ALL OF PORT A TO OUT PUT 0019 3081 00214 MOVLW 0X81 ;SET UP PORT B OUT PUT CONFIGURATIONwd_ Messagef3021 Register in operand not in bank 0. Ensure that bank bits are correct. 001A 0086 00215 MOVWF TRISB 001B 30C5 00216 MOVLW 0XC5 ;OPTION REGISTER-TIMER 69 MICRO SECOND PER TICK Messagel302) Register in operand not in bank 0. Ensure that bank bits are correct. 001C 0081 00217 MOVWF OPTION REG POSITIVE EDGE INTERUPT AND NO PULL UPS ON PORTB 001D 138B 00218 CONTROL BCF INTCON,GIE INTERUPTS OFF WHILE IN BANK1 001E 1683 00219 BSF STATUS, RPO SELECT BANK1 001F 0103 00220 CLRW Message(302) Register in operand not in bank 0. Ensure that bank bits are correct 0020 0085 00221 MOVWF TRISA 0021 0064 00222 CLRWDT ; CLEAR WATCH DOG TIMER 0022 3081 00223 MOVLW OxBl ;SET UP I/O PORTS Message(302] Register in operand not in bank Ensure that bank bits are correct. 0023 0086 00224 MOVWF TRISB 0024 1283 00225 BCF STATUS, RPO ; SWITCH MEMORY BACK TO BANKO 0025 178B 00226 BSF INTCON.GIE ; INTERUPTS ON AGAIN 0026 1485 00227 BSF TX,ON ;SET OUTPUT TO RS485 HIGH RESTING LEVEL 0027 1005 00228 BCF TX, ENABLE ;SHUT OFF RS485 OUTPUT 0028 1ΛAD 00229 BTFSC COUNTER1+3, 5 ;CHECKING BUFFER 0029 2830 00230 GOTO SEND_MSG ; FOUND A MESSAGE IN BUFFER 002A 1AB1 00231 BTFSC COUNTER2+3,5 ,-CHECK SECOND POSITION 002B 282D 00232 GOTO BUF_DEC ;MOVE ALL DATA DOWN ONE POSITION 002C 1ΛB5 00233 BTFSC COUNTER3+3, 5 ; CHECK THIRD POSITION 002D 20ED 00234 BUF_DEC CALL DEC_BUFF ;GO MOVE MESSAGES IN BUFFER DOWN ONE SLOT 002E 178B 00235 BSF INTCON,GIE ;TURN ON INTERUPTS 002F 281D 00236 GOTO CONTROL 0030 3012 00237 SEND_MSG MOVLW D'18' 18 CHARACTERS IN MESSAGE 0031 OOBE 00238 MOVWF WORD_NUM 0032 083E 00239 do_ASCII MOVF WORD_NUM,W GET JOB JUMP NUMBER 00240 , 00241 ;****«** 00242 , P E 00243 : ' *** J * U * M *** T * A * B * L **** FO * R ** S * E * N * D * I * N * G ** R * S * 4 * 8 * 5 ** D * A * T * A ** PRELIMINARY JOB SPEC 0033 07B2 00244 ADDWF PCL,F ;SET PROGRAM COUNTER TO JOB JUMP LOCATION 0034 281D 00245 no_rs485 GOTO CONTROL ;NO WORD TO TRANSMIT SO GO BACK TO CONTROL LOOP 0035 28A3 00246 GOTO WORD18 ;CARRIAGE RETURN TO END MESSAGE 0036 28A0 00247 GOTO WORD17 ;HEX ENCODED 16 BIT MSP OF RF INPUT 4TH NIBBL 0037 289D 00248 GOTO WORD16 ;HEX ENCODED 16 BIT MSP OF RF INPUT 3RD NIBLE 003B 2B9A 00249 GOTO WORD15 ; HEX ENCODED 16 BIT MAP OF RF INPUT 2ND NIBLE 0039 2897 00250 GOTO WORD1 ;HEX ENCODED 16 BIT MAP OF RF INPUT 1ST NIBLE 003A 2894 00251 GOTO WORD13 ;HEX ENCODED LSB OF TIME STAMP COUNTER LO NIBBLE 003B 2891 00252 GOTO WORD12 ;HEX ENCODED LSB OF TIME STAMP COUNTER HI NIBBLE 003C 288E 00253 GOTO WORD11 ;HEX ENCODED SECOND BYTE OF TIME STAMP LO NIBBLE 003D 288B 00254 GOTO WORD10 ;HEX ENCODED SECOND BYTE OF TIME STAMP HI NIBBLE 003E 2888 00255 GOTO WORD9 ;HEX ENCODED MSB OF TIME STAMP COUNTER LO NIBBLE 003F 2878 00256 GOTO WORDB ;HEX ENCODED MSB OF TIME STAMP COUNTER HI NIBBLE 0040 2875 00257 MSG_7 GOTO WORD7 ;HEX ENCODED LSB OF RECIEVER I.D. 0041 2872 0J3258 GOTO WORD6 ;HEX ENCODED THIRD BYTE OF RECIEVER I.D 0042 286F 00259 GOTO WORD5 ;HEX ENCODED SECOND BYTE OF RECIEVER I.D 0043 286C 00260 GOTO WORD4 ;HEX ENCODED MSB OF RECIEVER I.D. 69 MPASM 02 01 Released LOC OBJECT CODE LINE SOURCE TEXT VALUE 0044 286A 00261 GOTO WORD3 ,-TAG OR DIAGNOSTIC DATA INDICATOR 0045 2860 00262 MSG 2 GOTO WORD2 ,-ASCII NUMBER INDICATING PACKET NUMBER 20- 0046 2847 00263 MSG STRT GOTO WORD1 ; START OF MESSAGE 02 (STX) 00264 00265 00266 00267 CHARACTER LOAD ROUTINES FROM JUMP TABLE 00268 00269 00270 00271 SENSE-TO CHECK STATUS OF TRANSMISION LINE BEFORE STARTING RS485 00272 TRANSMISION SEQUENCE THIS ROUTINE WAITS A VARIABLE LENGTH OF 00273 DETERMINED BY THE LAST DIGIT OF ITS SERIAL NUMBER AFTER 00274 CHECKING THE LINE FOR ACTIVITY THE LAST CHECK IS TWO MICRO 00275 SECONDS PRIOR TO LINE CAPTURE DELAY IS 2000 MICRO SECONDS 00276 MINIMUM TO 4000 MILLISECONDS MAXIMUM FROM THE LAST LINE 00277 ACTIVITY MONITORED 255 X 8 MICROSECOND TIME SLOTS AVAILABLE 0027B 00279 0047 2002 00280 CALL SN LSB .GET SERIAL NUMBER LSB FOR VARIABLE DELAY 0048 00A6 00281 MOVWF DELAY ,255 TIME SLOTS OF 5 MICRO SECOND SPACING 0049 1005 00202 BCF TX, ENABLE ,-SHUT OFF RS485 AS PRECΛUSION 004Λ 0064 00283 CLRWDT .CLEAR WATCH DOG AS THIS LOOP COULD LAST A WHILE 004B 2052 00284 CALL DLY LP3 004C 2050 00285 CALL DLY LP2 ,2000 CLOCK DELAY 12 5 CHARACTER TIMES 004D 1FΘ6 00286 BTFSS DAT,RS485IN .BUS CHECK FOR ACTIVITY 004E 2847 00287 GOTO WORD1 ;IF ANY ACTIVITY ON BUS-GO TO WORD1 AND RETRY 004F 285A 00288 GOTO WORD1A , LOOK AHEAD IS OVER NEARLY OVER GO START RS485 0050 30FA 00289 DLY LP2 MOVLW D'250' .DECREMENTING COUNTER 250 X 8 =2000+30 clock eye 0051 00A6 00290 MOVWF DELAY 0052 1F86 00291 DLY LP3 BTFSS DAT,RS485IN .CHECK FOR LINE ACTIVITY 0053 2847 00292 GOTO WORD1 , FOUND LINE ACTIVITY 0054 0000 00293 nop 0055 0000 00294 nop 0056 0000 00295 nop 0057 0BΛ6 00296 DECFSZ DELAY, F ,- TIMING LOOP 005B 2B52 00297 GOTO DLY_LP3 0059 0008 00298 RETURN 005Λ 1FB6 00299 BTFSS DAT,RS485IN .6 MICROSECONDS SINCE LAST LOOK 005B 2847 0 300 GOTO WORD1 ; RESTART IF ACTIVITY ON BUS 005C 3012 00301 MOVLW D'18' .TELL ROUTINE THE NUMBER OF BYTES TO TRANSMIT 005D 00BE 00302 MOVWF WORD_NUM 005E 3002 00303 MOVLW 2 .-LOAD STX FOR START OF PACKET 005F 28Λ5 01304 GOTO LOADXMIT .REGISTER XMIT ROUTINE PARSES FOR TRANSMISSION 0060 1BA1 00305 BTFSC PACKET, MSB , SEE IF NUMBER IS ABOVE $7F (NONE PRINTABLE) 0061 2866 00306 GOTO SETLOW ■ • MAKE CHARACTER = $20 (PRINTABLEI 0062 3020 00307 MOVLW 0x20 .-SEE IF PACKET NUMBER IS IN RANGE 0063 0221 00308 SUBWF PACKET, ;COMPARE PACKET TO HEX 20 0064 1803 00309 BTFSC STATUS, C .CARRY INDICATES NUMBER IS 20 OR HIGHER 0065 286B 00310 GOTO SETOK .•CHECK TO SEE IF PRINTABLE ASCII 0066 3020 00311 SETLOW MOVLW 0x20 .RE-LOAD SPACE CODE FOR FIRST PACKET 0067 00A1 00312 MOVWF PACKET 0068 0821 00313 SETOK MOVF PACKET, W . • TRANSMIT PACKET NUMBER 70 MPΛSM 02 01 Role-.prl LOG OI1JECT com LINE SOURCE TEXT VALUE 0069 2BΛ5 0031 GOTO LOΛDXMIT 006Λ 0B2D 00315 WORD3 MOVF COUNTER1+3.W ;SEND RECIEVED RF MESSAGE TYPE 20 OR 21 HEX 006B 28Λ5 00316 GOTO LOADX IT 006C 2001 00317 WORD4 CALL SN MSB ;GET MOST SIGNIFICANT BYTE OF SERIAL NUMBER 006D 00Λ2 00318 MOVWF BUFFERTMP ;TEMPERΛRY STORAGE TO MANIPULATE NIBBLES 006E 287Λ 00319 GOTO MK HI NIB . • COMPOSE THE HIGH NIBBLE OF SERIAL NUMBER MSB 006F 2001 00320 WORDS CALL SN MSB ;GET MOST SIGNIFICANT BYTE OF SERIAL NUMBER 0070 00Λ2 00321 MOVWF BUFFERTMP ;TEMPERΛRY STORAGE 0071 20711 00122 GOTO MK LO NIB . • COMPOSE THE LOW NIBBLE OF SERIAL NUMBER 007? 2002 00123 WORD6 CALL SN_I.SU ;GET LEAST SIGNIFICANT BYTE OF SERIAL NUMBER 0073 00Λ2 00324 MOVWF BUFFERTMP . • TEMPERΛRY STORAGE 0074 207Λ 00325 GOTO MK HI NIB . • COMPOSE HIGH NIBBLE OF SERIAL NUMBER LSB 0075 2002 00326 WORD7 CALL SN_LSB ;GET LEAST SIGNIFICANT BYTE OF SERIAL NUMBER 0076 00Λ2 00327 MOVWF BUFFERTMP ;TEMPERARY STORAGE 0077 287B OO320 GOTO MK_LO_NIB . • COMPOSE LOW NIBBLE OF SERIAL NUMBER LSB 0078 082Λ 00329 WORD8 MOVF COUNTER1.W ;GET HIGH BYTE OF TIME COUNT 0079 00A2 00330 MOVWF BUFFERTMP 007Λ 0EA2 00331 MK_HI NIB 1 SWAPF BUFFERTMP, F ;SWΛP NIBBLES IN BUFFER TEMP. 007B 0822 00332 MK LO NIE 1 MOVF BUFFERTMP, W 007C 390F 00333 MK_ASCII ANDLW OxOF ;GET RID OF HIGH NIBBLE 007D 00A2 00334 MOVWF BUFFERTMP . • PLACE IN TEMPERΛRY STORAGE TO DO COMPARE 007E 300A 00335 MOVLW OxOA . ■ FINDING OUT IF ASCII OFFSET IS 30 OR 37 HEX 007F 0222 00336 SUBWF BUFFERTMP, W . • CHECKING TO SEE IF A-F (37 HEX OFFSET) 00B0 1C03 00337 BTFSS STATUS, C ,-CΛRRY MEANS IT WAS A-F 0001 2885 00330 GOTO SETO 9 .-ADD 30 HEX TO NUMBER 0082 3037 00339 SETA F MOVLW 0x37 ;ADD 37 HEX TO NUMBER 0003 0722 00340 ADDWF BUFFERTMP, W 0084 28A5 00341 GOTO LOADXMIT 0085 3030 00342 SET0_9 MOVLW 0x30 .-ADD HEX 30 TO NUMBER 0086 0722 00343 ADDWF BUFFERTMP, W 0087 28A5 00344 GOTO LOADXMIT 0088 0B2A 00345 WORD9 MOVF C0UNTER1,W ;GET HIGH BYTE OF COUNTER FOR LOW NIBBLE 0089 O0A2 00346 MOVWF BUFFERTMP 008A 287B 00347 GOTO MK LO NIB ; LOWER NIBBLE OF MOST SIGNIFICANT BYTE 008B 082B 00348 WORD10 MOVF COUNTER1+1.W . • SECOND BYTE OF TIME COUNT — 008C 00A2 00349 MOVWF BUFFERTMP 008D 287Λ 00350 GOTO MK_HI_NIB ,-HIGH ORDER NIBBLE OF SECOND BYTE 008E 082B 00351 WORD11 MOVF C0UNTER1+1,W ;LOW ORDER NIBBLE OF SECOND BYTE 008F 00A2 00352 MOVWF BUFFERTMP 0090 287B 00353 GOTO MK LO NIB 0091 082C 00354 WORD12 MOVF C0UNTER1+2,W THIRD BYTE OF TIME COUNT 0092 00A2 00355 MOVWF BUFFERTMP 0093 2B7A 00156 GOTO MK HI NIB HIGH ORDER NIBBLE OF THIRD BYTE 0094 082C 00357 WORD13 MOVF COUNTER1+2.W LOW ORDER NIBBLE OF THIRD BYTE OF TIME COUNT 0095 00A2 00350 MOVWF BUFFERTMP 0096 287B 00359 GOTO MK LO NIB 0097 0837 0OJ60 WORD1 MOVF IMΛGEHIGH.W FIRST EIGHT BITS OF RF IMAGE 0098 00A2 00361 MOVWF BUFFERTMP 0099 287A 00362 GOTO MK HI NIB HIGH ORDER NIBBLE OF FIRST IMAGE BYTE 009Λ OB37 00363 WORD15 MOVF IMAGEHIGH,W LOW ORDER NIBBLE OF FIRST IMAGE BYTE 009B 00A2 00364 MOVWF BUFFERTMP 009C 2B7B 00365 GOTO MK LO NIB 009D 0836 00366 ' WORD16 MOVF IMAGELOW,W ; SECOND EIGHT BITS OF RF IMAGE 71 .1 i i ; ; : I sotmrr ΠIIFFFIΠMP M i (. oiiuMi Ninπi f Η( OND IMΛ( F in I F wciitiu ; I nw i mm ii in mil \ i ' K ONI) IMΛI I il nil w , nil', ".IIOUI II IIΛVF NO Λ( I 1 I I V AT lllll 11 Ml 2114/ , HF IΛHI IF Λ< I 1VI I Y oo i ; ; ooi 00179 00380 00381 00102 , 00183 00384 00305 , ******** ........ • * ••••• ** • *** . 00186 . * » RS48! i AT 57 6 KBΛUD 00 » Θ7 * * ***** . , ******* ************* . 00108 , 00389 , ;57 6K BAUD ROUTINE FOR DATA TRANSMISSION 00Λ8 1485 00390 RS485 bsf TX.ON ;set transmit to resting level 00Λ9 3008 00191 movlw 0x08 ;eιght bits to send OOAA O0A0 00392 mo f Count ;bιt counter for ASCII word OOΛB 01Λ4 00393 clrf ThisBit ;for collision check OOAC 118B 00394 bcf INTCON,RBIE ;SHUT OFF PORT B INTERUPT OOAD 138B 00395 bcf INTCON,GIE ;CUT OFF INTERUPTS OOAE 1F86 00396 BTFSS DAT,RS485IN , LAST CHANCE TO ABORT LINE CAPTURE -2 MIC OOAF 2847 00397 GOTO WORD1 ;LAST CHANCE TO ABORT OOBO 1405 00398 bs TX, ENABLE ;Enable rs245 chip transmit function 00B1 0000 00399 NOP 00B2 1085 00400 bcf TX,ON Send Start Bit note, start bit is low 00B3 0000 00101 nop 1 clocks 00B4 1205 00402 bcf TX, LIGHT ,TURN ON TRANSMIT DATA LIGHT 2 clock 00B5 0000 00103 nop 3 clocks 00B6 1106 00104 BCF DAT, IN_LIGHT , TURN ON RECIEVE DATA LIGHT 4 clocks 00B7 0CA3 00405 bittest rrf XmtReg, F ;move data into carry, lsb bit first 5 clocks 00B8 1C03 00406 btfss STATUS, C , if bit moved was a "1" then }ump 6 clocks 00B9 28D1 01 107 goto setO ; bit moved was a "0" send bit 8 clocks OOBA 28DD 00108 goto setl , bit moved was a "1" send bit 9 clocks 00109 00110 ( ******** ******* ************** ....... OOBB 0000 0(1111 LastBlt NOP .delay to end last bit 6 clocks OOBC 0000 00112 NOP clocks OOBD 0000 0( 113 NOP 8 clocks OOBE 0000 00114 NOP 9 clocks OOBF 0000 00115 NOP 10 clocks OOCO 0000 00416 NOP 11 clocks 00C1 0000 00117 NOP 12 clocks 00C2 1506 00-118 BSF DAT, IN_LIGHT 'SHUT OF RECIEVE DATA LIGHT 13 00C3 1605 00419 BSF TX, IGHT .SHUT OF TRANSMIT LIGHT 14 72 MPASM 02.01 Released 916F.ΛSM 13:47:22 LOC OBJECT COllb LINE SOURCE TEXT VALUE 00C4 0000 00420 NOP 00C5 1485 00121 stopblt bsf TX,ON ; Send Stop Bit 16 clocks O0C6 178B 00-122 BSF INTCON.GIE ; RE-ENABLE INTERUPTS 1 00C7 0BBE 00423 decfsz WORD_NUM, F . • index next character to be sent 2 cloc 00C8 2832 00424 goto do ΛSCII ;END OF SINGLE CHARACTER TRANSMIT 4 clocl-s 00-1 5 ;house keeping takes 17 MIN - 32 MAX clock cycles 00426 ;as stop bit time for each character 00C9 1005 00427 bcf TX, ENABLE ,-shut off rs485 loop 00CΛ 01ΛB 00428 Cl.RF COUHTERO+3 ;ΛS SΛFTEY PRECΛUSION OOCB 080(. (Hi 4.'9 MOVF PORTB, ;GET NEW IMAGE OF B FOR INTERUPTS OOCC 100B 00 no BCF IHTCON,RBIF ; CLEAR FLAG OOCD 0000 0114 1 NOP OOCE 158B 00432 BSF INTCON.RBIE ; RE- ENABLE I NTERU PT FOR PORT B OOCF 20ED 00433 CALL DEC_BUFF ; MOVE DATA DOWN I N BU FFER OODO 2B1D 00434 GOTO CONTROL 00435 . 00436 00D1 1106 00-111 setO BCF DAT , I II L I GHT TURN ON REC I EVE LI GHT 9 clocks 00D2 0000 00130 NOP 1 00D3 0806 01) I 19 ovf PORTB , W .-READ I/O PORT TO CHECK FOR COLLISIONS 11 clocl s OOD4 3980 00140 andlw 0x 80 ;mask out all except rs4B5 recieve bit 12 clock 00D5 0624 00441 xorwf ThisBit, /TEST TO SEE IF READ IS THE SAME AS BIT 11 clocks 00Of) 1D01 00142 t f ss STATUS, Z ,'lf zero then should be ok 1 <1 r locks 0011/ 20FI1 oto CRASH . ■ detected collision 1 OOllll l(in r ) bcf TX, ON ;make transmitter send - zero 16 clocks 00D9 1 JΛ4 bcf T lsBl t, 7 ,-clear marker for colision test 1 clocks OODΛ OBΛO 00446 bitcount decfsz Count, F / count down 8-0 2 clock OODB 2ΘB7 0M ; goto bittest ; repeat loop until done 4 clocks OODC 2BBB 00448 goto LastBit /end byte delay 5 clocks 00449 , OODD 0000 00450 setl NOP 10 clocks OODE 0806 004 1 mo f PORTB, .-READ I/O PORT TO CHECK FOR COLLISIONS 11 cloc s OOOF 3900 (10452 andlw OXBO ;mask out all except rs485 recieve bit 12 clocks OOEO 0624 00453 ThisBit, W .-TEST TO SEE IF READ IS THE SAME AS BIT 13 clocks 00E1 1D03 00454 STATUS, Z ;if zero then must be should be ok 14 clocks 00E2 28E8 00455 goto CRASH /detected collision 15 clocks 00E3 1485 00456 b f TX.ON ;make transmitter send a 1 16 clocks 00E4 17A4 00457 bsf ThlsBlt,7 ;set marker for collision check 1 clocks 00E5 OBΛO 00458 decfsz Count, F /count down 8-0 2 clock 00E6 28B7 00459 goto bittest /repeat loop until done 4 clocks 00E7 2BBB 00460 goto LastBit /end byte delay 5 clocks 00461 ; OOEB 1005 00462 CRASH BCF TX, ENABLE /CLEAR LINE - ABORT TRANSMISSION DUE TO CONFLICT O0L9 170B 00463 BSF INTCON.GIE ; E-ENABLE INTERUPTS OOEΛ 1506 00464 BSF DAT, IN_LIGHT /SHUT OFF RECIEVER LIGHT OOEB 1605 00465 BSF TX, LIGHT /SHUT OFF TRANSMIT LIGHT OOF.C 21147 00466 GOTO WORD1 /GO WAIT FOR FREE LINE 01146 I 0114 r.π THIS ROUTINE MOVES ALL DATA DOWN ONE POSITION IN BUFFER 00469 ,-••••••• 00470 / OOED 0B2F. 00471 DEC_BUFF MOVF COUIITER2, W /MOVE DATA DOWN IN BUFFER OOEE OOΛΛ 0047 > MOVWF COUNTER1 73 MPASM 02.01 Released 13:47:22 PAGE 10 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00EF 082F 00473 MOVF COUNTER2+l,W 00F0 OOΛB 00474 MOVWF COUNTER1+1 00F1 0Θ30 00475 MOVF COUNTER2+2,W 00F2 OOAC 00476 MOVWF COUNTER1+2 00F3 0831 00477 MOVF COUNTER2+3,W 00F4 OOAD 00478 MOVWF COUNTER1+3 00F5 083B 00479 MOVF IMAGEL02,W 00F6 00B9 00480 MOVWF IMAGELOl 00F7 083A 00481 MOVF IMAGEHI2,W 00F8 00B8 00482 MOVWF IMAGEHI1 00F9 138B 00483 BCF INTCON,GIE TURN OFF INTERUPTS TO PREVENT BUFFER CHANGE OOFA 0832 00484 DEC3 2 MOVF COUNTER3, OOFB OOΛE 00485 MOVWF COUNTER2 OOFC 0833 00486 MOVF COUNTER3+l,W OOFD OOAF 00487 MOVWF COUNTER2+1 OOFE 0834 00488 MOVF COUNTER3+2,W OOFF OOBO 00489 MOVWF COUNTER2+2 0100 0835 00490 MOVF COUNTER3+3,W 0101 00B1 00491 MOVWF COUNTER2+3 0102 083D 00492 MOVF IMAGEL03.W 0103 OOBB 00493 MOVWF IMAGEL02 0104 083C 00494 MOVF IMAGEHI3,W 0105 OOBA 00495 MOVWF IMΛGEHI2 0106 01B2 00496 CLRF COUNTER3 0107 01B3 00497 CLRF COUNTER3+1 0108 01B4 00498 CLRF COUNTER3+2 0109 01B5 00499 CLRF COUNTER3+3 010A 01BD 00500 CLRF IMΛGEL03 010B 01BC 00501 CLRF IMAGEHI3 010C 0008 00502 RETURN 00503 00504 00505 END OF RS485 CODE 57.6 KBAUD 00506 00507 00508 00509 INTERUPT SERVICE ROUTINES FOR TIMER, RF INPUT AND RECIEVER 00510 * * ** * * ** * * ** **** 00511 00512 010D 1105 00513 BCF PORTA, 2 /turn on light during interupt routine 010E OOBF 00514 MOVWF W_TEMP /SAVE CONTEXT FOR RETURN 010F 0E03 00515 SWAPF STATUS, W /MOVF CHANGES ZERO, COULD CAUSE PROBLEMS 0110 O0C2 00516 MOVWF STAT_TEMP 0111 1283 00517 BCF STATUS, PO /BANK 0 SELECT 0112 1585 00518 BSF PORTA, 3 /TO MANY EXITS IN ROUTINE ALL JUMPING HERE 0113 1486 00519 BSF DAT,RF_LIGHT /SAVES CODE 0114 190B 00520 BTFSC INTCON,T0IF /FIRST CHECK IS FOR TIMER HIGHEST PRIORITY 0115 2962 00521 GOTO TIMER_CK 0116 188B 00522 BTFSC INTCON, INTF /SECOND CHECK IS FOR RF INTERUPT 0117 2920 00523 GOTO RF_PULSE 0118 180B 00524 BTFSC INTCON, RBIF ;CHECK RS485 0119 295E 00525 GOTO DATA IN 74 MPASM 02 . 01 Released 916F.ASM 13:47:22 LOC OBJECT CODE LINE SOURCE TEXT VALUE 011A OE42 00526 RSTR REG SWAPF STAT_TEMP,W RESTORE CONTEXT TO EXIT INTERUPTS 011B 0083 00527 MOVWF STATUS 011C OEBF 00528 SWAPF W TEMP, F TO AVOID CHANGING ZERO— DOUBLE SWAP 011D 0E3F 00529 SWAPF W TEMP,W 011E 1505 00530 BSF PORTA, 2 leaving interupt routine 011F 0009 00531 RETFIE RETURN TO MAIN PROGRAM 00532 0120 108B 00533 RF_PULSE BCF INTCON, INTF CLEAR FLAG FOR RF INTERUPT 0121 1086 00534 BCF DΛT,RF_LIGHT TURN ON RF LIGHT 0122 0801 00535 MOVF TMR0,W GET TIMER FOR MAXIMUM WIDTH CHECK 0123 00Λ7 00536 MOVWF RD TIME 00537 / BTFSC TX, ENABLE SEE IF WE GOT HERE DURING A RS 485 MESSAGE 0124 292B 00538 GOTO RF RD LP INTERUPT LATENCY MAY HAVE OVERLAPPED INPUT PU 0125 3002 00539 MOVLW D'02' 0126 00C5 00540 MOVWF RF TIMER 0127 1C06 00541 PULSE - c BTFSS PORTB, 0 CHECKING RF INPUT 0128 2912 00542 GOTO RECHECK PULSE IS TO SHORT GO RECHECK 0129 0BC5 00543 DECFSZ RF TIMER, F 012A 2927 00544 GOTO PULSE CK SEE IF PULSE IS AT LEAST 60 MICROSECONDS 012B 1C06 00545 RF_RD LP BTFSS PORTB, 0 CHECK RF INPUT PULSE 012C 292E 00546 GOTO CHK_WIDTH 012D 292B 00547 GOTO RF RD LP LOOP UNTIL END OF RF PULSE 012E 0827 00548 CHK_WIDTH MOVF RD TIME,W 012F 3E04 00549 ADDLW 0X04 CHECKING FOR 210 MICROSECONDS MAXIMUM WIDTH 0130 0201 00550 SUBWF TMR0,W 0131 1C03 00551 BTFSS STATUS, C CARRY INDICATES TO LONG A PULSE 0132 2934 00552 GOTO RD RF IN THE PULSE WAS BETWEEN 60 AND 210 -ITS OK 0133 2912 00553 GOTO RECHECK TO LONG FOR DATA FROM TAG 01 4 216A 00554 RD_RF_ IN CALL BUFF CLN CLEAN UP BUFFER 0135 3012 00555 MOVLW 0X12 SETTING UP IMAGE COUNTER 16+3 SHIFTS 0136 00C1 00556 MOVWF IMAGE_CNT 0137 01B6 00557 CLRF IMAGELOW 0138 01B7 00558 CLRF IMAGEHIGH CLEAR IMAGE HIGH WHILE WAITING 0139 1003 00559 BCF STATUS, C 013A 01C4 00560 ROT IMAGE CLRF RF BIT 013B 300A 00561 MOVLW D'10' NUMBER OF CHECKS FOR EACH BIT 013C 00C5 00562 MOVWF RF TIMER COUNTER FOR BIT TIME MEASUREMENT 013D 1806 00563 RF ON CK BTFSC PORTB, 0 CHECKING RF INPUT 013E 1444 00564 BSF RF_BIT,0 013F 0BC5 00565 DECFSZ RF TIMER, F 0140 293D 00566 GOTO RF_ON_CK 0141 1844 00567 BTFSC RF BIT,0 0142 1436 00568 BSF IMAGELOW, 0 / 0143 1C44 00569 BTFSS RF BIT, 0 0144 1036 00570 BCF IMAGELOW, 0 0145 0BC1 00571 DECFSZ I ΛGE_CNT, F DECREMENT 18 TIMES (16 BITS1+3 over shifts 0146 2948 00572 GOTO ROLL_IT the 3 over shifts move data window 208uS 0147 294C 00573 GOTO DO I BUF END UP ROUTINE 0148 0DB6 00574 ROLL_IT RLF IMAGELOW, F ADD BIT IN AND ROTATE 0149 0DB7 00575 RLF IMAGEHIGH, F 014Λ 0000 00576 NOP 014B 293Λ 00577 GOTO ROT IMAGE 014C 0836 00578 DO_I_BUF MOVF IMAGELOW, W 75 MPΛSM 02.01 Released 13:47:22 PAGE 12 LOC OBJECT CODE LINE SOURCE TEXT VALUE 014D 1D03 00579 BTFSS STATUS, Z CHECK LOW BYTE FOR DATA 014E 2954 00580 GOTO DO_COUNT DATA FOUND SO CONTINUE 014F 0837 00581 MOVF IMAGEHIGH, 0150 1D03 00582 BTFSS STATUS, Z CHECK HIGH BYTE FOR DATA 0151 2954 00583 GOTO DO_COUNT 0152 108B 00584 BCF INTCON, INTF ,- RESET FLAG AS IT MAY HAVE BEEN RESET 0153 2912 00585 GOTO RECHECK 0154 3020 00586 DO_COUNT MOVLW 0X20 /TAG MESSAGE INDICATOR — FOR RF MESSAGE 0155 00B5 00587 MOVWF COUNTER3+3 /BUT TAG INDICATOR IN STATUS LOCATION 0156 0836 00588 MOVF IMAGELOW, W /MOVE IMAGE DATA INTO BUFFER 0157 00BD 00589 MOVWF IMAGEL03 0158 0837 00590 MOVF IMAGEHIGH, W 0159 ODBC 00591 MOVWF IMΛGEHI3 015A 100B 00592 BCF INTCON, RBIF 015B 0000 00593 NOP 015C 108B 00594 BCF INTCON, INTF /CLEAR FLAG FOR RF INTERUPT 015D 2912 00595 G T 00596 ; " * * * * * * ** O ** O *** RECHECK 015E 100B 00597 DATΛ_IN BCF INTCON, RBIF /CLEAR FLAG FOR RS485 INPUT 015F 1106 00598 BCF DAT, IN_LIGHT / TURN ON DATA LIGHT 0160 118B 00599 BCF INTCON, RBIE /SHUT OF INTERUPT UNTIL NEXT TIMER OVER FLOW 0161 2912 00600 GOTO RECHECK /RETEST INTERUPTS TO SEE IF ANY PENDING 0162 1185 00601 TIMER_CK BCF PORTA, 3 /TIMER LIGHT ON 0163 0886 00602 MOVF PORTB, F /READ PORT B FOR INTERUPT OH RECIEVE 0164 1506 00603 BSF DAT, IN_LIGHT /SHUT OFF RECIEVE LIGHT IF IT IS ON 0165 100B 00604 BCF INTCON, RBIF /CLEAR FLAG BEFOR TURNING ON INTERUPT 0166 0000 00605 NOP 0167 158B 00606 BSF INTCON, RBIE ; E-ENABLE RECIEVE INTERUPT 0168 216A 00607 CALL BUFF_CLN / INCREMENT TIMER COUNT 0169 2912 00608 GOTO RECHECK 016A 1EB5 00609 BUFF_CLN BTFSS COUNTER3+3,5 /CHECK FOR SPACE AVAILABLE IN BUFFER 016B 2980 00610 GOTO SET_COUNT /BUFFER CLEAR 016C 1EAD 00611 BTFSS COUNTER1+3, 5 /CHECK FOR DATA READY TO TRANSMIT 016D 20ED 00612 CALL DEC_BUFF /MOVE ALL DATA DOWN IN BUFFER 016E 1EB1 00613 BTFSS COUNTER2+3, 5 ;IF LOCATION ONE IS FULL TRY LOCATION TWO 016F 20FA 00614 CALL DEC3_2 ,-JUST CLEAN UP TWO, IF ENTIRE BUFFER FULL.. TO 0170 2980 00615 GOTO SET COUNT 0171 HOB 00616 INC_TIMR BCF INTCON, TOIF /CLEAR FLAG 0172 0FΛ9 00617 INCFSZ COUNTERO+1, F ; INCREMENT TIMER COUNTER- SECOND BYTE 0173 2980 00618 GOTO SET_COUNT 0174 0AA8 00619 INCF COUNTERO, F INCREMENT MSB OF COUNTER— 24 BITS 0175 0840 00620 MOVF STAT_CHK,W GET LAST STATUS MESSAGE TIME 0176 3E07 00621 ADDLW 0X07 ADDING 31.85 SECONDS TO LAST TIME STATUS MSG. 0177 022B 00622 SUBWF COUNTERO, W 0178 1D03 00623 BTFSS STATUS, Z .CHECKING TIME FOR NEXT STATUS MESSAGE 0179 2980 00624 GOTO SET COUNT 017A 0828 00625 MOVF COUNTERO, NEW STATUS MESSAGE AT THIS TIME 017B 00C0 00626 MOVWF STAT_CHK SAVED FOR NEXT TICK OF CLOCK 017C 3021 00627 MOVLW 0X21 KEEP ALIVE TIME MESSAGE 017D 00B5 00628 MOVWF COUNTERS+3 STATUS INDICATOR IN TAG POSITION 017E 01B6 00629 CLRF IMAGELOW 017F 01B7 00630 CLRF IMAGEHIGH 0180 0801 00631 SET COUNT MOVF TMR0,W /SAVE TIMER 76 MPASM 02.01 Released 13:47:22 PAGE 13 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0181 190B 00632 BTFSC INTCON, T0IF CHECK TIMER FLAG 0182 2971 00633 GOTO INC ΓIMR CLEAN UP TIMER 0183 00B4 00634 MOVWF COUNTER3+2 0184 0829 00635 MOVF COUNTER0+l,W 0185 00B3 00636 MOVWF COUNTER3+1 0186 0828 00637 MOVF COUNTERO, W 0187 00B2 00638 MOVWF COUNTER3 0188 0008 00639 RETURN 00640 00641 77

Claims: CLAIMS What is claimed is: 1. A method of identifying a transmitter that has identifying information, comprising the steps of: transmitting portions of the identifying infoπnation from the transmitter at predetermined intervals; receiving the transmitted portions of the identifying information; positively identifying the transmitter after receiving a plurality of the transmitted portions of the identifying information based on the identifying information; and subsequently identifying the transmitter based on the time of arrival of subsequently received transmitted portions of the identifying information. 2. The method of claim 1, wherein the positively identifying step further comprises the step of further comprising positively identifying the transmitter based on the entire identifying information after the entire identifying information has been received in portions. 3. The method of claim 1, further comprising the steps of: verifying the subsequent identification of the transmitter based on time of arrival by comparing subsequently transmitted portions of the identified information with previously received portions of the identifying information. 78 4. The method of claim 1, wherein the step of receiving transmitted portions further comprises the step of receiving the transmitted portions of identifying information at more than one receiver. 5. The method of claim 1 , wherein the step of receiving transmitted portions further comprises the step of receiving transmitted portions from both a first and second transmitter. 6. The method of claim 5, wherein the step of positively identifying the transmitter further comprises the step of: discriminating between the portions of identifying information transmitted by the first transmitter and portions of identifying information received from the second transmitter based on intervals between the transmission of the portions from each transmitter. 7. The method of claim 1 , wherein the step of transmitting further comprises the step of: transmitting using a radio frequency signals. 8. The method of claim 1, wherein the step of transmitting portions of identifying information at predetermined intervals further comprises the step of transmitting at intervals of about one second and transmissions of about one millisecond. 9. The method of claim 1, wherein the step of receiving transmitted portions further comprises the steps of: receiving the transmitted portions of the identifying information at a receiver; 79 time-stamping the transmitted portions of identifying information; and transmitting over a network the time-stamped portions of the identifying information to a processor. 10. The method of claim 1 , wherein the step of receiving the transmitted portions further comprises the steps of: receiving the transmitted portions of identifying information at a receiver; creating a pulse map representative of the received transmitted portions of identifying information; transmitting the pulse map from the receiver to a processor; and determining at the processor the meaning of information embedded within the pulse map. 11. The method of claim 1 , wherein the step of transmitting portions of identifying infoπnation further comprises the step of transmitting a signal bit of information regarding each transmission of portions of identifying information. 12. The method of claim 1, wherein the step of transmitting portions of identifying information further comprises the step of transmitting four bits of information during each transmission of portions of identifying information. 13. The method of claim 1, wherein the identifying information comprises a nine bit code. 80 14. The method of claim 1, wherein the identifying information comprises a thirty-two bit code. 15. The method of claim 1, wherein the step of transmitting portions of identifying information further comprises the step of encrypting the identifying information before transmitting the portions of identifying information. 16. A method for transmitting data, as described in claim 1, wherein each predetermined interval is the same length. 17. A method for transmitting data, as described in claim 1 , wherein each transmission is followed by a significantly longer non-transmit period. 18. A method for transmitting data, as described in claim 1 , wherein each transmission pulse has a duty cycle of less than .1 %. 19. A transmitter for transmitting identifying information, comprising: identifying information stored within the transmitter; transmit circuitry for transmitting a portion of the identifying infoπnation; and control circuitry that separates the identifying information into a plurality of portions of identifying information, and transmits the portions of identifying information at predetermined intervals, wherein the portions of identifying information are subsets of the identifying information. 81 20. The transmitter of claim 19, wherein the control circuitry further comprises: circuitry for encoding the identifying information with a counter and a digital signature. 21. The transmitter of claim 19, wherein the control circuitry is an embedded processor. 22. The transmitter of claim 19, wherein the transmitter is a radio frequency transmitter. 23. The transmitter of claim 19, wherein the control circuitry transmits the portions of identifying information at intervals of approximately one second, and wherein the transmission takes approximately one millisecond. 24. A system for receiving transmitted identifying information comprising: a receiver for receiving transmitted portions of identifying information; and a processor for receiving from the receiver the transmitted portions of identifying information and positively identifying a transmitter based on accumulated portions of the identifying information received from the receiver, and subsequently identifying a transmitter based on the time of aπival of portions of the identifying information to the receiver. 25. The system of claim 24, wherein the receiver is a radio frequency receiver. 82 26. The system of claim 24, wherein the receiver time-stamps received portions of identifying information before transmission to the processor. 27. The system of claim 24, wherein the receiver encodes received portions of identifying information in a pulse map and transmits the pulse map to the processor, and wherein the processor determines the meaning of the portions of identifying information transmitted from the receiver based on the contents of the pulse map. 28. The system of claim 24, wherein the receiver and processor are connected via a network. 83

Inventors: HELLER ALAN C, HELLER, ALAN, C.
Applicants: NEW ID INC, NEW ID, INC.
Application year: 1999
Main classification: H04J3
IPC codes: G06K7, G06K17