Automatic Meter Reading using GSM

133
AUTOMATIC METER READING USING GSM MODEM

description

The purpose of this project is the remote monitoring and control of the domestic energy meter by GSM NETWORK. This system enables the Electricity Department to read the meter reading regularly without the person visiting each house. This can be achieved by the use of microcontroller unit that continuously monitors and records the Energy Meter reading in its permanent ( non-volatile) memory location. This system also makes use of a GSM model for remote monitoring and control of Energy meter.

Transcript of Automatic Meter Reading using GSM

Page 1: Automatic Meter Reading using GSM

AUTOMATIC METER

READING USING GSM

MODEM

Page 2: Automatic Meter Reading using GSM

The purpose of this project is the remote monitoring and control of the domestic energy meter by GSM NET-WORK. This system enables the Electricity Department to read the meter reading regularly without the person visiting each house. This can be achieved by the use of microcontroller unit that continuously monitors and records the Energy Meter reading in its permanent ( non-volatile) memory location. This system also makes use of a GSM model for remote monitoring and control of Energy meter.

The Microcontroller based system continuously records the reading and the live meter reading can be sent to the Electricity deoartment on request. This system also can be used to disconnect the power supply to the house in case of non payment of electricity bills. A dedicated Gsm modem with sim card is required for each energy meter.

Page 3: Automatic Meter Reading using GSM
Page 4: Automatic Meter Reading using GSM

In this project we show that how we get a meter reading though a SMS. Energy

meter is connected to the microcontroller via Opto-Coupler PC 817. Meter

provide a pulse according to the load. Micro-controller counts the pulse and

save this in the external memory . Microcontroller converts this data in to

ASCII code and display the same on the LCD.. GSM modem is connected with

the microcontroller through MAX 232 IC. MAX 232 IC converts TTL data into

RS232 data . Non volatile memory is connected to .

For meter reading, fisrt of all we send a SMS to this unit from department

( company phone) . As the sms is received on this system then GSM modem

transfer the sms to this unit via GSM MODEM .. Microcontroller save this sms

and send back a sms with pulse and unit reading.

If the company want to stop . start the meter then company send a sms to this

unit.

By sending a MESSAGE 4LF , UNIT is off automatically and by sending a

message 4LN unit again restart automatically

Page 5: Automatic Meter Reading using GSM

Components used:

STEP DOWN TRANSFORMER

Step down transformer from 220 volt Ac to 9-0-9 ac. We use step down transformer to step down

the voltage from 220 to 9 volt ac. This AC is further connected to the rectifier circuit for AC to DC

conversion. Transformer current rating is 750 ma .

DIODE.

In this project we use IN 4007 diode as a rectifier. IN 4007 is special diode to convert the AC into DC

In this project we use two diode as a rectifier. Here we use full wave rectifier. Output of rectifier is

pulsating DC. To convert the pulsating dc into smooth dc we use Electrolytic capacitor as a main

Page 6: Automatic Meter Reading using GSM

filter. Capacitor converts the pulsating dc into smooth dc and this DC is connected to the Regulator

circuit for Regulated 5 volt DC.

Page 7: Automatic Meter Reading using GSM
Page 8: Automatic Meter Reading using GSM

Pin no 40 of the controller is connected to the positive supply. Pin no 20

is connected to the ground. Pin no 9 is connected to external resistor

capacitor to provide a automatic reset option when power is on.

Reset Circuitry:

Page 9: Automatic Meter Reading using GSM

Pin no 9 of the controller is connected to the reset circuit. On the circuit

we connect one resistor and capacitor circuit to provide a reset option

when power is on

As soon as you give the power supply the 8051 doesn’t start. You need to restart for the microcontroller to start. Restarting the

microcontroller is nothing but giving a Logic 1 to the reset pin at least for the 2 clock pulses. So it is good to go for a small

circuit which can provide the 2 clock pulses as soon as the microcontroller is powered.

This is not a big circuit we are just using a capacitor to charge the

microcontroller and again discharging via resistor.

Crystals

Pin no 18 and 19 is connected to external crystal oscillator to provide a

clock to the circuit.

Page 10: Automatic Meter Reading using GSM

Crystals provide the synchronization of the internal function and to the peripherals.

Whenever ever we are using crystals we need to put the capacitor behind it to make

it free from noises. It is good to go for a 33pf capacitor.

We can also resonators instead of costly crystal which are low cost and

external capacitor can be avoided.

But the frequency of the resonators varies a lot. And it is strictly not

advised when used for communications projects.

How is this time then calculated?

The speed with which a microcontroller executes instructions is

determined by what is known as the crystal speed. A crystal is a

component connected externally to the microcontroller. The crystal has

different values, and some of the used values are 6MHZ, 10MHZ, and

11.059 MHz etc.

Thus a 10MHZ crystal would pulse at the rate of 10,000,000 times per

second.

Page 11: Automatic Meter Reading using GSM

The time is calculated using the formula

No of cycles per second = Crystal frequency in HZ / 12.

For a 10MHZ crystal the number of cycles would be,

10,000,000/12=833333.33333 cycles.

This means that in one second, the microcontroller would execute

833333.33333 cycles.

Page 12: Automatic Meter Reading using GSM

LIQUID CRYSTAL DISPLAY

A liquid crystal display (LCD) is a thin, flat display device made up of any number of color or monochrome pixels arrayed in front of a light source or

reflector. It is prized by engineers because it uses very small amounts of electric power, and is therefore suitable for use in battery-powered electronic devices.

Reflective twisted nematic liquid crystal display.

1. Vertical filter film to polarize the light as it enters. 2. Glass substrate with ITO electrodes. The shapes of these electrodes will

determine the dark shapes that will appear when the LCD is turned on or off. Vertical ridges etched on the surface are smooth.

3. Twisted nematic liquid crystals.

4. Glass substrate with common electrode film (ITO) with horizontal ridges to line up with the horizontal filter.

5. Horizontal filter film to block/allow through light.

6. Reflective surface to send light back to viewer.

Page 13: Automatic Meter Reading using GSM

A subpixel of a color LCD

OverviewEach pixel of an LCD consists of a layer of liquid crystal molecules aligned between two transparent electrodes, and two polarizing filters, the axes of polarity of which are perpendicular to each other. With no liquid crystal between the polarizing filters, light passing through one filter would be blocked by the other.

The surfaces of the electrodes that are in contact with the liquid crystal material are treated so as to align the liquid crystal molecules in a particular direction. This treatment typically consists of a thin polymer layer that is unidirectionally rubbed using a cloth (the direction of the liquid crystal alignment is defined by the direction of rubbing).

Before applying an electric field, the orientation of the liquid crystal molecules is determined by the alignment at the surfaces. In a twisted nematic device (the most common liquid crystal device), the surface alignment directions at the two electrodes are perpendicular, and so the molecules arrange themselves in a helical structure, or twist. Because the liquid crystal material is birefringent (i.e.

Page 14: Automatic Meter Reading using GSM

light of different polarizations travels at different speeds through the material), light passing through one polarizing filter is rotated by the liquid crystal helix as it passes through the liquid crystal layer, allowing it to pass through the second polarized filter. Half of the light is absorbed by the first polarizing filter, but otherwise the entire assembly is transparent.

When a voltage is applied across the electrodes, a torque acts to align the liquid crystal molecules parallel to the electric field, distorting the helical structure (this is resisted by elastic forces since the molecules are constrained at the surfaces). This reduces the rotation of the polarization of the incident light, and the device appears gray. If the applied voltage is large enough, the liquid crystal molecules are completely untwisted and the polarization of the incident light is not rotated at all as it passes through the liquid crystal layer. This light will then be polarized perpendicular to the second filter, and thus be completely blocked and the pixel will appear black. By controlling the voltage applied across the liquid crystal layer in each pixel, light can be allowed to pass through in varying amounts, correspondingly illuminating the pixel.

With a twisted nematic liquid crystal device it is usual to operate the device between crossed polarizers, such that it appears bright with no applied voltage. With this setup, the dark voltage-on state is uniform. The device can be operated between parallel polarizers, in which case the bright and dark states are reversed (in this configuration, the dark state appears blotchy).

Both the liquid crystal material and the alignment layer material contain ionic compounds. If an electric field of one particular polarity is applied for a long period of time, this ionic material is attracted to the surfaces and degrades the device performance. This is avoided by applying either an alternating current, or by reversing the polarity of the electric field as the device is addressed (the response of the liquid crystal layer is identical, regardless of the polarity of the applied field).

When a large number of pixels is required in a display, it is not feasible to drive each directly since then each pixel would require independent electrodes. Instead, the display is multiplexed. In a multiplexed display, electrodes on one side of the display are grouped and wired together (typically in columns), and each group gets its own voltage source. On the other side, the electrodes are also grouped (typically in rows), with each group getting a voltage sink. The groups are designed so each pixel has a unique, unshared combination of source and sink. The electronics, or the software driving the electronics then turns on sinks in sequence, and drives sources for the pixels of each sink.

Important factors to consider when evaluating an LCD monitor include resolution, viewable size, response time (sync rate), matrix type (passive or

Page 15: Automatic Meter Reading using GSM

active), viewing angle, color support, brightness and contrast ratio, aspect ratio, and input ports (e.g. DVI or VGA).

Color displays In color LCDs each individual pixel is divided into three cells, or subpixels, which are colored red, green, and blue, respectively, by additional filters (pigment filters, dye filters and metal oxide filters). Each subpixel can be controlled independently to yield thousands or millions of possible colors for each pixel. Older CRT monitors employ a similar method.

Color components may be arrayed in various pixel geometries, depending on the monitor's usage. If software knows which type of geometry is being used in a given LCD, this can be used to increase the apparent resolution of the monitor through subpixel rendering. This technique is especially useful for text anti-aliasing.

Page 17: Automatic Meter Reading using GSM

A general purpose alphanumeric LCD, with two lines of 16 characters.

LCDs with a small number of segments, such as those used in digital watches and pocket calculators, have a single electrical contact for each segment. An external dedicated circuit supplies an electric charge to control each segment. This display structure is unwieldy for more than a few display elements.

Small monochrome displays such as those found in personal organizers, or older laptop screens have a passive-matrix structure employing supertwist nematic (STN) or double-layer STN (DSTN) technology (DSTN corrects a color-shifting problem with STN). Each row or column of the display has a single electrical circuit. The pixels are addressed one at a time by row and column addresses. This type of display is called a passive matrix because the pixel must retain its state between refreshes without the benefit of a steady electrical charge. As the number of pixels (and, correspondingly, columns and rows) increases, this type of display becomes less feasible. Very slow response times and poor contrast are typical of passive-matrix LCDs.

