Jump to content

Welcome to Geeks to Go - Register now for FREE

Geeks To Go is a helpful hub, where thousands of volunteer geeks quickly serve friendly answers and support. Check out the forums and get free advice from the experts. Register now to gain access to all of our features, it's FREE and only takes one minute. Once registered and logged in, you will be able to create topics, post replies to existing threads, give reputation to your fellow members, get your own private messenger, post status updates, manage your profile and so much more.

Create Account How it Works
Photo

scrolling dot matrix digital display


  • Please log in to reply

#1
Uchenna Oscar Duru

Uchenna Oscar Duru

    New Member

  • Member
  • Pip
  • 1 posts
I am working on a project. This project is expected to display and scroll messages that I send through serial port from my PC, using AT89C52 micro-controller.
I am through with the hardware construction which includes an external EEPROM (AT24C16B) and I am faced with a big challenge in writing a suitable program.
The program is expected to do the following

  • Power up Initialize variable. Enable serial interrupt.
  • Reading EEPROM Sending value of EEPROM to port 2 and increment a variable and send it on port 1. During this process if serial interrupt occur a flag name F0 will high in SERIAL ISR. If flag is high it off the display
  • If serial interrupt occur it start save the data on ram almost 200 characters can be saved it wait till end of message come. End of message has null character. Now controller will write the pick data that come from computer according to that pick 6 bytes from ROM fonts and save it on EEPROM. When it’s completed, F0 flag become low now it will enter in display mode again with new saved message.
  • the Controller is switching between states in serial interrupt it save data to EEPROM in display mode and it display saved data. Data is broken into nibbles, which come from pc, to see in what range it lie (big, small letters or symbols).

I wrote a program in ASM code, shown below, but it did not run. Can someone please help me verify if my program is correct and help me to correct the errors if any? You are free to help me develop a new program if necessary. I will gladly appreciate it.

;*********************************************************************************************
; THIS PROGRAM WILL SCROLL THE PC DATA ON A 4 PIECES OF DOT MATRIX OF 8*8
;**********************************************************************************************

BUFFER EQU 30H
FADDR EQU 0A0H ; FIXED ADDRESS FOR AT24CXX EEPROMS FAMILY
BLOCK1 EQU 0H ; PROGRAMMABLE MEMORY BLOCK ADDRESS. THERE ARE EIGHT 256 WORD-BLOCK OF MEMORY
BLOCK2 EQU 1H
BLOCK3 EQU 2H
BLOCK4 EQU 3H
BLOCK5 EQU 4H
BLOCK6 EQU 5H
BLOCK7 EQU 6H
BLOCK8 EQU 7H

SCL BIT P3.6 ; SERIAL CLOCK INPUT
SDA BIT P3.7 ; SERIAL DATA

; MEMORY ALOCATION TO INTERRUPT VECTOR TABLE
; *******************************************

ORG 0000H ; RESET INTERRUPT
LJMP MAIN ; BY-PASS INTERRUPT VECTOR TABLE

ORG 0023H ; SERIAL COM RI INTERRUPT VECTOR TABLE
LJMP SERIAL ; JUMP TO SERIAL PORT INTERRUPT SERVICE ROUTINE (ISR)

; THE MAIN PROGRAM
; ******************
ORG 0030H ; AFTER VECTOR TABLE SPACE
MAIN: MOV R0,#0FFH
ZERO: MOV @R0,#00H ; CLEAR ALL RAM LOCATIONS
DJNZ R0,ZERO
MOV TMOD,#20H ; TIMER 1, MODE 2
MOV SCON,#50H ; SERIAL-CONTROL MODE 1 AND RECEPTION ENABLE
MOV TH1,#0FDH ; 9600 BAUD RATE
MOV TL1,#0FDH
MOV IE,#90H ; ENABLE SERIAL INTERRUPT
MOV R1,#37H
MOV R6,#00H
MOV 31H,#00H
MOV R7,#BLOCK1
SETB TR1 ; START TIMER 1
CLR F0 ; ENTER DISPLAY MODE WITH NEW SAVED MESSAGE
BACK: JB F0,$
CHECK: CALL READING
CALL INITIALIZE
SETB C
CALL DELAY
JMP BACK

