Virginia Commonwealth University
[pic]
[pic]
[pic]
8051 Examples
;****************************************************************
;FUNCTION: HEX2ASC_TBL - CONVERT LEAST SIG NIBBLE OF A TO ASCII
; USING LOOK UP TABLE
; INPUTS: A(3_0) - HEX DIGIT
; OUTPUTS: A - ASCII CHAR CORESPONDING TO HEX DIGIT IN A(3_0)
; CALLS: NONE
;DESTROYS: A, DPTR
;****************************************************************
;ASCII LOOK UP TABLE
ASC_TBL:
DB '0'
DB '1'
DB '2'
DB '3'
DB '4'
DB '5'
DB '6'
DB '7'
DB '8'
DB '9'
DB 'A'
DB 'B'
DB 'C'
DB 'D'
DB 'E'
DB 'F'
HEX2ASC_TBL:
MOV DPTR,#ASC_TBL ;POINT TO LOOK UP TABLE
ANL A,#0FH ;USE ONLY LEAST SIG NIBBLE TO LOOK UP
MOVC A,@A+DPTR ;ASCII VALUE
RET
;****************************************************************
;FUNCTION: HEX2ASC - CONVERT LEAST SIG NIBBLE OF AL TO ASCII
; INPUTS: A(3_0) - HEX DIGIT
; OUTPUTS: A - ASCII CHAR CORESPONDING TO HEX DIGIT IN AL(3_0)
; CALLS: NONE
;DESTROYS: A, PSW
;****************************************************************
HEX2ASC:
ANL A,#0FH ;GET LEAST SIG NIBBLE
CLR C ;CLEAR CARRY
SUBB A,#0AH ;SET CARRY IF ACC IS LESS THAN 0AH
JC LTA ;JUMP IF ACC 9 i.e. A --> 00 AND SET CY
ADDC A,#40H ;IF >9 CARRY WAS SET ie. A --> 41H ELSE
DA A ;LSN IS INCREASED BY 30H
RET
;****************************************************************
;FUNCTION: ASC2HEX - CONVERT ASCII CHAR IN A TO HEX DIGIT. A IS
; ASSUMED TO CONTAIN THE UPPER CASE ASCII FOR A VALID HEX DIGIT
; THE TRANSLATION IS AS SHOWN BELOW
; INPUT AL OUTPUT AL
; '0'=30H 00000000B
; '1'=31H 00000001B
; ... ...
; 'A'=41H 00001010B
; ... ...
; 'F'=46H 00001111B
;
; INPUTS: AL - THE ASCII CHAR '0'..'9', 'A'..'F'
; OUTPUTS: AL - HEX NIBBLE 00 ..09 , 0A ..0F
; CALLS: NONE
;DESTROYS: AL, PSW
;****************************************************************
ASC2HEX:
CLR C ;CLEAR CARRY
SUBB A,#'A' ;SET CARRY IF A < 'A'
JNC HEXFIX ;JUMP IF A WAS 'A' - 'F'
ADD A,#'A'-'0'-0AH ;DO THIS IF A WAS '0' - '9'
HEXFIX: ADD A,#0AH ;A NOW CONTAINS HEX VALUE
RET
;****************************************************************
;FUNCTION: UPPER - CONVERT ASCII CHAR IN A TO UPPER CASE
; INPUTS: A - ASCII CHAR
; OUTPUTS: A - UPPER CASE ASCII CHAR
; CALLS: NONE
;DESTROYS: A, PSW
;****************************************************************
UPPER:
CJNE A,#'a',LOWIFC ;SET CY IF CHAR < 'a'
CHKHI: CJNE A,#'z'+1,UCONV ;SET CY IF CHAR
DB 00110010B ;?
ASC40: DB 10000000B ;@
DB 01100000B ;A
DB 10001000B ;B
DB 10101000B ;C
DB 10010000B ;D
DB 01000000B ;E
DB 00101000B ;F
DB 11010000B ;G
DB 00001000B ;H
DB 00100000B ;I
DB 01111000B ;J
DB 10110000B ;K
DB 01001000B ;L
DB 11100000B ;M
DB 10100000B ;N
DB 11110000B ;O
ASC50: DB 01101000B ;P
DB 11011000B ;Q
DB 01010000B ;R
DB 00010000B ;S
DB 11000000B ;T
DB 00110000B ;U
DB 00011000B ;V
DB 01110000B ;W
DB 10011000B ;X
DB 10111000B ;Y
DB 11001000B ;Z
DB 10000000B ;
DB 10000000B ;
DB 10000000B ;]
DB 10000000B ;^
ASC5F: DB 00000000B ;DEL SEND ERROR
$EJECT
;*****************************************************************************
; FUNCTION: SEND - SENDS THE MORSE CODE FOR THE ASCII CHARACTER IN A.
; The tone is on for 1 delay time for a DIT.
; The tone is off for 3 delay times for a DAH.
; The tone is off for 1 delay time between dits and dahs.
; The tone is off for 3 delay times between letters.
; The tone is off for 5 delay times between words.
; EXAMPLES: IF A = 00110000B The output should be:
; ON OFF ON OFF ON ON ON OFF OFF OFF.
; IF A = 11110000B. The output should be:
; ON ON ON OFF ON ON ON OFF ON ON ON OFF OFF OFF.
; IF A = 11111111B (space). Make the output:
; OFF OFF. This really causes a tone off for 5 delay times
; since the preceding letter ended with tone off for 3 delay times.
; IF A = 00000000B (error). The output should be
; ON OFF ON OFF ON OFF ON OFF ON OFF ON OFF ON OFF ON OFF OFF OFF.
; INPUTS: A - ASCII CHAR.
; TABLE- TABLE TO CONVERT COMPRESSED
; ASCII TO MORSE CODE.
; OUTPUTS: DITS, DAHS, AND . ON THE SCREEN
; CALLS: DIT, DAH, DELAY
; DESTROYS: A, DPTR, PSW,...
;*****************************************************************************
SEND:
MOV DPTR,#TABLE ;POINT DPTR TO MC TABLE
MOVC A,@A+DPTR ;LOOK UP MORES CODE
CJNE A,#0FFH,DECODE ;jUMP IF NOT A SPACE?
FINISH: CALL DELAY ;TIME OUT AT END OF
CALL DELAY ;CHARACTER.
RET
DECODE: CLR C ;CLEAR CY
JNZ SHIFT ;IF ZERO SEND 8 DITS
SETB C ;SET STOP BIT
SHIFT: RLC A ;SHIFT
JZ FINISH ;IF ZERO AFTER SHIFT IT'S DONE
JNC DITBIT ;SEND DIT ON 0.
CALL DAH ;SEND DAH ON 1.
JMP DECODE ;CONTINUE
DITBIT: CALL DIT ;SEND DIT
JMP DECODE ;CONTINUE
;*****************************************************************************
; DESCRIPTION: FIXCHR-MAKES UPPER CASE AND LOWER
; CASE LETTERS THE SAME, THUS COMPRESSING
; THE ASCII TABLE TO 6 BITS.
; THE ALGORITHM USED IS AS FOLLOWS.
; BITS 4-0 REMAIN UNCHANGED.
; BIT 5 IS REPLACED BY BIT 6.
; BIT 6 AND 7 ARE RESET TO 0.
; INPUTS: A-ASCII TABLE.
; OUTPUTS: A-COMPRESSED ASCII TABLE.
; CALLS: NONE
; DESTROYS: A,PSW.
;*****************************************************************************
FIXCHR:
ANL A,#01011111B ;ZERO BITS 5 AND 7
JNB ACC.6,FEXIT ;IF BIT 6 = 0 THRN EXIT
XRL A,#01100000B ;CLEAR BIT 6 SET BIT 5
FEXIT: RET ;AND RETURN
;*****************************************************************************
; FUNCTION: DELAY- OUTPUT SPACE TO INDICATE TIME WITHOUT TONE
; INPUTS: NONE
; OUTPUTS: NONE
; CALLS: CHAROUT
; DESTROYS: R6, R7
;*****************************************************************************
DELAY:
MOV R6,80H ;Set delay time
WAIT: DJNZ R7,WAIT ;Loop for
DJNZ R6,WAIT ;Delay
RET
;*****************************************************************************
; FUNCTION: DIT - OUTPUT A DIT
; INPUTS: NONE
; OUTPUTS: NONE
; CALLS: TONEON, DELAY, TONEOFF
; DESTROYS: NONE
;*****************************************************************************
DIT:
CALL TONEON ;TURN TONE ON
CALL DELAY ;DELAY FOR ONE DIT TIME
CALL TONEOFF ;TURN TONE OFF
CALL DELAY ;DELAY FOR ONE DIT TIME
RET
$EJECT
;*****************************************************************************
;
; FUNCTION: DAH - OUTPUT A DAH
; INPUTS: NONE
; OUTPUTS: NONE
; CALLS: TONEON, DELAY, TONEOFF
; DESTROYS: NONE
;*****************************************************************************
DAH:
CALL TONEON ;TURN TONE ON
CALL DELAY ;DELAY FOR ONE DIT TIME
CALL DELAY ;DELAY FOR ONE DIT TIME
CALL DELAY ;DELAY FOR ONE DIT TIME
CALL TONEOFF ;TURN TONE OFF
CALL DELAY ;DELAY FOR ONE DIT TIME
RET
;*****************************************************************************
; FUNCTION: TONEON - TURNS TONE ON
; INPUTS: NONE
; OUTPUTS: P3.4
; CALLS: NONE
; DESTROYS: P3.4
;*****************************************************************************
TONEON:
CLR P3.4 ;OUTPUT 0 TO TURN TONE ON
RET
;*****************************************************************************
; FUNCTION: TONEOFF - TURNS TONE OFF
; INPUTS: NONE
; OUTPUTS: P3.4
; CALLS: NONE
; DESTROYS: P3.4
;*****************************************************************************
TONEOFF:
SETB P3.4 ;OUTPUT 1 TO TURN TONE OFF.
RET
;*****************************************************************************
MSG: DB 'This is a test program.'
MSGEND: DB ' '
END
................
................
In order to avoid copyright disputes, this page is only a partial summary.
To fulfill the demand for quickly locating and searching documents.
It is intelligent file search solution for home and business.
Related searches
- hotel boston 1650 commonwealth ave
- commonwealth financial services richmond va
- commonwealth financial services richmon
- first virginia loans virginia beach
- commonwealth financial group boston
- 1650 commonwealth ave brighton
- hotel boston commonwealth ave
- commonwealth of virginia unclaimed money
- virginia beach virginia phone directory
- commonwealth of virginia substitute form w 9
- commonwealth of virginia w 9
- virginia state university faculty listing