High-resolution color displays such as modern LCD computer monitors and televisions use an active matrix structure. A matrix of thin-film transistors (TFTs) is added to the polarizing and color filters. Each pixel has its own dedicated transistor, allowing each column line to access one pixel. When a row line is activated, all of the column lines are connected to a row of pixels and the correct voltage is driven onto all of the column lines. The row line is then deactivated and the next row line is activated. All of the row lines are activated in sequence during a refresh operation. Active-matrix displays are much brighter and sharper than passive-matrix displays of the same size, and generally have quicker response times, producing much better images.

Page 18: Automatic Meter Reading using GSM

Twisted nematic (TN)

LCD Display Technology

. In-plane switching (IPS)

controlSome LCD panels have defective transistors, causing permanently lit or unlit pixels which are commonly referred to as stuck pixels or dead pixels respectively. Unlike integrated circuits, LCD panels with a few defective pixels are usually still usable. It is also economically prohibitive to discard a panel with just a few defective pixels because LCD panels are much larger than ICs. Manufacturers have different standards for determining a maximum acceptable number of defective pixels. The maximum acceptable number of defective pixels for LCD varies a lot (such as zero-tolerance policy and 11-dead-pixel policy) from one brand to another, often a hot debate between manufacturers and customers. To regulate the acceptability of defects and to protect the end user, ISO released the ISO 13406-2 standard. However, not every LCD manufacturer conforms to the ISO standard and the ISO standard is quite often interpreted in different ways.

Examples of defects in LCD displays

LCD panels are more likely to have defects than most ICs due to their larger size. In this example, a 12" SVGA LCD has 8 defects and a 6" wafer has only 3 defects. However, 134 of the 137 dies on the wafer will be acceptable, whereas rejection of the LCD panel would be a 0% yield. The standard is much higher now due to fierce competition between manufacturers and improved quality

Page 19: Automatic Meter Reading using GSM

control. An SVGA LCD panel with 4 defective pixels is usually considered defective and customers can request an exchange for a new one. Some manufacturers, notably in South Korea where some of the largest LCD panel manufacturers, such as LG, are located, now have "zero defective pixel guarantee" and would replace a product even with one defective pixel. Even where such guarantees do not exist, the location of defective pixels is important. A display with only a few defective pixels may be unacceptable if the defective pixels are near each other. Manufacturers may also relax their replacement criteria when defective pixels are in the center of the viewing area.

Zero-power displaysThe zenithal bistable device (ZBD), developed by QinetiQ (formerly DERA), can retain an image without power. The crystals may exist in one of two stable orientations (Black and "White") and power is only required to change the image. ZBD Displays is a spin-off company from QinetiQ who manufacture both grayscale and colour ZBD devices.

A French company, Nemoptic, has developed another zero-power, paper-like LCD technology which has been mass-produced in Taiwan since July 2003. This technology is intended for use in low-power mobile applications such as e-books and wearable computers. Zero-power LCDs are in competition with electronic paper.

Kent Displays has also developed a "no power" display that uses Polymer Stabilized Cholesteric Liquid Crystals (ChLCD). The major drawback to the ChLCD display is slow refresh rate, especially with low temperatures.

DrawbacksLCD technology still has a few drawbacks in comparison to some other display technologies:

While CRTs are capable of displaying multiple video resolutions without introducing artifacts, LCD displays produce crisp images only in their "native resolution" and, sometimes, fractions of that native resolution. Attempting to run LCD display panels at non-native resolutions usually results in the panel scaling the image, which introduces blurriness or "blockiness".

Page 20: Automatic Meter Reading using GSM

LCD displays have a lower contrast ratio than that on a plasma display or CRT. This is due to their "light valve" nature: some light always leaks out and turns black into gray. In brightly lit rooms the contrast of LCD monitors can, however, exceed some CRT displays due to higher maximum brightness.

LCDs have longer response time than their plasma and CRT counterparts, older displays creating visible ghosting when images rapidly change; this drawback, however, is continually improving as the technology progresses and is hardly noticeable in current LCD displays with "overdrive" technology. Most newer LCDs have response times of around 8 ms.

In addition to the response times, some LCD panels have significant input lag, which makes them unsuitable for fast and time-precise mouse operations (CAD design, FPS gaming) as compared to CRTs

Overdrive technology on some panels can produce artifacts across regions of rapidly transitioning pixels (eg. video images) that looks like increased image noise or halos. This is a side effect of the pixels being driven past their intended brightness value (or rather the intended voltage necessary to produce this necessary brightness/colour) and then allowed to fall back to the target brightness in order to enhance response times.

LCD display panels have a limited viewing angle, thus reducing the number of people who can conveniently view the same image. As the viewer moves closer to the limit of the viewing angle, the colors and contrast appear to deteriorate. However, this negative has actually been capitalized upon in two ways. Some vendors offer screens with intentionally reduced viewing angle, to provide additional privacy, such as when someone is using a laptop in a public place. Such a set can also show two different images to one viewer, providing a three-dimensional effect.

Some users of older (around pre-2000) LCD monitors complain of migraines and eyestrain problems due to flicker from fluorescent backlights fed at 50 or 60 Hz. This does not happen with most modern displays which feed backlights with high-frequency current.

LCD screens occasionally suffer from image persistence, which is similar to screen burn on CRT and plasma displays. This is becoming less of a problem as technology advances, with newer LCD panels using various methods to reduce the problem. Sometimes the panel can be restored to normal by displaying an all-white pattern for extended periods of time.

Page 21: Automatic Meter Reading using GSM

Some light guns do not work with this type of display since they do not have flexible lighting dynamics that CRTs have. However, the field emission display will be a potential replacement for LCD flat-panel displays since they emulate CRTs in some technological ways.

Some panels are incapable of displaying low resolution screen modes (such as 320x200). However, this is due to the circuitry that drives the LCD rather than the LCD itself.

Consumer LCD monitors are more fragile than their CRT counterparts, with the screen especially vulnerable. However, lighter weight makes falling less dangerous, and some displays may be protected with glass shields.

Page 22: Automatic Meter Reading using GSM

8051 micro controller

The 8051