; SERIAL PORT ISR (INTERUPT SERVICE ROUITINE)
; ***********************************************
ORG 100H
SERIAL: MOV A,SBUF ; SAVE DATA IN ACCUMULATOR
MOV @R1,A ; SAVE IT AT MEMORY LOCATION
JNZ NEXT ; CHECK FOR END OF STRING
MOV R0,#37H ; RESET VALUE
MOV R1,#37H
MOV R7,#BLOCK1
CALL STOP
CALL INITIALIZE
CALL DELAY_5ms
CALL STOP
CALL WRITE_32 ; 32 BYTE WRITE TO EEPROM HAVING VALUE 80H
CALL WRITE_DATA ; WRITE WHOLE STRING TO EEPROM
CLR RI ; CLEAR RECIEVE INTERRUPT TO PERMIT DATA RECEPTION
CLR F0 ; PERMIT TO ENTER DISPLAY MODE
RETI
NEXT: INC R1 ; NEXT LOCATION FOR BYTE (CHARACTER) COMING FROM PC AND SAVED IN ACCUMULATOR
CLR RI ; PERMIT DATA RECEPTION
SETB F0 ; OFF DISPLAY MODE
RETI

;********************************************************************************************
; SECTION A: THIS INVOLVES THE WRITING OF DATA
; FROM THE PC TO THE RAM OF AT89C52 AND
; FROM THE RAM LOCATION TO THE AT24C16B EEPROM (SAVING DATA)
; *******************************************************************************************

; WRITE 32 BYTES SEQUENTIALY HAVING VALUE 80H AT THE START
; **********************************************************
WRITE_32: MOV BUFFER,#80H ; WRITE VALUE 80H
MOV B,#14H ; RETRY COUNTER IN CASE OF FAILURE
MOV 31H,#00H ; SET UP WORD ADDRESS
MOV R4,#02H ; COUNTER TO MAKE SURE ONLY 32BYTE IS WRITTEN
X52: MOV A,R7
CALL WRITE_BYTE ; WRITE BYTE
CALL DELAY_5ms ; ALLOW EEPROM WRITE TIME CYCLE
JNC X53
DJNZ B,X52 ; OK OR NOT OK
SETB C ; SET CARRY TO ABORT
JMP X54
X53: INC 31H
MOV A,31H
CJNE A,#10H,X52 ; MONITOR THE PAGE WRITE TO THE AT24C16B ON-CHIP PAGE BUFFER WHICH IS LIMITED TO 16 DATA BYTE PER PAGE-WRITE.
;THIS IS TO AVOID THE INTERNAL ADDRESS ROLL OVER TO THE BEGINNING OF THE CURRENT PAGE (OVERWRITING DATA PREVIOUSLY STORED).
CLR C
CALL STOP ; STOP CONDITION. THIS INITIATES THE INTERNAL WRITE CYCLE.
DJNZ R4,X52 ; THIS WILL INITIATE ACKNOWLEDGE POLLING.
X54: RET

