Download presentation
Presentation is loading. Please wait.
Published byTobias Bradford Modified over 9 years ago
1
George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 ME 4447/6405 Microprocessor Control of Manufacturing Systems and Introduction to Mechatronics Instructor: Professor Charles Ume Lecture #11
2
George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 MON12 Utility Subroutines
3
George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 MON12 Utility Subroutines Subroutines are available for performing I/O tasks. Jump table has been set up in EEPROM beneath interrupt vectors. To use these jump subroutines, execute jump to subroutine (JSR) command to appropriate entry in jump table.
4
George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 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.
5
George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 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.
6
George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/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. ADDRESS SUBROUTINE FUNCTION
7
George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 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.
8
George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 Utility Subroutines Examples Example: OUTSTRG (Output ASCII Character String 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)
9
George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 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.)
10
George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 Example: OUTLHLF (Out Left Half) and OUTRHLF (Out Right Half) 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
11
George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 Example: OUT1BYT (Out 1 Byte) and OUT1BSP (Out 1 Byte 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
12
George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 Example: OUT2BSP (Out 2 Bytes 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
13
George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 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
14
George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 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
15
George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/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 FCC is used to store a string of characters FCB is used to store End Of Transmission (EOT) (Note 1: EOT in ASCII is $04) (Note 2: In this particular example any non-printing character can be used) 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
16
George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 #$2000 #$2001#$2002#$2005 #$04 1 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 $2000 $2001 $2002 $2003 $2004 $2005 CPU Registers Used in Program: Memory Locations Used in Program: Computer Screen: Program Initialization $48 $65 $6C $6F $04 Accum A: Index X: CCR Bit Z: #$48 0 CCR Z is 0 since Accum A does not equal $04 Does not branch because CCR Z is 0 H Always Branches #$65 e Skip Ahead Until Last Loop llo CCR Z is 1 since Accum A equals $04 Branch since CCR Z is 1 #$6F Ascii Equivalent of “Hello”
17
George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/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)
18
George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 QUESTIONS???
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.