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 )