; THIS WILL WRITE DATA TO THE EEPROM
; ************************************
WRITE_DATA: MOV R0,#37H ; GET CHARACTER FROM RAM LOCATION TO WRITE AT EEPROM
BACKWARD: MOV A,@R0 ; COPY IT TO A
JNZ SAVE
CALL WRITE_32_END ;32 BYTE WRITE TO EEPROM HAVING VALUE 80H
A1: MOV BUFFER,#0D
MOV A,R7
CALL WRITE_BYTE
CALL DELAY_5ms
JC A1
MOV R0,#37
RET
SAVE: CALL RECOG ; SUITABLE DPTR VALUE
CALL CALCUL ; SUITABLE A
MOV R4,#6H ; NUMBER OF BYTE TO BE WRITTEN PER CHARACTER
MOV R5,A ; VALUE OF A AFTER CALL CALCUL
REVERSE: MOV A,R5
MOVC A,@A+DPTR
MOV BUFFER,A
MOV A,R7
CALL WRITE_BYTE ; WRITE BYTE
CALL DELAY_5ms ; WRITE TIME CYCLE
JC REVERSE
CALL INCREMENT ; MOVE TO NEXT LOCATION WHERE NEXT BYTE HAS TO BE WRITTEN IN EEPROM
JNC ADDRESS ; MONITOR END OF BLOCK-PAGE
INC 32H ;
MOV A,32H
CALL BLOCK ; GET SUITABLE MEMORY BLOCK ADDRESS
CLR C
ADDRESS: INC R5
DJNZ R4,REVERSE ; DECREMENT COUNTER FOR NUMBER OF BYTE PER CHARACTER
INC R0 ; GET NEXT ORIGINAL DATA BYTE (CHARACTER) IN THE RAM, WHICH IS COMING FROM THE PC
JMP BACKWARD
INCREMENT: MOV A,31H
ADD A,#1H
MOV 31H,A
CJNE A,#10H,RETURN ; MONITOR THE PAGE WRITE TO THE AT24C16B ON-CHIP PAGE BUFFER WHICH IS LIMITED TO 16 DATA BYTE PER PAGE-WRITE
CLR C
CALL STOP ; END OPERATION. THIS INITIATES THE INTERNAL WRITE CYCLE
MOV 31H,#00H ; MOVE TO THE BEGINNING OF THE ON-CHIP PAGE BUFFER
RETURN: RET

WRITE_BYTE: CALL START
JC X49 ; ABORT IF BUS NOT AVIALABLE
RL A
ORL A,#FADDR ; THIS WILL GENERATE THE APPROPRIATE DEVICE ADDRESS (CONTROL BYTE) CONTAINING THE APPROPRIATE BLOCK (256 WORDS/BYTES-BLOCK) SELECT BIT.
CLR ACC.0 ; SPECIFIY WRITE OPERATION
CALL SHOUT ; SEND THE APPROPRIATE DEVICE ADDRESS TO THE EEPROM
JC X48 ; ABORT IF NO ACKNOWLEDGE.
; NOTE: ALL OPERATION MUST END WITH A STOP CONDITION

MOV A,31H ; COPY LOW BYTE OF ADDRESS (WORD ADDRESS)
CALL SHOUT ; SEND LOW BYTE OF ADDRESS (WORD ADDRESS)
JC X48 ; ABORT IF NO ACKNOWLEDGE

MOV A,BUFFER ; COPY DATA
CALL SHOUT ; SEND DATA
JC X48 ; ABORT IF NO ACKNOWLEDGE

CLR C ; CLEAR ERROR FLAG
X48: CALL STOP ; END OPERATION AND INITIATE EEPROM WRITE CYCLE
X49: RET

; WRITE 32 BYTES SEQUENTIALY HAVING VALUE 80H AT THE END
; ********************************************************
WRITE_32_END: MOV BUFFER,#80H ; WRITE VALUE 80H
MOV B,#14H ; RETRY COUNTER IN CASE OF FAILURE
MOV R4,#20H ; COUNTER TO LIMIT THE DATA WRITTEN TO 32 BYTES
X82: MOV A,R7
CALL WRITE_BYTE
CALL DELAY_5ms
JNC X83
DJNZ B,X82 ; OK OR NOT OK
SETB C
JMP X84
X83: CALL INCREMENT
JNC X83_1 ; MONITOR END OF BLOCK-PAGE
INC 32H
MOV A,32H
CALL BLOCK ; GET SUITABLE MEMORY BLOCK ADDRESS
CLR C
X83_1:DJNZ R4,X82 ; THIS ENSURES THAT ONLY 32 BYTES CAN BE WRITTEN
CLR C
X84: RET

