Me 4447 6405
This presentation is the property of its rightful owner.
Sponsored Links
1 / 18

ME 4447/6405 PowerPoint PPT Presentation


  • 53 Views
  • Uploaded on
  • Presentation posted in: General

ME 4447/6405. Microprocessor Control of Manufacturing Systems and Introduction to Mechatronics Instructor: Professor Charles Ume Lecture #12. MON12 Utility Subroutines. MON12 Utility Subroutines. MON12 Utility Subroutines These subroutines are available for performing I/O tasks.

Download Presentation

ME 4447/6405

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Me 4447 6405

ME 4447/6405

Microprocessor Control of Manufacturing Systems

and

Introduction to Mechatronics

Instructor: Professor Charles Ume

Lecture #12


Mon12 utility subroutines

MON12 Utility Subroutines


Mon12 utility subroutines1

MON12 Utility Subroutines

MON12 Utility Subroutines

These subroutines are available for performing I/O tasks.

A jump table has been set up in EEPROM beneath the interrupt vectors.

To use these subroutines, execute a jump to subroutine (JSR) command to the appropriate entry in the jump table.


Subroutine listing

Subroutine Listing

UPCASE If character in accumulator A is lower case alpha, convert to

upper case.

WCHEK Test character in accumulator A and return with Z bit set if

character is whitespace (space, comma, tab).

DCHEKTest character in accumulator A and return with Z bit set if

character is delimiter (carriage return or whitespace).

ONSCIOInitialize I/O device.

INPUTRead I/O device.

OUTPUTWrite I/O device.

OUTLHLFConvert left nibble of accumulator A contents to

ASCII and output to terminal port.

OUTRHLFConvert right nibble of accumulator A contents to

ASCII and output to terminal port.


Subroutine listing cont d

Subroutine Listing Cont’d

OUTA Output accumulator A ASCII character.

OUT1BYT Convert binary byte at address in index register X to two ASCII

characters and output. Return address in index register X pointing to

next byte.

OUT1BSP Convert binary byte at address in index register X to two ASCII

characters and output followed by a space. Returns address in index

register.

OUT2BSP Convert two consecutive binary bytes starting at address in index X to

four ASCII characters and output followed by a space. Returns address

in index register X pointing to next byte.

OUTCCRLF Output ASCII carriage return followed by a line feed.

OUTSTRG Output string of ASCII bytes pointed to by address in index register X

until character is an end of transmission ($04).

OUTSTRGOSame as OUTSTRG except leading carriage return and line feed is

skipped.

INCHARWaits for you to type an ASCII character from the keyboard, and stores

the corresponding ASCII number in accumulator A, and then outputs the ASCII character to the screen.


Me 4447 6405

$FF37 UPCASE Convert character to uppercase

$FF3A WCHEK Test character for whitespace

$FF3D DCHEK Check character for delimiter

$FF40 ONSCIOInitialize I/O device

$FF43 INPUT Read I/O device

$FF46 OUTPUT Write I/O device

$FF49 OUTLHLF Convert left nibble to ASCII and output

$FF4C OUTRHLF Convert right nibble to ASCII and output

$FF4F OUTA Output ASCII character

$FF52 OUTlBYT Convert binary byte to 2 ASCII characters and output

$FF55 OUT1BSP Convert binary byte to 2 ASCII characters and output

followed by space

$FF58OUT2BSP Convert 2 consecutive binary bytes to 4 ASCII

characters and output followed by space.

$FF5B OUTCRLF Output ASCII carriage return followed by line feed

$FF5E OUTSTRG Output ASCII string until end of transmission ($04)

$FF61 OUTSTRGO Same as OUTSTRG except leading carriage return

and line feed is skipped

$FF64INCHARInput ASCII character and echo back

To use an I/O subroutine, Jump Sub Routine (JSR) to the specified address listed below.ADDRESSSUBROUTINEFUNCTION


Utility subroutines examples

Utility Subroutines Examples

Example: OUTA

ORG $1000

LDAA #$41*Load acc. A with ASCII code for the

*character A.

JSR $FF4F*JSR to the subroutine OUTA

SWI

END

Result A is written to the screen.


Utility subroutines examples1

Utility Subroutines Examples

Example: OUTSTRG (Out ASCII CharacterString until EOT, $04, is encountered)

STR1 EQU $2100

OUTSTRGEQU $FF5E

ORG STR1

FCC “ABCDEFG”

FCB #$04

ORG $1000

LDX #STR1

JSR OUTSTRG*Go to OUTSTRG routine which

*outputs ASCII characters contained in each

*address starting from $2100 until

*an EOT character is found.

SWI

END

ResultABCDEFG written to the screen on a new line.

