Sign in

username:

password:



Not a member?

Search avrclub



Search tips

Subscribe to avrclub



avrclub by Keywords

AT90S2313 | AT90S8515 | ATMega | ATmega128 | ECL | FETS | IAR | Keyboard | LCD | STK50 | TMOS | UART

Ads

Discussion Groups

Discussion Groups | AVRclub | Re: [AVR club] [ask] I/O Relay Board

Atmel AVR Microcontroller discussion group.

[AVR club] [ask] I/O Relay Board - Marteen - Apr 30 14:36:08 2008


Hello,

I had a project to design I/O Relay Board for ATmega16.
I had a problem with the circuit for drive the relay. In my circuit i
use transistor BC109 to create bigger the current from micro. In my
circuit i use resistor 4,7k for resistance in Base, emmiter transistor
was connected to GND, the collector connected to VCC +5V and diode
1N4001 or 1N4002 to protect micro to emf from relay. First I tried in
project board with base transistor directly connected to pushbutton
which connected with 5V and the result is if push the button the relay
would switch.

The problem happen when i connected to micro, i tried to give looping
output 1 and 0, but the result was unexpected the relay didn't
switching. I build my program using WinAVR and this is short of my
program:

int main ()
{
DDRx = 0xff;
PORTx = 0x00;

while (1)
{
PORTx = 0xff;
MYdelay (100);
PORTx = 0x00;
MYdelay (100);
}

}

I create my own delay function :