; THIS WILL SHIFT OUT A BYTE TO THE AT24C16B EEPROM, MOST SIGNIFICANT BIT FIRST.
; *******************************************************************************
SHOUT: PUSH B
MOV B,#8 ; BIT COUNTER
X42: RLC A ; MOVE BIT INTO CARRY FLAG i.e BITS ARE SHIFTED FROM LEFT TO RIGHT
MOV SDA,C ; OUTPUT BIT
NOP ; ENFORCE SERIAL LOW AND DATA SETUP
SETB SCL ; RAISE CLOCK
NOP ; ENFORCE SCL HIGH
NOP
NOP
NOP
CLR SCL ; DROP CLOCK
DJNZ B,X42 ; NEXT BIT
SETB SDA ; RELEASE SDA FOR ACKNOWLEDGE. The device that acknowledges, has to pull down the
;SDA line during the acknowledge clock pulse in such a
;way that the SDA line is stable-low during the high
;period of the acknowledge related clock pulse.
NOP
NOP
SETB SCL ; ACKNOWLEDGE RELATED CLOCK PULSE
NOP ; ENFORCE SCL HIGH
NOP ; Note: The 24LC16B does not generate any
;Acknowledge bits if an internal
;programming cycle is in progress.
NOP
NOP
MOV C,SDA ; GET ACKNOWLEDGE BIT
CLR SCL ; DROP ACKNOWLEDGE CLOCK
POP B
RET

; THIS WILL CALCULATE FOR DPTR
; *****************************
RECOG: MOV R2,A ; CHARACTER COMING FROM PC
ANL A,#0F0H ; SPLIT BYTE
SWAP A ; SWAP BYTE
MOV R3,A ; SAVE RESULT IN R3
MOV A,R2 ; CHARACTER COMING FROM PC
ANL A,#0FH ; SPLIT BYTE
MOV R2,A ; SAVE RESULT IN R2

; GET SUITABLE VALUE OF DPTR
; ***************************
NEXT6: CJNE R3,#2H,NEXT1
MOV DPTR,#TABLE1
RET
NEXT1: CJNE R3,#3H,NEXT2
MOV DPTR,#TABLE2
RET
NEXT2: CJNE R3,#4H,NEXT3
MOV DPTR,#TABLE3
RET
NEXT3: CJNE R3,#5H,NEXT4
MOV DPTR,#TABLE4
RET
NEXT4: CJNE R3,#6H,NEXT5
MOV DPTR,#TABLE5
RET
NEXT5: CJNE R3,#7H,NEXT6
MOV DPTR,#TABLE6
RET

; CALCULATION FOR ACCUMULATOR VALUE
; **********************************

CALCUL: CLR A ; GET SUITABLE VALUE OF A TO COPY
BAK: ADD A,#06H
DJNZ R2,BAK
RET

; CALCULATION FOR MEMORY BLOCK
; *******************************
BLOCK: CJNE A,#1D,B1
MOV R7,#BLOCK2
RET
B1: CJNE A,#2D,B2
MOV R7,#BLOCK3
RET
B2: CJNE A,#3D,B3
MOV R7,#BLOCK4
RET
B3: CJNE A,#4D,B4
MOV R7,#BLOCK5
RET
B4: CJNE A,#5D,B5
MOV R7,#BLOCK6
RET
B5: CJNE A,#6D,B6
MOV R7,#BLOCK7
RET
B6: CJNE A,#7D,B0
MOV R7,#BLOCK8
MOV 32H,#00D
B0: RET

; ***********************************************************************
; SECTION B: THIS SECTION INVOLVES THE READING OF THE SAVED DATA
; FROM THE SUITABLE BLOCK MEMORY OF THE EEPROM AND
; DISPLAY OF THIS DATA ON THE HARDWARE DISPLAY UNIT.
; ***********************************************************************

READING: MOV 33H,#00H ; SETING THE WORD ADDRESS FOR RANDOM READ i.e ADDRESS OF THE FIRST BYTE
CALL READ_BLOCK
RET

; THIS WILL PERFORM A RANDOM READ WHICH IS EXTENDED TO A SEQUENTIAL READ FROM THE EEPROM
; ***************************************************************************************

