ME4447/6405 ME 4447/6405 Microprocessor Control of Manufacturing Systems and Introduction to Mechatronics Instructor: Professor Charles Ume Lecture #11 George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 Homework Set #1 Solution 1. Write an assembly language program to clear the usable internal RAM in the MC9S12C32 [$0800 to $0DFF] Solution: Clear Locations $0800 - $0DFF. ORG $1000 LDX #$0800 LOOP CLR $00,X INX CPX #$0E00 BNE LOOP SWI END (NOTE: You should hand-assemble this program.) George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 Homework Set #1 Solution 2. Write a program to add even/odd numbers located in addresses $0000 through $00FE. Solution: (for adding odd numbers) ORG $1000 LDY #$0000 1000 CD 0000 LDX #$0000 1003 CE 0000 IND LDAA #$FF 1006 86 FF LDAB $00,X 1008 E6 00 0000 0011 0000 0001 BITB #$01 100A C5 01 0000 0001 BEQ EVEN 100C 27 02 ABY 100E 19 ED EVEN INX 1010 08 1st Time STX $2000 1011 7E 2000 $2001: 0000 0001 Acc A: 1111 1111 EORA $2001 1014 B8 2001 1111 1110 BNE IND 1017 26 ED SWI 1019 3F END George W. Woodruff School of Mechanical Engineering, Georgia Tech OR DECA 4A If you use this, then IND should be moved down to the next line ME4447/6405 Homework Set #1 Solution 2. Write a program to add even/odd numbers located in addresses $0800 through $0900. Solution: (for adding odd numbers) ORG LDY LDX IND LDAB BITB BEQ ABY EVEN INX CPX BNE SWI END $1000 #$0000 #$0800 $00,X #$01 EVEN 1000 1003 1006 1008 100A 100C 100E #$0901 100F IND 1012 1014 CD CE E6 C5 27 19 08 8E 26 3F George W. Woodruff School of Mechanical Engineering, Georgia Tech 0000 0800 00 01 02 ED 0901 ED ME4447/6405 Homework Set #2 Solution Write an assembly language program to find the largest signed number in a list of numbers stored in address $0020 thru $0029, and store it in $2000. Repeat for unsigned number. FIRST LAST ANSWR NUB EQU EQU EQU ORG LDX LDAA STAA INX LDAB LDAA CMPA BLE $0020 $002A $2000 $1000 #FIRST FIRST ANSWR #$0A $00,X ANSWR NEXT; (signed)* OR BLS NEXT George W. NEXT; (unsigned)** Goes with DECB. If DECB is removed, then LDAB must be removed (A - ANSWR) *(Branches if 2's complement number in register A is less than or equal to the 2's complement number represented by ANSWR) **(Branch if lower or same, i.e, Branch if register A was lower or same as ANSWR) STAA ANSWR INX CPX #LAST OR DECB BNE NUB SWI Woodruff School of Mechanical END Engineering, Georgia Tech ME4447/6405 Homework Set #2 Solution Continued Signed Example: #$3F (positive) #$F4 (negative) Convert Numbers to Decimal: #$F4 = %11110100 Un-Signed Example: #$3F (positive) #$F4 (positive) Convert Numbers to Decimal: #$F4 = %11110100 #$F4 = 24410 1's Comp #$0B = %00001011 2's Comp #$0C = %00001100 #$F4 = -1210 #$3F = %00111111 #$3F = 6310 #$3F = %00111111 #$3F = 6310 #$F4 is larger than #$3F since 24410 is larger than 6310 #$3F is larger than #$F4 since 6310 is larger than -1210 George W. Woodruff School of Mechanical Engineering, Georgia Tech Homework Set #3 Solution ME4447/6405 1. Write a subroutine to save the first 5 odd (8-bit) numbers pointed to by the x-register (passed in) onto the stack. Solution: SUB1 NEXT ODD LDAA PULY BRSET INX BRA LDAB PSHB INX DECA BNE PSHY RTS #$05 $00,X #$01 ODD NEXT $00,X NEXT Note: For subroutine to execute in main program, a BSR or JSR command must be used in main program. George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 Homework Set #3 solution 2. Write a program to output a square wave thru port S pin The output can be observed on the scope, and the period T of the wave should be measured. More than one period wave should be generated. The machine cycle time of the MC9S12C32 should be estimated. Draw the square wave. George W. Woodruff School of Mechanical Engineering, Georgia Tech Homework Solution Cont’d ME4447/6405 Solution: ORG $2000 FCB $XX FCB $04 ORG LDAA STAA LDAB CYCLE STAA EORA STAA LDAA NEXT BNE DECB BEQ JMP EXIT END $1000 #$04 $024A #$04 LDAA $0248 #$04 $2001 $2000 DECA NEXT EXIT CYCLE SWI Address $2001 3 1 3 3 3 1 3/1 1 3/1 3 1000 1002 1005 1007 100A 100D 100F 1012 1015 1016 1018 1019 101B 101E Opcode 86 7A C6 B6 7A 88 7A B6 43 26 53 27 06 3F Postbyte Operand 04 024A 04 2001 0248 04 2001 2000 FD Configures PS2 as output. Helps us to output two periods. Outputs signal from PS2 Switch $2001(toggle) Delay 03 1007 (Note: BNE and BEQ take 3 machine cycles to execute if the branch is taken and one machine cycle if it is not taken) George W. WoodruffCycle School of Mechanical Engineering, Georgia Tech T/2=Machine Time*[3+3+1+3+3+COUNT*(1)+(COUNT-1)*3+1+1+3] (Note: Count = #$XX) ME4447/6405 George W. Woodruff School of Mechanical Engineering, Georgia Tech ASCII Character Codes ME4447/6405 ASCII – American Standard Code for Information Interchange ASCII assigns a hexadecimal ‘code’ to individual characters Examples: Character ‘A ‘E ‘e ‘1 BS ASCII $41 $45 $65 (Note: Different codes for lower and upper case) $31 $08 (Note: BS is Backspace. ) A microcontroller must send these codes to a display terminal in order for the terminal to display these characters. George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 ASCII Character Codes (continued) Hex to ASCII Conversion table from Programming Reference Guide Page 58 George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 ASCII Character Codes An array of characters is called a string Example: character array ‘H ‘e ‘l ‘l ‘o String “Hello” (Note: Character ‘H ‘e ‘l ‘o ASCII Representation $48 $65 $6C $6C $6F ASCII $48 $65 $6C $6F ) George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 Assembly Directive Types Assembly Control • ORG, END Symbol Definition • EQU Data Definition/Storage Allocation • FCC, FCB, FDB, RMB, ZMB, BSZ, FILL Listing Control • PAGE, OPT George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 Assembly Control George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 ORG and END ORG : Store translated machine language instructions in sequence starting at given address for any mnemonic instructions that follow END: Stop translating mnemonics instructions until another ORG is encountered (Note: These were already discussed in Lecture 7) George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 Symbol Definition George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 EQU EQU lets you refer to a number or an address as a variable name. Example: VALA EQU $10 ORG $1000 LDAA #VALA LDAB VALA *LABEL VALA USED TO REFER TO $10 *LOAD HEX NUMBER $10 IN ACCUMULATOR A *LOAD CONTENT OF MEMORY LOCATION $10 *IN ACC. B SWI END Same As: VALA EQU $10 ORG $1000 LDAA #$10 LDAB $10 *LABEL VALA USED TO REFER TO $10 *LOAD HEX NUMBER $10 IN ACCUMULATOR A *LOAD CONTENT OF MEMORY *LOCATION $10 IN ACC. B SWI George W. Woodruff School of Mechanical Engineering, Georgia Tech END ME4447/6405 Data Definition/Storage Allocation George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 FCC FCC – Form Constant Character string • FCC stores ASCII characters into consecutive bytes of memory. • Any printable ASCII characters can be contained in the string. • String is specified between two identical delimiters, which can be any printable ASCII character. • First non-blank character after the string is used as a delimiter. George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 FCC Cont’d Result Example: ORG $0400 FCC “12345” Address Prebyte Opcode Operand $0400 31 $0401 32 $0402 33 $0403 34 $0404 35 George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 FCB FCB – Form Constant Byte • FCB has one or more operands. • Value of each operand is truncated to eight bits, and is stored in single byte of object program. • Operand may be a numeric constant, character constant, a symbol or an expression. • Multiple operands are separated by commas, and are stored in successive memory bytes. George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 FCB Cont’d Example: VALA EQU $10 ORG $0400 FCB $34,’A, $28AC, $0A ,VALA Result Address Prebyte Opcode Operand $0400 34 $0401 41 $0402 AC $0403 $0404 0A George W. Woodruff School of Mechanical Engineering, Georgia Tech 10 ME4447/6405 FDB FDB – Form Constant Double Byte • FDB stores a double (two byte) word. • May have one or more operands separated by commas. • Operand may be a numeric constant, a character constant, a symbol, or an expression. George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 FDB Cont’d Result Example: ORG $0400 FDB $1234,’&,’G Address Prebyte Opcode Operand $0400 12 $0401 34 $0402 00 $0403 26 $0404 00 $0405 47 Note: ASCII value for & is $26 ASCII value for G is $47 George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 RMB RMB – Reserve Memory Byte •RMB saves a place in memory for a number. Example: XVAR ORG $0400 RMB 2 ORG $1000 LDD #$FFAA STD XVAR SWI END *TWO MEMORY *LOCATIONS $0400 *and $0401 ARE *RESERVED FOR XVAR Result Address Prebyte Opcode Operand $0400 FF $0401 AA George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 Question a student asked: What happens if you change the previous example to "XVAR RMB 3" instead of "XVAR RMB 2" ? What happens to the 3rd reserved byte when a 2 byte number is stored in XVAR? Answer: Remains unchanged Modified Program: XVAR ORG $0400 RMB 3 ORG $1000 LDD #$FFAA STD XVAR SWI END George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 ZMB, BSZ ZMB – Zero Memory Byte and BSZ – Block Storage of Zero • These directives fill a given number of memory locations with zero. • Causes assembler to allocate a block of memory bytes, and each memory byte is assigned a value of zero. • Both directives do the same thing. • Number of bytes allocated is given in the operand field. Result Example: ORG $0400 ZMB #$02 BSZ #$02 Address $00 $01 $02 $03 Prebyte Opcode Operand 00 00 00 00 George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 FILL Fill given number of memory locations with any number. (Note: Fill uses one byte. If two bytes are specified, then it will truncate it and use LS Byte.) Example: Result ORG $0400 FILL #$FF, #$02 Address Prebyte Opcode Operand $00 FF $01 FF George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 Question a student asked: What happens when the previous example is changed to "FILL #$9ABC, #$02" instead of "FILL #$FF,#$02"? What happens if you fill memory with a 2 byte number? Answer: FILL will just use the LS Byte Modified Example: ORG $0400 FILL #$9ABC,#$02 END (Note: There no ”go 1000” screen since these are just assembly George W.isWoodruff Schoolon ofthe Mechanical Engineering, Georgia Tech directives and not a program) ME4447/6405 Listing Control George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 PAGE PAGE • The PAGE directive causes a page break in the list file. • If no source listing is being produced, the PAGE directive will have no effect. • The directive is not printed on the source listing. George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 OPT OPT • Allows for various options in assembly of a program, including generating a listing and counting instruction cycles. Options: nol-no output listing (default) l-do an output listing noc-no cycle number count (default) c-turn on cycle count using zero initial value contc-turn cycle count on, begin with last value cre-create a cross reference table (default anyway) RMB s-create a symbol table (default anyway) EQU Example: OPT l – Print source listing from this point George W. Woodruff School of Mechanical Engineering, Georgia Tech Homework 3 Solution ME4447/6405 Write a subroutine to save the first 5 odd (8-bit) numbers pointed to by the x-register (passed in) onto the stack. Solution: SUB1 NEXT ODD LDAA PULY BRSET INX BRA LDAB PSHB INX DECA BNE PSHY RTS #$05 $00,X #$01 ODD NEXT $00,X NEXT Note: For subroutine to execute in main program, a BSR or JSR command must be used in main program. George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 Homework 4 solution Write a program to output a square wave thru port S pin 2. The output can be observed on the scope, and the period T of the wave should be measured. More than one period wave should be generated. The machine cycle time of the MC9S12C32 should be estimated. Draw the square wave. George W. Woodruff School of Mechanical Engineering, Georgia Tech ME4447/6405 Homework 4 Solution Cont’d Solution: ORG $2000 FCB $XX FCB $04 ORG LDAA STAA LDAB CYCLE STAA EORA STAA LDAA NEXT BNE DECB BEQ JMP EXIT END $1000 #$04 $024A #$04 LDAA $0248 #$04 $2001 $2000 DECA NEXT EXIT CYCLE SWI Address $2001 3 1 3 3 3 1 3/1 1 3/1 3 1000 1002 1005 1007 100A 100D 100F 1012 1015 1016 1018 1019 101B 101E Opcode 86 7A C6 B6 7A 88 7A B6 43 26 53 27 06 3F Postbyte Operand 04 024A 04 2001 0248 04 2001 2000 FD Configures PS2 as output. Helps us to output two periods. Outputs signal from PS2 Switch $2001(toggle) Delay 03 1007 (Note: BNE and BEQ take 3 machine cycles to execute if the branch is taken and one machine cycle if it is not taken) George W. WoodruffCycle School of Mechanical Engineering, Georgia Tech T/2=Machine Time*[3+3+1+3+3+COUNT*(1)+(COUNT-1)*3+1+1+3] (Note: Count = #$XX) ME4447/6405 QUESTIONS??? George W. Woodruff School of Mechanical Engineering, Georgia Tech