void MYdelay (int time)
{
int i,j;

for (i=0; i for (j=0; j }

I had compile and download it and succes.

But the result was very weird the relay only switch 3 times and then
stopped??????.......

Please help me.
(if anyone of you had better circuit to drive relay with micro please
send me.)

THX.
------------------------------------



(You need to be a member of avrclub -- send a blank email to avrclub-subscribe@yahoogroups.com )


[AVR club] Re: [ask] I/O Relay Board - Rick - May 1 21:24:36 2008


You connected the transistor wrong if you tied the collector to VCC.
Try connecting the relay coil to +vcc. the other leg
of the relay coil to the COLLECTOR of the BC109, the
emitter of the BC109 goes to ground.

When the microcontroller applies a logic "1" to the
base resistor there flows a base emitter current, that
in turn switches the collector emitter curent "on",
and current flows thru the relay coil. A logic "0" on
the base resistor starves the base emitter junction
and the collector emitter current ceases to flow, and
the relay will release / de-energize. Be sure to
protect the BC109 by putting a diode across the relay
coil, anode faces the BC109's collector, cathode goes
toward +VCC. This diode is to protect the transistor, not the
microcontroller. Depending on the type of relay you are using, you
could possibly drive it directly from the ATMEL chip but you MUST have
that protection diode across the relay coil, cathode to +V. If the
relay needs more then 60 mA of coil current then do not drive the
relay from the AMTEL directly, in that case use your BC109 NPN
transistor as you had planned.

If you are unsure of your "C" program, to debug (test) you program,
put an LED on the port of the AMTEL chip (with current limiting
resistor). If the LED does not light at the proper, expected times,
then you have a software problem or something else more wrong.

Regards

RRB

--- In a...@yahoogroups.com, "Marteen" wrote:
> Hello,
>
> I had a project to design I/O Relay Board for ATmega16.
> I had a problem with the circuit for drive the relay. In my circuit i
> use transistor BC109 to create bigger the current from micro. In my
> circuit i use resistor 4,7k for resistance in Base, emmiter transistor
> was connected to GND, the collector connected to VCC +5V and diode
> 1N4001 or 1N4002 to protect micro to emf from relay. First I tried in
> project board with base transistor directly connected to pushbutton
> which connected with 5V and the result is if push the button the relay
> would switch.
>
> The problem happen when i connected to micro, i tried to give looping
> output 1 and 0, but the result was unexpected the relay didn't
> switching. I build my program using WinAVR and this is short of my
> program:
>
> int main ()
> {
> DDRx = 0xff;
> PORTx = 0x00;
>
> while (1)
> {
> PORTx = 0xff;
> MYdelay (100);
> PORTx = 0x00;
> MYdelay (100);
> }
>
> }
>
> I create my own delay function :
>
> void MYdelay (int time)
> {
> int i,j;
>
> for (i=0; i > for (j=0; j > }
>
> I had compile and download it and succes.
>
> But the result was very weird the relay only switch 3 times and then
> stopped??????.......
>
> Please help me.
> (if anyone of you had better circuit to drive relay with micro please
> send me.)
>
> THX.
>

------------------------------------



(You need to be a member of avrclub -- send a blank email to avrclub-subscribe@yahoogroups.com )

Re: [AVR club] [ask] I/O Relay Board - "Rick B." - May 1 21:24:52 2008

try connecting the relay coil to +vcc. the other leg
of the relay coil to the COLLECTOR of the BC109, the
emitter of the BC109 goes to ground.

When the microcontroller applies a logic "1" to the
base resistor there flows a base emitter current, that
in turn switches the collector emitter curent "on",
and current flows thru the relay coil. A logic "0" on
the base resistor starves the base emitter junction
and the collector emmiter current ceases to flow, and
the relay will release / de-energize. Be sure to
protect the BC109 by putting a diode across the relay
coil, anode faces the BC109's collector, cathode goes
toward +VCC.

RRB

--- Marteen wrote:

>
> Hello,
>
> I had a project to design I/O Relay Board for
> ATmega16.
> I had a problem with the circuit for drive the
> relay. In my circuit i
> use transistor BC109 to create bigger the current
> from micro. In my
> circuit i use resistor 4,7k for resistance in Base,
> emmiter transistor
> was connected to GND, the collector connected to VCC
> +5V and diode
> 1N4001 or 1N4002 to protect micro to emf from relay.
> First I tried in
> project board with base transistor directly
> connected to pushbutton
> which connected with 5V and the result is if push
> the button the relay
> would switch.
>
> The problem happen when i connected to micro, i
> tried to give looping
> output 1 and 0, but the result was unexpected the
> relay didn't
> switching. I build my program using WinAVR and this
> is short of my
> program:
>
> int main ()
> {
> DDRx = 0xff;
> PORTx = 0x00;
>
> while (1)
> {
> PORTx = 0xff;
> MYdelay (100);
> PORTx = 0x00;
> MYdelay (100);
> }
>
> }
>
> I create my own delay function :
>
> void MYdelay (int time)
> {
> int i,j;
>
> for (i=0; i > for (j=0; j > }
>
> I had compile and download it and succes.
>
> But the result was very weird the relay only switch
> 3 times and then
> stopped??????.......
>
> Please help me.
> (if anyone of you had better circuit to drive relay
> with micro please
> send me.)
>
> THX.

____________________________________________________________________________________
Be a better friend, newshound, and
know-it-all with Yahoo! Mobile. Try it now. http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ

------------------------------------



(You need to be a member of avrclub -- send a blank email to avrclub-subscribe@yahoogroups.com )

Re: Re: [AVR club] [ask] I/O Relay Board - raj - May 2 9:32:22 2008

=A0
That is freewheeling diode in reverse dbisased mode to protect your transis=
tor. when tr. is off ground is isolated and when on tr. is on.
rgds/
kundan
On Fri, 02 May 2008 Rick B. wrote :
>try connecting the relay coil to +vcc. the other leg
>of the relay coil to the COLLECTOR of the BC109, the
>emitter of the BC109 goes to ground.
>
>When the microcontroller applies a logic "1" to the
>base resistor there flows a base emitter current, that
>in turn switches the collector emitter curent "on",
>and current flows thru the relay coil. A logic "0" on
>the base resistor starves the base emitter junction
>and the collector emmiter current ceases to flow, and
>the relay will release / de-energize. Be sure to
>protect the BC109 by putting a diode across the relay
>coil, anode faces the BC109's collector, cathode goes
>toward +VCC.
>
>RRB
>
>--- Marteen wrote:
>
> >
> > Hello,
> >
> > I had a project to design I/O Relay Board for
> > ATmega16.
> > I had a problem with the circuit for drive the
> > relay. In my circuit i
> > use transistor BC109 to create bigger the current
> > from micro. In my
> > circuit i use resistor 4,7k for resistance in Base,
> > emmiter transistor
> > was connected to GND, the collector connected to VCC
> > +5V and diode
> > 1N4001 or 1N4002 to protect micro to emf from relay.
> > First I tried in
> > project board with base transistor directly
> > connected to pushbutton
> > which connected with 5V and the result is if push
> > the button the relay
> > would switch.
> >
> > The problem happen when i connected to micro, i
> > tried to give looping
> > output 1 and 0, but the result was unexpected the
> > relay didn't
> > switching. I build my program using WinAVR and this
> > is short of my
> > program:
> >
> > int main ()
> > {
> > DDRx =3D 0xff;
> > PORTx =3D 0x00;
> >
> > while (1)
> > {
> > PORTx =3D 0xff;
> > MYdelay (100);
> > PORTx =3D 0x00;
> > MYdelay (100);
> > }
> >
> > }
> >
> > I create my own delay function :
> >
> > void MYdelay (int time)
> > {
> > int i,j;
> >
> > for (i=3D0; i > > for (j=3D0; j > > }
> >
> > I had compile and download it and succes.
> >
> > But the result was very weird the relay only switch
> > 3 times and then
> > stopped??????.......
> >
> > Please help me.
> > (if anyone of you had better circuit to drive relay
> > with micro please
> > send me.)
> >
> > THX.
> >
> > ___________________________________________________________________=
_________________
>Be a better friend, newshound, and
>know-it-all with Yahoo! Mobile. Try it now. http://mobile.yahoo.com/;_yl=
t=3DAhu06i62sR8HDtDypao8Wcj9tAcJ
[Non-text portions of this message have been removed]
------------------------------------



(You need to be a member of avrclub -- send a blank email to avrclub-subscribe@yahoogroups.com )

Re: [AVR club] [ask] I/O Relay Board - "niloofar.zendehdel" - May 4 23:35:55 2008

hello i have a project too but i have the competition in 2 days my
programer is stk 200
and thats a copetitiuon about path finders robot in my opinion at
first you help me because it is so emergency then i will help you & i
will do my best.
thanks a lot
niloofar
------------------------------------



(You need to be a member of avrclub -- send a blank email to avrclub-subscribe@yahoogroups.com )

Re: [AVR club] [ask] I/O Relay Board - Navid Zeraatkar - May 5 9:11:46 2008

Hi
If I could help u, I'm ready. But I did not understand what exactly
your question or problem is. If u explain your question more clearly,
I'm at your service.
By the way, do u know Nadia Zendehdel.

Navid Zeraatkar

----- Original Message ----
From: niloofar.zendehdel
To: a...@yahoogroups.com
Sent: Sunday, May 4, 2008 7:07:34 PM
Subject: Re: [AVR club] [ask] I/O Relay Board
hello i have a project too but i have the competition in 2 days my
programer is stk 200
and thats a copetitiuon about path finders robot in my opinion at
first you help me because it is so emergency then i will help you & i
will do my best.
thanks a lot
niloofar

------------------------------------



(You need to be a member of avrclub -- send a blank email to avrclub-subscribe@yahoogroups.com )

Re: [AVR club] [ask] I/O Relay Board - Rick - Jun 7 23:49:51 2008



What is tr. ????

reverse biased

The diode is a clamping diode also called a snubbing diode in that
application. It "snubs" the back EMF from the inductive load when the
current is shut off suddenly. Yes, it is there to protect the BC109
switching transistor.

M5

--- In a...@yahoogroups.com, "raj" wrote:
>
>
> That is freewheeling diode in reverse dbisased mode to protect your
transistor. when tr. is off ground is isolated and when on tr. is on.
> rgds/
> kundan
> On Fri, 02 May 2008 Rick B. wrote :
> >try connecting the relay coil to +vcc. the other leg
> >of the relay coil to the COLLECTOR of the BC109, the
> >emitter of the BC109 goes to ground.
> >
> >When the microcontroller applies a logic "1" to the
> >base resistor there flows a base emitter current, that
> >in turn switches the collector emitter curent "on",
> >and current flows thru the relay coil. A logic "0" on
> >the base resistor starves the base emitter junction
> >and the collector emmiter current ceases to flow, and
> >the relay will release / de-energize. Be sure to
> >protect the BC109 by putting a diode across the relay
> >coil, anode faces the BC109's collector, cathode goes
> >toward +VCC.
> >
> >RRB
> >
> >--- Marteen wrote:
> >
> > >
> > > Hello,
> > >
> > > I had a project to design I/O Relay Board for
> > > ATmega16.
> > > I had a problem with the circuit for drive the
> > > relay. In my circuit i
> > > use transistor BC109 to create bigger the current
> > > from micro. In my
> > > circuit i use resistor 4,7k for resistance in Base,
> > > emmiter transistor
> > > was connected to GND, the collector connected to VCC
> > > +5V and diode
> > > 1N4001 or 1N4002 to protect micro to emf from relay.
> > > First I tried in
> > > project board with base transistor directly
> > > connected to pushbutton
> > > which connected with 5V and the result is if push
> > > the button the relay
> > > would switch.
> > >
> > > The problem happen when i connected to micro, i
> > > tried to give looping
> > > output 1 and 0, but the result was unexpected the
> > > relay didn't
> > > switching. I build my program using WinAVR and this
> > > is short of my
> > > program:
> > >
> > > int main ()
> > > {
> > > DDRx = 0xff;
> > > PORTx = 0x00;
> > >
> > > while (1)
> > > {
> > > PORTx = 0xff;
> > > MYdelay (100);
> > > PORTx = 0x00;
> > > MYdelay (100);
> > > }
> > >
> > > }
> > >
> > > I create my own delay function :
> > >
> > > void MYdelay (int time)
> > > {
> > > int i,j;
> > >
> > > for (i=0; i > > > for (j=0; j > > > }
> > >
> > > I had compile and download it and succes.
> > >
> > > But the result was very weird the relay only switch
> > > 3 times and then
> > > stopped??????.......
> > >
> > > Please help me.
> > > (if anyone of you had better circuit to drive relay
> > > with micro please
> > > send me.)
> > >
> > > THX.
> > >
> > >
> >
> >
> >
> >
____________________________________________________________________________________
> >Be a better friend, newshound, and
> >know-it-all with Yahoo! Mobile. Try it now.
http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ
> [Non-text portions of this message have been removed]
>

------------------------------------



(You need to be a member of avrclub -- send a blank email to avrclub-subscribe@yahoogroups.com )

Re: [AVR club] [ask] I/O Relay Board - Wong TW - Jun 8 9:41:23 2008

Hi,

The program is very simple, I suspect the problem is at the power section if
you are sharing the relay power with Microcontroller. Can you include the
power supply section.

Mike

On Sun, Jun 8, 2008 at 10:41 AM, Rick wrote:

> What is tr. ????
>
> reverse biased
>
> The diode is a clamping diode also called a snubbing diode in that
> application. It "snubs" the back EMF from the inductive load when the
> current is shut off suddenly. Yes, it is there to protect the BC109
> switching transistor.
>
> M5
>
> --- In a...@yahoogroups.com , "raj"
> wrote:
> >
> >
> > That is freewheeling diode in reverse dbisased mode to protect your
> transistor. when tr. is off ground is isolated and when on tr. is on.
> > rgds/
> > kundan
> > On Fri, 02 May 2008 Rick B. wrote :
> > >try connecting the relay coil to +vcc. the other leg
> > >of the relay coil to the COLLECTOR of the BC109, the
> > >emitter of the BC109 goes to ground.
> > >
> > >When the microcontroller applies a logic "1" to the
> > >base resistor there flows a base emitter current, that
> > >in turn switches the collector emitter curent "on",
> > >and current flows thru the relay coil. A logic "0" on
> > >the base resistor starves the base emitter junction
> > >and the collector emmiter current ceases to flow, and
> > >the relay will release / de-energize. Be sure to
> > >protect the BC109 by putting a diode across the relay
> > >coil, anode faces the BC109's collector, cathode goes
> > >toward +VCC.
> > >
> > >RRB
> > >
> > >--- Marteen wrote:
> > >
> > > >
> > > > Hello,
> > > >
> > > > I had a project to design I/O Relay Board for
> > > > ATmega16.
> > > > I had a problem with the circuit for drive the
> > > > relay. In my circuit i
> > > > use transistor BC109 to create bigger the current
> > > > from micro. In my
> > > > circuit i use resistor 4,7k for resistance in Base,
> > > > emmiter transistor
> > > > was connected to GND, the collector connected to VCC
> > > > +5V and diode
> > > > 1N4001 or 1N4002 to protect micro to emf from relay.
> > > > First I tried in
> > > > project board with base transistor directly
> > > > connected to pushbutton
> > > > which connected with 5V and the result is if push
> > > > the button the relay
> > > > would switch.
> > > >
> > > > The problem happen when i connected to micro, i
> > > > tried to give looping
> > > > output 1 and 0, but the result was unexpected the
> > > > relay didn't
> > > > switching. I build my program using WinAVR and this
> > > > is short of my
> > > > program:
> > > >
> > > > int main ()
> > > > {
> > > > DDRx = 0xff;
> > > > PORTx = 0x00;
> > > >
> > > > while (1)
> > > > {
> > > > PORTx = 0xff;
> > > > MYdelay (100);
> > > > PORTx = 0x00;
> > > > MYdelay (100);
> > > > }
> > > >
> > > > }
> > > >
> > > > I create my own delay function :
> > > >
> > > > void MYdelay (int time)
> > > > {
> > > > int i,j;
> > > >
> > > > for (i=0; i > > > > for (j=0; j > > > > }
> > > >
> > > > I had compile and download it and succes.
> > > >
> > > > But the result was very weird the relay only switch
> > > > 3 times and then
> > > > stopped??????.......
> > > >
> > > > Please help me.
> > > > (if anyone of you had better circuit to drive relay
> > > > with micro please
> > > > send me.)
> > > >
> > > > THX.
> > > >
> > > >
> > >
> > >
> > >
> > >
> __________________________________________________________
> > >Be a better friend, newshound, and
> > >know-it-all with Yahoo! Mobile. Try it now.
> http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ
> >
> >
> > [Non-text portions of this message have been removed]
> >
>
[Non-text portions of this message have been removed]
------------------------------------



(You need to be a member of avrclub -- send a blank email to avrclub-subscribe@yahoogroups.com )

Re: [AVR club] [ask] I/O Relay Board - "Md. Istiaq Mahbub (Tarango)" - Jun 12 13:04:48 2008


Hi,
    Its a simple problem, just connect the protective relay with relay coil and collector of npn transistor then see what happens?
I think then it will do work.

[Non-text portions of this message have been removed]
------------------------------------



(You need to be a member of avrclub -- send a blank email to avrclub-subscribe@yahoogroups.com )

Re: [AVR club] [ask] I/O Relay Board - NILKANTHA SINGHA - Jun 13 8:48:49 2008

hi freind,
Thanks for ur suggestion.
i m doing a project on public address system using
AT90S8515. but i m not getting any
display on the LCD. This project is to display POWER ON
DISPLAY ,selected ZONE NO AND ZONE NAME, AND TO INSTRUCT THE RECIEVER SIDE
(ANOTHER AT90S8515), TO ACTIVATE RESPECTIVE RELAY OUT OF 10 RELAY AS 10
ZONES TO BE USED.
PLEASE HELP ME .

i tried to slove that, now m getting some messages like:

13-Jun-2008 15:14:18 AVR Simulator: Uninitialized stack
pointer used at 0x0031
13-Jun-2008 15:14:18 AVR Simulator: Uninitialized stack
pointer used at 0x0034
13-Jun-2008 15:14:18 AVR Simulator: Uninitialized stack
pointer used at 0x0037
13-Jun-2008 15:14:18 AVR Simulator: Uninitialized stack
pointer used at 0x003a

here is my code, i m compiling the code using AVR STUDIO 4.14

;PCB : GE-90-SP
;System : GE-1007PA
;Project: PA Console for two way PA system
;Processor:AT90S8515
;--------------------------------------
;.include "8515def.asm"
.include "8515def.inc"

.CSEG ;CODE SEGMENT
.org $0000
rjmp Main ;**********+++++++++++++++******************>>>>>>>

.org $001
rjmp KeyPad
;--------------------------------------
.equ TxD =1 ;Tx = Transmitter
.def bitcnt =R23 ;counter for bit transmission
.def temp =R17
.def Txbyte =R5 ;Transmit data
.equ sb =1 ;stop bit

UART_delay: ldi temp,59 ;initialize UART
UART_delay1: dec temp
brne UART_delay1
ret

;-------------- TRANSMIT --------------

putchar:ldi bitcnt,9+sb ;routine for transmit data
com Txbyte
sec
putchar0: brcc putchar1
cbi PORTD,TxD
rjmp putchar2
putchar1: sbi PORTD,TxD
nop
putchar2: rcall UART_delay
rcall UART_delay
lsr Txbyte
dec bitcnt
brne putchar0
ret
;--------------------------------------
NORMAL: rcall Line1 ;Display
rcall NORMAL1msg ;public address talk back system
rcall Display
rcall Line2
rcall NORMAL2msg
rcall Display
ret

;******************************* STARTING OF THE PROGRAM
**********************

Main: ;ldi Loads an 8 bit constant directly to register 16 to 31.
ldi r18,$FF ;**************************** PORTA *************
out DDRA,r18;making port A as o/p port

;********************************* PORTC
********************************************
ldi r18,$FF
out DDRC,r18 ; PORT C AS O/P PORT

;$15 IS THE ADDRESS OF THE PORTC
cbi PORTC,0;$15,0;PORTC.0=A0=0 TO SELECT THE CS0 O/P OF THE U6
cbi PORTC,1;$15,1;PORTC.1=A1=0
cbi PORTC,2;$15,2;PORTC.2=A2=0

cbi PORTC,7;$15,7;PORTC.7=A15=0,TO ENABLE THE U6(74HC138)

;********************************** PORTD
************************************
ldi r18,$FF;
out DDRD,r18

;$12 IS THE ADDRESS OF THE PORTD

cbi $12,7;PORTD.7 = RD = 0
cbi $12,6;PORTD.6 = WR = 0
;*******************************************************************************
ldi r16,$60 ;r16 = 0101 1111 initialize stack POINTERS starting address
out SPL,r16 ;SPL = 0101 1111

ldi r16,$02 ;r16 = 0000 0010
out SPH,r16 ;SPH = 0000 0010
$FF ;
ldi r16,r16 = 1111 1111,DDRB=Data Direction Register B.
out DDRB,r16;DDRB= 1111 1111,portB is now o/p port.

ldi r16,$C3 ;r16 = 1100 0011
out MCUCR,r16;MCUCR=1100 0011,alternate pins functions are enabled
;1 cycle wait state is inserted in the external Data SRAM access
cycle
;disabling the sleep mode of the MCU.
;idle mode is selected as sleep mode.
;low level of INT1 generates an interrupts request
;rising edge of INT0 generates an interrupts request

;rcall InitLCD
out PORTA,r30;
out PORTA,r31

;********************************************************************************
InitLCD: rcall Control_Write ;initialize LCD
ldi r16,$30;r16=0011 0000
st X,r16;Indirect address register x = R27 and R26
;R27=0000 0011 and R26=0000 0000
rcall delay

ldi r16,$30 ;30 is sending to X Register Three times.
st X,r16
rcall delay

ldi r16,$30 ;r16=$30
st X,r16 ; store the contents of address $30 in X register

rcall ChkBusy

rcall Control_Write

ldi r16,$38;r16 = $38 // $38 is the address opf TIFR
st X,r16 ; store the contents of address $38 in X register
rcall ChkBusy

ldi r16,$06 ; $06 is the address of DDRE
st X,r16
rcall ChkBusy

ldi r16,$0C ;$0C is the address of UDR (UART data I/O register).
st X,r16
rcall ChkBusy

ldi r16,$01 ;
st X,r16
rcall ChkBusy

ldi r16,$02
st X,r16
rcall ChkBusy

ret ; return to MAIN

rcall POWER_ON_DISPLAY

;******************************************************************************

ERASE: rcall EraseLine1 ;Erase both the lines
rcall EraseLine2

;******************************* MAIN PROGRAM START
***************************
POWER_ON_DISPLAY:

GLOBE: rcall Line1
rcall GLOBE1msg ;at power ON display GDA message
rcall Display
rcall Line2
rcall GLOBE2msg
rcall Display
rcall onesecdelay
rcall onesecdelay

rcall Line1
rcall GLOBE3msg
rcall Display
rcall Line2
rcall GLOBE4msg
rcall Display
rcall onesecdelay
rcall onesecdelay
rcall POWER_ON_DISPLAY2
ret;rcall Normal
;--------------------------------------
START: ldi r16,$40 ; 40H = 1000 0000
out GIMSK,r16;GIMSK=0100 0000,EXTERNAL INTERRUPT 0 pin is enabled

ldi r16,$80 ;r16= 1000 0000
out SREG,r16;Enable I-bit (7th) of SREG to activate interrupts
sbi PORTD,TxD; making the port d as o/p port,
;set bit in I/O data register of PORTD
sbi DDRD,TxD ;set bit in Data direction register of PORTB
rcall line2

ldi r25,$01 ;r25=0000 0001
cbi PORTB,0 ;to make port B as i/p port,clear bit i/o register of port B.
rcall delay
sbi PORTB,0 ;to make port B as o/p port set bit in i/o register of port
B.
rcall buzzeron ;Beep once at power ON
;--------------------------------------
forever: nop
rjmp forever

;--------------** DELAY **-------------

Delay: ldi r20,$0f ;some of the delay routines
FirstLoop: ldi r21,$0f
SecondLoop: dec r21
cpi r21,0
brne SecondLoop
dec r20
cpi r20,0
brne FirstLoop
ret
;--------------------------------------
OneSecDelay: ldi r18,$0F
LoopOneSec: rcall Delay
dec r18
cpi r18,0
brne LoopOneSec
ret

;------------** BUZZER **--------------

BuzzerON: ldi r18,$5F ;routine for buzzer beep
BuzLoop: sbi PORTB,2
rcall BuzzerDelay
cbi PORTB,2
rcall BuzzerDelay

dec r18
cpi r18,0
brne BuzLoop
ret
BuzzerDelay: ldi r20,$01
BuzLoop1: ldi r21,$DF
BuzLoop2: dec r21
cpi r21,0
brne BuzLoop2
dec r20
cpi r20,0
brne BuzLoop1
ret
;--------------------------------------
KeyPad: rcall BuzzerON ;routine to display Key pressed
rcall KeyMemory
ld r19,X
rjmp keycheck
Back: reti
KeyMemory: ldi XL,$00
ldi XH,$11
ret

DisplayByte: ldi r22,$30
mov r20,r19
andi r20,$0F
add r20,r22
rcall Data_Write
st Y,r20
rcall ChkBusy
ret

Control_Write: ldi XL,$00
ldi XH,$40
ret

Data_Write: ldi YL,$01
ldi YH,$40
ret

Status_Read: ldi YL,$02
ldi YH,$40
ret
ChkBusy: rcall Status_Read
ChkBusyLoop: ld r24,Y
andi r24,$80
cpi r24,$80
breq ChkBusyLoop

ret
;--------------------------------------
EraseLine1: rcall Line1
rcall BLANKmsg
rcall Display
ret
;--------------------------------------
EraseLine2: rcall Line2
rcall BLANKmsg
rcall Display
ret
;--------------------------------------
Line1: rcall Control_Write ;initialize Line1
ldi r16,$80
st X,r16
rcall ChkBusy
ret
;--------------------------------------
Line2: rcall Control_Write ;initialize Line2
ldi r16,$C0
st X,r16
rcall ChkBusy
ret
;--------------------------------------
Display: lpm
mov r16,r0
cpi r16,$FF
breq EndDisplay
adiw r30,1
rcall Data_Write
st Y,r16
rcall ChkBusy
rjmp Display

EndDisplay: ret
;--------------------------------------

POWER_ON_DISPLAY2:

BLANKmsg: ldi r31,high(BLANK*2)
ldi r30,low(BLANK*2)

GLOBE1msg: ldi r31,high(GLOBE1*2) ;name of the messages
ldi r30,low(GLOBE1*2) ;used in the program
rcall delay

GLOBE3msg: ldi r31,high(GLOBE3*2)
ldi r30,low(GLOBE3*2)
rcall delay

NORMAL1msg: ldi r31,high(NORMAL1*2)
ldi r30,low(NORMAL1*2)
rcall delay

FNCT1msg: ldi r31,high(FNCT1*2)
ldi r30,low(FNCT1*2)
rcall delay
GLOBE2msg: ldi r31,high(GLOBE2*2)
ldi r30,low(GLOBE2*2)
rcall delay

GLOBE4msg: ldi r31,high(GLOBE4*2)
ldi r30,low(GLOBE4*2)
rcall delay

NORMAL2msg: ldi r31,high(NORMAL2*2)
ldi r30,low(NORMAL2*2)
rcall delay

FNCT2msg: ldi r31,high(FNCT2*2)
ldi r30,low(FNCT2*2)

.cseg

BLANK: .db " "

GLOBE1:.db "GLOBE DETECTIVE"
GLOBE2:.db "AGENCY (P) LTD. "

GLOBE3:.db " ELECTRONIC "
GLOBE4:.db " DIVISION "

NORMAL1: .db "ADDRESSABLE PUBLIC"
NORMAL2: .db " ADDRESS SYSTEM "

ret

;*****************************************************************

FNCT1: .db "SELECT ZONE no. "
FNCT2: .db "and Press Enter "
;--------------------------------------
Keycheck: ldi r22,$30
mov r20,r19 ;routine for selecting a zone
andi r20,$0F
add r20,r22

cpi r25,$01
breq Firstkey
cpi r25,$02
breq Secondkey
cpi r25,$03
breq Thirdkey
cpi r25,$04
breq Fourthkey

Firstkey: cpi r20,$3D
brne Wrongkey1
ldi r25,$02

rcall Line1
rcall FNCT1msg
rcall Display
rcall Line2
rcall FNCT2msg
rcall Display
rjmp back

Secondkey: cpi r20,$3B
brge Wrongkey1
cpi r20,$3A
breq AllCall1
ldi r25,$03
mov r1,r19
rcall Eraseline2
rcall line2
rcall displaybyte
rjmp back

Allcall1: ldi r25,$01
mov r1,r19
mov r2,r19
cbi PORTB,0
rjmp allcall

Thirdkey: cpi r20,$3E
breq Delete1
cpi r20,$3A
brge Wrongkey1
ldi r25,$04
mov r2,r19
rcall displaybyte
rjmp back
Wrongkey1: rjmp Wrongkey
Fourthkey: cpi r20,$3E
breq Delete2

KeyEnter: cpi r20,$3F
breq Eenter
rjmp Wrongkey1

Eenter: ldi r25,01
rcall Line1
rcall Entermsg
rcall Display

rcall Eraseline2
rcall Line2

mov r19,r1
rcall displaybyte
mov r19,r2
rcall displaybyte

SelectZone: ldi r19,$02
mov r5,r19
rcall putchar

mov r5,r1
rcall putchar
mov r5,r2
rcall putchar

ldi r19,$03
mov r5,r19
rcall putchar

cbi PORTB,0
rjmp back
;--------------------------------------
Entermsg: ldi r31,high(enter*2)
ldi r30,low(enter*2)
ret

Enter: .db " ZONE SELECTED "
;--------------------------------------
Delete1: rcall Normal
clr r1
ldi r25,$01
rjmp back

Delete2: rcall Eraseline2
rcall Line2

mov r19,r1
rcall displaybyte
clr r2
ldi r25,$03
rjmp back
;--------------------------------------
Wrongkey: cpi r20,$3C ;routine for wrong key press
breq Clearkey

rcall buzzeron
rcall buzzeron
rcall buzzeron
rcall buzzeron
rcall buzzeron
rcall buzzeron

rcall Line1
rcall wrong1msg
rcall Display
rcall Line2
rcall wrong2msg
rcall Display
ldi r25,$01
clr r1
clr r2
rcall onesecdelay
rcall onesecdelay

rcall Normal
rjmp back
;--------------------------------------
Wrong1msg: ldi r31,high(wrong1*2)
ldi r30,low(wrong1*2)
ret

Wrong1: .db "WRONG KEY PRESS "
;--------------------------------------
Wrong2msg: ldi r31,high(wrong2*2)
ldi r30,low(wrong2*2)
ret

Wrong2: .db " TRY AGAIN "
;--------------------------------------
Clearkey: rcall buzzeron
rcall buzzeron ;routine to clear all zones
rcall buzzeron
rcall delay
rcall buzzeron
rcall buzzeron
rcall buzzeron

rcall Line1
rcall Clear1msg
rcall Display
rcall Line2
rcall Clear2msg
rcall Display

ldi r25,$01
clr r1
clr r2

DeselectZone: ldi r19,$02
mov r5,r19
rcall putchar
mov r5,r1
rcall putchar
mov r5,r2
rcall putchar
ldi r19,$03
mov r5,r19
rcall putchar
rcall onesecdelay
rcall onesecdelay
rcall Normal
sbi PORTB,0
rjmp back
;--------------------------------------
Clear1msg: ldi r31,high(clear1*2)
ldi r30,low(clear1*2)
ret

Clear1: .db "ZONE IS CLEARED "

Clear2msg: ldi r31,high(clear2*2)
ldi r30,low(clear2*2)
ret

Clear2: .db " "

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

AllCall: rcall buzzeron ;routine for ALL CALL
rcall buzzeron ;to select all zones
rcall delay
rcall buzzeron
rcall buzzeron
rcall delay
rcall buzzeron
rcall buzzeron

rcall Line1
rcall cmd1msg
rcall Display
rcall Line2
rcall cmd2msg
rcall Display

ldi r25,$01

AllZones: ldi r19,$02
mov r5,r19
rcall putchar
mov r5,r1
rcall putchar
mov r5,r2
rcall putchar
ldi r19,$03
mov r5,r19
rcall putchar

rjmp back
;--------------------------------------
CMD1msg: ldi r31,high(cmd1*2)
ldi r30,low(cmd1*2)
ret

CMD1: .db "All CALL"

CMD2msg: ldi r31,high(cmd2*2)
ldi r30,low(cmd2*2)
ret

CMD2:.db "SELECTED"
;--------------------------------------
;****************************** PROGRAM END
***********************************

On 6/12/08, Md. Istiaq Mahbub (Tarango) wrote:
> Hi,
>     Its a simple problem, just connect the protective relay
> with relay coil and collector of npn transistor then see what happens?
> I think then it will do work.
>
> [Non-text portions of this message have been removed]
>

--
Nilkantha Singha

----------



----------

;PCB : GE-90-SP
;System : GE-1007PA
;Project: PA Console for two way PA system
;Processor: 90S8515
;--------------------------------------
;.include "8515def.asm"
.include "8515def.inc"

.CSEG ;CODE SEGMENT
.org $0000
rjmp Main ;**********+++++++++++++++******************>>>>>>>

.org $001
rjmp KeyPad
;--------------------------------------
.equ TxD =1 ;Tx = Transmitter
.def bitcnt =R23 ;counter for bit transmission
.def temp =R17
.def Txbyte =R5 ;Transmit data
.equ sb =1 ;stop bit

UART_delay: ldi temp,59 ;initialize UART
UART_delay1: dec temp
brne UART_delay1
ret

;-------------- TRANSMIT --------------

putchar: ldi bitcnt,9+sb ;routine for transmit data
com Txbyte
sec
putchar0: brcc putchar1
cbi PORTD,TxD
rjmp putchar2
putchar1: sbi PORTD,TxD
nop
putchar2: rcall UART_delay
rcall UART_delay
lsr Txbyte
dec bitcnt
brne putchar0
ret
;--------------------------------------
NORMAL: rcall Line1 ;Display
rcall NORMAL1msg ;public address talk back system
rcall Display
rcall Line2
rcall NORMAL2msg
rcall Display
ret

;******************************* STARTING OF THE PROGRAM **********************

Main: ;ldi Loads an 8 bit constant directly to register 16 to 31.
ldi r18,$FF ;**************************** PORTA *************
out DDRA,r18;making port A as o/p port

;********************************* PORTC ********************************************
ldi r18,$FF
out DDRC,r18 ; PORT C AS O/P PORT

;$15 IS THE ADDRESS OF THE PORTC
cbi PORTC,0;$15,0;PORTC.0=A0=0 TO SELECT THE CS0 O/P OF THE U6
cbi PORTC,1;$15,1;PORTC.1=A1=0
cbi PORTC,2;$15,2;PORTC.2=A2=0

cbi PORTC,7;$15,7;PORTC.7=A15=0,TO ENABLE THE U6(74HC138)

;********************************** PORTD ************************************

ldi r18,$FF;
out DDRD,r18

;$12 IS THE ADDRESS OF THE PORTD

cbi $12,7;PORTD.7 = RD = 0
cbi $12,6;PORTD.6 = WR = 0

;*******************************************************************************

ldi r16,$60 ;r16 = 0101 1111 initialize stack POINTERS starting address
out SPL,r16 ;SPL = 0101 1111

ldi r16,$02 ;r16 = 0000 0010
out SPH,r16 ;SPH = 0000 0010

ldi r16,$FF ;r16 = 1111 1111,DDRB=Data Direction Register B.
out DDRB,r16;DDRB= 1111 1111,portB is now o/p port.

ldi r16,$C3 ;r16 = 1100 0011
out MCUCR,r16;MCUCR=1100 0011,alternate pins functions are enabled
;1 cycle wait state is inserted in the external Data SRAM access cycle
;disabling the sleep mode of the MCU.
;idle mode is selected as sleep mode.
;low level of INT1 generates an interrupts request
;rising edge of INT0 generates an interrupts request

;rcall InitLCD
out PORTA,r30;
out PORTA,r31

;********************************************************************************

InitLCD: rcall Control_Write ;initialize LCD
ldi r16,$30;r16=0011 0000
st X,r16;Indirect address register x = R27 and R26
;R27=0000 0011 and R26=0000 0000
rcall delay

ldi r16,$30 ;30 is sending to X Register Three times.
st X,r16
rcall delay

ldi r16,$30 ;r16=$30
st X,r16 ; store the contents of address $30 in X register

rcall ChkBusy

rcall Control_Write

ldi r16,$38;r16 = $38 // $38 is the address opf TIFR
st X,r16 ; store the contents of address $38 in X register
rcall ChkBusy

ldi r16,$06 ; $06 is the address of DDRE
st X,r16
rcall ChkBusy

ldi r16,$0C ;$0C is the address of UDR (UART data I/O register).
st X,r16
rcall ChkBusy

ldi r16,$01 ;
st X,r16
rcall ChkBusy

ldi r16,$02
st X,r16
rcall ChkBusy

ret ; return to MAIN

rcall POWER_ON_DISPLAY

;******************************************************************************

ERASE: rcall EraseLine1 ;Erase both the lines
rcall EraseLine2

;******************************* MAIN PROGRAM START ***************************
POWER_ON_DISPLAY:

GLOBE: rcall Line1
rcall GLOBE1msg ;at power ON display GDA message
rcall Display
rcall Line2
rcall GLOBE2msg
rcall Display
rcall onesecdelay
rcall onesecdelay

rcall Line1
rcall GLOBE3msg
rcall Display
rcall Line2
rcall GLOBE4msg
rcall Display
rcall onesecdelay
rcall onesecdelay
rcall POWER_ON_DISPLAY2
ret;rcall Normal
;--------------------------------------
START: ldi r16,$40 ; 40H = 1000 0000
out GIMSK,r16;GIMSK=0100 0000,EXTERNAL INTERRUPT 0 pin is enabled

ldi r16,$80 ;r16= 1000 0000
out SREG,r16;Enable I-bit (7th) of SREG to activate interrupts

sbi PORTD,TxD; making the port d as o/p port,
;set bit in I/O data register of PORTD
sbi DDRD,TxD ;set bit in Data direction register of PORTB
rcall line2

ldi r25,$01 ;r25=0000 0001
cbi PORTB,0 ;to make port B as i/p port,clear bit i/o register of port B.
rcall delay
sbi PORTB,0 ;to make port B as o/p port set bit in i/o register of port B.
rcall buzzeron ;Beep once at power ON
;--------------------------------------
forever: nop
rjmp forever

;--------------** DELAY **-------------

Delay: ldi r20,$0f ;some of the delay routines
FirstLoop: ldi r21,$0f
SecondLoop: dec r21
cpi r21,0
brne SecondLoop
dec r20
cpi r20,0
brne FirstLoop
ret
;--------------------------------------
OneSecDelay: ldi r18,$0F
LoopOneSec: rcall Delay
dec r18
cpi r18,0
brne LoopOneSec
ret

;------------** BUZZER **--------------

BuzzerON: ldi r18,$5F ;routine for buzzer beep
BuzLoop: sbi PORTB,2
rcall BuzzerDelay
cbi PORTB,2
rcall BuzzerDelay

dec r18
cpi r18,0
brne BuzLoop
ret
BuzzerDelay: ldi r20,$01
BuzLoop1: ldi r21,$DF
BuzLoop2: dec r21
cpi r21,0
brne BuzLoop2
dec r20
cpi r20,0
brne BuzLoop1
ret
;--------------------------------------
KeyPad: rcall BuzzerON ;routine to display Key pressed
rcall KeyMemory
ld r19,X
rjmp keycheck
Back: reti
KeyMemory: ldi XL,$00
ldi XH,$11
ret

DisplayByte: ldi r22,$30
mov r20,r19
andi r20,$0F
add r20,r22
rcall Data_Write
st Y,r20
rcall ChkBusy
ret

Control_Write: ldi XL,$00
ldi XH,$40
ret

Data_Write: ldi YL,$01
ldi YH,$40
ret

Status_Read: ldi YL,$02
ldi YH,$40
ret
ChkBusy: rcall Status_Read
ChkBusyLoop: ld r24,Y
andi r24,$80
cpi r24,$80
breq ChkBusyLoop

ret
;--------------------------------------
EraseLine1: rcall Line1
rcall BLANKmsg
rcall Display
ret
;--------------------------------------
EraseLine2: rcall Line2
rcall BLANKmsg
rcall Display
ret
;--------------------------------------
Line1: rcall Control_Write ;initialize Line1
ldi r16,$80
st X,r16
rcall ChkBusy
ret
;--------------------------------------
Line2: rcall Control_Write ;initialize Line2
ldi r16,$C0
st X,r16
rcall ChkBusy
ret
;--------------------------------------
Display: lpm
mov r16,r0
cpi r16,$FF
breq EndDisplay
adiw r30,1
rcall Data_Write
st Y,r16
rcall ChkBusy
rjmp Display

EndDisplay: ret
;--------------------------------------

POWER_ON_DISPLAY2:

BLANKmsg: ldi r31,high(BLANK*2)
ldi r30,low(BLANK*2)

GLOBE1msg: ldi r31,high(GLOBE1*2) ;name of the messages
ldi r30,low(GLOBE1*2) ;used in the program
rcall delay

GLOBE3msg: ldi r31,high(GLOBE3*2)
ldi r30,low(GLOBE3*2)
rcall delay

NORMAL1msg: ldi r31,high(NORMAL1*2)
ldi r30,low(NORMAL1*2)
rcall delay

FNCT1msg: ldi r31,high(FNCT1*2)
ldi r30,low(FNCT1*2)
rcall delay
GLOBE2msg: ldi r31,high(GLOBE2*2)
ldi r30,low(GLOBE2*2)
rcall delay

GLOBE4msg: ldi r31,high(GLOBE4*2)
ldi r30,low(GLOBE4*2)
rcall delay

NORMAL2msg: ldi r31,high(NORMAL2*2)
ldi r30,low(NORMAL2*2)
rcall delay

FNCT2msg: ldi r31,high(FNCT2*2)
ldi r30,low(FNCT2*2)

.cseg

BLANK: .db " "

GLOBE1:.db "GLOBE DETECTIVE"
GLOBE2:.db "AGENCY (P) LTD. "

GLOBE3:.db " ELECTRONIC "
GLOBE4:.db " DIVISION "

NORMAL1: .db "ADDRESSABLE PUBLIC"
NORMAL2: .db " ADDRESS SYSTEM "

ret

;*****************************************************************

FNCT1: .db "SELECT ZONE no. "
FNCT2: .db "and Press Enter "
;--------------------------------------
Keycheck: ldi r22,$30
mov r20,r19 ;routine for selecting a zone
andi r20,$0F
add r20,r22

cpi r25,$01
breq Firstkey
cpi r25,$02
breq Secondkey
cpi r25,$03
breq Thirdkey
cpi r25,$04
breq Fourthkey

Firstkey: cpi r20,$3D
brne Wrongkey1
ldi r25,$02

rcall Line1
rcall FNCT1msg
rcall Display
rcall Line2
rcall FNCT2msg
rcall Display
rjmp back

Secondkey: cpi r20,$3B
brge Wrongkey1
cpi r20,$3A
breq AllCall1
ldi r25,$03
mov r1,r19
rcall Eraseline2
rcall line2
rcall displaybyte
rjmp back

Allcall1: ldi r25,$01
mov r1,r19
mov r2,r19
cbi PORTB,0
rjmp allcall

Thirdkey: cpi r20,$3E
breq Delete1
cpi r20,$3A
brge Wrongkey1
ldi r25,$04
mov r2,r19
rcall displaybyte
rjmp back
Wrongkey1: rjmp Wrongkey
Fourthkey: cpi r20,$3E
breq Delete2

KeyEnter: cpi r20,$3F
breq Eenter
rjmp Wrongkey1

Eenter: ldi r25,01
rcall Line1
rcall Entermsg
rcall Display

rcall Eraseline2
rcall Line2

mov r19,r1
rcall displaybyte
mov r19,r2
rcall displaybyte

SelectZone: ldi r19,$02
mov r5,r19
rcall putchar

mov r5,r1
rcall putchar
mov r5,r2
rcall putchar

ldi r19,$03
mov r5,r19
rcall putchar

cbi PORTB,0
rjmp back
;--------------------------------------
Entermsg: ldi r31,high(enter*2)
ldi r30,low(enter*2)
ret

Enter: .db " ZONE SELECTED "
;--------------------------------------
Delete1: rcall Normal
clr r1
ldi r25,$01
rjmp back

Delete2: rcall Eraseline2
rcall Line2

mov r19,r1
rcall displaybyte
clr r2
ldi r25,$03
rjmp back
;--------------------------------------
Wrongkey: cpi r20,$3C ;routine for wrong key press
breq Clearkey

rcall buzzeron
rcall buzzeron
rcall buzzeron
rcall buzzeron
rcall buzzeron
rcall buzzeron

rcall Line1
rcall wrong1msg
rcall Display
rcall Line2
rcall wrong2msg
rcall Display
ldi r25,$01
clr r1
clr r2
rcall onesecdelay
rcall onesecdelay

rcall Normal
rjmp back
;--------------------------------------
Wrong1msg: ldi r31,high(wrong1*2)
ldi r30,low(wrong1*2)
ret

Wrong1: .db "WRONG KEY PRESS "
;--------------------------------------
Wrong2msg: ldi r31,high(wrong2*2)
ldi r30,low(wrong2*2)
ret

Wrong2: .db " TRY AGAIN "
;--------------------------------------
Clearkey: rcall buzzeron
rcall buzzeron ;routine to clear all zones
rcall buzzeron
rcall delay
rcall buzzeron
rcall buzzeron
rcall buzzeron

rcall Line1
rcall Clear1msg
rcall Display
rcall Line2
rcall Clear2msg
rcall Display

ldi r25,$01
clr r1
clr r2

DeselectZone: ldi r19,$02
mov r5,r19
rcall putchar
mov r5,r1
rcall putchar
mov r5,r2
rcall putchar
ldi r19,$03
mov r5,r19
rcall putchar
rcall onesecdelay
rcall onesecdelay
rcall Normal
sbi PORTB,0
rjmp back
;--------------------------------------
Clear1msg: ldi r31,high(clear1*2)
ldi r30,low(clear1*2)
ret

Clear1: .db "ZONE IS CLEARED "

Clear2msg: ldi r31,high(clear2*2)
ldi r30,low(clear2*2)
ret

Clear2: .db " "

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

AllCall: rcall buzzeron ;routine for ALL CALL
rcall buzzeron ;to select all zones
rcall delay
rcall buzzeron
rcall buzzeron
rcall delay
rcall buzzeron
rcall buzzeron

rcall Line1
rcall cmd1msg
rcall Display
rcall Line2
rcall cmd2msg
rcall Display

ldi r25,$01

AllZones: ldi r19,$02
mov r5,r19
rcall putchar
mov r5,r1
rcall putchar
mov r5,r2
rcall putchar
ldi r19,$03
mov r5,r19
rcall putchar

rjmp back
;--------------------------------------
CMD1msg: ldi r31,high(cmd1*2)
ldi r30,low(cmd1*2)
ret

CMD1: .db "All CALL"

CMD2msg: ldi r31,high(cmd2*2)
ldi r30,low(cmd2*2)
ret

CMD2:.db "SELECTED"
;--------------------------------------
;****************************** PROGRAM END ***********************************

----------


2.1.17
AT90S8515
C:\Documents and Settings\administrator\Desktop\GE1007M

D:\Program Files\AvrAssembler2\Appnotes

C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm

D:\Program Files\AvrAssembler2\Appnotes\8515def.inc


C:\Documents and Settings\administrator\Desktop\GE1007M\GE1007M.obj


C:\Documents and Settings\administrator\Desktop\GE1007M\GE1007M.hex


C:\Documents and Settings\administrator\Desktop\GE1007M\GE1007M.map


C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm56

C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm241
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm24
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm25
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm31
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm34
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm37
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm39
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm46
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm288
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm328
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm300
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm294
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm345
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm110
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm259
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm202
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm270
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm157
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm153
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm278
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm283
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm159
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm320
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm337
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm212
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm324
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm341
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm313
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm179
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm221
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm197
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm203
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm204
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm213
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm222
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm231
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm232
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm233
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm246
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm374
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm245
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm250
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm263
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm267
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm271
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm315
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm310
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm356
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm358
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm361
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm364
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm332
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm371
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm359
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm362
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm365
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm349
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm372
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm388
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm400
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm417
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm426
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm425
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm411
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm568
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm468
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm482
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm473
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm429
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm433
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm462
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm446
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm466
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm519
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm507
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm513
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm511
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm517
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm554
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm560
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm538
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm558
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm564
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm599
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm605
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm586
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm603
C:\Documents and Settings\administrator\Desktop\GE1007M\TX.asm609



----------

:020000020000FC
:100000001AC08EC01BE31A95F1F708957AE0509458
:10001000089410F4919802C0919A0000F3DFF2DF87
:1000200056947A95B1F70895A2D0BDD0AAD0A4D0A5
:10003000C6D0A7D008952FEF2ABB2FEF24BBA898D6
:10004000A998AA98AF982FEF21BB9798969800E6A9
:100050000DBF02E00EBF0FEF07BB03EC05BFEBBB0C
:10006000FBBB6ED000E30C933AD000E30C9337D087
:1000700000E30C936ED064D008E30C936AD006E0E2
:100080000C9367D00CE00C9364D001E00C9361D02A
:1000900002E00C935ED0089502D061D064D067D0A6
:1000A0007CD06FD069D085D06CD022D021D05FD0E9
:1000B00077D067D061D080D064D01AD019D06BD0FF
:1000C000089500E40BBF00E80FBF919A899A54D0BD
:1000D00091E0C09804D0C09A11D00000FECF4FE04C
:1000E0005FE05A955030E9F74A954030C9F70895D6
:1000F0002FE0F5DF2A952030E1F708952FE5C29A29
:1001000006D0C29804D02A952030C9F7089541E05E
:100110005FED5A955030E9F74A954030C9F7089598
:10012000EDDF03D03C9193C01895A0E0B1E10895B4
:1001300060E3432F4F70460F06D048830AD00895DE
:10014000A0E0B0E40895C1E0D0E40895C2E0D0E4B6
:100150000895FCDF888180788038E1F3089507D026
:100160001AD00FD0089508D016D00BD00895E8DF2C
:1001700000E80C93EEDF0895E3DF00EC0C93E9DF79
:100180000895C895002D0F3F29F03196DCDF0883D4
:10019000E0DFF7CF0895F1E0E8ECF1E0EAEC9FDF73
:1001A000F1E0EAEE9CDFF2E0EAE099DFF2E0EEE275
:1001B00096DFF1E0EAED93DFF1E0EAEF90DFF2E0C5
:1001C000ECE18DDFF2E0EEE32020474C4F4245208A
:1001D000204445544543544956454147454E4359AB
:1001E00020285029204C54442E20202020454C45C6
:1001F0004354524F4E494320202020202020444980
:10020000564953494F4E20202020414444524553E3
:100210005341424C45205055424C494320414444AF
:10022000524553532053595354454D200895534537
:100230004C454354205A4F4E45206E6F2E20616E20
:100240006420507265737320456E7465722060E39C
:10025000432F4F70460F913031F0923071F0933050
:10026000D9F0943011F14D33F9F492E080DF9EDF44
:1002700088DF82DFA7DF85DF57CF4B33ACF44A330B
:1002800031F093E0132E6FDF77DF52DF4DCF91E037
:10029000132E232EC0989AC04E3369F14A3324F4AA
:1002A00094E0232E45DF40CF31C04E3341F14F3330
:1002B00009F0FACF91E05BDF13D063DF54DF5CDF3E
:1002C000312D36DF322D34DF32E0532E9FDE512CBC
:1002D0009DDE522C9BDE33E0532E98DEC09824CF57
:1002E000F2E0E6EE089520205A4F4E452053454C4B
:1002F00045435445442098DE112491E015CF33DF67
:100300003BDF312D15DF222493E00ECF4C3349F132
:10031000F5DEF4DEF3DEF2DEF1DEF0DE28DF0BD018
:1003200030DF2ADF13D02DDF91E011242224E0DE1C
:10033000DFDE7ADEF9CEF3E0ECE3089557524F4E5C
:1003400047204B455920505245535320F3E0E2E5F6
:1003500008952020205452592020414741494E20E1
:100360002020CCDECBDECADEBADEC8DEC7DEC6DECB
:10037000FEDE16D006DF00DF1ED003DF91E0112481
:10038000222432E0532E42DE512C40DE522C3EDE3F
:1003900033E0532E3BDEACDEABDE46DEC09AC4CE8D
:1003A000F3E0E6EA08955A4F4E4520495320434C66
:1003B000454152454420F3E0ECEB089520202020F5
:1003C00020202020202020202020202097DE96DEC4
:1003D00086DE94DE93DE83DE91DE90DEC8DE10D012
:1003E000D0DECADE14D0CDDE91E032E0532E0EDE38
:1003F000512C0CDE522C0ADE33E0532E07DE94CE55
:10040000F4E0E6E00895416C6C2043414C4CF4E08C
:0C041000E4E1089553454C454354454435
:00000001FF
[Non-text portions of this message have been removed]
------------------------------------



(You need to be a member of avrclub -- send a blank email to avrclub-subscribe@yahoogroups.com )

[AVR club] Re: [ask] I/O Relay Board - hoang1700 - Jun 13 13:06:03 2008


i think that atmel discontinue AT90s8515 MCU, you must used ATMEGA8515
to replace for ST90s8515, the code still work where you burn flash
make sure enable at90s8515 simulator flag.
or just switch to atmega8515

--- In a...@yahoogroups.com, "NILKANTHA SINGHA"
wrote:
>
> hi freind,
> Thanks for ur suggestion.
> i m doing a project on public address system using
> AT90S8515. but i m not getting any
> display on the LCD. This project is to display POWER ON
> DISPLAY ,selected ZONE NO AND ZONE NAME, AND TO INSTRUCT THE
RECIEVER SIDE
> (ANOTHER AT90S8515), TO ACTIVATE RESPECTIVE RELAY OUT OF 10 RELAY AS 10
> ZONES TO BE USED.
> PLEASE HELP ME .
>
> i tried to slove that, now m getting some messages
like:
>
> 13-Jun-2008 15:14:18 AVR Simulator: Uninitialized
stack
> pointer used at 0x0031
> 13-Jun-2008 15:14:18 AVR Simulator: Uninitialized
stack
> pointer used at 0x0034
> 13-Jun-2008 15:14:18 AVR Simulator: Uninitialized
stack
> pointer used at 0x0037
> 13-Jun-2008 15:14:18 AVR Simulator: Uninitialized
stack
> pointer used at 0x003a
>
> here is my code, i m compiling the code using AVR STUDIO 4.14
> ;PCB : GE-90-SP
> ;System : GE-1007PA
> ;Project: PA Console for two way PA system
> ;Processor:AT90S8515
> ;--------------------------------------
> ;.include "8515def.asm"
> .include "8515def.inc"
>
> .CSEG ;CODE SEGMENT
> .org $0000
> rjmp Main ;**********+++++++++++++++******************>>>>>>> .org $001
> rjmp KeyPad
> ;--------------------------------------
> .equ TxD =1 ;Tx = Transmitter
> .def bitcnt =R23 ;counter for bit transmission
> .def temp =R17
> .def Txbyte =R5 ;Transmit data
> .equ sb =1 ;stop bit
>
> UART_delay: ldi temp,59 ;initialize UART
> UART_delay1: dec temp
> brne UART_delay1
> ret
>
> ;-------------- TRANSMIT --------------
>
> putchar:ldi bitcnt,9+sb ;routine for transmit data
> com Txbyte
> sec
> putchar0: brcc putchar1
> cbi PORTD,TxD
> rjmp putchar2
> putchar1: sbi PORTD,TxD
> nop
> putchar2: rcall UART_delay
> rcall UART_delay
> lsr Txbyte
> dec bitcnt
> brne putchar0
> ret
> ;--------------------------------------
> NORMAL: rcall Line1 ;Display
> rcall NORMAL1msg ;public address talk back system
> rcall Display
> rcall Line2
> rcall NORMAL2msg
> rcall Display
> ret
>
> ;******************************* STARTING OF THE PROGRAM
> **********************
>
> Main: ;ldi Loads an 8 bit constant directly to register 16 to 31.
> ldi r18,$FF ;**************************** PORTA *************
> out DDRA,r18;making port A as o/p port
>
> ;********************************* PORTC
> ********************************************
> ldi r18,$FF
> out DDRC,r18 ; PORT C AS O/P PORT
>
> ;$15 IS THE ADDRESS OF THE PORTC
> cbi PORTC,0;$15,0;PORTC.0=A0=0 TO SELECT THE CS0 O/P OF THE U6
> cbi PORTC,1;$15,1;PORTC.1=A1=0
> cbi PORTC,2;$15,2;PORTC.2=A2=0
>
> cbi PORTC,7;$15,7;PORTC.7=A15=0,TO ENABLE THE U6(74HC138)
>
> ;********************************** PORTD
> ************************************
> ldi r18,$FF;
> out DDRD,r18
>
> ;$12 IS THE ADDRESS OF THE PORTD
>
> cbi $12,7;PORTD.7 = RD = 0
> cbi $12,6;PORTD.6 = WR = 0
>
;*******************************************************************************
> ldi r16,$60 ;r16 = 0101 1111 initialize stack POINTERS starting
address
> out SPL,r16 ;SPL = 0101 1111
>
> ldi r16,$02 ;r16 = 0000 0010
> out SPH,r16 ;SPH = 0000 0010
> $FF ;
> ldi r16,r16 = 1111 1111,DDRB=Data Direction Register B.
> out DDRB,r16;DDRB= 1111 1111,portB is now o/p port.
>
> ldi r16,$C3 ;r16 = 1100 0011
> out MCUCR,r16;MCUCR=1100 0011,alternate pins functions are enabled
> ;1 cycle wait state is inserted in the external Data SRAM access
> cycle
> ;disabling the sleep mode of the MCU.
> ;idle mode is selected as sleep mode.
> ;low level of INT1 generates an interrupts request
> ;rising edge of INT0 generates an interrupts request
>
> ;rcall InitLCD
> out PORTA,r30;
> out PORTA,r31
;********************************************************************************
> InitLCD: rcall Control_Write ;initialize LCD
> ldi r16,$30;r16=0011 0000
> st X,r16;Indirect address register x = R27 and R26
> ;R27=0000 0011 and R26=0000 0000
> rcall delay
>
> ldi r16,$30 ;30 is sending to X Register Three times.
> st X,r16
> rcall delay
>
> ldi r16,$30 ;r16=$30
> st X,r16 ; store the contents of address $30 in X register
>
> rcall ChkBusy
>
> rcall Control_Write
>
> ldi r16,$38;r16 = $38 // $38 is the address opf TIFR
> st X,r16 ; store the contents of address $38 in X register
> rcall ChkBusy
>
> ldi r16,$06 ; $06 is the address of DDRE
> st X,r16
> rcall ChkBusy
>
> ldi r16,$0C ;$0C is the address of UDR (UART data I/O register).
> st X,r16
> rcall ChkBusy
>
> ldi r16,$01 ;
> st X,r16
> rcall ChkBusy
>
> ldi r16,$02
> st X,r16
> rcall ChkBusy
>
> ret ; return to MAIN
>
> rcall POWER_ON_DISPLAY
;******************************************************************************
>
> ERASE: rcall EraseLine1 ;Erase both the lines
> rcall EraseLine2
>
> ;******************************* MAIN PROGRAM START
> ***************************
> POWER_ON_DISPLAY:
>
> GLOBE: rcall Line1
> rcall GLOBE1msg ;at power ON display GDA message
> rcall Display
> rcall Line2
> rcall GLOBE2msg
> rcall Display
> rcall onesecdelay
> rcall onesecdelay
>
> rcall Line1
> rcall GLOBE3msg
> rcall Display
> rcall Line2
> rcall GLOBE4msg
> rcall Display
> rcall onesecdelay
> rcall onesecdelay
> rcall POWER_ON_DISPLAY2
> ret;rcall Normal
> ;--------------------------------------
> START: ldi r16,$40 ; 40H = 1000 0000
> out GIMSK,r16;GIMSK=0100 0000,EXTERNAL INTERRUPT 0 pin is enabled
>
> ldi r16,$80 ;r16= 1000 0000
> out SREG,r16;Enable I-bit (7th) of SREG to activate interrupts
> sbi PORTD,TxD; making the port d as o/p port,
> ;set bit in I/O data register of PORTD
> sbi DDRD,TxD ;set bit in Data direction register of PORTB
> rcall line2
>
> ldi r25,$01 ;r25=0000 0001
> cbi PORTB,0 ;to make port B as i/p port,clear bit i/o register of
port B.
> rcall delay
> sbi PORTB,0 ;to make port B as o/p port set bit in i/o register
of port
> B.
> rcall buzzeron ;Beep once at power ON
> ;--------------------------------------
> forever: nop
> rjmp forever
>
> ;--------------** DELAY **-------------
>
> Delay: ldi r20,$0f ;some of the delay routines
> FirstLoop: ldi r21,$0f
> SecondLoop: dec r21
> cpi r21,0
> brne SecondLoop
> dec r20
> cpi r20,0
> brne FirstLoop
> ret
> ;--------------------------------------
> OneSecDelay: ldi r18,$0F
> LoopOneSec: rcall Delay
> dec r18
> cpi r18,0
> brne LoopOneSec
> ret
>
> ;------------** BUZZER **--------------
>
> BuzzerON: ldi r18,$5F ;routine for buzzer beep
> BuzLoop: sbi PORTB,2
> rcall BuzzerDelay
> cbi PORTB,2
> rcall BuzzerDelay
>
> dec r18
> cpi r18,0
> brne BuzLoop
> ret
> BuzzerDelay: ldi r20,$01
> BuzLoop1: ldi r21,$DF
> BuzLoop2: dec r21
> cpi r21,0
> brne BuzLoop2
> dec r20
> cpi r20,0
> brne BuzLoop1
> ret
> ;--------------------------------------
> KeyPad: rcall BuzzerON ;routine to display Key pressed
> rcall KeyMemory
> ld r19,X
> rjmp keycheck
> Back: reti
> KeyMemory: ldi XL,$00
> ldi XH,$11
> ret
>
> DisplayByte: ldi r22,$30
> mov r20,r19
> andi r20,$0F
> add r20,r22
> rcall Data_Write
> st Y,r20
> rcall ChkBusy
> ret
>
> Control_Write: ldi XL,$00
> ldi XH,$40
> ret
>
> Data_Write: ldi YL,$01
> ldi YH,$40
> ret
>
> Status_Read: ldi YL,$02
> ldi YH,$40
> ret
> ChkBusy: rcall Status_Read
> ChkBusyLoop: ld r24,Y
> andi r24,$80
> cpi r24,$80
> breq ChkBusyLoop
>
> ret
> ;--------------------------------------
> EraseLine1: rcall Line1
> rcall BLANKmsg
> rcall Display
> ret
> ;--------------------------------------
> EraseLine2: rcall Line2
> rcall BLANKmsg
> rcall Display
> ret
> ;--------------------------------------
> Line1: rcall Control_Write ;initialize Line1
> ldi r16,$80
> st X,r16
> rcall ChkBusy
> ret
> ;--------------------------------------
> Line2: rcall Control_Write ;initialize Line2
> ldi r16,$C0
> st X,r16
> rcall ChkBusy
> ret
> ;--------------------------------------
> Display: lpm
> mov r16,r0
> cpi r16,$FF
> breq EndDisplay
> adiw r30,1
> rcall Data_Write
> st Y,r16
> rcall ChkBusy
> rjmp Display
>
> EndDisplay: ret
> ;--------------------------------------
>
> POWER_ON_DISPLAY2:
>
> BLANKmsg: ldi r31,high(BLANK*2)
> ldi r30,low(BLANK*2)
>
> GLOBE1msg: ldi r31,high(GLOBE1*2) ;name of the messages
> ldi r30,low(GLOBE1*2) ;used in the program
> rcall delay
>
> GLOBE3msg: ldi r31,high(GLOBE3*2)
> ldi r30,low(GLOBE3*2)
> rcall delay
>
> NORMAL1msg: ldi r31,high(NORMAL1*2)
> ldi r30,low(NORMAL1*2)
> rcall delay
>
> FNCT1msg: ldi r31,high(FNCT1*2)
> ldi r30,low(FNCT1*2)
> rcall delay
> GLOBE2msg: ldi r31,high(GLOBE2*2)
> ldi r30,low(GLOBE2*2)
> rcall delay
>
> GLOBE4msg: ldi r31,high(GLOBE4*2)
> ldi r30,low(GLOBE4*2)
> rcall delay
>
> NORMAL2msg: ldi r31,high(NORMAL2*2)
> ldi r30,low(NORMAL2*2)
> rcall delay
>
> FNCT2msg: ldi r31,high(FNCT2*2)
> ldi r30,low(FNCT2*2)
>
> .cseg
>
> BLANK: .db " "
>
> GLOBE1:.db "GLOBE DETECTIVE"
> GLOBE2:.db "AGENCY (P) LTD. "
>
> GLOBE3:.db " ELECTRONIC "
> GLOBE4:.db " DIVISION "
>
> NORMAL1: .db "ADDRESSABLE PUBLIC"
> NORMAL2: .db " ADDRESS SYSTEM "
>
> ret
>
> ;*****************************************************************
>
> FNCT1: .db "SELECT ZONE no. "
> FNCT2: .db "and Press Enter "
> ;--------------------------------------
> Keycheck: ldi r22,$30
> mov r20,r19 ;routine for selecting a zone
> andi r20,$0F
> add r20,r22
>
> cpi r25,$01
> breq Firstkey
> cpi r25,$02
> breq Secondkey
> cpi r25,$03
> breq Thirdkey
> cpi r25,$04
> breq Fourthkey
>
> Firstkey: cpi r20,$3D
> brne Wrongkey1
> ldi r25,$02
>
> rcall Line1
> rcall FNCT1msg
> rcall Display
> rcall Line2
> rcall FNCT2msg
> rcall Display
> rjmp back
>
> Secondkey: cpi r20,$3B
> brge Wrongkey1
> cpi r20,$3A
> breq AllCall1
> ldi r25,$03
> mov r1,r19
> rcall Eraseline2
> rcall line2
> rcall displaybyte
> rjmp back
>
> Allcall1: ldi r25,$01
> mov r1,r19
> mov r2,r19
> cbi PORTB,0
> rjmp allcall
>
> Thirdkey: cpi r20,$3E
> breq Delete1
> cpi r20,$3A
> brge Wrongkey1
> ldi r25,$04
> mov r2,r19
> rcall displaybyte
> rjmp back
> Wrongkey1: rjmp Wrongkey
> Fourthkey: cpi r20,$3E
> breq Delete2
>
> KeyEnter: cpi r20,$3F
> breq Eenter
> rjmp Wrongkey1
>
> Eenter: ldi r25,01
> rcall Line1
> rcall Entermsg
> rcall Display
>
> rcall Eraseline2
> rcall Line2
>
> mov r19,r1
> rcall displaybyte
> mov r19,r2
> rcall displaybyte
>
> SelectZone: ldi r19,$02
> mov r5,r19
> rcall putchar
>
> mov r5,r1
> rcall putchar
> mov r5,r2
> rcall putchar
>
> ldi r19,$03
> mov r5,r19
> rcall putchar
>
> cbi PORTB,0
> rjmp back
> ;--------------------------------------
> Entermsg: ldi r31,high(enter*2)
> ldi r30,low(enter*2)
> ret
>
> Enter: .db " ZONE SELECTED "
> ;--------------------------------------
> Delete1: rcall Normal
> clr r1
> ldi r25,$01
> rjmp back
>
> Delete2: rcall Eraseline2
> rcall Line2
>
> mov r19,r1
> rcall displaybyte
> clr r2
> ldi r25,$03
> rjmp back
> ;--------------------------------------
> Wrongkey: cpi r20,$3C ;routine for wrong key press
> breq Clearkey
>
> rcall buzzeron
> rcall buzzeron
> rcall buzzeron
> rcall buzzeron
> rcall buzzeron
> rcall buzzeron
>
> rcall Line1
> rcall wrong1msg
> rcall Display
> rcall Line2
> rcall wrong2msg
> rcall Display
> ldi r25,$01
> clr r1
> clr r2
> rcall onesecdelay
> rcall onesecdelay
>
> rcall Normal
> rjmp back
> ;--------------------------------------
> Wrong1msg: ldi r31,high(wrong1*2)
> ldi r30,low(wrong1*2)
> ret
>
> Wrong1: .db "WRONG KEY PRESS "
> ;--------------------------------------
> Wrong2msg: ldi r31,high(wrong2*2)
> ldi r30,low(wrong2*2)
> ret
>
> Wrong2: .db " TRY AGAIN "
> ;--------------------------------------
> Clearkey: rcall buzzeron
> rcall buzzeron ;routine to clear all zones
> rcall buzzeron
> rcall delay
> rcall buzzeron
> rcall buzzeron
> rcall buzzeron
>
> rcall Line1
> rcall Clear1msg
> rcall Display
> rcall Line2
> rcall Clear2msg
> rcall Display
>
> ldi r25,$01
> clr r1
> clr r2
>
> DeselectZone: ldi r19,$02
> mov r5,r19
> rcall putchar
> mov r5,r1
> rcall putchar
> mov r5,r2
> rcall putchar
> ldi r19,$03
> mov r5,r19
> rcall putchar
> rcall onesecdelay
> rcall onesecdelay
> rcall Normal
> sbi PORTB,0
> rjmp back
> ;--------------------------------------
> Clear1msg: ldi r31,high(clear1*2)
> ldi r30,low(clear1*2)
> ret
>
> Clear1: .db "ZONE IS CLEARED "
>
> Clear2msg: ldi r31,high(clear2*2)
> ldi r30,low(clear2*2)
> ret
>
> Clear2: .db " "
>
> ;--------------------------------------
>
> AllCall: rcall buzzeron ;routine for ALL CALL
> rcall buzzeron ;to select all zones
> rcall delay
> rcall buzzeron
> rcall buzzeron
> rcall delay
> rcall buzzeron
> rcall buzzeron
>
> rcall Line1
> rcall cmd1msg
> rcall Display
> rcall Line2
> rcall cmd2msg
> rcall Display
>
> ldi r25,$01
>
> AllZones: ldi r19,$02
> mov r5,r19
> rcall putchar
> mov r5,r1
> rcall putchar
> mov r5,r2
> rcall putchar
> ldi r19,$03
> mov r5,r19
> rcall putchar
>
> rjmp back
> ;--------------------------------------
> CMD1msg: ldi r31,high(cmd1*2)
> ldi r30,low(cmd1*2)
> ret
>
> CMD1: .db "All CALL"
>
> CMD2msg: ldi r31,high(cmd2*2)
> ldi r30,low(cmd2*2)
> ret
>
> CMD2:.db "SELECTED"
> ;--------------------------------------
> ;****************************** PROGRAM END
> ***********************************
> On 6/12/08, Md. Istiaq Mahbub (Tarango) wrote:
> >
> >
> > Hi,
> >     Its a simple problem, just connect the
protective relay
> > with relay coil and collector of npn transistor then see what happens?
> > I think then it will do work.
> >
> > [Non-text portions of this message have been removed]
> >
> >
> > --
> Nilkantha Singha
>
> ----------
>
> name="AT90S8515"/> ----------
>
> ;PCB : GE-90-SP
> ;System : GE-1007PA
> ;Project: PA Console for two way PA system
> ;Processor: 90S8515
> ;--------------------------------------
> ;.include "8515def.asm"
> .include "8515def.inc"
>
> .CSEG ;CODE SEGMENT
> .org $0000
> rjmp Main ;**********+++++++++++++++******************>>>>>>>
>
> .org $001
> rjmp KeyPad
> ;--------------------------------------
> .equ TxD =1 ;Tx = Transmitter
> .def bitcnt =R23 ;counter for bit transmission
> .def temp =R17
> .def Txbyte =R5 ;Transmit data
> .equ sb =1 ;stop bit
>
> UART_delay: ldi temp,59 ;initialize UART
> UART_delay1: dec temp
> brne UART_delay1
> ret
>
> ;-------------- TRANSMIT --------------
>
> putchar: ldi bitcnt,9+sb ;routine for transmit data
> com Txbyte
> sec
> putchar0: brcc putchar1
> cbi PORTD,TxD
> rjmp putchar2
> putchar1: sbi PORTD,TxD
> nop
> putchar2: rcall UART_delay
> rcall UART_delay
> lsr Txbyte
> dec bitcnt
> brne putchar0
> ret
> ;--------------------------------------
> NORMAL: rcall Line1 ;Display
> rcall NORMAL1msg ;public address talk back system
> rcall Display
> rcall Line2
> rcall NORMAL2msg
> rcall Display
> ret
>
> ;******************************* STARTING OF THE PROGRAM
**********************
>
> Main: ;ldi Loads an 8 bit constant directly to register 16 to 31.
> ldi r18,$FF ;**************************** PORTA *************
> out DDRA,r18;making port A as o/p port
>
>
>
> ;********************************* PORTC
********************************************
> ldi r18,$FF
> out DDRC,r18 ; PORT C AS O/P PORT
>
> ;$15 IS THE ADDRESS OF THE PORTC
> cbi PORTC,0;$15,0;PORTC.0=A0=0 TO SELECT THE CS0 O/P OF THE U6
> cbi PORTC,1;$15,1;PORTC.1=A1=0
> cbi PORTC,2;$15,2;PORTC.2=A2=0
>
> cbi PORTC,7;$15,7;PORTC.7=A15=0,TO ENABLE THE U6(74HC138)
>
> ;********************************** PORTD
************************************
>
>
> ldi r18,$FF;
> out DDRD,r18
>
> ;$12 IS THE ADDRESS OF THE PORTD
>
> cbi $12,7;PORTD.7 = RD = 0
> cbi $12,6;PORTD.6 = WR = 0
>
>
>
;*******************************************************************************

>
> ldi r16,$60 ;r16 = 0101 1111 initialize stack POINTERS starting
address
> out SPL,r16 ;SPL = 0101 1111
>
> ldi r16,$02 ;r16 = 0000 0010
> out SPH,r16 ;SPH = 0000 0010
>
> ldi r16,$FF ;r16 = 1111 1111,DDRB=Data Direction Register B.
> out DDRB,r16;DDRB= 1111 1111,portB is now o/p port.
>
> ldi r16,$C3 ;r16 = 1100 0011
> out MCUCR,r16;MCUCR=1100 0011,alternate pins functions are enabled
> ;1 cycle wait state is inserted in the external Data SRAM
access cycle
> ;disabling the sleep mode of the MCU.
> ;idle mode is selected as sleep mode.
> ;low level of INT1 generates an interrupts request
> ;rising edge of INT0 generates an interrupts request
>
> ;rcall InitLCD
> out PORTA,r30;
> out PORTA,r31
>
>
;********************************************************************************

>
> InitLCD: rcall Control_Write ;initialize LCD
> ldi r16,$30;r16=0011 0000
> st X,r16;Indirect address register x = R27 and R26
> ;R27=0000 0011 and R26=0000 0000
> rcall delay
>
> ldi r16,$30 ;30 is sending to X Register Three times.
> st X,r16
> rcall delay
>
> ldi r16,$30 ;r16=$30
> st X,r16 ; store the contents of address $30 in X register
>
> rcall ChkBusy
>
> rcall Control_Write
>
> ldi r16,$38;r16 = $38 // $38 is the address opf TIFR
> st X,r16 ; store the contents of address $38 in X register
> rcall ChkBusy
>
> ldi r16,$06 ; $06 is the address of DDRE
> st X,r16
> rcall ChkBusy
>
> ldi r16,$0C ;$0C is the address of UDR (UART data I/O register).
> st X,r16
> rcall ChkBusy
>
> ldi r16,$01 ;
> st X,r16
> rcall ChkBusy
>
> ldi r16,$02
> st X,r16
> rcall ChkBusy
>
> ret ; return to MAIN
>
> rcall POWER_ON_DISPLAY
;******************************************************************************
>
> ERASE: rcall EraseLine1 ;Erase both the lines
> rcall EraseLine2
>
> ;******************************* MAIN PROGRAM START
***************************
> POWER_ON_DISPLAY:
>
> GLOBE: rcall Line1
> rcall GLOBE1msg ;at power ON display GDA message
> rcall Display
> rcall Line2
> rcall GLOBE2msg
> rcall Display
> rcall onesecdelay
> rcall onesecdelay
>
> rcall Line1
> rcall GLOBE3msg
> rcall Display
> rcall Line2
> rcall GLOBE4msg
> rcall Display
> rcall onesecdelay
> rcall onesecdelay
> rcall POWER_ON_DISPLAY2
> ret;rcall Normal
> ;--------------------------------------
> START: ldi r16,$40 ; 40H = 1000 0000
> out GIMSK,r16;GIMSK=0100 0000,EXTERNAL INTERRUPT 0 pin is enabled
>
> ldi r16,$80 ;r16= 1000 0000
> out SREG,r16;Enable I-bit (7th) of SREG to activate interrupts
>
>
> sbi PORTD,TxD; making the port d as o/p port,
> ;set bit in I/O data register of PORTD
> sbi DDRD,TxD ;set bit in Data direction register of PORTB
> rcall line2
>
> ldi r25,$01 ;r25=0000 0001
> cbi PORTB,0 ;to make port B as i/p port,clear bit i/o register of
port B.
> rcall delay
> sbi PORTB,0 ;to make port B as o/p port set bit in i/o register
of port B.
> rcall buzzeron ;Beep once at power ON
> ;--------------------------------------
> forever: nop
> rjmp forever
>
> ;--------------** DELAY **-------------
>
> Delay: ldi r20,$0f ;some of the delay routines
> FirstLoop: ldi r21,$0f
> SecondLoop: dec r21
> cpi r21,0
> brne SecondLoop
> dec r20
> cpi r20,0
> brne FirstLoop
> ret
> ;--------------------------------------
> OneSecDelay: ldi r18,$0F
> LoopOneSec: rcall Delay
> dec r18
> cpi r18,0
> brne LoopOneSec
> ret
>
> ;------------** BUZZER **--------------
>
> BuzzerON: ldi r18,$5F ;routine for buzzer beep
> BuzLoop: sbi PORTB,2
> rcall BuzzerDelay
> cbi PORTB,2
> rcall BuzzerDelay
>
> dec r18
> cpi r18,0
> brne BuzLoop
> ret
> BuzzerDelay: ldi r20,$01
> BuzLoop1: ldi r21,$DF
> BuzLoop2: dec r21
> cpi r21,0
> brne BuzLoop2
> dec r20
> cpi r20,0
> brne BuzLoop1
> ret
> ;--------------------------------------
> KeyPad: rcall BuzzerON ;routine to display Key pressed
> rcall KeyMemory
> ld r19,X
> rjmp keycheck
> Back: reti
> KeyMemory: ldi XL,$00
> ldi XH,$11
> ret
>
> DisplayByte: ldi r22,$30
> mov r20,r19
> andi r20,$0F
> add r20,r22
> rcall Data_Write
> st Y,r20
> rcall ChkBusy
> ret
>
> Control_Write: ldi XL,$00
> ldi XH,$40
> ret
>
> Data_Write: ldi YL,$01
> ldi YH,$40
> ret
>
> Status_Read: ldi YL,$02
> ldi YH,$40
> ret
> ChkBusy: rcall Status_Read
> ChkBusyLoop: ld r24,Y
> andi r24,$80
> cpi r24,$80
> breq ChkBusyLoop
>
> ret
> ;--------------------------------------
> EraseLine1: rcall Line1
> rcall BLANKmsg
> rcall Display
> ret
> ;--------------------------------------
> EraseLine2: rcall Line2
> rcall BLANKmsg
> rcall Display
> ret
> ;--------------------------------------
> Line1: rcall Control_Write ;initialize Line1
> ldi r16,$80
> st X,r16
> rcall ChkBusy
> ret
> ;--------------------------------------
> Line2: rcall Control_Write ;initialize Line2
> ldi r16,$C0
> st X,r16
> rcall ChkBusy
> ret
> ;--------------------------------------
> Display: lpm
> mov r16,r0
> cpi r16,$FF
> breq EndDisplay
> adiw r30,1
> rcall Data_Write
> st Y,r16
> rcall ChkBusy
> rjmp Display
>
> EndDisplay: ret
> ;--------------------------------------
>
> POWER_ON_DISPLAY2:
>
> BLANKmsg: ldi r31,high(BLANK*2)
> ldi r30,low(BLANK*2)
>
> GLOBE1msg: ldi r31,high(GLOBE1*2) ;name of the messages
> ldi r30,low(GLOBE1*2) ;used in the program
> rcall delay
>
> GLOBE3msg: ldi r31,high(GLOBE3*2)
> ldi r30,low(GLOBE3*2)
> rcall delay
>
> NORMAL1msg: ldi r31,high(NORMAL1*2)
> ldi r30,low(NORMAL1*2)
> rcall delay
>
> FNCT1msg: ldi r31,high(FNCT1*2)
> ldi r30,low(FNCT1*2)
> rcall delay
> GLOBE2msg: ldi r31,high(GLOBE2*2)
> ldi r30,low(GLOBE2*2)
> rcall delay
>
> GLOBE4msg: ldi r31,high(GLOBE4*2)
> ldi r30,low(GLOBE4*2)
> rcall delay
>
> NORMAL2msg: ldi r31,high(NORMAL2*2)
> ldi r30,low(NORMAL2*2)
> rcall delay
>
> FNCT2msg: ldi r31,high(FNCT2*2)
> ldi r30,low(FNCT2*2)
>
> .cseg
>
> BLANK: .db " "
>
> GLOBE1:.db "GLOBE DETECTIVE"
> GLOBE2:.db "AGENCY (P) LTD. "
>
> GLOBE3:.db " ELECTRONIC "
> GLOBE4:.db " DIVISION "
>
> NORMAL1: .db "ADDRESSABLE PUBLIC"
> NORMAL2: .db " ADDRESS SYSTEM "
>
> ret
>
> ;*****************************************************************
>
> FNCT1: .db "SELECT ZONE no. "
> FNCT2: .db "and Press Enter "
> ;--------------------------------------
> Keycheck: ldi r22,$30
> mov r20,r19 ;routine for selecting a zone
> andi r20,$0F
> add r20,r22
>
> cpi r25,$01
> breq Firstkey
> cpi r25,$02
> breq Secondkey
> cpi r25,$03
> breq Thirdkey
> cpi r25,$04
> breq Fourthkey
>
> Firstkey: cpi r20,$3D
> brne Wrongkey1
> ldi r25,$02
>
> rcall Line1
> rcall FNCT1msg
> rcall Display
> rcall Line2
> rcall FNCT2msg
> rcall Display
> rjmp back
>
> Secondkey: cpi r20,$3B
> brge Wrongkey1
> cpi r20,$3A
> breq AllCall1
> ldi r25,$03
> mov r1,r19
> rcall Eraseline2
> rcall line2
> rcall displaybyte
> rjmp back
>
> Allcall1: ldi r25,$01
> mov r1,r19
> mov r2,r19
> cbi PORTB,0
> rjmp allcall
>
> Thirdkey: cpi r20,$3E
> breq Delete1
> cpi r20,$3A
> brge Wrongkey1
> ldi r25,$04
> mov r2,r19
> rcall displaybyte
> rjmp back
> Wrongkey1: rjmp Wrongkey
> Fourthkey: cpi r20,$3E
> breq Delete2
>
> KeyEnter: cpi r20,$3F
> breq Eenter
> rjmp Wrongkey1
>
> Eenter: ldi r25,01
> rcall Line1
> rcall Entermsg
> rcall Display
>
> rcall Eraseline2
> rcall Line2
>
> mov r19,r1
> rcall displaybyte
> mov r19,r2
> rcall displaybyte
>
> SelectZone: ldi r19,$02
> mov r5,r19
> rcall putchar
>
> mov r5,r1
> rcall putchar
> mov r5,r2
> rcall putchar
>
> ldi r19,$03
> mov r5,r19
> rcall putchar
>
> cbi PORTB,0
> rjmp back
> ;--------------------------------------
> Entermsg: ldi r31,high(enter*2)
> ldi r30,low(enter*2)
> ret
>
> Enter: .db " ZONE SELECTED "
> ;--------------------------------------
> Delete1: rcall Normal
> clr r1
> ldi r25,$01
> rjmp back
>
> Delete2: rcall Eraseline2
> rcall Line2
>
> mov r19,r1
> rcall displaybyte
> clr r2
> ldi r25,$03
> rjmp back
> ;--------------------------------------
> Wrongkey: cpi r20,$3C ;routine for wrong key press
> breq Clearkey
>
> rcall buzzeron
> rcall buzzeron
> rcall buzzeron
> rcall buzzeron
> rcall buzzeron
> rcall buzzeron
>
> rcall Line1
> rcall wrong1msg
> rcall Display
> rcall Line2
> rcall wrong2msg
> rcall Display
> ldi r25,$01
> clr r1
> clr r2
> rcall onesecdelay
> rcall onesecdelay
>
> rcall Normal
> rjmp back
> ;--------------------------------------
> Wrong1msg: ldi r31,high(wrong1*2)
> ldi r30,low(wrong1*2)
> ret
>
> Wrong1: .db "WRONG KEY PRESS "
> ;--------------------------------------
> Wrong2msg: ldi r31,high(wrong2*2)
> ldi r30,low(wrong2*2)
> ret
>
> Wrong2: .db " TRY AGAIN "
> ;--------------------------------------
> Clearkey: rcall buzzeron
> rcall buzzeron ;routine to clear all zones
> rcall buzzeron
> rcall delay
> rcall buzzeron
> rcall buzzeron
> rcall buzzeron
>
> rcall Line1
> rcall Clear1msg
> rcall Display
> rcall Line2
> rcall Clear2msg
> rcall Display
>
> ldi r25,$01
> clr r1
> clr r2
>
> DeselectZone: ldi r19,$02
> mov r5,r19
> rcall putchar
> mov r5,r1
> rcall putchar
> mov r5,r2
> rcall putchar
> ldi r19,$03
> mov r5,r19
> rcall putchar
> rcall onesecdelay
> rcall onesecdelay
> rcall Normal
> sbi PORTB,0
> rjmp back
> ;--------------------------------------
> Clear1msg: ldi r31,high(clear1*2)
> ldi r30,low(clear1*2)
> ret
>
> Clear1: .db "ZONE IS CLEARED "
>
> Clear2msg: ldi r31,high(clear2*2)
> ldi r30,low(clear2*2)
> ret
>
> Clear2: .db " "
>
> ;--------------------------------------
>
> AllCall: rcall buzzeron ;routine for ALL CALL
> rcall buzzeron ;to select all zones
> rcall delay
> rcall buzzeron
> rcall buzzeron
> rcall delay
> rcall buzzeron
> rcall buzzeron
>
> rcall Line1
> rcall cmd1msg
> rcall Display
> rcall Line2
> rcall cmd2msg
> rcall Display
>
> ldi r25,$01
>
> AllZones: ldi r19,$02
> mov r5,r19
> rcall putchar
> mov r5,r1
> rcall putchar
> mov r5,r2
> rcall putchar
> ldi r19,$03
> mov r5,r19
> rcall putchar
>
> rjmp back
> ;--------------------------------------
> CMD1msg: ldi r31,high(cmd1*2)
> ldi r30,low(cmd1*2)
> ret
>
> CMD1: .db "All CALL"
>
> CMD2msg: ldi r31,high(cmd2*2)
> ldi r30,low(cmd2*2)
> ret
>
> CMD2:.db "SELECTED"
> ;--------------------------------------
> ;****************************** PROGRAM END
***********************************
>
> ----------
>
>
> 2.1.17
> AT90S8515
> C:\Documents and
Settings\administrator\Desktop\GE1007M

>
> D:\Program Files\AvrAssembler2\Appnotes
>

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm

>
> D:\Program Files\AvrAssembler2\Appnotes\8515def.inc
>

>
> C:\Documents and
Settings\administrator\Desktop\GE1007M\GE1007M.obj

>

>
> C:\Documents and
Settings\administrator\Desktop\GE1007M\GE1007M.hex

>

>
> C:\Documents and
Settings\administrator\Desktop\GE1007M\GE1007M.map

>

>
>
C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
56

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
241

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
24

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
25

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
31

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
34

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
37

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
39

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
46

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
288

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
328

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
300

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
294

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
345

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
110

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
259

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
202

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
270

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
157

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
153

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
278

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
283

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
159

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
320

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
337

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
212

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
324

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
341

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
313

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
179

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
221

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
197

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
203

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
204

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
213

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
222

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
231

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
232

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
233

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
246

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
374

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
245

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
250

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
263

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
267

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
271

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
315

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
310

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
356

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
358

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
361

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
364

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
332

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
371

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
359

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
362

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
365

> C:\Documents and
Settings\administrator\Desktop\GE1007M\TX.asm
349