; SEND DUMMY WRITE COMMAND TO ADDRESS FIRST BYTE.
READ_BLOCK: CLR C
MOV R7,#BLOCK1
NEXT_32: CALL START ; FIRST START FOR WRITE
JC X35 ; ABORT IF BUS IS NOT AVAILABLE
MOV A,R7
RL A
ORL A,#FADDR ; ADD FIXED ADDRESS
MOV BUFFER,A ; SAVE COPY OF DEVICE ADDRESS
CLR ACC.0 ; SPECIFY WRITE OPERATION
CALL SHOUT ; SEND DEVICE ADDRESS
JC X34 ; ABORT IF NO ACKNOWLEDGE
MOV A,33H ; COPY LOW BYTE OF ADDRESS
CALL SHOUT ; SEND LOW BYTE OF ADDRESS
JC X34 ; ABORT IF NO ACKNOWLEDGE

; SEND READ COMMAND AND RECIEVE DATA
CALL START ; SECOND START FOR READ
JC X34 ; ABORT IF BUS IS NOT AVAILABLE
MOV A,BUFFER ; GET DEVICE ADDRESS
SETB ACC.0 ; SPECIFY READ OPERATION
CALL SHOUT ; SEND DEVICE ADDRESS
JC X34 ; ABORT IF NO ACKNOWLEDGE
X31: CALL SHIN ; RECEIVE DATA BYTE
JNZ DISPLAY ; MONITOR END OF STRING.
CALL NAK ; DO NOT ACKNOWLEDGE LAST BYTE
CLR C
X34: CALL STOP
X35: RET

; THIS WILL SENDING VALUE OF EEPROM TO PORT 2
; AND DECODE THE VALUE BY INCREMENT A VARIABLE AND SEND IT ON PORT 1.
; **********************************************************************
DISPLAY: JNB F0,X3
MOV P2,#00H ; MAKE PORT 2 AN OUTPUT PORT TO ENABLE DISPLAY
JMP X35
X3: MOV P2,A ; SEND READED DATA FROM EEPROM TO PORT 2
MOV P1,R6 ; DECODING THE READED DATA
INC R6 ;
CALL DELAY
CJNE R6,#20H,NLB ; CHECK FOR 4 PIECES (8*4=32)
CALL NAK ; NO ACKNOWLEDGE
CLR C
CALL STOP ; STOP CONDITION
MOV A,33H
ADD A,#1D
MOV 33H,A ; NEXT ADDRESS
JNZ NEXT_PAGE ; MONITOR THE END OF MEMORY BLOCK
INC 34H
MOV A,34H
CALL BLOCK ; GET SUITABLE MEMORY PAGE ADDRESS
NEXT_PAGE: MOV R6,#00H
JMP NEXT_32
NLB: CALL ACK
JMP X31

; THIS WILL SHIFT IN A BYTE FROM THE AT24C16B, MOST SIGNIFICANT BIT FIRST
; *************************************************************************
SHIN: SETB SDA ; MAKE SDA AN INPUT
PUSH B
MOV B,#8 ; BIT COUNT
X43: NOP ; ENFORCE SCL LOW AND DATA SETUP
; Of course, setup and hold times must be taken into account
NOP
NOP
SETB SCL ; RAISE CLOCK
NOP ; ENFORCE SCL HIGH
NOP
MOV C,SDA ; INPUT BIT
RLC A ; MOVE BIT INTO BYTE
CLR SCL ; DROP CLOCK
DJNZ B,X43 ; NEXT BIT
POP B
RET

; THIS IS AN ACKNOWLEDGEMENT FOR EEPROM TO SEND NEXT BYTE
; *************************************************************

ACK: CLR SDA ; ACKNOWLEDGE BIT
NOP ; ENFORCE SCL LOW AND DATA SETUP
NOP
SETB SCL ; RAISE CLOCK
NOP ; ENFORCE SCL HIGH
NOP
NOP
NOP
CLR SCL ; DROP CLOCK
RET

; NO ACKNOWLEDGEMENT FOR EEPROM TO SEND NEXT BYTE
; **************************************************
NAK: SETB SDA ; NO ACKNOWLEDGE BIT
NOP ; ENFORCE SCL LOW AND DATA SETUP
NOP ;
SETB SCL ; RAISE CLOCK
NOP ; ENFORCE SCL HIGH
NOP
NOP
NOP
CLR SCL ; DROP CLOCK
RET