The 8051 developed and launched in the early 80`s, is one of the most popular micro controller in use today. It has a reasonably large amount of built in ROM and RAM. In addition it has the ability to access external memory.

The generic term `8x51` is used to define the device. The value of x defining the kind of ROM, i.e. x=0, indicates none, x=3, indicates mask ROM, x=7, indicates EPROM and x=9 indicates EEPROM or Flash.

A note on ROM

The early 8051, namely the 8031 was designed without any ROM. This device could run only with external memory connected to it. Subsequent developments lead to the development of the PROM or the programmable ROM. This type had the disadvantage of being highly unreliable.

The next in line, was the EPROM or Erasable Programmable ROM. These devices used ultraviolet light erasable memory cells. Thus a program could be loaded, tested and erased using ultra violet rays. A new program could then be loaded again.

An improved EPROM was the EEPROM or the electrically erasable PROM. This does not require ultra violet rays, and memory can be cleared using circuits within the chip itself.

Finally there is the FLASH, which is an improvement over the EEPROM. While the terms EEPROM and flash are sometimes used interchangeably, the difference lies in the fact that flash erases the complete memory at one stroke, and not act on the individual cells. This results in reducing the time for erasure.

Page 23: Automatic Meter Reading using GSM

Different microcontrollers in market.

PIC One of the famous microcontrollers used in the industries. It is based on RISC Architecture which makes the microcontroller process faster than other microcontroller.

INTEL These are the first to manufacture microcontrollers. These are not as sophisticated other microcontrollers but still the easiest one to learn.

ATMEL Atmel’s AVR microcontrollers are one of the most powerful in the embedded industry. This is the only microcontroller having 1kb of ram even the entry stage. But it is unfortunate that in India we are unable to find this kind of microcontroller.

Intel 8051

Intel 8051 is CISC architecture which is easy to program in assembly language and also has a good support for High level languages.

The memory of the microcontroller can be extended up to 64k.

This microcontroller is one of the easiest microcontrollers to learn.

The 8051 microcontroller is in the field for more than 20 years. There are lots of books and study materials are readily available for 8051.

Page 24: Automatic Meter Reading using GSM

Derivatives

The best thing done by Intel is to give the designs of the 8051 microcontroller to everyone. So it is not the fact that Intel is the only manufacture for the 8051 there more than 20 manufactures, with each of minimum 20 models. Literally there are hundreds of models of 8051 microcontroller available in market to choose. Some of the major manufactures of 8051 are

Atmel

Philips

Philips

The Philips‘s 8051 derivatives has more number of features than in any microcontroller. The costs of the Philips microcontrollers are higher than the Atmel’s which makes us to choose Atmel more often than Philips

Dallas

Dallas has made many revolutions in the semiconductor market. Dallas’s 8051 derivative is the fastest one in the market. It works 3 times as fast as a 8051 can process. But we are unable to get more in India.

Atmel

These people were the one to master the flash devices. They are the cheapest microcontroller available in the market. Atmel’s even introduced a 20pin variant of 8051 named 2051. The Atmel’s 8051 derivatives can be got in India less than 70 rupees. There are lots of cheap programmers available in India for Atmel. So it is always good for students to stick with 8051 when you learn a new microcontroller.

Page 25: Automatic Meter Reading using GSM

Architecture

Architecture is must to learn because before learning new machine it is necessary to learn the capabilities of the machine. This is some thing like before learning about the car you cannot become a good driver. The architecture of the 8051 is given below.

Page 26: Automatic Meter Reading using GSM

The 8051 doesn’t have any special feature than other microcontroller. The only feature is that it is easy to learn. Architecture makes us to know about the hardware features of the microcontroller. The features of the 8051 are

4K Bytes of Flash Memory 128 x 8-Bit Internal RAM Fully Static Operation: 1 MHz to 24 MHz 32 Programmable I/O Lines Two 16-Bit Timer/Counters Six Interrupt Sources (5 Vectored) Programmable Serial Channel Low Power Idle and Power Down Modes

The 8051 has a 8-Bit CPU that means it is able to process 8 bit of data at a time. 8051 has 235 instructions. Some of the important registers and their functions are

Let’s now move on to a practical example. We shall work on a simple practical

application and using the example as a base, shall explore the various features

of the 8051 microcontroller.

Consider an electric circuit as follows,

Page 27: Automatic Meter Reading using GSM

The positive side (+ve) of the battery is connected to one side of a switch. The other side of the switch is connected to a bulb or LED (Light Emitting Diode). The bulb is then connected to a resistor, and the other end of the resistor is connected to the negative (-ve) side of the battery.

When the switch is closed or ‘switched on’ the bulb glows. When the switch is open or ‘switched off’ the bulb goes off

If you are instructed to put the switch on and off every 30 seconds, how would you do it? Obviously you would keep looking at your watch and every time the second hand crosses 30 seconds you would keep turning the switch on and off.

Imagine if you had to do this action consistently for a full day. Do you think you would be able to do it? Now if you had to do this for a month, a year??

No way, you would say!

The next step would be, then to make it automatic. This is where we use the Microcontroller.

But if the action has to take place every 30 seconds, how will the microcontroller keep track of time?

Execution time

Look at the following instruction, clr p1.0

This is an assembly language instruction. It means we are instructing the microcontroller to put a value of ‘zero’ in bit zero of port one. This instruction is equivalent to telling the microcontroller to switch on the bulb. The instruction then to instruct the microcontroller to switch off the bulb is,

Page 28: Automatic Meter Reading using GSM

Set p1.0

This instructs the microcontroller to put a value of ‘one’ in bit zero of port one.

Don’t worry about what bit zero and port one means. We shall learn it in more detail as we proceed.

There are a set of well defined instructions, which are used while communicating with the microcontroller. Each of these instructions requires a standard number of cycles to execute. The cycle could be one or more in number.

How is this time then calculated?

The speed with which a microcontroller executes instructions is determined by what is known as the crystal speed. A crystal is a component connected externally to the microcontroller. The crystal has different values, and some of the used values are 6MHZ, 10MHZ, and 11.059 MHz etc.Thus a 10MHZ crystal would pulse at the rate of 10,000,000 times per second.

The time is calculated using the formula

No of cycles per second = Crystal frequency in HZ / 12.

For a 10MHZ crystal the number of cycles would be,

10,000,000/12=833333.33333 cycles.

Page 29: Automatic Meter Reading using GSM

This means that in one second, the microcontroller would execute 833333.33333 cycles.

Therefore for one cycle, what would be the time? Try it out.

The instruction clr p1.0 would use one cycle to execute. Similarly, the instruction setb p1.0 also uses one cycle.

So go ahead and calculate what would be the number of cycles required to be executed to get a time of 30 seconds!

Getting back to our bulb example, all we would need to do is to instruct the microcontroller to carry out some instructions equivalent to a period of 30 seconds, like counting from zero upwards, then switch on the bulb, carry out instructions equivalent to 30 seconds and switch off the bulb.

Just put the whole thing in a loop, and you have a never ending on-off sequence.

Let us now have a look at the features of the 8051 core, keeping the above example as a reference,

1. 8-bit CPU.( Consisting of the ‘A’ and ‘B’ registers)

Most of the transactions within the microcontroller are carried out through the ‘A’ register, also known as the Accumulator. In addition all arithmetic functions are carried out generally in the ‘A’ register. There is another register known as the ‘B’ register, which is used exclusively for multiplication and division.

Thus an 8-bit notation would indicate that the maximum value that can be input into these registers is ‘11111111’. Puzzled?

The value is not decimal 111, 11,111! It represents a binary number, having an equivalent value of ‘FF’ in Hexadecimal and a value of 255 in decimal.

We shall read in more detail on the different numbering systems namely the Binary and Hexadecimal system in our next module.

2. 4K on-chip ROM

Once you have written out the instructions for the microcontroller, where do you put these instructions?

Page 30: Automatic Meter Reading using GSM

Obviously you would like these instructions to be safe, and not get deleted or changed during execution. Hence you would load it into the ‘ROM’

The size of the program you write is bound to vary depending on the application, and the number of lines. The 8051 microcontroller gives you space to load up to 4K of program size into the internal ROM.

4K, that’s all? Well just wait. You would be surprised at the amount of stuff you can load in this 4K of space.

Of course you could always extend the space by connecting to 64K of external ROM if required.

3. 128 bytes on-chip RAM

This is the space provided for executing the program in terms of moving data, storing data etc.

4. 32 I/O lines. (Four- 8 bit ports, labeled P0, P1, P2, P3)

In our bulb example, we used the notation p1.0. This means bit zero of port one. One bit controls one bulb.

Thus port one would have 8 bits. There are a total of four ports named p0, p1, p2, p3, giving a total of 32 lines. These lines can be used both as input or output.

5. Two 16 bit timers / counters.

A microcontroller normally executes one instruction at a time. However certain applications would require that some event has to be tracked independent of the main program.

Page 31: Automatic Meter Reading using GSM

The manufacturers have provided a solution, by providing two timers. These timers execute in the background independent of the main program. Once the required time has been reached, (remember the time calculations described above?), they can trigger a branch in the main program.

These timers can also be used as counters, so that they can count the number of events, and on reaching the required count, can cause a branch in the main program.

6. Full Duplex serial data receiver / transmitter.

The 8051 microcontroller is capable of communicating with external devices like the PC etc. Here data is sent in the form of bytes, at predefined speeds, also known as baud rates.

The transmission is serial, in the sense, one bit at a time

7. 5- interrupt sources with two priority levels (Two external and three internal)

During the discussion on the timers, we had indicated that the timers can trigger a branch in the main program. However, what would we do in case we would like the microcontroller to take the branch, and then return back to the main program, without having to constantly check whether the required time / count has been reached?

This is where the interrupts come into play. These can be set to either the timers, or to some external events. Whenever the background program has reached the required criteria in terms of time or count or an external event, the branch is taken, and on completion of the branch, the control returns to the main program.

Priority levels indicate which interrupt is more important, and needs to be executed first in case two interrupts occur at the same time.

Page 32: Automatic Meter Reading using GSM

8. On-chip clock oscillator.

This represents the oscillator circuits within the microcontroller. Thus the hardware is reduced to just simply connecting an external crystal, to achieve the required pulsing rate.

PIN FUNCTION OF IC 89C51.

1 Supply pin of this ic is pin no 40. Normally we apply a 5 volt regulated dc power supply to this pin. For this purpose either we use step down transformer power supply or we use 9 volt battery with 7805 regulator.

2 Ground pin of this ic is pin no 20. Pin no 20 is normally connected to the ground pin ( normally negative point of the power supply.

3 XTAL is connected to the pin no 18 and pin no 19 of this ic. The quartz crystal oscillator connected to XTAL1 and XTAL2 PIN. These pins also needs two capacitors of 30 pf value. One side of each capacitor is connected to crystal and other pis is connected to the ground point. Normally we connect a 12 MHz or 11.0592 MHz crystal with this ic.. But we use crystal upto 20 MHz to this pins

4 RESET PIN.. Pin no 9 is the reset pin of this ic.. It is an active high pin. On applying a high pulse to this pin, the micro controller will reset and terminate all activities. This is often referred to as a power on reset. The high pulse must be high for a minimum of 2 machine cycles before it is allowed to go low.

5. PORT0 Port 0 occupies a total of 8 pins. Pin no 32 to pin no 39. It can be used for input or output. We connect all the pins of the port 0 with the pullup resistor (10 k ohm) externally. This is due to fact that port 0 is an open drain mode. It is just like a open collector transistor.

6. PORT1. ALL the ports in micrcontroller is 8 bit wide pin no 1 to pin no 8 because it is a 8 bit controller. All the main register and sfr all is mainly 8 bit wide. Port 1 is also occupies a 8 pins. But there is no need of pull up resistor in this port. Upon reset port 1 act as a input port. Upon reset all the ports act as a input port

Page 33: Automatic Meter Reading using GSM

7. PORT2. port 2 also have a 8 pins. It can be used as a input or output. There is no need of any pull up resistor to this pin.

PORT 3. Port3 occupies a totoal 8 pins from pin no 10 to pin no 17. It can be used as input or output. Port 3 does not require any pull up resistor. The same as port 1 and port2. Port 3 is configured as an output port on reset. Port 3 has the additional function of providing some important signals such as interrupts. Port 3 also use for serial communication.

ALE ALE is an output pin and is active high. When connecting an 8031 to external memory, port 0 provides both address and data. In other words, the 8031 multiplexes address and data through port 0 to save pins. The ALE pin is used for demultiplexing the address and data by connecting to the ic 74ls373 chip.

PSEN. PSEN stands for program store eneable. In an 8031 based system in which an external rom holds the program code, this pin is connected to the OE pin of the rom.

EA. EA. In 89c51 8751 or any other family member of the ateml 89c51 series all come with on-chip rom to store programs, in such cases the EA pin is connected to the Vcc. For family member 8031 and 8032 is which there is no on chip rom, code is stored in external memory and this is fetched by 8031. In that case EA pin must be connected to GND pin to indicate that the code is stored externally.

Page 34: Automatic Meter Reading using GSM

SPECIAL FUNCTION REGISTER ( SFR) ADDRESSES.

ACC ACCUMULATOR 0E0H

B B REGISTER 0F0H

PSW PROGRAM STATUS WORD 0D0H

SP STACK POINTER 81H

DPTR DATA POINTER 2 BYTES

Page 35: Automatic Meter Reading using GSM

DPL LOW BYTE OF DPTR 82H

DPH HIGH BYTE OF DPTR 83H

P0 PORT0 80H

P1 PORT1 90H

P2 PORT2 0A0H

P3 PORT3 0B0H

TMOD TIMER/COUNTER MODE CONTROL 89H

TCON TIMER COUNTER CONTROL 88H

TH0 TIMER 0 HIGH BYTE 8CH

TLO TIMER 0 LOW BYTE 8AH

TH1 TIMER 1 HIGH BYTE 8DH

TL1 TIMER 1 LOW BYTE 8BH

SCON SERIAL CONTROL 98H

SBUF SERIAL DATA BUFFER 99H

Page 36: Automatic Meter Reading using GSM

PCON POWER CONTROL 87H

INSTRUCTIONS

SINGLE BIT INSTRUCTIONS.

SETB BIT SET THE BIT =1

CLR BIT CLEAR THE BIT =0

CPL BIT COMPLIMENT THE BIT 0 =1, 1=0

JB BIT,TARGET JUMP TO TARGET IF BIT =1

JNB BIT, TARGET JUMP TO TARGET IF BIT =0

JBC BIT,TARGET JUMP TO TARGET IF BIT =1 &THEN CLEAR THE BIT

MOV INSTRUCTIONS

MOV instruction simply copy the data from one location to another location

Page 37: Automatic Meter Reading using GSM

MOV D,S

Copy the data from(S) source to D(destination)

MOV R0,A ; Copy contents of A into Register R0

MOV R1,A ; Copy contents of A into register R1

MOV A,R3 ; copy contents of Register R3 into Accnmulator.

DIRECT LOADING THROUGH MOV

MOV A,#23H ; Direct load the value of 23h in A

MOV R0,#12h ; direct load the value of 12h in R0

MOV R5,#0F9H ; Load the F9 value in the Register R5

ADD INSTRUCTIONS.

ADD instructions adds the source byte to the accumulator ( A) and place the result in the Accumulator.

MOV A, #25H

Page 38: Automatic Meter Reading using GSM

ADD A,#42H ; BY this instructions we add the value 42h in Accumulator ( 42H+ 25H)

ADDA,R3 ;By this instructions we move the data from register r3 to accumulator and then add the contents of the register into accumulator .

SUBROUTINE CALL FUNCTION.

ACALL,TARGET ADDRESS

By this instructions we call subroutines with a target address within 2k bytes from the current program counter.

LCALL, TARGET ADDRESS.

ACALL is a limit for the 2 k byte program counter, but for upto 64k byte we use LCALL instructions.. Note that LCALL is a 3 byte instructions. ACALL is a two byte instructions.

AJMP TARGET ADDRESS.

This is for absolute jump

AJMP stand for absolute jump. It transfers program execution to the target address unconditionally. The target address for this instruction must be withib 2 k byte of program memory.

Page 39: Automatic Meter Reading using GSM

LJMP is also for absoltute jump. It tranfer program execution to the target addres unconditionally. This is a 3 byte instructions LJMP jump to any address within 64 k byte location.

INSTRUCTIONS RELATED TO THE CARRY

JC TARGET

JUMP TO THE TARGET IF CY FLAG =1

JNC TARGET

JUMP TO THE TARGET ADDRESS IF CY FLAG IS = 0

INSTRUCTIONS RELASTED TO JUMP WITH ACCUMULATOR

JZ TARGET

JUMP TO TARGET IF A = 0

Page 40: Automatic Meter Reading using GSM

JNZ TARGET

JUMP IF ACCUMULATOR IS NOT ZERO

This instructions jumps if registe A has a value other than zero

INSTRUCTIONS RELATED TO THE ROTATE

RL A

ROTATE LEFT THE ACCUMULATOR

BY this instructions we rotate the bits of A left. The bits rotated out of A are rotated back into A at the opposite end

RR A

By this instruction we rotate the contents of the accumulator from right to left from LSB to MSB

Page 41: Automatic Meter Reading using GSM

RRC A

This is same as RR A but difference is that the bit rotated out of register first enter in to carry and then enter into MSB

RLC A

ROTATE A LEFT THROUGH CARRY

Same as above but but shift the data from MSB to carry and carry to LSB

RET

This is return from subroutine. This instructions is used to return from a subroutine previously entered by instructions LCALL and ACALL.

RET1

Page 42: Automatic Meter Reading using GSM

THIS is used at the end of an interrupt service routine. We use this instructions after intruupt routine,

PUSH.

This copies the indicated byte onto the stack and increments SP by . This instructions supports only direct addressing mode.

POP.

POP FROM STACK.

This copies the byte pointed to be SP to the location whose direct address is indicated, and decrements SP by 1. Notice that this instructions supports only direct addressing mode.

DPTR INSTRUCTIONS.

MOV DPTR,#16 BIT VALUE

Page 43: Automatic Meter Reading using GSM

LOAD DATA POINTER

This instructions load the 16 bit dptr register with a 16 bit immediate value

MOV C A,@A+DPTR

This instructions moves a byte of data located in program ROM into register A. This allows us to put strings of data, such as look up table elements.

MOVC A,@A+PC

This instructions moves a byte of data located in the program area to A. the address of the desired byte of data is formed by adding the program counter ( PC) register to the original value of the accumulator.

INC BYTE

This instructions add 1 to the register or memory location specified by the operand.

INC A

INC Rn

INC DIRECT

DEC BYTE

Page 44: Automatic Meter Reading using GSM

This instructions subtracts 1 from the byte operand. Note that CY is unchanged

DEC A

DEC Rn

DEC DIRECT

ARITHMATIC INSTRUCTIONS.

ANL dest-byte, source-byte

This perform a logical AND operation

This performs a logical AND on the operands, bit by bit, storing the result in the destination. Notice that both the source and destination values are byte –size only

`

