Module #6: Alert Mode Code

; ALERT MENU (MODULE #6)

$NOMOD51 ; omit assembler micro definitions

$Include(reg515.inc) ; define 515 micro

Name ALERT_MENU

PUBLIC ALERTMENU

EXTRN CODE (KPD,LCDOUT,ALERT,LCDINIT,MAIN_LOOP)

ALRT SEGMENT CODE

RSEG ALRT ; switch to this code segment

USING 0 ; use register_bank 0

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

ALERTMENU:

MOV A,#1AH ;CLEARS LCD SCREEN

CALL LCDOUT ;

MOV B,#4

CLR A

MOV DPTR,#ASCII ;MOVES DATA TABLE INTO DPTR

MOVC A,@A+DPTR ;MOVES DPTR INTO ACC

MOV R0,#15 ;MOVES 15 INTO REGISTER 0

ALERTMENU2:

JZ LOOPEXIT

CALL LCDOUT

INC DPTR ;INCREMENTS THE MEMORY LOCATION IN DPTR TO

;THE NEXT LETTER TO DISPLAY

MOVX A,@DPTR

ALERT_LOOP:

DJNZ R0,ALERTMENU2 ;LOOPS UNTIL R0 IS 0 IN ORDER TO DISPLAY ALL THE ;TEXT SAVED IN ACC

MOV @R1,A ;STORE ID# IN R0

CALL KPD

DJNZ B,KPD_LOOP ;WHEN THE LAST ITEM IS REACHED (B=0)

CJNE A,#45H,RETURN ;DOUBLE CHECK KEYPAD FOR E BEFORE DISPLAYING ;EACH ITEM AGAIN

SJMP ENTER ;OTHERWISE WAIT FOR KEY

RETURN:

CJNE A,#42H,ALERTMENU ;DOUBLE CHECKS THE KEYPAD BEFORE RETURNING

SJMP BACK ;TO THE TOP OF THE LIST (B = BACK TO MAIN MENU)

;WAIT FOR KEYPAD ENTRY, ENTER OR NEXT ITEM

;IF ENTER: ADD 1 TO A (PUSH A FIRST TO REOPEN SAVED VALUE)

;IF NEXT: ADD 2 TO A TO MOVE ONTO THE NEXT ITEM NAME

KPD_LOOP:

CJNE A,#42H,COMMANDS ;B = BACK TO MAIN MENU

SJMP BACK

BACK:

;IF B IS PRESSED, THE LCD WILL

MOV A,#1AH ;CLEAR THE SCREEN AND

CALL LCDOUT ;

JMP MAIN_LOOP ;DISPLAY THE MAIN MENU AGAIN

COMMANDS:

CJNE A,#46H,ENTER ;F = NEXT

SJMP NEXT

ENTER:

CJNE A,#45H,WAIT ;E = ENTER

MOV A,#0AH ;SKIPS TO THE NEXT LINE ON THE LCD

CALL LCDOUT

MOV DPTR,#TRANS ;MOVES "TRANSMITTING..." INTO DPTR

MOV A,#0DH ;MOVES CURSOR TO BEGINNING OF LINE 2

CALL LCDOUT

TRANSMITTING: ;THIS CODE DISPLAYS "Transmitting..."

;UNDER THE ITEM NAME WHEN THE ALERT

CLR A ;BUTTON IS PRESSED

MOVC A,@A+DPTR

JZ TRANSEXIT

CALL LCDOUT

INC DPTR

CALL TRANSMITTING ;LOOP UNTIL ALL LETTERS ARE DISPLAYED

CALL ALERT

MOV A,#1AH ;CLEAR LCD

CALL LCDOUT ;

JMP MAIN_LOOP ;AFTER TRANSMISSION, THE LCD WILL

;DIPLAY THE MAIN MENU AGAIN

TRANSEXIT:

RET

NEXT:

MOV A,#1AH ;CLEARS LCD FOR NEXT

CALL LCDOUT ;ITEM TO BE DISPLAYED

INC DPTR ;MOVES THE DPTR TO THE NEXT LINE ON THE ASCII ;TABLE

MOVX A,@DPTR ;STORES THE NEXT LINE IN ACC

MOV R0,#15

JNZ ALERTMENU2

SJMP ALERTMENU

WAIT:

CALL KPD

JMP KPD_LOOP

LOOPEXIT:

RET

ASCII:

;PUT ASCII TABLE HERE

;first item name(in ASCII),ID#

;DB Ph,Hh,Oh,Nh,Eh,sph,sph,sph,sph,sph,sph,sph,sph,sph,sph,IDh

;second item

;db , , , , , , , , , , , , , , , ,ID2h

db 50h,48h,4Fh,4Eh,45h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,33h ;PHONE

db 52h,45h,4Dh,4Fh,54h,45h,20h,20h,20h,20h,20h,20h,20h,20h,20h,55h ;REMOTE

db 4Bh,45h,59h,53h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,0FFh ;KEYS

db 48h,45h,41h,44h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,39h ;HEAD

TRANS:

DB "Transmitting....",0 ;Displays "Transmitting...." when alert

;button is pressed

END