; START CONDITION FOR EEPROM
; SEND START DEFINED AS HIGH-TO-LOW SDA WITH SCL HIGH
; *******************************************************
START: SETB SDA
SETB SCL
JNB SDA,X40
JNB SCL,X40
NOP
CLR SDA
NOP
NOP
NOP
NOP
NOP
CLR SCL
CLR C
JMP X41
X40: SETB C
X41: RET

; **************************************************************
; STOP CONDITION FOR EEPROM
; THIS WILL SEND STOP DEFINED AS LOW-TO-HIGH SDA WITH SCL HIGH
; **************************************************************
STOP: CLR SDA
NOP ; ENFORCE SDA LOW AND DATA SETUP
NOP
SETB SCL
NOP ; ENFORCE SETUP DELAY
NOP
NOP
NOP
NOP
SETB SDA
RET

; THIS WILL REFRESH VALUES BEFORE NEXT CYCLE
; *********************************************
INITIALIZE: MOV BUFFER,#00H
MOV 31H,#00H
MOV 32H,#00H
MOV 33H,#00H
MOV 34H,#00H
MOV R6,#00H
MOV R4,#00H
RET

; DELAY FOR REFRESHING DISPLAY
; *********************************
DELAY: MOV 35H,#3D
DL1: MOV 36H,#120D
DJNZ 36H,$
DJNZ 35H,DL1
RET

; 5 MILLISECOND DELAY FOR EEPROM WRITE TIME CYCLE
; *************************************************
DELAY_5ms: MOV 35H,#23D
DL: MOV 36H,#100D
DJNZ 36H,$
DJNZ 35H,DL
RET

; *************************************************
; SECTION C: LOOK UP TABLE FOR CHARACTERS
; *************************************************
ORG 300H
TABLE1:

DB 80H,80H,80H,80H,80H,80H ; SPACE
DB 80H,80H,5FH,80H,80H,80H ; !
DB 04H,02H,05H,02H,01H,80H ; "
DB 14H,7FH,14H,7FH,14H,80H ; #
DB 26H,49H,7FH,49H,32H,80H ; $
DB 22H,10H,08H,04H,22H,80H ; %
DB 80H,36H,49H,36H,28H,80H ; &
DB 04H,02H,01H,80H,80H,80H ; '
DB 08H,14H,22H,41H,80H,80H ; (
DB 80H,41H,22H,14H,08H,80H ; )
DB 2AH,1CH,08H,1CH,2AH,80H ; *
DB 08H,08H,3EH,08H,08H,80H ; +
DB 80H,58H,38H,80H,80H,80H ; ,
DB 08H,08H,08H,08H,08H,80H ; -
DB 40H,80H,80H,80H,80H,80H ; .
DB 20H,10H,08H,04H,02H,80H ; /

TABLE2:

DB 3EH,41H,41H,41H,3EH,80H ; 0
DB 80H,42H,0FFH,40H,80H,80H ; 1
DB 42H,61H,51H,49H,46H,80H ; 2
DB 49H,49H,49H,49H,36H,80H ; 3
DB 07H,08H,08H,08H,77H,80H ; 4
DB 4FH,49H,49H,49H,39H,80H ; 5
DB 3EH,49H,49H,49H,32H,80H ; 6
DB 41H,21H,11H,09H,07H,80H ; 7
DB 3EH,49H,49H,49H,3EH,80H ; 8
DB 06H,09H,09H,09H,7EH,80H ; 9
DB 80H,80H,22H,80H,80H,80H ; :
DB 80H,40H,32H,80H,80H,80H ; ;
DB 08H,14H,22H,41H,80H,80H ; <
DB 14H,14H,14H,14H,14H,80H ; =
DB 80H,41H,22H,14H,08H,80H ; >
DB 06H,01H,51H,09H,06H,80H ; ?

TABLE3:

DB 3EH,4DH,53H,1DH,1EH,80H ; @
DB 7CH,12H,11H,12H,7CH,80H ; A
DB 7FH,49H,49H,49H,36H,80H ; B
DB 3EH,41H,41H,41H,22H,80H ; C
DB 7FH,41H,41H,22H,1CH,80H ; D
DB 7FH,49H,49H,49H,41H,80H ; E
DB 7FH,09H,09H,09H,01H,80H ; F
DB 3EH,41H,49H,49H,7AH,80H ; G
DB 7FH,08H,08H,08H,7FH,80H ; H
DB 80H,41H,7FH,41H,80H,80H ; I
DB 20H,40H,41H,3FH,01H,80H ; J
DB 7FH,08H,14H,22H,41H,80H ; K
DB 7FH,40H,40H,40H,40H,80H ; L
DB 7FH,02H,0CH,02H,7FH,80H ; M
DB 7FH,04H,08H,10H,7FH,80H ; N
DB 3EH,41H,41H,41H,3EH,80H ; O

TABLE4:

DB 7FH,09H,09H,09H,06H,80H ; P
DB 3EH,41H,51H,21H,5EH,80H ; Q
DB 7FH,09H,19H,29H,46H,80H ; R
DB 46H,49H,49H,49H,31H,80H ; S
DB 01H,01H,7FH,01H,01H,80H ; T
DB 3FH,40H,40H,40H,3FH,80H ; U
DB 1FH,20H,40H,20H,1FH,80H ; V
DB 3FH,40H,30H,40H,3FH,80H ; W
DB 63H,14H,08H,14H,63H,80H ; X
DB 07H,08H,70H,08H,07H,80H ; Y
DB 61H,51H,49H,45H,43H,80H ; Z
DB 7FH,41H,41H,41H,80H,80H ; [
DB 02H,04H,08H,10H,40H,80H ; "\"
DB 80H,41H,41H,41H,7FH,80H ; ]
DB 04H,02H,01H,02H,04H,80H ; ^
DB 40H,40H,40H,40H,40H,80H ; _

TABLE5:

DB 01H,02H,04H,80H,80H,80H ; '
DB 7CH,12H,11H,12H,7CH,80H ; a
DB 7FH,49H,49H,49H,36H,80H ; b
DB 3EH,41H,41H,41H,22H,80H ; c
DB 7FH,41H,41H,22H,1CH,80H ; d
DB 7FH,49H,49H,49H,41H,80H ; e
DB 7FH,09H,09H,09H,01H,80H ; f
DB 3EH,41H,49H,49H,7AH,80H ; g
DB 7FH,08H,08H,08H,7FH,80H ; h
DB 80H,41H,7FH,41H,80H,80H ; i
DB 20H,40H,41H,3FH,01H,80H ; j
DB 7FH,08H,14H,22H,41H,80H ; k
DB 7FH,40H,40H,40H,40H,80H ; l
DB 7FH,02H,0CH,02H,7FH,80H ; m
DB 7FH,04H,08H,10H,7FH,80H ; n
DB 3EH,41H,41H,41H,3EH,80H ; o

TABLE6:

DB 7FH,09H,09H,09H,06H,80H ; p
DB 3EH,41H,51H,21H,5EH,80H ; q
DB 7FH,09H,19H,29H,46H,80H ; r
DB 46H,49H,49H,49H,31H,80H ; s
DB 01H,01H,7FH,01H,01H,80H ; t
DB 3FH,40H,40H,40H,3FH,80H ; u
DB 1FH,20H,40H,20H,1FH,80H ; v
DB 3FH,40H,30H,40H,3FH,80H ; w
DB 63H,14H,08H,14H,63H,80H ; x
DB 07H,08H,70H,08H,07H,80H ; y
DB 61H,51H,49H,45H,43H,80H ; z
DB 77H,49H,41H,41H,80H,80H ; {
DB 80H,80H,77H,80H,80H,80H ; |
DB 80H,41H,41H,49H,77H,80H ; }
DB 04H,02H,04H,02H,80H,80H ; ~

END
  • 0

Advertisements







Similar Topics

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

As Featured On:

Microsoft Yahoo BBC MSN PC Magazine Washington Post HP