(Note: ASCII end of transmission (EOT) character must be used with the

OUTSTRG subroutine to let it know when to stop reading from

memory. EOT ASCII = #$04)


Difference between the utility subroutines outstrg and outstrg0

Difference Between the Utility Subroutines OUTSTRG and OUTSTRG0

Assume you want to print the following to the screen:

MEMORY LOCATION $_____CONTAINS _____ IN DECIMAL.

Use subroutine OUTSTRG to print “MEMORY LOCATION $” to screen on a new line (It always starts printing on a new line, because it outputs carriage return with line feed).

Use subroutine OUTSTRG0 to print “CONTAINS” to screen on same line as “MEMORY LOCATION $” (Because it does not output carriage return with line feed)

Use subroutine OUTSTRG0 to print “IN DECIMAL.” to screen on the same line

(Note: Refer to Lab website for example program to print

decimal numbers to the screen.)


Utility subroutines examples2

Example:OUTLHLF(OutLeftHalf) andOUTRHLF(OutRightHalf)

ORG $1000

LDAA #$AF *Puts hex number $AF in acc. A

JSR $FF49 *Goes to subroutine OUTLHLF which converts left

*nibble, #$A, to ASCII number, $41, and then outputs

*its ASCII character, ‘A, to the screen.

LDAA #$AF *Reload Acc. A since OUTLHLF modifies the contents of

*Acc. A

JSR $FF4C *Goes to subroutine OUTRHLF which converts right

*nibble, #$F, to ASCII number, $46, and then outputs

*its ASCII character, ‘F, to the screen.

SWI

END

Result  AF is written to the screen.

Utility Subroutines Examples


Utility subroutines examples3

Example: OUT1BYT (Out1Byte) and OUT1BSP (Out1Byte with Space)

Assume that memory contains the following:

2100 FA FB

Now execute the following code:

ORG $1000

LDX #$2100

JSR $FF52 *Goes to subroutine OUT1BYT which converts the

*content of the address pointed to by the X register to

*two ASCII equivalents and outputs their characters to *the screen, and increments X register by #$1.

JSR $FF55 *Goes to subroutine OUT1BSP which converts the

*content of the address pointed to by the X register to

*two ASCII equivalents and outputs their characters to the *screen followed by a space.

SWI

END

Result FAFB_ sent to screen (Note: last character is a space)

Utility Subroutines Examples


Utility subroutines examples4

Example: OUT2BSP (Out 2Bytes with Space)

Assume that memory contains the following:

2100 FA FB

Now execute the following code.

ORG $1000

LDX #$2100

JSR $FF58 *JSR to subroutine OUT2BSP which converts two

*consecutive binary bytes to their 4 ASCII numbers

*and outputs their ASCII characters to the screen followed by a

*space.

SWI

END

ResultFAFB_ sent to screen (last character is a space).

Utility Subroutines Examples


Utility subroutines examples5

Example: OUTCRLF (Output Carriage Return with Line Feed)

ORG $1000

JSR $FF5B *Go to subroutine OUTCRLF

*which outputs ASCII carriage return

*followed by a line feed.

SWI

END

Result New line on screen (Note:Equivalent to pressing

Enter in your computer)

Utility Subroutines Examples


Utility subroutines examples6

Example: INCHAR (Input Character)

ORG $1000

JSR $FF64 *Goes to subroutine INCHAR. Waits for you to

*type an ASCII character from the keyboard,

*and stores the corresponding ASCII number in

*accumulator A

SWI

END

Result-> If you type 9 on the keyboard, ASCII number

$39 is stored in accumulator A

Utility Subroutines Examples


Me 4447 6405

Example

  • Write an assembly language program to output a string of characters to the screen.

  • Solution: This particular solution will print “Hello” to the screen using the OUTA subroutine

OUTAEQU$FF4F

ORG $2000

FCC “HELLO”

FCB #$04

ORG $1000

LDX #$2000

LoopLDAA$00,X

CMPA #$04

BEQ Quit

JSR OUTA

INX

BRA Loop

QuitSWI

END

FCC is used to store a string of characters

FCB is used to store End Of Transmission (EOT)

(Note: EOT in ASCII is $04)

(Note 2: In this particular example any non-printing character can be used)


Me 4447 6405

Program Initialization

Skip Ahead Until Last Loop

CPU Registers Used in Program:

OUTAEQU$FF4F

ORG $2000

FCC “Hello”

FCB #$04

ORG $1000

LDX #$2000

LoopLDAA$00,X

CMPA #$04

BEQ Quit

JSR OUTA

INX

BRA Loop

QuitSWI

END

#$48

#$6F

#$04

#$65

CCR Z is 1 since

Accum A equals

$04

CCR Z is 0 since Accum A does not equal $04

#$2005

#$2001

#$2002

#$2000

0

1

Memory Locations Used in Program:

Does not branch because CCR Z is 0

Branch since CCR Z is 1

$48

Always Branches

$65

Ascii Equivalent of “Hello”

$6C

Computer Screen:

$6C

e

H

llo

$6F

$04


Me 4447 6405

Solution 2: This particular solution will print “Hello” to the screen using the OUTSTRG subroutine

OUTSTRGEQU$FF5E

ORG$2000

FCC“HELLO”

FCB#$04

ORG$1000

LDX#$2000

JSROUTSTRG

SWI

END

OUTSTRG: Output ASCII string until

end of transmission ($04)

(Note: EOT must be used because the OUTSTRG Subroutine uses EOT as the end of the string)


Questions

QUESTIONS???


  • Login