DIV AB

This instructions divides a byte accumulator by the byte in register B. It is assumed that both register A and B contain an unsigned byte. After the division the quotient will be in register A and the remainder in register B.

Page 45: Automatic Meter Reading using GSM

TMOD ( TIMER MODE ) REGISTER

Both timer is the 89c51 share the one register TMOD. 4 LSB bit for the timer 0 and 4 MSB for the timer 1.

In each case lower 2 bits set the mode of the timer

Upper two bits set the operations.

GATE: Gating control when set. Timer/counter is enabled only while the INTX pin is high and the TRx control pin is set. When cleared, the timer is enabled whenever the TRx control bit is set

C/T : Timer or counter selected cleared for timer operation ( input from internal system clock)

M1 Mode bit 1

Page 46: Automatic Meter Reading using GSM

M0 Mode bit 0

M1 M0 MODE OPERATING MODE

0 0 0 13 BIT TIMER/MODE

0 1 1 16 BIT TIMER MODE

1 0 2 8 BIT AUTO RELOAD

1 1 3 SPLIT TIMER MODE

PSW ( PROGRAM STATUS WORD)

CY PSW.7 CARRY FLAG

AC PSW.6 AUXILIARY CARRY

Page 47: Automatic Meter Reading using GSM

F0 PSW.5 AVAILABLE FOR THE USER FRO GENERAL PURPOSE

RS1 PSW.4 REGISTER BANK SELECTOR BIT 1

RS0 PSW.3 REGISTER BANK SELECTOR BIT 0

0V PSW.2 OVERFLOW FLAG

-- PSW.1 USER DEFINABLE BIT

P PSW.0 PARITY FLAG SET/CLEARED BY HARDWARE

PCON REGISATER ( NON BIT ADDRESSABLE)

If the SMOD = 0 ( DEFAULT ON RESET)

TH1 = CRYSTAL FREQUENCY

256---- ____________________

384 X BAUD RATE

Page 48: Automatic Meter Reading using GSM

If the SMOD IS = 1

CRYSTAL FREQUENCY

TH1 = 256--------------------------------------

192 X BAUD RATE

There are two ways to increase the baud rate of data transfer in the 8051

1. To use a higher frequency crystal2. To change a bit in the PCON register

PCON register is an 8 bit register . Of the 8 bits, some are unused, and some are used for the power control capability of the 8051. the bit which is used for the serial communication is D7, the SMOD bit. When the 8051 is powered up, D7 ( SMOD BIT) OF PCON register is zero. We can set it to high by software and thereby double the baud rate

BAUD RATE COMPARISION FOR SMOD = 0 AND SMOD =1

TH1 ( DECIMAL) HEX SMOD =0 SMOD =1

-3 FD 9600 19200

-6 FA 4800 9600

-12 F4 2400 4800

-24 E8 1200 2400

XTAL = 11.0592 MHZ

Page 49: Automatic Meter Reading using GSM

IE ( INTERRUPT ENABLE REGISTOR)

EA IE.7 Disable all interrupts if EA = 0, no interrupts is acknowledged

If EA is 1, each interrupt source is individually enabled or disbaled

By sending or clearing its enable bit.

IE.6 NOT implemented

ET2 IE.5 enables or disables timer 2 overflag in 89c52 only

ES IE.4 Enables or disables all serial interrupt

ET1 IE.3 Enables or Disables timer 1 overflow interrupt

EX1 IE.2 Enables or disables external interrupt

ET0 IE.1 Enables or Disbales timer 0 interrupt.

EX0 IE.0 Enables or Disables external interrupt 0

Page 50: Automatic Meter Reading using GSM

INTERRUPT PRIORITY REGISTER

If the bit is 0, the corresponding interrupt has a lower priority and if the bit is 1 the corresponding interrupt has a higher priority

IP.7 NOT IMPLEMENTED, RESERVED FOR FUTURE USE.

IP.6 NOT IMPLEMENTED, RESERVED FOR FUTURE USE

PT2 IP.5 DEFINE THE TIMER 2 INTERRUPT PRIORITY LELVEL

PS IP.4 DEFINES THE SERIAL PORT INTERRUPT PRIORITY LEVEL

Page 51: Automatic Meter Reading using GSM

PT1 IP.3 DEFINES THE TIMER 1 INTERRUPT PRIORITY LEVEL

PX1 IP.2 DEFINES EXTERNAL INTERRUPT 1 PRIORITY LEVEL

PT0 IP.1 DEFINES THE TIMER 0 INTERRUPT PRIORITY LEVEL

PX0 IP.0 DEFINES THE EXTERNAL INTERRUPT 0 PRIORITY LEVEL

Page 52: Automatic Meter Reading using GSM

SCON: SERIAL PORT CONTROL REGISTER , BIT ADDRESSABLE

SCON

SM0 : SCON.7 Serial Port mode specifier

SM1 : SCON.6 Serial Port mode specifier

SM2 : SCON.5

REN : SCON.4 Set/cleared by the software to Enable/disable reception

TB8 : SCON.3 The 9th bit that will be transmitted in modes 2 and 3, Set/cleared

By software

RB8 : SCON.2 In modes 2 &3, is the 9th data bit that was received. In mode 1,

If SM2 = 0, RB8 is the stop bit that was received. In mode 0

RB8 is not used

T1 : SCON.1 Transmit interrupt flag. Set by hardware at the end of the 8th bit

Time in mode 0, or at the beginning of the stop bit in the other

Modes. Must be cleared by software

R1 SCON.0 Receive interrupt flag. Set by hardware at the end of the 8th bit

Time in mode 0, or halfway through the stop bit time in the other

Page 53: Automatic Meter Reading using GSM

Modes. Must be cleared by the software.

TCON TIMER COUNTER CONTROL REGISTER

This is a bit addressable

TF1 TCON.7 Timer 1 overflow flag. Set by hardware when the Timer/Counter 1

Overflows. Cleared by hardware as processor

TR1 TCON.6 Timer 1 run control bit. Set/cleared by software to turn Timer

Counter 1 On/off

TF0 TCON.5 Timer 0 overflow flag. Set by hardware when the timer/counter 0

Page 54: Automatic Meter Reading using GSM

Overflows. Cleared by hardware as processor

TR0 TCON.4 Timer 0 run control bit. Set/cleared by software to turn timer

Counter 0 on/off.

IE1 TCON.3 External interrupt 1 edge flag

ITI TCON.2 Interrupt 1 type control bit

IE0 TCON.1 External interrupt 0 edge

IT0 TCON.0 Interrupt 0 type control bit.

- 8051 Instruction Set

Arithmetic Operations

Mnemonic Description Size Cycles

ADD A,Rn Add register to Accumulator (ACC). 1 1

ADD A,direct Add direct byte to ACC. 2 1

ADD A,@Ri Add indirect RAM to ACC . 1 1

ADD A,#data Add immediate data to ACC . 2 1

Page 55: Automatic Meter Reading using GSM

ADDC A,Rn Add register to ACC with carry . 1 1

ADDC A,direct Add direct byte to ACC with carry. 2 1

ADDC A,@Ri Add indirect RAM to ACC with carry. 1 1

ADDC A,#data Add immediate data to ACC with carry. 2 1

SUBB A,Rn Subtract register from ACC with borrow. 1 1

SUBB A,direct Subtract direct byte from ACC with borrow 2 1

SUBB A,@Ri Subtract indirect RAM from ACC with borrow. 1 1

SUBB A,#data Subtract immediate data from ACC with borrow. 2 1

INC A Increment ACC. 1 1

INC Rn Increment register. 1 1

INC direct Increment direct byte. 2 1

INC @Ri Increment indirect RAM. 1 1

DEC A Decrement ACC. 1 1

Page 56: Automatic Meter Reading using GSM

DEC Rn Decrement register. 1 1

DEC direct Decrement direct byte. 2 1

DEC @Ri Decrement indirect RAM. 1 1

INC DPTR Increment data pointer. 1 2

MUL AB Multiply A and B Result: A <- low byte, B <- high byte. 1 4

DIV AB Divide A by B Result: A <- whole part, B <- remainder. 1 4

DA A Decimal adjust ACC. 1 1

Logical Operations

Mnemonic Description Size Cycles

ANL A,Rn AND Register to ACC. 1 1

ANL A,direct AND direct byte to ACC. 2 1

ANL A,@Ri AND indirect RAM to ACC. 1 1

ANL A,#data AND immediate data to ACC. 2 1

Page 57: Automatic Meter Reading using GSM

ANL direct,A AND ACC to direct byte. 2 1

ANL direct,#data AND immediate data to direct byte. 3 2

ORL A,Rn OR Register to ACC. 1 1

ORL A,direct OR direct byte to ACC. 2 1

ORL A,@Ri OR indirect RAM to ACC. 1 1

ORL A,#data OR immediate data to ACC. 2 1

ORL direct,A OR ACC to direct byte. 2 1

ORL direct,#data OR immediate data to direct byte. 3 2

XRL A,Rn Exclusive OR Register to ACC. 1 1

XRL A,direct Exclusive OR direct byte to ACC. 2 1

XRL A,@Ri Exclusive OR indirect RAM to ACC. 1 1

XRL A,#data Exclusive OR immediate data to ACC. 2 1

XRL direct,A Exclusive OR ACC to direct byte. 2 1

Page 58: Automatic Meter Reading using GSM

XRL direct,#data XOR immediate data to direct byte. 3 2

CLR A Clear ACC (set all bits to zero). 1 1

CPL A Compliment ACC. 1 1

RL A Rotate ACC left. 1 1

RLC A Rotate ACC left through carry. 1 1

RR A Rotate ACC right. 1 1

RRC A Rotate ACC right through carry. 1 1

SWAP A Swap nibbles within ACC. 1 1

Data Transfer

Mnemonic Description Size Cycles

MOV A,Rn Move register to ACC. 1 1

MOV A,direct Move direct byte to ACC. 2 1

MOV A,@Ri Move indirect RAM to ACC. 1 1

Page 59: Automatic Meter Reading using GSM

MOV A,#data Move immediate data to ACC. 2 1

MOV Rn,A Move ACC to register. 1 1

MOV Rn,direct Move direct byte to register. 2 2

MOV Rn,#data Move immediate data to register. 2 1

MOV direct,A Move ACC to direct byte. 2 1

MOV direct,Rn Move register to direct byte. 2 2

MOV direct,direct Move direct byte to direct byte. 3 2

MOV direct,@Ri Move indirect RAM to direct byte. 2 2

MOV direct,#data Move immediate data to direct byte. 3 2

MOV @Ri,A Move ACC to indirect RAM. 1 1

MOV @Ri,direct Move direct byte to indirect RAM. 2 2

MOV @Ri,#data Move immediate data to indirect RAM. 2 1

MOV DPTR,#data16 Move immediate 16 bit data to data pointer register. 3 2

Page 60: Automatic Meter Reading using GSM

MOVC A,@A+DPTR Move code byte relative to DPTR to ACC (16 bit address). 1 2

MOVC A,@A+PC Move code byte relative to PC to ACC (16 bit address).1 2

MOVX A,@Ri Move external RAM to ACC (8 bit address). 1 2

MOVX A,@DPTR Move external RAM to ACC (16 bit address). 1 2

MOVX @Ri,A Move ACC to external RAM (8 bit address). 1 2

MOVX @DPTR,A Move ACC to external RAM (16 bit address). 1 2

PUSH direct Push direct byte onto stack. 2 2

POP direct Pop direct byte from stack. 2 2

XCH A,Rn Exchange register with ACC. 1 1

XCH A,direct Exchange direct byte with ACC. 2 1

XCH A,@Ri Exchange indirect RAM with ACC. 1 1

XCHD A,@Ri Exchange low order nibble of indirect

RAM with low order nibble of ACC 1 1

Boolean Variable Manipulation

Page 61: Automatic Meter Reading using GSM

Mnemonic Description Size Cycles

CLR C Clear carry flag. 1 1

CLR bit Clear direct bit. 2 1

SETB C Set carry flag. 1 1

SETB bitSet direct bit 2 1

CPL C Compliment carry flag. 1 1

CPL bit Compliment direct bit. 2 1

ANL C,bit AND direct bit to carry flag. 2 2

ANL C,/bit AND compliment of direct bit to carry. 2 2

ORL C,bit OR direct bit to carry flag. 2 2

ORL C,/bit OR compliment of direct bit to carry. 2 2

MOV C,bit Move direct bit to carry flag. 2 1

MOV bit,C Move carry to direct bit. 2 2

JC rel Jump if carry is set. 2 2

Page 62: Automatic Meter Reading using GSM

JNC rel Jump if carry is not set. 2 2

JB bit,rel Jump if direct bit is set. 3 2

JNB bit,rel Jump if direct bit is not set. 3 2

JBC bit,rel Jump if direct bit is set & clear bit. 3 2

Program Branching

Mnemonic Description Size Cycles

ACALL addr11 Absolute subroutine call. 2 2

LCALL addr16 Long subroutine call. 3 2

RET Return from subroutine. 1 2

RETI Return from interrupt. 1 2

AJMP addr11 Absolute jump. 2 2

LJMP addr16 Long jump. 3 2

SJMP rel Short jump (relative address). 2 2

Page 63: Automatic Meter Reading using GSM

JMP @A+DPTR Jump indirect relative to the DPTR. 1 2

JZ rel Jump relative if ACC is zero. 2 2

JNZ rel Jump relative if ACC is not zero. 2 2

CJNE A,direct,rel Compare direct byte to ACC and jump if not equal. 3 2

CJNE A,#data,rel Compare immediate byte to ACC and jump if not equal.3 2

CJNE Rn,#data,rel Compare immediate byte to register and jump if not equal.3 2

CJNE @Ri,#data,rel Compare immediate byte to indirect and jump if not equal.3 2

DJNZ Rn,rel Decrement register and jump if not zero. 2 2

DJNZ direct,rel Decrement direct byte and jump if not zero. 3 2

The RW line is the "Read/Write" control line. When RW is low (0), the information on

I

Page 64: Automatic Meter Reading using GSM

HOW TO PROGRAM BLANK CHIP.

8051 micro controller

The 8051

The 8051 developed and launched in the early 80`s, is one of the most popular micro controller in use today. It has a reasonably large amount of built in ROM and RAM. In addition it has the ability to access external memory.

The generic term `8x51` is used to define the device. The value of x defining the kind of ROM, i.e. x=0, indicates none, x=3, indicates mask ROM, x=7, indicates EPROM and x=9 indicates EEPROM or Flash.

Different micro controllers in market.

Page 65: Automatic Meter Reading using GSM

PIC One of the famous microcontrollers used in the industries. It is based on RISC Architecture which makes the microcontroller process faster than other microcontroller.

INTEL These are the first to manufacture microcontrollers. These are not as sophisticated other microcontrollers but still the easiest one to learn.

ATMEL Atmel’s AVR microcontrollers are one of the most powerful in the embedded industry. This is the only microcontroller having 1kb of ram even the entry stage. But it is unfortunate that in India we are unable to find this kind of microcontroller.

Intel 8051

Intel 8051 is CISC architecture which is easy to program in assembly language and also has a good support for High level languages.

The memory of the microcontroller can be extended up to 64k.

This microcontroller is one of the easiest microcontrollers to learn.

The 8051 microcontroller is in the field for more than 20 years. There are lots of books and study materials are readily available for 8051.

Page 66: Automatic Meter Reading using GSM

First of all we select and open the assembler and wrote a program code in

the file. After wrote a software we assemble the software by using internal

assembler of the 8051 editor. If there is no error then assembler assemble the

software abd 0 error is show the output window.

now assembler generate a ASM file and HEX file. This hex file is useful for us to

program the blank chip.

Page 67: Automatic Meter Reading using GSM

Now we transfer the hex code into the blank chip with the help of serial

programmer kit. In the programmer we insert a blank chip 0f 89s51 series .

these chips are multi –time programmable chip. This programming kit is

seperatally available in the market and we transfer the hex code into blank

chip with the help of the serial programmer kit

Page 68: Automatic Meter Reading using GSM
Page 69: Automatic Meter Reading using GSM
Page 70: Automatic Meter Reading using GSM

NOTES ON LCD

LCD DETAIL .

Frequently, an 8051 program must interact with the outside world using input and output devices

that communicate directly with a human being. One of the most common devices attached to an

8051 is an LCD display. Some of the most common LCDs connected to the 8051 are 16x2 and 20x2

Page 71: Automatic Meter Reading using GSM

displays. This means 16 characters per line by 2 lines and 20 characters per line by 2 lines,

respectively.

HD44780U, which refers to the controller chip which receives data from an external source

(in this case, the 8051) and communicates directly with the LCD.

44780 BACKGROUND

AN EXAMPLE HARDWARE CONFIGURATION

DB0 EQU P1.0

DB1 EQU P1.1

DB2 EQU P1.2

DB3 EQU P1.3

DB4 EQU P1.4

DB5 EQU P1.5

DB6 EQU P1.6

DB7 EQU P1.7

EN EQU P3.7

RS EQU P3.6

RW EQU P3.5

DATA EQU P1

Having established the above equates, we may now refer to our I/O lines by their 44780 name. For

example, to set the RW line high (1), we can execute the following insutrction:

SETB RW

HANDLING THE EN CONTROL LINE

with the following instruction:

SETB EN

Page 72: Automatic Meter Reading using GSM

And once we've finished setting up our instruction with the other control lines and data bus lines,

we'll always bring this line back low:

CLR EN

Programming Tip: The LCD interprets and executes our command at the instant the EN line

is brought low. If you never bring EN low, your instruction will never be executed.

Additionally, when you bring EN low and the LCD executes your instruction, it requires a

certain amount of time to execute the command. The time it requires to execute an

instruction depends on the instruction and the speed of the crystal which is attached to the

44780's oscillator input.

CHECKING THE BUSY STATUS OF THE LCD

As previously mentioned, it takes a certain amount of time for each instruction to be executed

by the LCD. The delay varies depending on the frequency of the we will use this code every

time we send an instruction to

WAIT_LCD:

SETB EN ;Start LCD command

CLR RS ;It's a command

SETB RW ;It's a read command

MOV DATA,#0FFh ;Set all pins to FF initially

MOV A,DATA ;Read the return value

JB ACC.7,WAIT_LCD ;If bit 7 high, LCD still busy

CLR EN ;Finish the command

CLR RW ;Turn off RW for future commands

RET

Thus, our standard practice will be to send an instruction to the LCD and then call our WAIT_LCD

routine to wait until the instruction is completely executed by the LCD. This will assure that our

program gives the LCD the time it needs to execute instructions and also makes our program

compatible with any LCD, regardless of how fast or slow it is.

Page 73: Automatic Meter Reading using GSM

Programming Tip: The above routine does the job of waiting for the LCD, but were it to be

used in a real application a very definite improvement would need to be made: as written, if

the LCD never becomes "not busy" the program will effectively "hang," waiting for DB7 to go

low. If this never happens, the program will freeze. Of course, this should never happen and

won't happen when the hardware is working properly. But in a real application it would be

wise to put some kind of time limit on the delay--for example, a maximum of 256 attempts

to wait for the busy signal to go low. This would guarantee that even if the LCD hardware

fails, the program would not lock up.

INITIALIZING THE LCD

SETB ENCLR RSMOV DATA,#38hCLR ENLCALL WAIT_LCD

Programming Tip: The LCD command 38h is really the sum of a number of option bits. The

instruction itself is the instruction 20h ("Function set"). However, to this we add the values

10h to indicate an 8-bit data bus plus 08h to indicate that the display is a two-line display.

We've now sent the first byte of the initialization sequence. The second byte of the initialization

sequence is the instruction 0Eh. Thus we must repeat the initialization code from above, but now

with the instruction. Thus the next code segment is:

SETB EN

CLR RS

MOV DATA,#0Eh

CLR EN

LCALL WAIT_LCD

Page 74: Automatic Meter Reading using GSM

Programming Tip: The command 0Eh is really the instruction 08h plus 04h to turn the LCD

on. To that an additional 02h is added in order to turn the cursor on.

The last byte we need to send is used to configure additional operational parameters of the LCD. We

must send the value 06h.

SETB EN

CLR RS

MOV DATA,#06h

CLR EN

LCALL WAIT_LCD

Programming Tip: The command 06h is really the instruction 04h plus 02h to configure the

LCD such that every time we send it a character, the cursor position automatically moves to

the right.

So, in all, our initialization code is as follows:

INIT_LCD:

SETB EN

CLR RS

MOV DATA,#38h

CLR EN

LCALL WAIT_LCD

SETB EN

CLR RS

MOV DATA,#0Eh

CLR EN

LCALL WAIT_LCD

SETB EN

CLR RS

MOV DATA,#06h

CLR EN

Page 75: Automatic Meter Reading using GSM

LCALL WAIT_LCD

RET

Having executed this code the LCD will be fully initialized and ready for us to send display data to it.

CLEARING THE DISPLAY

When the LCD is first initialized, the screen should automatically be cleared by the 447e, it's

a good idea to make it a subroutine:

CLEAR_LCD:

SETB EN

CLR RS

MOV DATA,#01h

CLR EN

LCALL WAIT_LCD

RET

How that we've written a "Clear Screen" routine, we may clear the LCD at any time by simply

executing an LCALL CLEAR_LCD.

Programming Tip: Executing the "Clear Screen" instruction on the LCD also positions the

cursor in the upper left-hand corner as we would expect.

WRITING TEXT TO THE LCD

Now we get to the real meat of what we're trying to do: All this effort is really so we can

display text on the LCD. Really, we're pretty much done.

Once again, writing text to the LCD is something we'll almost certainly want to do over and

over--so let's make it a subroutine.

WRITE_TEXT:

SETB EN

SETB RS

MOV DATA,A

CLR EN

Page 76: Automatic Meter Reading using GSM

LCALL WAIT_LCD

RET

The WRITE_TEXT routine that we just wrote will send the character in the accumulator to the LCD

which will, in turn, display it. Thus to display text on the LCD all we need to do is load the

accumulator with the byte to display and make a call to this routine. Pretty easy, huh?

A "HELLO WORLD" PROGRAM

Now that we have

LCALL INIT_LCD

LCALL CLEAR_LCD

MOV A,#'H'

LCALL WRITE_TEXT

MOV A,#'E'

LCALL WRITE_TEXT

MOV A,#'L'

LCALL WRITE_TEXT

MOV A,#'L'

LCALL WRITE_TEXT

MOV A,#'O'

LCALL WRITE_TEXT

MOV A,#' '

LCALL WRITE_TEXT

MOV A,#'W'

LCALL WRITE_TEXT

MOV A,#'O'

LCALL WRITE_TEXT

MOV A,#'R'

LCALL WRITE_TEXT

MOV A,#'L'

LCALL WRITE_TEXT

MOV A,#'D'

LCALL WRITE_TEXT

Page 77: Automatic Meter Reading using GSM

The above "Hello World" program should, when executed, initialize the LCD, clear the LCD screen,

and display "Hello World" in the upper left-hand corner of the display.

CURSOR POSITIONING

The

Thus, the

SETB EN

CLR RS

MOV DATA,#0C4h

CLR EN

LCALL WAIT_LCD

The above code will position the cursor on line 2, character 10. To display "Hello" in the upper left-

hand corner with the word "World" on the second line at character position 10 just requires us to

insert the above code into our existing "Hello World" program. This results in the following:

LCALL INIT_LCD

LCALL CLEAR_LCD

MOV A,#'H'

LCALL WRITE_TEXT

MOV A,#'E'

LCALL WRITE_TEXT

MOV A,#'L'

LCALL WRITE_TEXT

MOV A,#'L'

LCALL WRITE_TEXT

MOV A,#'O'

LCALL WRITE_TEXT

SETB EN

CLR RS

Page 78: Automatic Meter Reading using GSM

MOV DATA,#0C4h

CLR EN

LCALL WAIT_LCD

MOV A,#'W'

LCALL WRITE_TEXT

MOV A,#'O'

LCALL WRITE_TEXT

MOV A,#'R'

LCALL WRITE_TEXT

MOV A,#'L'

LCALL WRITE_TEXT

MOV A,#'D'

LCALL WRITE_TEXT

PIN WISE DETAIL OF LCD

1. Vss GROUND

2. Vcc +5VOLT SUPPLY

3 Vee POWER SUPPLY TO CONTROL CONTRAST

4. RS RS = 0 TO SELECT COMMAND REGISTER

RS = 1 TO SELECT DATA REGISTER

5. R/W R/W = 0 FOR WRITE

R/W = 1 FOR READ

Page 79: Automatic Meter Reading using GSM

6 E ENABLE

7 DB0

8 DB1

Page 80: Automatic Meter Reading using GSM

$include (reg51.INC)

lcd_rs bit p0.0

lcd_en bit p0.1

lcd_d4 bit p0.2

lcd_d5 bit p0.3

lcd_d6 bit p0.4

lcd_d7 bit p0.5

AC_OUT bit P2.7

EEPROM_DATA equ P2.1

EEPROM_CLOCK equ P2.0

LCD_DATA equ 10h

TRANS_DATA equ 11h

reg1 equ 12h

count equ 13h

pulse_cont_lo equ 1eh

pulse_cont_hi equ 1fh

unit_cont_1 equ 21h

unit_cont_2 equ 22h

unit_cont_3 equ 23h

output_temp equ 24h

org 0000h

ljmp main

org 0003h

ljmp INTE_0

reti

Page 81: Automatic Meter Reading using GSM

org 000bh

reti

org 0013h

ljmp INTE_1

reti

org 001bh

reti

org 0023h

reti

INTE_1:

reti

INTE_0:

push psw

push acc

clr ex0

clr c

mov a,pulse_cont_lo

add a,#1d

da a

mov pulse_cont_lo,a

mov a,pulse_cont_hi

addc a,#0d

da a

mov pulse_cont_hi,a

mov a,pulse_cont_lo

cjne a,#20h,inte1_end

mov a,pulse_cont_hi

Page 82: Automatic Meter Reading using GSM

cjne a,#03h,inte1_end

mov a,unit_cont_2

addc a,#0d

da a

mov unit_cont_2,a

mov a,unit_cont_3

addc a,#0d

da a

LCALL write

mov a,unit_cont_2

LCALL write

inte1_end:

mov a,pulse_cont_lo

mov 1ah,a

mov 1bh,#3d

lcall DELAY_RM

LCALL write

mov a,pulse_cont_hi

pop acc

pop psw

reti

main:

mov psw,#00h

mov sp,#75h

Page 83: Automatic Meter Reading using GSM

mov p2,#0ffh

mov p3,#0ffh

setb tr1

lcall INIT_LCD

lcall CLR_LCD

lcall data_cheke

setb AC_OUT

mov reg1,#60h

mov count,#00h

mov dptr,#AT_EN

lcall SEND_MSG

lcall DELAY11

mov dptr,#AT_OK

lcall SEND_MSG

lcall DELAY11

mov dptr,#AT_TEXT

lcall SEND_MSG

lcall DELAY11

mov dptr,#AT_DELETE

lcall SEND_MSG

lcall DELAY11

lcall data_read_eeprom

mov a,output_temp

cjne a,#01h,out_off

clr AC_OUT

sjmp main_lp1

Page 84: Automatic Meter Reading using GSM

out_off:

setb AC_OUT

main_lp1:

lcall CLR_LCD

mov dptr,#MSG1

lcall LINE_1

mov dptr,#MSG2

lcall LINE_2

lcall display_cont

mov r1,#2fh

mov r4,#11h

clrram: mov @r1,#20h

inc r1

djnz r4,clrram

mov r1,#2fh

mov r4,#11h

jb p3.0,$

lcall data_recv

lcall DELAY11

lcall DELAY11

ljmp main_lp1

data_recv:

jnb ri,$

mov a,sbuf

clr ri

cjne a,#00h,back

sjmp back_ret

Page 85: Automatic Meter Reading using GSM

back:

mov @r1,a

inc r1

mov a,r1

cjne a,#36h,nextback

mov a,#'G'

cjne a,35h,nextback

mov a,#'N'

cjne a,34h,nextback

mov a,#'I'

cjne a,33h,nextback

mov a,#'R'

cjne a,32h,nextback

mov dptr,#AT_ATH

lcall SEND_MSG

lcall DELAY11

lcall DELAY11

ret

nextback:

djnz r4,data_recv

back_ret:

lcall CLR_LCD

mov dptr,#MSG3

lcall LINE_1

lcall DELAY1

mov LCD_DATA,#0c0h

lcall COMMAND_BYTE

Page 86: Automatic Meter Reading using GSM

mov r1,#32h

mov r4,#0dh

crxdn1: mov a,@r1

mov LCD_DATA,a

cjne a,#00h,cbrxdn

sjmp cbrxdn1

cbrxdn:

lcall DATA_BYTE

inc r1

lcall DELAY1

djnz r4,crxdn1

cbrxdn1:

lcall DELAY11

lcall DELAY11

lcall DELAY11

lcall DELAY11

mov r4,#23d

mov dptr,#AT_READ

lcall SEND_MSG

jnb ri,$

clr ri

jnb ri,$

clr ri

recv4: jnb ri,recv4

mov a,sbuf

clr ri

lcall delay

Page 87: Automatic Meter Reading using GSM

djnz r4,recv4

;-------------------------------

mov r1,#60h

recvn: jnb ri,recvn

mov a,sbuf

clr ri

mov @r1,a

mov b,#'"'

cjne a,b,nextn

sjmp recv14

nextn: inc r1

sjmp recvn

;-------------------------------

recv14: jnb ri,recv14

mov a,sbuf

mov temp_data,a

clr ri

mov a,temp_data

cjne a,#10d,recv14

back_ret2:

mov r1,#2fh

mov r4,#10h

mov LCD_DATA,#0c0h

lcall COMMAND_BYTE

recv5: jnb ri,recv5

mov a,sbuf

clr ri

Page 88: Automatic Meter Reading using GSM

mov b,a

xch a,cmd0

xch a,cmd1

xch a,cmd2

xch a,cmd3

xch a,cmd4

cjne a,#13d,back1

mov a,cmd4

cjne a,#10d,back1

mov a,cmd3

cjne a,#'O',back1

mov a,cmd2

cjne a,#'K',back1

mov a,cmd1

cjne a,#13d,back1

mov a,cmd0

cjne a,#10d,back1

sjmp back_ret1

back1:

mov a,b

mov @r1,a

mov b,r1

mov a,#41h

clr c

subb a,b

jc nextback1

inc r1

Page 89: Automatic Meter Reading using GSM

nextback1:

sjmp recv5

back_ret1:

lcall CLR_LCD

mov dptr,#MSG4

lcall LINE_1

lcall DELAY1

mov LCD_DATA,#0c0h

lcall COMMAND_BYTE

mov a,r1

subb a,#007d

mov temp,a

mov r1,#2fh

crx11: mov a,@r1

mov LCD_DATA,a

lcall DATA_BYTE

inc r1

lcall DELAY1

mov a,r1

cjne a,temp,crx11

mov r1,#2fh

mov a,@r1

mov cmd0,a

mov r1,#30h

mov a,@r1

mov cmd1,a

mov r1,#31h

Page 90: Automatic Meter Reading using GSM

mov a,@r1

mov cmd2,a

mov r1,#32h

mov a,@r1

mov cmd3,a

clr c

lcall DELAY11

lcall DELAY11

; mov LCD_DATA,#080h

; lcall COMMAND_BYTE

mov r1,#60h

findn:

mov a,@r1

mov b,#'"'

cjne a,b,findn1

sjmp findn2

findn1:

inc r1

sjmp findn

findn2:

mov r4,#10d

mov r0,#0eah

findn3:

dec r1

dec r0

mov a,@r1

mov @r0,a

Page 91: Automatic Meter Reading using GSM

djnz r4,findn3

mov r4,#10d

mov r1,#0eah

mov r0,#06ah

findn4:

dec r1

dec r0

mov a,@r1

mov @r0,a

djnz r4,findn4

; mov r4,#10d

; mov r1,#60h

;crxn: mov a,@r1

; mov LCD_DATA,a

; lcall DATA_BYTE

; inc r1

; djnz r4,crxn

lcall DELAY11

lcall DELAY11

mov dptr,#AT_DELETE

lcall SEND_MSG

lcall DELAY11

lcall cmp_out

lcall DELAY11

lcall DELAY11

mov dptr,#MSG1

lcall LINE_1

Page 92: Automatic Meter Reading using GSM

mov dptr,#MSG2

lcall LINE_2

ret

display_cont:

mov LCD_DATA,#087h

lcall COMMAND_BYTE

lcall DELAY41

mov a,unit_cont_3

swap a

anl a,#0fh

ADD a,#30h

mov LCD_DATA,a

lcall DATA_BYTE

lcall DELAY41

mov a,unit_cont_3

anl a,#0fh

ADD a,#30h

mov LCD_DATA,a

lcall DATA_BYTE

lcall DELAY41

mov a,unit_cont_2

swap a

anl a,#0fh

ADD a,#30h

mov LCD_DATA,a

lcall DATA_BYTE

Page 93: Automatic Meter Reading using GSM

lcall DELAY41

mov a,unit_cont_2

anl a,#0fh

ADD a,#30h

mov LCD_DATA,a

lcall DATA_BYTE

lcall DELAY41

mov a,unit_cont_1

swap a

anl a,#0fh

ADD a,#30h

mov LCD_DATA,a

lcall DATA_BYTE

lcall DELAY41

mov LCD_DATA,#'.'

lcall DATA_BYTE

lcall DELAY41

mov a,unit_cont_1

anl a,#0fh

ADD a,#30h

mov LCD_DATA,a

lcall DATA_BYTE

lcall DELAY41

mov LCD_DATA,#0cbh

lcall COMMAND_BYTE

lcall DELAY41

mov a,pulse_cont_hi

Page 94: Automatic Meter Reading using GSM

swap a

anl a,#0fh

ADD a,#30h

mov LCD_DATA,a

lcall DATA_BYTE

lcall DELAY41

mov a,pulse_cont_hi

anl a,#0fh

ADD a,#30h

mov LCD_DATA,a

lcall DATA_BYTE

lcall DELAY41

mov a,pulse_cont_lo

swap a

anl a,#0fh

ADD a,#30h

mov LCD_DATA,a

lcall DATA_BYTE

lcall DELAY41

mov a,pulse_cont_lo

anl a,#0fh

ADD a,#30h

mov LCD_DATA,a

lcall DATA_BYTE

lcall DELAY41

ret

Page 95: Automatic Meter Reading using GSM

cmp_out:

mov a,cmd0

cjne a,#'4',cmp_out1

mov a,cmd1

cjne a,#'L',cmp_out1

mov a,cmd2

cjne a,#'N',cmp_out1

clr AC_OUT

mov output_temp,#01h

mov a,output_temp

mov 1ah,a

mov 1bh,#5d

lcall DELAY_RM

LCALL write

lcall sendmsg

mov dptr,#AT_MSG4

lcall SEND_MSG

mov TRANS_DATA,#026D

lcall TRANS

ljmp cmp_out_end

cmp_out1:

mov a,cmd0

cjne a,#'4',cmp_out2

mov a,cmd1

cjne a,#'L',cmp_out2

mov a,cmd2

Page 96: Automatic Meter Reading using GSM

cjne a,#'F',cmp_out2

setb AC_OUT

mov output_temp,#02h

mov a,output_temp

mov 1ah,a

mov 1bh,#5d

lcall DELAY_RM

LCALL write

lcall sendmsg

mov dptr,#AT_MSG5

lcall SEND_MSG

mov TRANS_DATA,#026D

lcall TRANS

ljmp cmp_out_end

cmp_out2:

mov a,cmd0

cjne a,#'A',cmp_out_end

mov a,cmd1

cjne a,#'M',cmp_out_end

mov a,cmd2

cjne a,#'R',cmp_out_end

lcall send_count

ljmp cmp_out_end

cmp_out_end:

mov cmd0,#00h

mov cmd1,#00h

mov cmd2,#00h

Page 97: Automatic Meter Reading using GSM

mov cmd3,#00h

ret

send_count:

lcall sendmsg

mov dptr,#AT_MSG1

lcall SEND_MSG

mov TRANS_DATA,#010D

lcall TRANS

mov dptr,#AT_MSG2

lcall SEND_MSG

mov TRANS_DATA,#010D

lcall TRANS

mov a,unit_cont_3

swap a

anla,#0fh

ADD a,#30h

mov TRANS_DATA,a

lcall TRANS

mov a,unit_cont_3

anla,#0fh

ADD a,#30h

mov TRANS_DATA,a

lcall TRANS

mov a,unit_cont_2

swap a

anla,#0fh

ADD a,#30h

Page 98: Automatic Meter Reading using GSM

mov TRANS_DATA,a

lcall TRANS

mov a,unit_cont_2

anla,#0fh

ADD a,#30h

mov TRANS_DATA,a

lcall TRANS

mov a,unit_cont_1

swap a

anla,#0fh

ADD a,#30h

mov TRANS_DATA,a

lcall TRANS

mov TRANS_DATA,#'.'

lcall TRANS

mov a,unit_cont_1

lcall SEND_MSG

mov TRANS_DATA,#010D

lcall TRANS

mov a,pulse_cont_hi

swap a

anla,#0fh

ADD a,#30h

mov TRANS_DATA,a

lcall TRANS

mov a,pulse_cont_hi

Page 99: Automatic Meter Reading using GSM

anla,#0fh

anl a,#0fh

ADD a,#30h

mov TRANS_DATA,a

lcall TRANS

mov a,pulse_cont_lo

anla,#0fh

ADD a,#30h

mov TRANS_DATA,a

lcall TRANS

mov TRANS_DATA,#026D

lcall TRANS

ret

sendmsg:

mov dptr,#AT_EN

lcall SEND_MSG

lcall DELAY11

mov dptr,#AT_OK

lcall SEND_MSG

lcall DELAY11

mov dptr,#AT_TEXT

lcall SEND_MSG

lcall DELAY11

mov dptr,#AT_SEND

lcall SEND_MSG

mov TRANS_DATA,#'"'

Page 100: Automatic Meter Reading using GSM

lcall TRANS

mov TRANS_DATA,#'0'

lcall TRANS

mov r0,#60h

mov TRANS_DATA,@r0

lcall TRANS

mov r0,#61h

mov TRANS_DATA,@r0

lcall TRANS

mov r0,#62h

mov TRANS_DATA,@r0

lcall TRANS

mov r0,#63h

mov TRANS_DATA,@r0

lcall TRANS

mov r0,#64h

mov TRANS_DATA,@r0

lcall TRANS

mov r0,#65h

mov TRANS_DATA,@r0

mov TRANS_DATA,@r0

lcall TRANS

mov r0,#69h

mov TRANS_DATA,@r0

lcall TRANS

mov TRANS_DATA,#'"'

Page 101: Automatic Meter Reading using GSM

lcall TRANS

mov TRANS_DATA,#013d

lcall TRANS

lcall DELAY11

ret

TRANS:

mov a,TRANS_DATA

mov sbuf,a

jnb ti,$

clr ti

clr ri

lcall DELAY1

ret

SEND_MSG:

clr a

movc a,@a+dptr

cjne a,#0D,SEND_CONT

ret

SEND_CONT:

mov TRANS_DATA,a

lcall TRANS

inc dptr

ljmp SEND_MSG

wait:

ljmp wait

LINE_1:

mov LCD_DATA,#080h

Page 102: Automatic Meter Reading using GSM

lcall COMMAND_BYTE

lcall DELAY41

lcall WRITE_MSG

ret

LINE_2:

mov LCD_DATA,#0c0h

lcall COMMAND_BYTE

lcall DELAY41

lcall WRITE_MSG

ret

LINE_2R:

mov LCD_DATA,#0c0h

lcall COMMAND_BYTE

lcall DELAY41

lcall WRITE_MSG1

ret

INIT_LCD:

clr lcd_rs

clr lcd_en

clr lcd_d7

clr lcd_d6

setb lcd_d5

setb lcd_d4

nop

setb lcd_en

nop

clr lcd_en

Page 103: Automatic Meter Reading using GSM

lcall delay41

setb lcd_en

nop

clr lcd_en

lcall delay1

setb lcd_en

nop

clr lcd_en

lcall delay1

clr lcd_en

lcall delay1

mov LCD_DATA,#28h

lcall COMMAND_BYTE

mov LCD_DATA,#08h

lcall COMMAND_BYTE

mov LCD_DATA,#01h

lcall COMMAND_BYTE

mov LCD_DATA,#06h

lcall COMMAND_BYTE

clr lcd_rs

clr lcd_en

mov LCD_DATA,#28h

lcall COMMAND_BYTE

mov LCD_DATA,#0ch

lcall COMMAND_BYTE

mov LCD_DATA,#06h

lcall COMMAND_BYTE

Page 104: Automatic Meter Reading using GSM

mov LCD_DATA,#01h

lcall COMMAND_BYTE

ret

CLR_LCD:

mov LCD_DATA,#001h

lcall COMMAND_BYTE

lcall DELAY41

ret

WRITE_MSG:

mov a,#00h

movc a,@a+dptr

cjne a,#'WRITE_CONT

ret

WRITE_CONT:

mov LCD_DATA,a

lcall DATA_BYTE

inc dptr

ljmp WRITE_MSG

WRITE_MSG1:

mov a,#00h

movc a cjne a,#'$',WRITE_CONT1

ret

WRITE_CONT1:

mov LCD_DATA,a

mov @r1,a

lcall DATA_BYTE

inc dptr

Page 105: Automatic Meter Reading using GSM

inc r1

ljmp WRITE_MSG1

COMMAND_BYTE:

ljmp CMD10

DATA_BYTE:

clr lcd_en

setb lcd_rs

CMD10:

nop

push acc

mov a,LCD_DATA

mov c,acc.4

mov lcd_d4,c

mov c,acc.5

mov lcd_d5,c

mov c,acc.6

mov lcd_d6,c

mov c,acc.7

mov lcd_d7,c

nop

setb lcd_en

nop

clr lcd_en

mov c,acc.0

mov lcd_d4,c

nop

setb lcd_en

Page 106: Automatic Meter Reading using GSM

nop

clr lcd_en

lcall delay41

pop acc

ret

delay_2ms:

mov r7,#10h

delay_2ms_1:

mov r6,#0ffh

delay_2ms_2:

djnz r6,delay_2ms_2

djnz r7,delay_2ms_1

ret

DELAY:

mov r6,#10d

DEL:

djnz r6,DEL

ret

DELAY1:

mov r6,#0d

mov r7,#20d

DELAY10:

djnz r6,DELAY10

djnz r7,DELAY10

ret

Page 107: Automatic Meter Reading using GSM

DELAY_RM:

mov r6,#0d

mov r7,#5d

DEL_RM:

djnz r6,DEL_RM

djnz r7,DEL_RM

ret

DELAY5S:

mov r5,#0d

mov r6,#0d

mov r7,#25d

DEL5S:

djnz r5,DEL5S

djnz r6,DEL5S

djnz r7,DEL5S

ret

DELAY41:

mov r6,#0d

mov r7,#8d

DLP410:

djnz r6,DLP410

djnz r7,DLP410

ret

DELAY11:

mov r6,#0d

mov r7,#0d

Page 108: Automatic Meter Reading using GSM

mov r5,#5d

DLP11:

djnz r6,DLP11

djnz r7,DLP11

djnz r5,DLP11

ret

data_cheke:

mov 1bh,#6d

lcall DELAY_RM

lcall read

mov a,19h

cjne a,#0d,data_chanj

ljmp data_load_eeprom

data_chanj:

mov 1ah,#0d

mov 1bh,#0d

lcall DELAY_RM

LCALL write

mov 1ah,#0d

mov 1bh,#1d

lcall DELAY_RM

LCALL write

lcall DELAY_RM

LCALL write

mov 1ah,#0d

mov 1bh,#3d

Page 109: Automatic Meter Reading using GSM

lcall DELAY_RM

LCALL write

mov 1ah,#0d

mov 1bh,#4d

lcall DELAY_RM

LCALL write

lcall DELAY_RM

LCALL write

mov 1ah,#0d

mov 1bh,#6d

lcall DELAY_RM

LCALL write

data_load_eeprom:

ret

data_read_eeprom:

mov 1bh,#0d

lcall DELAY_RM

lcall read

mov unit_cont_1,19h

lcall DELAY_RM

lcall read

mov unit_cont_2,19h

lcall DELAY_RM

lcall read

mov unit_cont_3,19h

mov 1bh,#3d

Page 110: Automatic Meter Reading using GSM

lcall DELAY_RM

lcall read

mov pulse_cont_lo,19h

mov 1bh,#4d

lcall DELAY_RM

lcall read

mov pulse_cont_hi,19h

mov 1bh,#5d

lcall DELAY_RM

lcall read

mov output_temp,19h

ret

;;;;;;;;;;;;; for 24c04 ;;;;;;;;;;;;;;;

read: PUSH B

MOV B, A

ACALL START

JC NOBUS

MOV A, #00H

ORL A, #0A0H

ACALL SHOUT

JC XR1

MOV A,1bh

ACALL SHOUT

JC XR1

MOV A, B

lCALL R_CRNT

lJMP XR2

Page 111: Automatic Meter Reading using GSM

XR1: lCALL STOP

NOBUS: SETB 1

XR2:

MOV 19h, A

POP B

RET

START: SETB EEPROM_DATA

SETB EEPROM_CLOCK

JNB EEPROM_DATA, X40

JNB EEPROM_CLOCK, X40

CLR EEPROM_DATA

CLR EEPROM_CLOCK

CLR C

AJMP X41

X40: SETB C

X41: RET

STOP: CLR EEPROM_DATA

SETB EEPROM_CLOCK

NOP

SETB EEPROM_DATA

RET

Page 112: Automatic Meter Reading using GSM

SHOUT: PUSH B

MOV B, #8

X42: RLC A

MOV EEPROM_DATA, C

SETB EEPROM_CLOCK

CLR EEPROM_CLOCK

DJNZ B, X42

SETB EEPROM_DATA

SETB EEPROM_CLOCK

NOP

MOV C, EEPROM_DATA

POP B

RET

MOV B, #8

X43: NOP

NOP

NOP

NOP

NOP

SETB EEPROM_CLOCK

MOV C, EEPROM_DATA

Page 113: Automatic Meter Reading using GSM

CLR EEPROM_CLOCK

DJNZ B, X43

RET

ACK: CLR EEPROM_DATA

NOP

NOP

SETB EEPROM_CLOCK

CLR EEPROM_CLOCK

RET

NAK: SETB EEPROM_DATA

RET

write: lCALL START

JC XW2

MOV A, #00H

ORL A, #0A0H

lCALL SHOUT

lCALL SHOUT

JC XW1

JC XW1

CLR C

XW1: lCALL STOP

XW2: RET

Page 114: Automatic Meter Reading using GSM

R_CRNT: lCALL START

JC XRC2

MOV A, #00H

lCALL SHOUT

JC XRC1

lCALL SHIN

lCALL NAK

CLR C

XRC1: l STOP

XRC2: RET

MSG1: db ' unit 00000.0

MSG2: db 'Pulse Cont 0000

MSG3: db ' NEW MASSAGE

MSG4: db ' DATA RECEIVED

AT_ATH: DB 'ATH',013D,0

AT_OK: 'AT',013D,0

AT_EN: 'ATE1',013D,0

AT_READ 'AT+CMGR=1',013D,

AT_TEXT: AT+CMGF=1',013D,0

AT_DELETE: 'AT+CMGD=1',013D,

AT_SEND: 'AT+CMGS=',0

AT_MSG1: 'MESSAGE RECEIVED',010D

AT_MSG2: 'UNIT COUNT',010D,0

AT_MSG3: 'PULSE COUNT',010D,0

AT_MSG4: 'OUTPUT ON',010D,0

Page 115: Automatic Meter Reading using GSM

AT_MSG5: 'OUTPUT OFF',010D,0