EMCH 367 Microcontrollers in Mechanical Engineering

Transcription

EMCH 367 Microcontrollers in Mechanical Engineering
EMCH 367
Microcontrollers
in
Mechanical Engineering
http://www.me.sc.edu/courses/emch367
USC-DME Notes, Edition 8/19/08, revised by Victor Giurgiutiu
© 2006 Victor Giurgiutiu
Dr. Victor Giurgiutiu
8/19/2008
Dr. Victor Giurgiutiu
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Table of Contents
TABLE OF CONTENTS
GENERAL INFORMATION ................................................................................................................................. 1
SYLLABUS .............................................................................................................................................................. 1
Instructional Objectives ..................................................................................................................................... 1
Course Description ............................................................................................................................................ 2
Topics................................................................................................................................................................. 2
GRADING POLICY ................................................................................................................................................... 2
HOMEWORK REQUIREMENTS ................................................................................................................................. 3
LABORATORY REQUIREMENTS .............................................................................................................................. 3
PROJECT REQUIREMENTS ....................................................................................................................................... 3
ELECTRONIC FILES REQUIREMENTS ....................................................................................................................... 3
NOTES: THE NETWORK ADDRESS FOR PLACING THE HOMEWORK AND LAB REPORT FILES WILL BE PROVIDED BY
YOUR TA. ............................................................................................................................................................... 3
ADDITIONAL REFERENCES ..................................................................................................................................... 4
TEST FORMAT ......................................................................................................................................................... 4
EMCH 367 LAB....................................................................................................................................................... 5
LAB OBJECTIVE ...................................................................................................................................................... 5
LAB GRADING POLICIES......................................................................................................................................... 6
LAB POLICIES ......................................................................................................................................................... 6
EMCH 367 PROJECT ........................................................................................................................................... 6
PROJECT OBJECTIVE............................................................................................................................................... 6
HOW THE PROJECT WILL WORK ............................................................................................................................ 7
PROJECT PROCEDURE ............................................................................................................................................. 9
Getting Partners: ............................................................................................................................................... 9
Writing the Project Proposal ............................................................................................................................. 9
Project Presentation ........................................................................................................................................ 10
Project Report.................................................................................................................................................. 10
Guidance on cost estimation ............................................................................................................................ 10
ANSWERS TO FREQUENTLY ASKED QUESTIONS .................................................................................................. 11
Where do I get project ideas? .......................................................................................................................... 11
Once I have an idea, what do I do? ................................................................................................................. 11
How do I get assistance from my TA's? ........................................................................................................... 11
When do I sign up for my project presentation? .............................................................................................. 12
When and how do I get hardware for the project? .......................................................................................... 12
When is the lab available for project work? .................................................................................................... 12
PROJECT GRADING POLICY .................................................................................................................................. 13
PROGRAMMING THE MICROCONTROLLER ............................................................................................ 14
THRSIM11 SIMULATOR ....................................................................................................................................... 14
THRSim11 Options setup ................................................................................................................................. 14
Getting Started with Programming.................................................................................................................. 16
Using the template.asm File............................................................................................................................. 16
Screen/Window Capture .................................................................................................................................. 16
Default Windows.............................................................................................................................................. 17
MiniIDE Emulator ........................................................................................................................................... 19
PROGRAMMING FLOW CHART ............................................................................................................................. 21
BINARY AND HEX NUMBERS ............................................................................................................................... 23
The Binary System............................................................................................................................................ 23
Dr. Victor Giurgiutiu
Page i
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Table of Contents
Decimal to Binary Conversion: ....................................................................................................................... 24
Hexadecimal (Hex) Numbers ........................................................................................................................... 24
Binary Arithmetic............................................................................................................................................. 25
Negative Numbers in the Computer (2’s Complement numbers)..................................................................... 25
Numerical Conversion Chart for unsigned 8-bit binary integers .................................................................... 27
Numerical Conversion Chart for 2's complement signed 8-bit binary integers .............................................. 28
LOGIC GATES AND BOOLEAN ALGEBRA................................................................................................... 29
Logic Gates ...................................................................................................................................................... 29
Boolean Algebra .............................................................................................................................................. 31
CONDITION CODE REGISTER (CCR) .................................................................................................................... 32
BUFFALO COMMANDS ....................................................................................................................................... 33
BUFFALO COMMANDS ....................................................................................................................................... 33
DEBUGGING TIPS.................................................................................................................................................. 39
Microcontroller Problems ............................................................................................................................... 39
Hardware Problems......................................................................................................................................... 39
Software Problems ........................................................................................................................................... 39
THRSIM11 SIMULATION OF PARALLEL COMMUNICATION ................................................................................. 40
The THRSim11IO Box...................................................................................................................................... 41
ASCII AND BCD CODES................................................................................................................................... 42
THRSim11 Simulation of Serial Communication............................................................................................. 43
The THRSim11 Serial Transmitter................................................................................................................... 44
The THRSim11Serial Receiver......................................................................................................................... 45
THRSIM11 SIMULATION OF TIMER FUNCTIONS .................................................................................................. 46
THRSIM11 SIMULATION OF ANALOG TO DIGITAL CONVERSION ........................................................................ 47
EE ENGINEERING BASICS ............................................................................................................................... 48
BASIC MULTIMETER OPERATION ......................................................................................................................... 49
Basic Multimeter Information.......................................................................................................................... 49
Basic Measurement Procedures....................................................................................................................... 49
Multimeter Troubleshooting ............................................................................................................................ 49
BASIC OSCILLOSCOPE OPERATION ...................................................................................................................... 50
Basic Measurement Principles......................................................................................................................... 50
Trigger ............................................................................................................................................................. 51
Oscilloscope Troubleshooting.......................................................................................................................... 51
RESISTORS ............................................................................................................................................................ 52
Chart To Read Resistors .................................................................................................................................. 52
Resistors Available in the EMCH 367 Lab ...................................................................................................... 52
EMITTER-DETECTOR ............................................................................................................................................ 53
OPEN COLLECTOR COMPARATOR ......................................................................................................................... 54
OPEN COLLECTOR BUFFER .................................................................................................................................... 55
OP AMP ................................................................................................................................................................. 56
POWER TRANSISTOR ............................................................................................................................................. 56
PORT PROTECTION................................................................................................................................................ 57
generic input to microcontroller ports............................................................................................................. 57
port a protection .............................................................................................................................................. 58
optoisolator (open collector) ........................................................................................................................... 58
KEYBOARD AND DISPLAY CIRCUITS ..................................................................................................................... 59
EMCH367 HARDWARE LIST................................................................................................................................. 60
INTRODUCTION TO FUNCTIONAL MODULES ......................................................................................................... 65
ATTACHMENT 1: EMCH 367 PROJECT PROPOSAL ................................................................................. 66
Dr. Victor Giurgiutiu
Page ii
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Table of Contents
ATTACHMENT 2: PROJECT REPORT TEMPLATE.................................................................................... 67
1. EXECUTIVE SUMMARY ..................................................................................................................................... 71
2. INTRODUCTION ................................................................................................................................................. 71
3. TECHNICAL DESCRIPTION ................................................................................................................................ 71
3.1 System Overview ...................................................................................................................................... 71
3.2 Hardware Design ..................................................................................................................................... 71
3.3 Software Design........................................................................................................................................ 71
3.4 Acceptance Tests ...................................................................................................................................... 71
4. ECONOMIC ASPECTS......................................................................................................................................... 72
4.1 Prototype Costs ........................................................................................................................................ 72
4.2 Production Costs, Production Price, and Retail Price.......................................................................... 72
4.3 Commercial Feasibility............................................................................................................................ 72
5. CONCLUSIONS .................................................................................................................................................. 73
6. REFERENCES ..................................................................................................................................................... 73
ATTACHMENT 3: PRESENTATION TEMPLATE ........................................................................................ 74
EXAMPLES ........................................................................................................................................................... 76
EXAMPLES OVERVIEW.................................................................................................................................... 77
EXAMPLE 1........................................................................................................................................................... 82
OBJECTIVE............................................................................................................................................................ 82
PROGRAM ............................................................................................................................................................. 82
EXECUTION ........................................................................................................................................................... 82
WHAT YOU HAVE LEARNED ................................................................................................................................. 86
EXAMPLE 2........................................................................................................................................................... 88
OBJECTIVE............................................................................................................................................................ 88
PROGRAM ............................................................................................................................................................. 88
EXECUTION ........................................................................................................................................................... 88
WHAT YOU HAVE LEARNED ................................................................................................................................. 91
EXAMPLE 3........................................................................................................................................................... 94
OBJECTIVE............................................................................................................................................................ 94
PROGRAM ............................................................................................................................................................. 94
EXECUTION ........................................................................................................................................................... 94
WHAT YOU HAVE LEARNED ................................................................................................................................. 95
EXAMPLE 4........................................................................................................................................................... 96
OBJECTIVE............................................................................................................................................................ 96
PROGRAM ............................................................................................................................................................. 96
EXECUTION ........................................................................................................................................................... 96
Path 1 ............................................................................................................................................................... 98
Path 2 ............................................................................................................................................................. 100
WHAT YOU HAVE LEARNED ............................................................................................................................... 101
EXAMPLE 5......................................................................................................................................................... 102
OBJECTIVE.......................................................................................................................................................... 102
PROGRAM ........................................................................................................................................................... 102
EXECUTION ......................................................................................................................................................... 102
WHAT YOU HAVE LEARNED ............................................................................................................................... 103
Dr. Victor Giurgiutiu
Page iii
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Table of Contents
EXAMPLE 6......................................................................................................................................................... 104
OBJECTIVE.......................................................................................................................................................... 104
PROGRAM ........................................................................................................................................................... 104
EXECUTION ......................................................................................................................................................... 105
WHAT YOU HAVE LEARNED ............................................................................................................................... 109
EXAMPLE 7......................................................................................................................................................... 110
OBJECTIVE.......................................................................................................................................................... 110
PROGRAM ........................................................................................................................................................... 110
CODING AND EXECUTION ................................................................................................................................... 110
Section: 15 + 27 = 42 (decimal) using the opcode mnemonics LDAA, LDAB, ABA..................................... 111
Section: $0f + $1b = $2a (hex half-carry) using the opcode mnemonics LDAA, LDAB, ABA ..................... 112
$ff + $01 = $00 (MSB carry) using the opcode mnemonics LDAA, ADDA .................................................. 115
255 + 1 = 0 (decimal equivalent of hex MSB carry) using the opcode mnemonics LDAA, ADDA............... 116
WHAT YOU HAVE LEARNED ............................................................................................................................... 118
EXAMPLE 8......................................................................................................................................................... 120
OBJECTIVE.......................................................................................................................................................... 120
PROGRAM ........................................................................................................................................................... 120
CODING AND EXECUTION ................................................................................................................................... 120
Section: 7 – 1 = 6 (decimal) using the opcode mnemonics LDAA, SUBA..................................................... 122
Section: $07 - $01 = $06 (hex) using the opcode mnemonics LDAA, SUBA................................................. 123
Section: 10 - 1 = 9 (decimal) using the opcode mnemonics LDAA, SUBA.................................................... 124
Section: $10 - $01 = $0f (hex) using the opcode mnemonics LDAA, SUBA.................................................. 125
Section: $00 - $01 = $ff (hex) using the opcode mnemonics LDAA, SUBA .................................................. 126
Section: 0 - 1 = 255 (decimal equivalent of 8-bit hex arithmetic) using the opcode mnemonics LDAA, SUBA
....................................................................................................................................................................... 127
using calculator to obtain hex negative numbers for –100............................................................................ 127
WHAT YOU HAVE LEARNED ............................................................................................................................... 128
EXAMPLE 9......................................................................................................................................................... 130
OBJECTIVE.......................................................................................................................................................... 130
PROGRAM ........................................................................................................................................................... 130
CODING AND EXECUTION ................................................................................................................................... 131
Section: $0d - $06 = $07 (hex) using the opcode mnemonics LDAA, LDAB, SBA........................................ 132
Section: $00 - $05 = $fb (hex) using the opcode mnemonics LDAA, LDAB, SBA ........................................ 133
Section: 0 - 5 = 251 (decimal equivalent of 8-bit hex arithmetic) using the opcode mnemonics LDAA, LDAB,
SBA................................................................................................................................................................. 134
Section: $0e - $3a = $d4 (hex) using the opcode mnemonics LDAA, LDAB, SBA........................................ 135
Section: 14 - 58 = 212 (decimal equivalent of 8-bit hex arithmetic) using the opcode mnemonics LDAA,
LDAB, SBA..................................................................................................................................................... 136
WHAT YOU HAVE LEARNED ............................................................................................................................... 137
EXAMPLE 10....................................................................................................................................................... 139
OBJECTIVE.......................................................................................................................................................... 139
PROGRAM ........................................................................................................................................................... 139
CODING AND EXECUTION ................................................................................................................................... 140
Section: Represent numbers one, two, three, four, five, six, seven, eight, nine, ten, eleven, twelve, thirteen,
fourteen, fifteen, sixteen, seventeen in decimal, binary, and hex .................................................................. 141
Section: Perform 3 + 2 = 5 in binary and hex using LDAA, LDAB, ABA ..................................................... 146
Dr. Victor Giurgiutiu
Page iv
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Table of Contents
Section: Perform 13 – 6 =7 in binary and hex using LDAA, LDAB, SBA ..................................................... 148
Section: Perform $0f + $01 = $10 in binary and hex using LDAA, ADDA (half carry or bit 3 carry)......... 151
Section: Perform $10 -$01 = $0f in binary and hex using LDAA, SUBA...................................................... 155
Section: Perform $ff + $01 = $00 in binary and hex using LDAA, ADDA (MSB carry) .............................. 156
Section: Perform $00 - $01 = $ff in binary and hex using LDAA, SUBA...................................................... 159
Section: 1 AND 0 = 0 using LDAA, ANDA ................................................................................................... 161
Section: 1 OR 0 = 1 using LDAA, ORAA ...................................................................................................... 162
Section: 1 XOR 0 = 1 using LDAA, EORA.................................................................................................... 163
Section: 1 OR 1 = 1 using LDAA, ORAA ...................................................................................................... 164
Section: 1 XOR 1 = 0 using LDAA, EORA.................................................................................................... 165
Section: %11111111 NAND %00000000 = %11111111 using LDAA, ANDA, COMA ............................... 166
Section: %00000000 NOR %11111111 = %00000000 using LDAA, ORAA, COMA .................................. 168
Section: %10101110 AND %00000010 = %00000010 using LDAA, ANDA (masking)............................... 170
WHAT YOU HAVE LEARNED ............................................................................................................................... 172
EXAMPLE DELAY............................................................................................................................................. 175
OBJECTIVE ...................................................................................................................................................... 175
PROGRAM ........................................................................................................................................................... 175
CODING ............................................................................................................................................................... 175
EXECUTION ......................................................................................................................................................... 176
WHAT YOU HAVE LEARNED ............................................................................................................................... 184
EXAMPLE SQUARE WAVE............................................................................................................................. 185
OBJECTIVE ...................................................................................................................................................... 185
PROGRAMS.......................................................................................................................................................... 185
Program sq_wav1 .......................................................................................................................................... 186
FLOWCHART AND CODE ..................................................................................................................................... 186
EXECUTION ......................................................................................................................................................... 186
Program sq_wav2 .......................................................................................................................................... 194
FLOWCHART AND CODE ..................................................................................................................................... 194
EXECUTION ......................................................................................................................................................... 194
WHAT YOU HAVE LEARNED ............................................................................................................................... 197
EXAMPLE BUTTONS BOX.............................................................................................................................. 199
OBJECTIVE ...................................................................................................................................................... 199
PROGRAMS.......................................................................................................................................................... 199
Program Buttons_bx ...................................................................................................................................... 199
FLOWCHART AND CODE ..................................................................................................................................... 199
EXECUTION ......................................................................................................................................................... 200
WHAT YOU HAVE LEARNED ............................................................................................................................... 202
EXAMPLE SCI TRANSMISSION .................................................................................................................... 203
OBJECTIVE ...................................................................................................................................................... 203
PROGRAM SCI_TRANSMIT .................................................................................................................................... 203
FLOWCHART AND CODE ..................................................................................................................................... 203
EXECUTION ......................................................................................................................................................... 203
WHAT YOU HAVE LEARNED ............................................................................................................................... 207
EXAMPLE SCI RECEPTION ........................................................................................................................... 209
OBJECTIVE ...................................................................................................................................................... 209
PROGRAM SCI_RECEPT ...................................................................................................................................... 209
Dr. Victor Giurgiutiu
Page v
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Table of Contents
FLOWCHART AND CODE ..................................................................................................................................... 209
EXECUTION ......................................................................................................................................................... 209
WHAT YOU HAVE LEARNED ............................................................................................................................... 212
EXAMPLE INPUT CAPTURE TIMER FUNCTION ..................................................................................... 213
OBJECTIVE ...................................................................................................................................................... 213
PROGRAM EX_IC................................................................................................................................................ 213
FLOWCHART AND CODE ..................................................................................................................................... 213
EXECUTION ......................................................................................................................................................... 215
WHAT YOU HAVE LEARNED ............................................................................................................................... 220
EXAMPLE OUTPUT COMPARE TIMER FUNCTION................................................................................ 221
OBJECTIVE ...................................................................................................................................................... 221
PROGRAM EX_OC............................................................................................................................................... 221
FLOWCHART AND CODE ..................................................................................................................................... 221
EXECUTION ......................................................................................................................................................... 223
WHAT YOU HAVE LEARNED ............................................................................................................................... 231
EXAMPLE RPM_1 ............................................................................................................................................. 233
OBJECTIVE ...................................................................................................................................................... 233
PROGRAM EX_RPM_1 ....................................................................................................................................... 233
FLOWCHART AND CODE ..................................................................................................................................... 234
EXECUTION ......................................................................................................................................................... 235
WHAT YOU HAVE LEARNED ............................................................................................................................... 242
EXAMPLE RPM_2 ............................................................................................................................................. 243
OBJECTIVE ...................................................................................................................................................... 243
PROGRAM EX_RPM_2 ....................................................................................................................................... 243
FLOWCHART AND CODE ..................................................................................................................................... 244
EXECUTION ......................................................................................................................................................... 245
Example 1....................................................................................................................................................... 245
Example 2....................................................................................................................................................... 249
WHAT YOU HAVE LEARNED ............................................................................................................................... 252
EXAMPLE STEP................................................................................................................................................. 253
OBJECTIVE ...................................................................................................................................................... 253
PROGRAM EX_STEP .......................................................................................................................................... 253
FLOWCHART AND CODE ..................................................................................................................................... 255
EXECUTION ......................................................................................................................................................... 257
Case ‘Slow-Forward’ (STEP=$01) ............................................................................................................... 259
Case ‘Full-Forward’ (STEP=$02) ................................................................................................................ 266
Case ‘Half-Backward’ (STEP=$ff)................................................................................................................ 266
Case ‘Full-Backward (STEP=$fe)................................................................................................................. 266
WHAT YOU HAVE LEARNED ............................................................................................................................... 267
EXAMPLE LONG DELAY................................................................................................................................ 269
OBJECTIVE ...................................................................................................................................................... 269
PROGRAM EX_LONG_DELAY ............................................................................................................................. 269
FLOWCHART AND CODE ..................................................................................................................................... 270
EXECUTION ......................................................................................................................................................... 270
WHAT YOU HAVE LEARNED ............................................................................................................................... 272
Dr. Victor Giurgiutiu
Page vi
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Table of Contents
EXAMPLE SORT................................................................................................................................................ 273
OBJECTIVE ...................................................................................................................................................... 273
PROGRAM EX_SORT ........................................................................................................................................... 273
FLOWCHART AND CODE ..................................................................................................................................... 274
EXECUTION ......................................................................................................................................................... 276
Check the keystroke command > (forward)................................................................................................... 277
Check the keystroke command < (backward) ................................................................................................ 280
Check the keystroke command +(increase speed) ......................................................................................... 282
Check the keystroke command -(decrease speed).......................................................................................... 285
Check the keystroke command S (stop).......................................................................................................... 287
Further checks ............................................................................................................................................... 287
WHAT YOU HAVE LEARNED ............................................................................................................................... 288
EXAMPLE – A/D CONVERTER ...................................................................................................................... 289
OBJECTIVE.......................................................................................................................................................... 289
PROGRAM A/D CONVERTER ............................................................................................................................... 289
Single channel, single conversion, Mult=0, Scan=0 ..................................................................................... 289
FLOWCHART AND CODE ..................................................................................................................................... 289
EXECUTION ......................................................................................................................................................... 290
Single channel, continuous conversion, Mult=0, Scan=1 ............................................................................. 295
Multiple channel, Single Conversion, Mult=1, Scan=0 ................................................................................ 296
Multiple channel, Continuous conversion, Mult=1, Scan=1......................................................................... 298
WHAT YOU HAVE LEARNED ............................................................................................................................... 300
HOMEWORK ASSIGNMENTS........................................................................................................................ 301
EXERCISE 1 ........................................................................................................................................................ 303
GENERAL NOTE .................................................................................................................................................. 303
OBJECTIVE.......................................................................................................................................................... 303
PROGRAM ........................................................................................................................................................... 303
CODING AND EXECUTION ................................................................................................................................... 303
WHAT YOU HAVE LEARNED ............................................................................................................................... 305
EXERCISE 2 ........................................................................................................................................................ 307
GENERAL NOTE .................................................................................................................................................. 307
OBJECTIVE.......................................................................................................................................................... 307
PROGRAM ........................................................................................................................................................... 307
CODING AND EXECUTION ................................................................................................................................... 307
WHAT YOU HAVE LEARNED ............................................................................................................................... 309
EXERCISE 3-7..................................................................................................................................................... 311
GENERAL NOTE .................................................................................................................................................. 311
OBJECTIVE.......................................................................................................................................................... 311
PROGRAM ........................................................................................................................................................... 312
CODING AND EXECUTION ................................................................................................................................... 312
Section: 8 + 7 = 15 (decimal) using the opcode mnemonics LDAA, LDAB, ABA......................................... 312
Section: $08 + $07 = $0f (hex) using the opcode mnemonics LDAA, LDAB, ABA....................................... 312
Section: 9 + 9 = 18 (decimal) using the opcode mnemonics LDAA, LDAB, ABA......................................... 313
Section: $09 + $09 = $12 (hex) using the opcode mnemonics LDAA, adda, ................................................ 313
Section: $09 + $09 = $12 (hex) using the opcode mnemonics LDAA, LDAB, ABA...................................... 313
Section: 12 + 29 = 41 (decimal) using the opcode mnemonics LDAA, LDAB, ABA..................................... 314
Dr. Victor Giurgiutiu
Page vii
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Table of Contents
Section: $0c + $1d = $29 (hex) using the opcode mnemonics LDAA, LDAB, ABA ...................................... 314
$ff + $01 = $00 (hex) using the opcode mnemonics LDAA, ADDA .............................................................. 314
255 + 1 = 0 (decimal) using the opcode mnemonics LDAA, ADDA ............................................................. 314
WHAT YOU HAVE LEARNED ............................................................................................................................... 316
EXERCISE 8-9..................................................................................................................................................... 318
GENERAL NOTE .................................................................................................................................................. 318
OBJECTIVE.......................................................................................................................................................... 318
PROGRAM ........................................................................................................................................................... 318
CODING AND EXECUTION ................................................................................................................................... 319
Section: 8 - 1 = 7 (decimal) using the opcode mnemonics LDAA, SUBA...................................................... 319
Section: $08 - $01 = $07 (hex) using the opcode mnemonics LDAA, SUBA................................................. 319
Section: 20 - 1 = 19 (decimal) using the opcode mnemonics LDAA, SUBA ................................................. 319
Section: $20 - $01 = $1f (hex) using the opcode mnemonics LDAA, SUBA.................................................. 320
Section: $00 - $01 = $ff (hex) using the opcode mnemonics LDAA, SUBA .................................................. 320
Section: 0 - 1 = 255 (decimal equivalent of 8-bit hex arithmetic) using the opcode mnemonics LDAA, SUBA
....................................................................................................................................................................... 320
Section: $0f - $07 = $08 (hex) using the opcode mnemonics LDAA, LDAB, SBA ........................................ 320
Section: $00 - $07 = $f9 (hex) using the opcode mnemonics LDAA, LDAB, SBA ........................................ 321
Section: 0 - 7 = 249 (decimal equivalent of 8-bit hex arithmetic) using the opcode mnemonics LDAA, LDAB,
SBA................................................................................................................................................................. 321
Section: $0f - $2b = $e4 (hex) using the opcode mnemonics LDAA, LDAB, SBA......................................... 321
Section: 15 - 43 = 228 (decimal equivalent of 8-bit hex arithmetic) using the opcode mnemonics LDAA,
LDAB, SBA..................................................................................................................................................... 321
use calculator to obtain hex negative numbers of –56 and –120................................................................... 321
WHAT YOU HAVE LEARNED ............................................................................................................................... 322
EXERCISE 10 ...................................................................................................................................................... 324
GENERAL NOTE .................................................................................................................................................. 324
OBJECTIVE.......................................................................................................................................................... 324
PROGRAM ........................................................................................................................................................... 324
CODING AND EXECUTION ................................................................................................................................... 325
Section: Represent numbers one, two, three, four, five, six, seven, eight, nine, ten, eleven, twelve, thirteen,
fourteen, fifteen, sixteen, seventeen in decimal, binary, and hex ................................................................... 325
Section: Perform 5 + 4 = in binary and hex using LDAA, LDAB, ABA .................................................... 326
Section: Perform 15 – 7 = in binary and hex using LDAA, LDAB, SBA ................................................... 326
Section: Perform $1f + $01 = $ in binary and hex using LDAA, ADDA (bit 3 carry).............................. 326
Section: Perform $20 -$01 = $ in binary and hex using LDAA, SUBA .................................................... 326
Section: Perform $ff + $01 = $ in binary and hex using LDAA, ADDA (MSB carry) .............................. 326
Section: Perform $00 - $01 = $ in binary and hex using LDAA, SUBA .................................................... 326
Section: 0 AND 1 = using LDAA, ANDA .................................................................................................. 327
Section: 0 OR 1 = using LDAA, ORAA ...................................................................................................... 327
Section: 0 XOR 1 = using LDAA, EORA ................................................................................................... 327
Section: 1 OR 1 = using LDAA, ORAA ...................................................................................................... 327
Section: 1 XOR 1 = using LDAA, EORA ................................................................................................... 327
Section: %00000000 NAND %11111111 = %
using LDAA, ANDA, COMA .......................................... 327
Section: %11111111 NOR %00000000 = % using LDAA, ORAA, COMA ............................................... 328
Section: %10101110 AND %00001000 = %
using LDAA, ANDA (masking) ........................................ 328
WHAT YOU HAVE LEARNED ............................................................................................................................... 328
EXERCISE DELAY ............................................................................................................................................ 330
Dr. Victor Giurgiutiu
Page viii
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Table of Contents
PROGRAM ........................................................................................................................................................... 330
FLOWCHART ....................................................................................................................................................... 330
CODING ............................................................................................................................................................... 330
EXECUTION ......................................................................................................................................................... 330
WHAT YOU HAVE LEARNED ............................................................................................................................... 333
EXERCISE SQUARE WAVE ............................................................................................................................ 334
PROGRAMS.......................................................................................................................................................... 334
Program sq_wav1 .......................................................................................................................................... 334
FLOWCHART ....................................................................................................................................................... 334
CODING ............................................................................................................................................................... 334
EXECUTION ......................................................................................................................................................... 335
FLOWCHART ....................................................................................................................................................... 338
CODING ............................................................................................................................................................... 338
EXECUTION ......................................................................................................................................................... 338
WHAT YOU HAVE LEARNED ............................................................................................................................... 339
EXERCISE BUTTONS BOX ............................................................................................................................. 340
GOALS AND OBJECTIVES ..................................................................................................................................... 340
BASIC CONCEPTS ............................................................................................................................................... 340
PROGRAM BUTTONS_BX .................................................................................................................................... 340
FLOWCHART ....................................................................................................................................................... 341
CODING ............................................................................................................................................................... 341
EXECUTION ......................................................................................................................................................... 341
WHAT YOU HAVE LEARNED ............................................................................................................................... 342
EXERCISE -- SERIAL COMMUNICATION.................................................................................................. 344
OBJECTIVE.......................................................................................................................................................... 344
BASIC CONCEPTS ............................................................................................................................................... 344
PROGRAM ECHO ................................................................................................................................................. 345
Instructions .................................................................................................................................................... 346
FLOWCHART ....................................................................................................................................................... 346
CODING ............................................................................................................................................................... 346
EXECUTION ......................................................................................................................................................... 347
EXERCISE TIMER FUNCTIONS .................................................................................................................... 348
GOALS AND OBJECTIVES ..................................................................................................................................... 348
PART I -- BASIC CONCEPTS ................................................................................................................................ 348
PART II: INPUT CAPTURE – BOLT DROP EXPERIMENT TIMER PROGRAM ........................................................... 350
FLOWCHART ................................................................................................................................................ 352
coding............................................................................................................................................................. 352
execution ........................................................................................................................................................ 352
PART III: OUTPUT COMPARE – SQUARE WAVE GENERATION ............................................................................ 353
Flowchart....................................................................................................................................................... 353
Coding............................................................................................................................................................ 353
Execution........................................................................................................................................................ 353
EXERCISE DC MOTOR TACHOMETER...................................................................................................... 356
GOALS AND OBJECTIVES ..................................................................................................................................... 356
PART I – THEORY OF DC MOTORS (30%)........................................................................................................... 356
PART II – DC MOTOR TACHOMETER PROGRAM (70%)...................................................................................... 357
Dr. Victor Giurgiutiu
Page ix
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Table of Contents
The program Instructions .............................................................................................................................. 359
FLOWCHART ................................................................................................................................................ 359
CODING ........................................................................................................................................................ 359
EXECUTION ......................................................................................................................................................... 359
Verification of Case 1 of Example_RPM_2 ................................................................................................... 360
Verification OF Case 2 of Example_RPM_2 ................................................................................................. 362
WHAT YOU HAVE LEARNED ............................................................................................................................... 364
EXERCISE – STEPPER MOTOR..................................................................................................................... 366
OBJECTIVE.......................................................................................................................................................... 366
BASIC CONCEPTS ............................................................................................................................................... 366
PROGRAM STEPPER MOTOR ................................................................................................................................ 367
flowchart ........................................................................................................................................................ 368
coding............................................................................................................................................................. 368
execution ........................................................................................................................................................ 368
WHAT YOU HAVE LEARNED ............................................................................................................................... 369
EXERCISE – A/D CONVERTER...................................................................................................................... 370
OBJECTIVE.......................................................................................................................................................... 370
BASIC CONCEPTS ............................................................................................................................................... 370
PROGRAM A/D CONVERTER ............................................................................................................................... 371
Program Description ..................................................................................................................................... 371
flowchart ........................................................................................................................................................ 371
coding............................................................................................................................................................. 371
execution ........................................................................................................................................................ 372
WHAT YOU HAVE LEARNED ............................................................................................................................... 372
LABS ..................................................................................................................................................................... 374
LAB HANDOUT.................................................................................................................................................. 375
MINIIDE INSTRUCTIONS ............................................................................................................................... 375
LAB 1 - BASIC PROGRAMMING ................................................................................................................... 380
OBJECTIVE ...................................................................................................................................................... 380
PREREQUISITES ............................................................................................................................................. 380
PROCEDURE.................................................................................................................................................... 380
LAB 2 – PARALLEL AND SERIAL COMMUNICATION ........................................................................... 384
OBJECTIVE ...................................................................................................................................................... 384
PREREQUISITES ............................................................................................................................................. 384
PROCEDURE.................................................................................................................................................... 384
WARM UP EXERCISES ................................................................................................................................ 385
SQUARE WAVE............................................................................................................................................... 386
BUTTONS BOX................................................................................................................................................ 387
SERIAL COMMUNICATION ECHO .............................................................................................................. 388
LAB 3 – TIMER FUNCTIONS: BOLT DROP AND SQUARE WAVE ........................................................ 392
OBJECTIVE.......................................................................................................................................................... 392
PREREQUISITES ............................................................................................................................................. 392
PROCEDURE.................................................................................................................................................... 392
PART I – BOLT DROP EXPERIMENT (50%) ......................................................................................................... 393
Wiring Diagram ............................................................................................................................................. 393
Dr. Victor Giurgiutiu
Page x
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Table of Contents
Bolt Drop Circuit Diagram............................................................................................................................ 394
Pre-test Procedure ......................................................................................................................................... 394
Test Procedure ............................................................................................................................................... 395
PART II – SQUARE WAVE GENERATION WITH TIMER FUNCTIONS (50%).......................................................... 397
Wiring Diagram ............................................................................................................................................. 397
Test Procedure ............................................................................................................................................... 397
LAB 4 – DC MOTOR TACHOMETER............................................................................................................ 398
OBJECTIVE.......................................................................................................................................................... 398
PREREQUISITES ............................................................................................................................................. 398
PROCEDURE.................................................................................................................................................... 398
EXPERIMENTAL SETUP ....................................................................................................................................... 398
Wiring Diagram ............................................................................................................................................. 399
Circuit Diagram............................................................................................................................................. 399
PRE-TEST PROCEDURE ....................................................................................................................................... 400
PART I –DC MOTOR SPEED-VOLTAGE CHARACTERISTIC (30%)......................................................................... 400
PART II – DC MOTOR TACHOMETER (70%)....................................................................................................... 401
LAB 5 STEPPER MOTOR AND A/D CONVERSION ................................................................................... 404
OBJECTIVE.......................................................................................................................................................... 404
PART I – STEPPER MOTORS .......................................................................................................................... 404
PREREQUISITES ............................................................................................................................................. 404
PROCEDURE.................................................................................................................................................... 404
EXPERIMENTAL SETUP ....................................................................................................................................... 404
Circuit Diagram............................................................................................................................................. 405
Wiring Diagram ............................................................................................................................................. 405
PRE-TEST PROCEDURE ....................................................................................................................................... 405
STEPPER MOTOR CONTROL PROGRAM ................................................................................................................ 406
PART II – A/D CONVERSION .......................................................................................................................... 407
PREREQUISITES ............................................................................................................................................. 407
PROCEDURE.................................................................................................................................................... 407
EXPERIMENTAL SETUP ....................................................................................................................................... 407
Wiring Diagram ............................................................................................................................................. 408
EQUIPMENT LIST ................................................................................................................................................ 408
PRE-TEST PROCEDURE ....................................................................................................................................... 408
AD CONVERTION TEST PROCEDURE .............................................................................................................. 408
APPENDIX 1 HEX_BCD.................................................................................................................................... 410
APPENDIX 2 HOW TO SOLDER..................................................................................................................... 412
HOW TO SOLDER ................................................................................................................................................ 412
COLD SOLDER JOINTS ........................................................................................................................................ 414
TIPS AND TRICKS................................................................................................................................................ 414
APPENDIX 3 FLOW CHART TEMPLATE .................................................................................................... 416
BASIC FLOWCHART COMPONENTS ..................................................................................................................... 416
EXAMPLE FLOWCHART – DELAY PROGRAM ...................................................................................................... 416
APPENDIX 4 EXPLANATION OF EXAMPLE OUTPUT COMPAE TIMER FUNCTION..................... 418
Dr. Victor Giurgiutiu
Page xi
8/19/2008
EMCH 367
Dr. Victor Giurgiutiu
Microcontrollers in Mechanical Engineering
Page xii
Table of Contents
8/19/2008
GENERAL INFORMATION
SYLLABUS
Catalog Data:
Description:
Textbooks:
References:
Content Category:
Coordinator:
TA’s:
Required tools:
Website:
EMCH 367 Fundamentals of Microcontrollers
Credit: 3 hours
Prerequisite: EECE 221 Basic Electric Circuits,
EMCH 361 Measurements and Instrumentation
Study of microcontrollers and their applications as measurement and control
devices in mechanical systems
Giurgiutiu, V. and Lyshevski, S. E. “Micromechatronics”, CRC Press 2004
“EMCH 367 Fundamentals of Microcontrollers (USC-DME Notes)”
M68HC11 Reference manual; MC68HC11A8 programming reference guide,
Motorola, Inc. + additional references.
Basic Science: 20%, Engineering Science 80%
Lingyu (Lucy) Yu, 777-0619 (O), 777-0106 (FAX) yu3@engr.sc.edu
Office Location: 300 Main St. (Old SCE&G Building); Room A236
Office Hours: 10:00 am - 11:00 am Monday – Friday and when door is open
TA’s are assigned for each section – see assignment list in the general lab
information section.
PC with THRSim11 installed (USC rooms B202 and A235 have it!)
Pocket calculator with Hex, Bin, and Oct, and logics operators (e.g., TI-34)
http://www.me.sc.edu/courses/emch367
INSTRUCTIONAL OBJECTIVES
During the course:
1. The student will gain knowledge about the microcontroller and how it can be used in modern
machinery.
2. The student will achieve comprehension of the microcontroller principles, functions, and its
interaction with the rest of the world via sensors, actuators, and programming.
3. The student will gain hands-on experience through lab work and course project.
4. The student will develop analysis, synthesis, and communication skills through the course project.
After the course [Dept. Objectives and Outcomes] (Assessment method)
1. Students will be able to demonstrate knowledge and comprehension of the microcontroller and of
its use for sensing and actuation control of engineering systems, and of its role in modern society
[1.1, 1.2, 5.1] (1, 2, 3, 4)
2. Students will be able to demonstrate application ability by programming the microcontroller to
perform sensing and actuation control functions [1.2] (1, 2, 3, 4)
3. Students will be able to demonstrate application ability by performing laboratory experiments for
demonstrating the sensing and actuation control functions of the microcontroller [1.3] (2, 4).
4. Students will be able to demonstrate synthesis ability by designing, constructing and testing, in a
teamwork environment, proof-of-concept demonstrations of the microcontroller sensing and
actuation control functions in solving practical engineering problems [1.3, 3.1, 3.2, 4.3] (4)
5. Students will be able to demonstrate communication ability by presenting in written and oral format,
in a teamwork environment, the project development and results, and by performing hand-on
demonstrations [4.1, 4.3] (4)
6. The student will be better prepared for the job market in the third millennium.
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
COURSE DESCRIPTION
This course is designed to give mechanical engineers a basic understanding of microcontrollers and their
use in a mechanical engineering environment. This study of microcontrollers will consist of the
following main parts:
TOPICS
1. Review of circuits and semiconductor devices
2. Digital logic and arithmetic; Boolean algebra; Logic gates.
3. Basic microcontroller architecture; internal data handling and control, arithmetic-logic unit (ALU),
input-output.
4. Microcontroller programming language and opcodes (Assembly).
5. Digital sensing and control through input and output parallel communication
6. Control through asynchronous serial communication
7. Sensing and control through timer input capture and output compare functions
8. Actuation control via digital to analog conversion; digital control of DC motor actuation
9. Direct digital control of stepper motor actuators
10. Sensing of sensor signals through analog to digital conversion; sampling theory.
11. Design project.
Assessment Methods:
1. Homework
2. Labwork
3. Tests
4. Project
GRADING POLICY
The final grade consists of grades from attendance, two tests, laboratory experiments and a final project:
Attendance
Homework
Labs
Circuit practice
Tests (2 x 10% each)
Project
5%
25%
25%
5%
20%
20%
Attendance is REQUIRED and takes 5% in the final grade. If you have a good excuse, please notify the
instructor ahead of time (no late excuse will be accepted). However, this should not happen over three
times. Absence without a reason will be one point off and five will be the maximum.
Homework, labs, tests, circuit practice and project must be completely done/submitted, and borrowed
items must be returned before final grade can be calculated. (Otherwise, a grade of Incomplete will
be assigned.)
Guidelines for letter grade assignment of the final grades are:
94%-100%
88%-93%
82%-87%
76%-81%
70%-75%
65%-69%
60%-64%
≤ 60%
Dr. Victor Giurgiutiu
A
B+
B
C+
C
D+
D
F
Page 2
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
HOMEWORK REQUIREMENTS
Homework, as assigned in the Schedule, is due on the day shown in the schedule, before the class starts.
Homework should be submitted to your section TA for grading.
Printed paper of Homework is preferred.
Homework should be completed independently. Copied homework will be dealt with in accordance to
the Honor Code of the University of South Carolina.
If the homework is not handed on time, it is late, and the following penalty system applies:
ƒ Up to 3 days from the due date, 10 points
ƒ After 3 days from the due date, 50 points
After one week, ALL points will be penalized.
LABORATORY REQUIREMENTS
All students are required to attend their laboratory sections. Labs meet once a week, three hours a
session. Students are encouraged to do the labs in groups of two students. Students should bring
corresponding lab pages of the course package and home works to the labs. Other lab policies will be
announced on the day of lab orientation.
PROJECT REQUIREMENTS
All students will be required to complete a practical project for this course. In addition to this final
deadline, several other intermediate "milestones" are required. For in-depth information on the specific
project requirements see the project section.
ELECTRONIC FILES REQUIREMENTS
• LASTNAME_Firstname_Hmwk_X_Y.doc for Word doc homework files, where X is the
homework number and Y is the exercise number or name
• LASTNAME_Firstname_Lab_X.doc for Word doc lab report files, where X is the lab number
• LASTNAME1_LASTNAME2_Proj.doc for Word doc project report files
• LASTNAME1_LASTNAME2_Proj.ppt for PowerPoint project presentation files
• Hw_X_Y.asm for .asm lab files, where X is the homework number and Y is the item number.
Put your last name and first name in the asm file.
• Lab_X_Y.asm for .asm lab files, where X is the lab number and Y is the item number in that lab.
• To write an .asm Assembler file, use the template available on the web site. Before you actually
use it, personalize it by substituting LASTNAME, Firstname with your actual last name and first
name.
Note that the .asm file names are not personalized in order to stay within the standard file name length.
However, you should personalize it inside the document by writing your name as a comment on the first
line. As explained above, this is easiest done in the template.
NOTES: THE NETWORK ADDRESS FOR PLACING THE HOMEWORK AND LAB REPORT
FILES WILL BE PROVIDED BY YOUR TA.
The network address for placing the project report and project presentation files is
\\me-lamss9a\EMCH367_Proj_DROP . You can access it by:
• Click the Start button on the left of the status bar, select Run
• In the command line, type in the \\me-lamss9a\EMCH367_Proj_DROP and Drop your files in
this folder
Note: both project report WORD file and project presentation PowerPoint file are required!
Dr. Victor Giurgiutiu
Page 3
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
ADDITIONAL REFERENCES
1.
Engineer's Mini Notebook Series, Radio Shack, Inc.
Radio Shack publishes a series of simple and easy to understand electronics manuals. Most are written
by Forrest M. Mims, III. They are easy to read and come with many basic descriptions of electronics
concepts and components. In addition, they usually contain complete circuit diagrams that can come
handy in projects.
Title
Schematic Symbols, Device Packages, Design And Testing
Formulas, Tables, and Basic Circuits
Basic Semiconductor Circuits
Op Amp IC Circuits
Digital Logic Circuits
555 Timer Circuits
Communication Projects
Environmental Projects
Optoelectronics Circuits
Science Projects
Sensor Projects
Catalogue #
276-5017
62-5016
62-5013
62-5011
62-5014
62-5010
62-5015
62-5019
276-5012A (*)
62-5018
62-5026
TOTAL
Price
$1.99
$1.99
$1.99
$1.99
$1.99
$1.99
$1.99
$1.99
$1.99
$1.99
$1.99
$21.89
NOTE: (*) It may no longer be available in some stores since Radio Shack is updating this item.
2.
3.
4.
5.
6.
7.
National Semiconductor Databooks
Found in the lab, these books contain all the technical specifications of the electronic devices we
will use. They are generally called "The Blue Books."
Stiffler, A. K., “Design with Microcontrollers for Mechanical Engineers”, McGraw Hill, 1992,
ISBN 0-07-061374-5
Histand, M. B. and Aciatore, D. G., “Introduction to Mechatronics and Measurement Systems”,
WCB McGraw Hill, 1999, ISBN 0-07-029089-X
The Engineering Handbook. Richard C. Dorf (Ed), CRC Press, 1995, ISBN 0-8493-8344-7.
Mark’s Standard Handbook of Mechanical Engineers, E. A. Avallone and T. Baumeister III, 9th
Edition, McGraw Hill, 1987.
The Way Things Work. David Macaulay
An easy-to-understand and sometimes humorous explanation of many of the electro-mechanical
elements discussed in this course. (Transistors, microcontrollers, logic gates, etc. can be found in
this enjoyable book.)
TEST FORMAT
There are two open-book open-note tests in total and the dates are listed in the class schedule. All
students are required to attend the tests. The tests will be hold in a computer lab and students need to
finish the problems in 60 minutes. Test papers and floppy disks containing the test document are given
to students. Students can write answers on either of them and are required to turn in both when the test
is finished. The test problems will include questions, choices, and programming.
Please be aware that the tests are “open book, open notes”. I hope this is good news to you! However, be
warned that PAST TESTS ARE NOT INCLUDED IN THE "OPEN BOOK, OPEN NOTES"
CATEGORY AND HENCE ARE NOT PERMITTED DURING TESTS.
Dr. Victor Giurgiutiu
Page 4
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
EMCH 367 LAB
Lab Objective
This lab will give you hands-on experience with the MC6811 microcontroller and its interfacing
with other electro-mechanical devices. You will work in teams. However, the grading will be
individual, based on pre-lab quiz, your performance, and lab report. The principles learned
during the lab will be applied during the course project period.
Lab 1
Lab 2
Lab 3
Lab 4
Lab 5
Basic Programming
Parallel and Serial Communication
Timer Functions
DC Motor Tachometer
Stepper Motors and AD conversion
It should be noted that the successful completion of the labs is essential to the successful completion of
the project. In most cases, 50% - 75% of project code is little more than lab code. As such, you have a
personal stake in the successful completion of the labs.
Lab location: A235 – Door key will be assigned during final project period.
Dr. Victor Giurgiutiu
Page 5
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
LAB GRADING POLICIES
Individual lab grades will count for 100% of the final lab grade.
1)
50% of the individual lab grade will be based on the preparation work done before
the lab. There will be a prelab quiz (10%) which will be counted in the prelab
points: Pre-Lab points.
2)
25% of the individual lab grade will be based on in lab participation: TA points.
3)
25% of the individual lab grade will be based on the level of success in
completing the lab goals: In-Lab points.
LAB POLICIES
1)
Attendance is mandatory! If you miss a lab and do not make it up you will receive 0% for the
total lab grade!
2)
The completion of the pre-lab assignment is vital to the success of the laboratories. There will be
a 50% penalty for anyone not prepared for the day's lab. Address all questions and prepare all
programs (write, type, save on floppy disk) before coming to the lab. A printed copy of all
codes with annotations is required.
3)
The following must be completed before the lab:
a)
All written questions, predictions, or problems not requiring lab hardware.
b)
Program flowcharts
c)
A printout of all program code for the lab
d)
The programs saved on a floppy disk
4)
If you do not complete a lab, you may choose to hand it late. Labs will be accepted up to 1 week
after your normal laboratory class, in consultation with your lab TA. You must arrange with your
TA a time outside the normal lab hours when you will show the TA your completed lab. This
time cannot be the next lab period!
5)
If you leave the lab prior to the end of the lab period without successfully completing the lab
goals, you will receive no credit for that lab.
6)
If a student needs to change a laboratory section due to an unexpected conflict (i.e. interview,
illness, etc.) and go to a different section, both TA's must agree to the rescheduling. Due to the
limited availability of supplies, labs are limited to a maximum of 9 students.
EMCH 367 PROJECT
One of the best learning experiences that a student can have is to work, HANDS-ON, with tools,
computers, and other devices. For this reason, the EMCH 367 course has a cumulative final project. This
project will involve a team of two students developing a microcontroller-controlled application.
PROJECT OBJECTIVE
Throughout the labs, you have been learning how to apply microcontroller functions to various electromechanical systems. The project will be the application of all of these skills and the culmination of your
efforts. You will work in team, just like in the lab. This will strengthen your team-working aptitudes,
since the grade will be shared equally by the team partners. You and your partner(s) will develop the
project idea and submit a brief proposal prior to the start of the project period to the assigned project TA.
The TA and students will iterate on the project idea until a suitable project is obtained.
Dr. Victor Giurgiutiu
Page 6
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
HOW THE PROJECT WILL WORK
First, you must develop an idea. The idea can come as an improvement to an existing device through the
use of microcontrollers (I'm sure that you can think of a few) or a process which may not have been able
to be done before microcontrollers. Some examples from previous semester projects are available on the
course website. For each idea, there are four conceptual aspects that must be specified:
• how can a process be controlled (using a microcontroller),
• what makes the use of a microcontroller better than that of a physical system,
• how can this process be SIMULATED, and
• IN WHAT WAY DOES THE MICROCONTROLLER THINK?
Description of these aspects follows.
1.
HOW CAN A PROCESS BE CONTROLLED USING A MICROCONTROLLER:
Microcontrollers have a large amount of control capability. Most processes can be controlled through a
combination of a microcontroller and external circuitry. The essential aspect in relation to the project is
to figure out how it should be done. Two steps must be considered: measuring external events, and
acting on the judgments of the microcontroller to reach the project objective.
During the course of the class and lab experience, you will learn many aspects of data acquisition and
communication. These include time measurement (using the input capture functions), time scheduling
(output compare function), parallel communication, serial communication, and measurement of analog
signals (A/D converter). By using a combination of these tools, the microcontroller can determine a lot
about its environment. Similarly, the output compare, parallel communication, and serial communication
can output different signals. These signals, through the proper use of circuitry, can be translated to
useful control over external devices such as motors, magnets, pumps, etc. In this manner, the
microcontroller can become a valuable measuring and control tool. Discussing potential project ideas
with your TA will help.
2.
WHAT MAKES THE USE OF A MICROCONTROLLER BETTER THAN THAT OF
A PHYSICAL SYSTEM:
Now that you have determined that a microcontroller can control your desired system, the following
question arises: why would someone want to use a microcontroller for your system? Some things can be
performed very well using only physical mechanisms (door handles, for example). Why would someone
want to improve upon that by using a computer control? (This is done in a variety of places....) What
benefit does the use of the microcontroller bring? The answer can be rather complex. A few examples
are:
Dr. Victor Giurgiutiu
Page 7
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
Rapid learning -smart machinery can learn a new process by being shown once
Record keeping -how many candy bars were bought? when do we run out?
Fast response -try making anti-lock braking without a microcontroller
Discussion about the system qualities that can be improved by using a microcontroller will be also
emphasized in the course. Do not hesitate to talk to the instructor and TA’s about this.
3.
HOW CAN THIS PROCESS BE SIMULATED:
We have very few external resources for this lab. We can't buy a car because someone wants to do an
anti-lock braking system. Moreover, this is a microcontroller project, NOT A PROJECT
INVOLVING THE UNIVERSITY OF SOUTH CAROLINA MACHINE SHOP. We have a
number of simulation tools including Lego, Erector Sets, etc. to model physical systems. We have a
number of pumps, motors (stepper and DC), digital display chips, LED's, IR emitter-detectors,
potentiometers, cermets, etc. Using some combination of these tools, you should be able to simulate the
process. YOU ARE REQUIRED TO BUILD ALL CIRCUITRY ASSOCIATED WITH YOUR
PROJECT. A brief list of available circuitry and other parts is shown below:
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Breadboards
Various PINs
Various connectors
BNC miscellaneous
LED's
Buffers
7-Segment Displays
IR Emitter-Detectors
Piston Pumps
Logic Gates
Capacitors
Comparators
Potentiometers
DC Motors
Servo Motors
Various Sensors, including magnetic sensors, motion sensors, E/D, pressure sensors,
temperature sensors, thermocouple, etc
Speakers
Latch
Decade counters
Decoders
Solders
Power Adaptors
Voltage Regulators
Voltage Meters
Solenoids
Wire
Resistors
Miscellaneous Chips
Stepper Motors
Mosfets
Transistors
Dr. Victor Giurgiutiu
Page 8
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
A complete list is provided at the end of the package.
You will be building the external circuitry to the microcontroller. OPTOISOLATOR, 8-PIN LED
DISPLAYS, AND ANY OTHER PROTECTION CIRCUITRY ARE REQUIRED TO STAY IN
THE LAB. If you let the instructor know of a desired part that is not available early enough, there is a
possibility that it can be ordered or purchased through a local distributor. Don't hesitate to discuss
simulation ideas with your TA.
4.
IN WHAT WAY DOES THE MICROCONTROLLER “THINK”:
This is what separates the projects from the labs. In the labs, you develop tools and learn one simple
application. In the project, you combine the tools developed in the lab and develop a methodology for
the microcontroller to make intelligent decisions. A SWITCH DOES NOT MAKE INTELLIGENT
DECISIONS. If I switch on a light switch, that requires very little microcontroller thought. If I switch
on a light because I detected motion, and can then follow and more or less predict the direction of the
motion, then it is no longer a simple switch, but a complex device making intelligent decisions. After
determining the relevant parameters in the environment by making whatever measurements are
necessary, the microcontroller must determine the condition of the surroundings. Are the measured
parameters within tolerances for whatever process is being controlled? If there is an immediate problem,
the microcontroller must act to try to correct the problem immediately.
What about the "long term" control? The best way to control a process is to correct for problems before
they occur, to react to indications that a process may be heading in the wrong direction, and thus prevent
any immediate problems from occurring. The microcontroller is especially adept at performing these
predictive activities. With memory to store the results of the past measurement, the microcontroller can
quickly compare data points and determine trends. Based on these trends, the microcontroller can
predict the state of affairs at a future time. This is often referred to as extrapolation. By extrapolating
over very short time periods (the microcontroller can do this on the order of millionths of seconds), the
microcontroller can obtain a very good approximation of future behavior. It can then act to maintain the
desired external conditions. By comparing the effects of its actions and the behavior of the environment,
the microcontroller can gage its progress in maintaining the control of the external system. This is one
of the primary reasons that people use microcontrollers. THEY THINK!!!! Your project must
think, as well.
PROJECT PROCEDURE
The following are procedural aspects of the project: getting partners, writing a proposal, project
presentation and final report submission.
GETTING PARTNERS:
A project is, by definition, more involved than a laboratory exercise. As such, students will be
allowed to work in teams of two~four. In order to ensure that the teams are developed early
enough for the students to start discussing the project and developing ideas. The project teams
should be emailed to head TA by the deadline shown in the Schedule section of this document.
Any student not able to form a team by the end of class on that date should contact the head TA
by email to request the assignment be done by the head TA ex officio.
WRITING THE PROJECT PROPOSAL
Before going into full development work for the project, a proposal is required. A long, drawn
out doctoral dissertation is not expected or desired. All that is necessary is a short description of
the project idea. Show why a microcontroller would be good for this process, how this project is
Dr. Victor Giurgiutiu
Page 9
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
not a simple “switch”, and how the microcontroller “thinks and takes decisions”. Ideas for
simulation are helpful, but not required. The purpose of this is to make sure that you are thinking
about the project and doing some background development. In addition, progress reports like this
are often useful to organize your thoughts. It will also help you develop the list of hardware
necessary for your project. To ensure that you are thinking about the project ahead of time, the
project proposal is worth 10% of the project grade. The project proposal, including the hardware
list, should be emailed to the instructor by the deadline shown in the Schedule section of this
document. It should be noted that that this date leaves you approximately one month to do the
rest of the work. It should also be noted that labs are wrapping up at that time.
PROJECT PRESENTATION
Formal project presentations will be organized for each group in the lab on the date shown in the
Schedule section of this document. PowerPoint presentations are required. The presentation
should be planned to last 20 min, including real-life demonstration in the lab and questions time.
Consider that any topics related to your project, even remotely, can be asked by the instructor
and the TA's. This includes both hardware and software components of the project, as well as
utility, applicability, and commercialization. There is a very basic template available on the
EMCH 367 website.
PROJECT REPORT
The Project Report should address everything involved in the project. This includes: circuit
diagrams, software flowcharts, a relevant description of your program, the purpose of your
project, and why microcontrollers are a good device for this process. These are all things that you
should be developing through the course of the project. The preparation required for the project
report should be minimal, provided you keep good notes during the project and perform it in an
organized way. Examples of past project reports are available. They may be obtained from your
TA. These reports must stay in the lab. There is also a template available on the EMCH 367
website.
GUIDANCE ON COST ESTIMATION
In the project report, you will be required to give estimation of the prototype cost and of the cost
of producing of 1000 items. Excel spreadsheets are included in the report template to assist you.
For the prototype cost estimation, you need to figure out how much time and rates of pay for the
design (Engineer), production (Technician) and any other technical support (e.g. from your TAs).
The Total Personnel Costs is the sum of the above 3 items. The Total Direct Costs is the sum of
Total Personnel Costs and Materials. The Indirect Costs is estimated as 45% of the Total Direct
Cost (you may put other values, if you have a good reason). The Total Prototype Costs is the sum
of Total Direct Costs and Indirect Costs.
For the production of 1000 items, you need to take wholesale into consideration, which helps
you save money. In the production case, the time for Engineer, Technician and Others is not
simply multiplying the time of prototype by 1000. The reason is that you don’t need to design or
get help for each item. Hence large production runs need less money per unit (economy of
scale!). This also applies to the estimation of Materials. You might pay much less for an item if
Dr. Victor Giurgiutiu
Page 10
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
you buy 1000, compared with the case of one purchase only. In the example in the project report,
the materials cost for prototype is $100, but $50 for 1000 purchase (Profit also needs to be
considered in production runs). In the end, dividing the Total Factory Price by 1000, you get the
Factory Retail Price per Item.
ANSWERS TO FREQUENTLY ASKED QUESTIONS
WHERE DO I GET PROJECT IDEAS?
Look all around you. Microcontrollers touch each and every part of your life. Think about
processes that you take for granted. Think about topics that may interest you personally, and
extend the role of microcontrollers to that topic. Look at some of the suggested readings in the
Class Syllabus. Talk with your TA. Talk with the Head TA or the Instructor.
ONCE I HAVE AN IDEA, WHAT DO I DO?
1)
2)
3)
Each group will probably approach their project differently, since each project has different goals
and objectives. As such, writing one clear-cut approach to doing a Micro project is not an easy
task. The following are guidelines to assist you:
List all tasks that need to be done. Many times, it is helpful to make more lists that are
detailed, as the problem becomes better defined. This also helps to organize your thought
processes and productivity by letting you know where you are in terms of the final
project development.
Look at software development. Outline all the routines that need to be developed. Write
flowcharts for the program as a whole, and for each routine. Without some sort of
organization, a code will not function. Once the flowcharts are completed, write the codes
for the corresponding program segments. Use the concept of Modular Design for these
aspects of the code development. Write the code such that debugging is straightforward.
Start with a base code that works. Then add one piece at a time. Test each program
segment, debugging as you develop the program.
Look at hardware development. Draw circuit diagrams before building your circuits.
Make sure that you understand what each component does. If you have questions, ask
your TA's for assistance. Then, build the circuits. Using the oscilloscope, check how the
circuit responds by itself. If it doesn't work and you are burning out chips, DON'T JUST
KEEP BURNING OUT CHIPS!!! Ask someone for assistance. Once you know that
the hardware is behaving properly, attach the system together.
HOW DO I GET ASSISTANCE FROM MY TA'S?
TA's are a great reference. Typically, they are available right after the laboratory period for
questions. They can also be reached through e-mail. Set up an appointment with them. If they
can't find the answer to your questions, they can refer you to someone who can help. During
project time, each TA has at least four hours a week of office hours. These are hours that they
will be actively engaged in helping students in the lab. Although TA's are encouraged to
schedule these hours during the scheduled lab times, many offer additional times to assist
students. As such, there will be 20+ hours of TA assistance available for the class each week
until projects are completed. A complete list of times will be posted in the lab, on lab doors,
etc. The obvious implication is that the earlier you get progress made on the project, the more
Dr. Victor Giurgiutiu
Page 11
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
TA help time you will have. You will not be restricted to use only your lab time. You can go to
the lab every day if you wish. Project questions take priority over general questions.
WHEN DO I SIGN UP FOR MY PROJECT PRESENTATION?
Sign-up sheets will be made available before the last week of project presentation. There will be
a large variety of time slots available. The scheduling is on first come, first serve basis. If a
group wishes to reschedule with another, both groups must agree.
WHEN AND HOW DO I GET HARDWARE FOR THE PROJECT?
After you have developed your project proposal, you are ready to get the hardware. Every group
that has partners assigned and a project proposal submitted will be issued hardware based on a
checkout sheet reflecting the hardware list sent by you with the Project Proposal. After the end of
Lab 5, groups may start getting their hardware from their project TA. YOU ARE
RESPONSIBLE FOR THIS HARDWARE AND MAKING SURE THAT IT IS
RETURNED TO ITS PROPER LOCATION IN THE LAB ONCE YOUR PROJECT IS
COMPLETED. THIS INCLUDES PROPERLY DISASSEMBLING YOUR PROJECT
AFTER THE PRESENTATION, UNLESS YOU ARE INSTRUCTED OTHERWISE.
Instructions for proper placement of lab equipment will be provided in the lab during the project
time.
WHEN IS THE LAB AVAILABLE FOR PROJECT WORK?
The lab will be available 24 hours a day from project start till project end. You will be issued the
lab door access keys. You must also comply with the building access procedures. This open-door
policy may be restricted if improper use of lab facilities takes place. IF YOU ARE UNSURE
ABOUT ANY ASPECT OF THE HARDWARE YOU ARE USING, DO NOT USE THE
LAB WITHOUT A TA!
Dr. Victor Giurgiutiu
Page 12
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
PROJECT GRADING POLICY
Dr. Victor Giurgiutiu
Page 13
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
PROGRAMMING THE MICROCONTROLLER
First, read the textbook material (pages 712-721) on programming the microcontroller.
Then, follow the instructions below, which are specific to our course.
THRSIM11 SIMULATOR
The THRSim11 is a software program that allows you to write microcontroller programs and simulate
how the microcontroller will react to your program.
You need to install this software on your PC. This software can be downloaded from the course website.
THRSIM11 OPTIONS SETUP
Before you run the THRSim11 simulator first time on a certain PC, set the Options as shown it the
following windows:
Dr. Victor Giurgiutiu
Page 14
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
Immediately after opening the THRSim11 program, close the Commands window. You will not use in
this course, unless otherwise specified.
Dr. Victor Giurgiutiu
Page 15
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
GETTING STARTED WITH PROGRAMMING
Take a formatted empty floppy disk and write on the label:
EMCH 367
LASTNAME, Firstname
Email address
Contact telephone #
This way, if you loose the disk, there is a good chance that you might have it recovered.
Go the course website and download the template.asm file and place it on the floppy disk. This template
will always be good to start your programming.
Download the file VAR_DEF.ASM and place it in the root of the directory structure on your floppy disk.
(This will allow the programs to find it when executing the instruction #INCLUDE
‘A:VAR_DEF.ASM’.
Download example files from the course website onto this disk. (For safety, make copies into your
folder or PC.)
USING THE TEMPLATE.ASM FILE
An .asm template file is available on the course website. This template has the required instructions to
make your program interface properly with the simulator. When generating a new program, open the
template.asm file, save it under the new name you want to create (remember to save on a secure area,
preferably your floppy disk), and then start typing in your program in the indicated area.
After you type and save your program (save as often as you can, use Ctrl S for productivity), assemble
the program and test run it.
SCREEN/WINDOW CAPTURE
To capture the image of a window or of the complete screen:
Dr. Victor Giurgiutiu
Page 16
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
• Press Alt + PrintScreen to capture the image of the window that is currently active.
• Press PrintScreen to capture the image of the entire screen.
The captured image can be viewed on the clip board.
To paste the captured image into a document:
• In the document window, on the Edit menu, click Paste. Alternatively, use Ctrl + V.
Note: In most cases, you will need to capture just the active window, using Alt + PrintScreen.
DEFAULT WINDOWS
Default windows are the three windows(*.LST, *.asm, and CPU registers) shown below:
If needed, more windows can be open. For example, four windows can be open (*.LST, *.asm, Memory
list, and CPU registers).
In the memory list, standard labels may be shown. However, they can be removed if you use the pull
down menu command Label/Remove all.
Dr. Victor Giurgiutiu
Page 17
8/19/2008
EMCH 367
Dr. Victor Giurgiutiu
Microcontrollers in Mechanical Engineering
Page 18
Course Package.doc
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
MINIIDE EMULATOR
MiniIDE is an integrated development environment running under Windows 95/98/Me/NT/2000. It was
developed by MGTEK in Germany. It is a tool for developers of embedded software who write software
in assembler for Motorola's 68HC11 and 68HC12 microcontroller. MiniIDE incorporates an editor and a
serial communication terminal. A command-line cross assembler, which is seamlessly integrated in the
IDE, is also included.
n
o
p
With MiniIDE, user can edit compile and download program to microcontroller, then debug program
interactively. As shown above, a user can edit ASM program in editor window 1; then compile the
program, if there are syntax errors, warning messages will be shown in output window 2; at last,
download the program and interact with the microcontroller in terminal window 3 to debug and run the
program.
In this course, MiniIDE will be used to download codes into the MCU Evaluation Board (EVB). In
this context, it acts as a terminal program during the lab periods. You do not need to install this software
on your PC.
When you open the MINIIDE, click “output window” icon
and “terminal window” icon
to open
the output window and terminal window. You can click “open” icon
to open an ASM program
source code file and you can edit it in the edit window as shown above. To compile the program file,
Dr. Victor Giurgiutiu
Page 19
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
you can click “build current” icon . The compiling information and warning messages will be shown
in the cross compiler output window. After compiling the program file, if there is no error, a S19 file of
the program will be created. That is the machine code file that will run in the EVB Board. After editing
and compiling, you can download the machine code S19 file to the EVB to run it. To do this, you need
connect to the EVB by clicking “terminal connect/disconnect” icon firstly. After clicking, you need to
reset the EVB by pressing the reset button on the EVB. One message will appear in the terminal window
and the EVB is ready to receive the BUFFALO command now. The BUFFALO command will be
introduced in details in later chapters.
Type in LOAD T in the terminal window and click the “download” icon
appear as shown below.
, a pop-up window will
Select your S19 file and click “Open” to download it to the EVB.
A self-teaching viewlet on how to use the MiniIDE software is available from the
HTTP://WWW.ME.SC.EDU/COURSES/EMCH367/
Dr. Victor Giurgiutiu
Page 20
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
PROGRAMMING FLOW CHART
The programming flow chart is shown in the figure below. First, the source code is written in Assembly
language on the THRSim11 simulator. The simulator assembles the .asm code and generates a list file
(*.LST). The simulator is then used to step through the program and debug it until it performs the
intended functionality. All this can be done remotely, in the computer room, or on a personal computer.
Once the program has been debugged, it can be taken on a floppy disk to the EMCH 367 lab (A 235).
The MCU evaluation board (EVB) hardware is accessed through the MiniIDE emulator software
installed on the lab computers. MiniIDE reads the .asm file from your floppy disk and transforms it into
machine language executable code (*.S19). This code is downloaded to the MCU. After downloading
the code into the MCU, you can make the MCU run your code using the MiniIDE interface screens. The
MiniIDE also generates a list file (.LST) that can be used during debugging.
Source code
ASSEMBLY LANGUAGE
*.asm
THRSim11
Software
List file
*.LST
List file
*.LST
MiniIDE
Software
Executable code
MACHINE LANGUAGE
*.S19
MCU
EVB
Hardware
Figure 1 Flowchart of typical programming steps used in the EMCH 367 course.
Dr. Victor Giurgiutiu
Page 21
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
Figure 2 Flowchart of typical programming steps in a generic programming environment.
Dr. Victor Giurgiutiu
Page 22
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
BINARY AND HEX NUMBERS
Note: To quickly grasp the use of binary and hex arithmetic, use your binary/hex pocket calculator.
The binary number system is a base-2 numbering system. In binary representation, any value is
represented using a combination of 1's and 0's. For example: 1410 = 11102 in binary. The subscript 10
on the first number indicates that the number 14 is represented in the decimal (base 10) system. The
subscript 2 on the second number indicates that 1110 is represented in the binary (base 2) system.
The binary representation is also called "digital". "Digit" also means finger, and you can imagine a
numbering representation in which you use your 8 digits to for number containing 1's and 0's. The
ability to represent numbers in terms of 1's and 0's is important because it is the easiest most
unambiguous way to represent and communicate information. In a computer, a 1 is represented by a
"high" voltage (5V) and a 0 by a "low" voltage (~0V). The binary system is the backbone of all digital
computers and other high-tech applications.
THE BINARY SYSTEM
To understand how the binary system works, let's first examine how the conventional base-10 system
works. The base 10, or decimal, system constructs numbers using increasing powers of 10. For example,
the number 13510 is constructed using 3 powers of 10: 100, 101, and 102. These numbers correspond to
1,10, and 100. The number 13510 is constructed as:
1 x 100 + 3 x 10 + 5 x 1
or
1 x 102+ 3 x 101 + 5 x 100
The equivalent of number 13510 in base two is 100001112. This is constructed as:
1 x 128+ 0 x 64 + 0 x 32 + 0 x 16 + 0 x 8 + 1 x 4 + 1 x 2 + 1 x 1
or
1 x 27 + 0 x 26 + 0 x 25 + 0 x 24 + 0 x 23+ 1 x 22 + 1 x 21 + 1 x 20
It can be seen that the only significant difference between the two systems is the base number.
Each one or zero in the binary representation is called a "bit". A collection of eight bits is called a "byte"
and, in a somewhat humorous note, a collection of four bits is called a "nibble". The bit associated with
the highest power of two is called the Most Significant Bit (MSB); the bit associated with the lowest
power of two is the Least Significant Bit (LSB).
1
bit
1 0 0 0 0 1 1 1
byte
1 0 0 1
Hex number (nibble)
1 0 0 1 0 0 0 1
2 nibbles = 1 byte
Dr. Victor Giurgiutiu
(1 byte = 8 bits)
Page 23
(1 nibble = 4 bits)
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
DECIMAL TO BINARY CONVERSION:
Because most people are more comfortable using, and thinking in, the decimal system, it is important to
know how to convert from the decimal to the binary system. This is most easily achieved through a
series of divisions by two and by tracking the resulting remainders. Let's consider out example of 13210:
132 ÷2 =
66
Remainder
0
66 ÷ 2 =
33
Remainder
0
33 ÷2 =
16
Remainder
1
13210 = 10000100
16 ÷2 =
8
Remainder
0
8 ÷2 = 4
Remainder
0
MSB
LSB
4 ÷2 = 2
Remainder
0
2 ÷2 = 1
Remainder
0
1 ÷2 = 0
Remainder
1
The remainder 1 resulting from the last division is the MSB, while the first remainder is the LSB of the
conversion. From this example, we see that the decimal number 132 is equal to the binary number
10000100.
The conversion from binary to decimal is done in the same manner as the first example, by adding
together power of two values of the non-zero bits.
HEXADECIMAL (HEX) NUMBERS
As one might have already surmised, binary numbers quickly become long and hard to remember. For
this reason, it is more convenient to convert the binary values into hexadecimal numbers (hex).
Hexadecimal numbers are base 16 numbers. This requires six additional characters to represent the
values 10, 11, 12, 13, 14, and 15. These values will be represented by the letters A, B, C, D, E, and F.
The counting order in hex is: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. The reason hex notations are use
is that it allows for a one to one correspondence between the 16-bit binary nibble and a single
hexadecimal value. If the binary number is broken down into nibbles, and each nibble is replaced with
the corresponding hexadecimal number, the conversion is complete. Consider 13210. The binary
number is 10000100. It can be broken down into two separate nibbles: 1000 and 0100. Convert each
nibble into the corresponding hex value (8 and 4, respectively), and the hex equivalent of 13210 is 8416.
This is much more convenient to remember. For example, the hex number A23E3 is easily converted to
10100010001111100011 in binary without using any difficult calculations.
To convert decimal to hex numbers it is easiest to convert the decimal number to binary and then
convert the binary to hex. In addition to these methods, there is a conversion chart in the back of the
Programming Reference Guide for the conversion from decimal to hex.
Dr. Victor Giurgiutiu
Page 24
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
BINARY ARITHMETIC
The rules for addition of binary numbers are straightforward:
0 + 0 = 0, 0 + 1 = 1, and 1 + 1 = 0 with a carry of 1, i.e. 1 + 1 = 102.
For example:
01010010
+
10010100
00110001
00010010
10000011
01010001
11110111
+
NEGATIVE NUMBERS IN THE COMPUTER (2’S COMPLEMENT NUMBERS)
Until now, we have discussed only positive numbers. These numbers were called "unsigned 8-bit
integers". In an 8-bit byte, we can represent a set of 256 positive numbers in the range 010-25510.
However, in many operations it is necessary to also have negative numbers. For this purpose, we
introduce "signed 8-bit integers". Since we are limited to 8-bit representation, we remain also limited to
a total of 256 numbers. However, half of them will be negative (-12810 through -110) and half will be
positive (010 through 12710).
The representation of signed (positive and negative) numbers in the computer is done through the socalled 8-bit 2's complement representation. In this representation, the 8th bit indicates the sign of the
number (0 = +, 1 = -).
The signed binary numbers must conform to the obvious laws of signed arithmetic. For example, in
signed decimal arithmetic, -310 + 310 = 010. When performing signed binary arithmetic, the same
cancellation law must be verified. This is assured when constructing the 2's complement negative binary
numbers through the following rule:
To find the negative of a number in 8-bit 2's complement representation, simply subtract the
number from zero, i.e. -X = 0 - X using 8-bit binary arithmetic.
Example 1: Use the above rule to represent in 8-bit 2's complement the number -310
Solution:
Subtract the 8-bit binary representation of 310 from the 8-bit binary representation of 010
using 8-bit arithmetic (8-bit arithmetic implies that you can liberally take from, or carry into the 9th bit,
since only the first 8 bits count!).
BINARY
DECIMAL
00000000
010
00000011
310
11111101
-310
Note that, in this operation, a 1 was liberally borrowed from the 9th bit and used in the subtraction!
Dr. Victor Giurgiutiu
Page 25
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
Verification We have establish that -310 = 111111012. Verify that -310 + 310 = 010 using 8-bit
arithmetic.
BINARY
DECIMAL
11111101
-310 00000011
310
00000000
010
Note that, in this operation, a carry of 1 was liberally lost in the 9th bit!
Example 2: Given the binary number 00110101, find it's 2's complement.
Solution: Subtract the number from 00000000, i.e.
BINARY
HEX
DECIMAL
00000000 00 010 01101010
6A
10610
10010110
96
-10610
Verification: 01101010 + 10010110 = (1)00000000. Since the 9th bit is irrelevant, the answer is
actually 00000000, as expected
The rule outlined above can be applied to both binary and hex numbers.
Example 3: Given the hex number 6A, find its 8-bit 2's complement.
Solution: Subtract the number from 0016 using 8-bit arithmetic:
HEX
DECIMAL
00
010
6A
10610
96
-10610
Verification: 6A16 + 9616 = (1)00. Since the 9th binary bit is irrelevant, the answer is actually 0016, as
expected
Example 4: 110010102 Æ CA16 Æ 20210.
Dr. Victor Giurgiutiu
Page 26
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
NUMERICAL CONVERSION CHART FOR UNSIGNED 8-BIT BINARY INTEGERS
Dr. Victor Giurgiutiu
Decimal
(base 10)
4-bit binary
(base 2)
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
Page 27
Hex
(base
16)
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
NUMERICAL CONVERSION CHART FOR 2'S COMPLEMENT SIGNED 8-BIT BINARY INTEGERS
Decimal
+127
…
+16
+15
+14
+13
+12
+11
+10
+9
+8
+7
+6
+5
+4
+3
+2
+1
0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
…
-128
Dr. Victor Giurgiutiu
8-bit 2's complement
signed binary
0111 1111
…
0001 0000
0000 1111
0000 1110
0000 1101
0000 1100
0000 1011
0000 1010
0000 1001
0000 1000
0000 0111
0000 0110
0000 0101
0000 0100
0000 0011
0000 0010
0000 0001
0000 0000
1111 1111
1111 1110
1111 1101
1111 1100
1111 1011
1111 1010
1111 1001
1111 1000
1111 0111
1111 0110
1111 0101
1111 0100
1111 0011
1111 0010
1111 0001
1111 0000
…
1000 0000
Page 28
Hex
7F
…
10
0F
0E
0D
0C
0B
0A
09
08
07
06
05
04
03
02
01
00
FF
FE
FD
FC
FB
FA
F9
F8
F7
F6
F5
F4
F3
F2
F1
F0
…
80
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
LOGIC GATES AND BOOLEAN ALGEBRA
LOGIC GATES
Circuit
IC #
Symbol
Buffer
7407
A
X
X=A
NOT
(Inverter)
7404
A
X
X=A
COMA
AND
7408
X
X = A⋅ B
ANDA
OR
7432
X
X = A+ B
ORAA
NAND
7400
X
X = A⋅ B
NOR
7402
X
X = A+ B
Exclusive OR
XOR
7486
X
X = A⋅ B + A⋅ B
= A⊕ B
Comparator
2901
X
X = A⋅ B + A⋅ B
A
B
A
B
A
B
A
B
A
B
A
B
Boolean Function
HC6811 commands
1)
1)
EORA
2)
1)
During programming, to achieve NAND, use two steps, first AND, then NOT. This means to use first
the commands ANDA and then COMA. (Similar for NOR.)
2)
During programming, to achieve this function, use two steps, first EORA, then NOT. This means to
use first the commands EORA and then COMA.
Dr. Victor Giurgiutiu
Page 29
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Inverting gate
AND gate
OR gate
XOR gate
Dr. Victor Giurgiutiu
Page 30
Course Package.doc
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
BOOLEAN ALGEBRA
In formulating mathematical expressions for logic circuits, it is important to have knowledge of Boolean
algebra, which defines the rules for expressing and simplifying binary logic statements. The basic
Boolean laws and identities are listed below. A bar over a symbol indicates the Boolean operation NOT,
which corresponds to inversion of a signal.
Fundamental Laws
OR
AND
A+0 = A
A +1 = 1
A+ A = A
A⋅ A = A
A+ A =1
A⋅ A = 0
NOT
A⋅ 0 = 0
A ⋅1 = A
(1)
A = A (double inversion)
Commutative Laws
Associative Laws
A+ B = B+ A
A⋅ B = B ⋅ A
(2)
( A + B) + C = A + ( B + C )
( A⋅ B) ⋅C = A⋅( B ⋅C )
(3)
Distributive Laws
A + ( B ⋅C ) = ( A + B) ⋅( A + C )
Other Useful Identities
(4)
A + ( A⋅ B) = A
(5)
A⋅( A + B) = A
(6)
A + A⋅ B = A + B
(7)
(
)
( A + B) ⋅( A + B) = A
( A + B) ⋅( A + C ) = A + ( B ⋅C )
(
)
(8)
(9)
A + B + A⋅ B = A + B
(10)
( A⋅ B) + ( B ⋅C ) + (B ⋅C ) = ( A⋅ B) + C
(11)
( A⋅ B) + ( A⋅C ) + ( B ⋅C ) = ( A⋅ B) + ( B ⋅C )
(12)
DeMorgan’s Laws are also useful in rearranging of simplifying longer Boolean expressions or in
converting between AND and OR gates:
A + B + C + ... = A ⋅ B ⋅ C ⋅ ...
A ⋅ B ⋅ C ⋅ ... = A + B + C + ...
(13)
(14)
If we invert both sides of these equations and apply the double NOT law for Equation (1) we can write
DeMorgan’s Laws in the following form:
Dr. Victor Giurgiutiu
A + B + C + ... = A ⋅ B ⋅ C ⋅ ...
(15)
A ⋅ B ⋅ C ⋅ ... = A + B + C + ...
(16)
Page 31
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
CONDITION CODE REGISTER (CCR)
S
S
=
X
=
H
=
I
=
N
=
Z
=
V
=
C
=
Dr. Victor Giurgiutiu
X
H
I
N
Z
V
C
Stop bit
Allows user to turn the microcontroller stop function on or off.
XIRQ mask
Used to disable interrupts from the XIRQ.
Half carry bit
Indicates a carry from bit 3 during addition. Only updated by ABA, ADD, and ADC. It is
used by the DAA in BCD operations (setting a hexadecimal number to decimal).
Interrupt mask
Global interrupt mask. Allow user to turn on/off interrupts.
Negative bit
Set to 1 when the result of an operation is 1 in the MSB.
Set to 0 when the result of an operation is 0 in the MSB.
Zero bit
Set to 1 when the result of an operation is 0016.
Set to 0 when the result of an operation is anything other than 0016.
oVerflow bit
Set to 1 when a 2's complement overflow has occurred due to a specific operation.
7E16 + 0416 = 8216, 100000102
Note: The 1 in the MSB indicates that an overflow occurred. The addition yielded a
number larger than 7F16, which is the maximum positive value that a 2'S compliment
number is allowed.
Carry bit
Set to 1 when a carry or borrow has occurred in the MSB. In addition operations, it is set
if there was a carry from MSB. In subtractions, it is set if a number with a larger absolute
value is subtracted from a number with a smaller absolute value. It is also used in
multiplication and division.
Page 32
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
BUFFALO COMMANDS
The monitor BUFFALO program is the resident firmware for the evaluation board (EVB), which
provides a self-contained operating environment. It interacts with the user through predefined
commands. The BUFFALO command line format is as follows:
><command>[<parameters>](RETURN)
where:
>
<command>
<parameters>
(RETURN)
EVB monitor prompt.
Command mnemonic.
Expression or address.
RETURN keyboard key
NOTES:
1) The command line format is defined using special characters that have the following syntactical
meanings:
<>
Enclose syntactical variable
[]
Enclose optional fields
[ ]…
Enclose optional fields repeated
These characters are NOT entered by user, but are for definition purpose only.
2)
3)
4)
5)
6)
Fields are separated by any number or space, comma, or tab characters.
All input numbers are interpreted as hexadecimal.
All input commands can be entered either upper or lower case lettering.
A maximum of 35 characters may be entered on a command line.
Command line errors may be corrected by backspacing or by aborting the command (CRTLX/Delete).
7) After a command has been entered, pressing (RETURN) a 2nd time will repeat the command.
Some of the frequently used BUFFALO commands are listed alphabetically in Table 1.
COMMAND
DESCRIPTION
HELP
Display monitor commands
ASM [<addr>]
Assembler/disassembler
BF <address1> <address2> <data>
Block fill memory with data
BR [-][<addr>]
Set up breakpoint
CALL [<address>]
Execute subroutine
GO [<address>]
Execute program
MD [<address1> [<address2>]]
Memory Display
MM [<address>]
Memory Modify
MOVE <address1> <address2>
Move memory to new location
[<destination>]
OFFSET [-]<arg>
Offset for download
RM [p, y, x, a, b, c, s]
Register Modify
T [<n>]
Trace $1~$ff instructions
Dr. Victor Giurgiutiu
Page 33
8/19/2008
EMCH 367
RD
Microcontrollers in Mechanical Engineering
Course Package.doc
Register Display
Next few pages are detailed description and examples for each command.
Dr. Victor Giurgiutiu
Page 34
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
ASM
Assembler/Disassembler
ASM [<address>]
where: <address> is the starting address for the assembler operation.
Assembler operation defaults to internal RAM if no address is given. Each source line is converted into the proper
machine language code and is stored in memory overwriting previous data on a line-by-line basis at the time of entry.
The syntax rules for the assembler are as follows:
(a.) All numerical values are assumed to be hexadecimal.
(b.) Operands must be separated by one or more space or tab characters.
Addressing modes are designated as follows:
(a.) Immediate addressing is designated by pre-ceding the address with a # sign.
(b.) Indexed addressing is designated by a comma. The comma must be preceded a one byte relative offset and followed
by an X or Y designating which index register to use (e.g., LDAA 00,X).
(c.) Direct and extended addressing is specified by the length of the address operand (1 or 2 digits specifies direct, 3 or 4
digits specifies extended). Extended addressing can be forced by padding the address operand with leading zeros.
(d.) Relative offsets for branch instructions are computed by the assembler. Therefore the valid operand for any branch
instruction is the branch-if-true address, not the relative offset.
Assembler/disassembler subcommands are as follows.
/
Assemble the current line and then disassemble the same address location.
^
Assemble the current line and then disassemble the previous sequential address location.
(RETURN)
(CTRL)-J
(CTRL)-A
Assemble the current line and then disassemble the next opcode address.
Assemble the current line. If there isn't a new line to assemble, then disassemble the next
sequential address location. Otherwise, disassemble the next opcode address.
Exit the assembler mode of operation.
EXAMPLE
>ASM C000
C000 STOP $FFFF
>LDAA #55
86 55
C002 STOP $FFFF
>STAA C0
97 C0
C004 STOP $FFFF
>LDS 0,X
AE 00
C006 STOP $FFFF
>BRA C500
Branch out of range
C006 STOP $FFFF
>BRA C030
20 28
C008 STOP $FFFF
>(CTRL)A
DESCRIPTION
Immediate mode addressing, requires #
before operand.
Direct mode addressing.
Index mode, if offset = 0 (,X) will not
be accepted.
Branch out of range message.
Branch offsets calculated automatically,
address required as conditional branch
operand.
Assembler operation terminated.
EXAMPLE
DESCRIPTION
>ASM C000
C000 CLR $0800
>LDY #C200
18 CE C2 00
C004 TEST
>LDX #C400
CE C4 00
C007 TEST
>LDAA 102E
B6 10 2E
C00A TEST
>LDAA 0,X
Enter assembler/disassembler mode.
Dr. Victor Giurgiutiu
First byte where data is stored.
IMM mode
Point to data to be fetched.
IMM mode
Clear RDRF bit if set.
EXT mode
Get f1rst data byte.
Page 35
8/19/2008
EMCH 367
A6 00
C00C TEST
>STAA 102F
B7 10 2F
C00F INX
>LDAA 102E
B6 10 2E
C012 TEST
>ANDA #80
84 80
C014 TEST
>BEQ C00F
27 F9
C016 BITB $80F6
>LDAA 102E
B6 10 2E
C019 BVS $C01B
>ANDA #20
84 20
C01B STX $00FF
>BEQ C016
27 F9
C010 STX $4065
>LDAA 102F
B6 10 2F
C020 STAA $00,Y
>STAA 0,Y
18 A7 00
C023 STX $00FF
>INX
08
C024 TEST
>INY
18 08
C026 ASRB
>CPX #C41F
8C C4 1F
C029 ASLD
>BEQ C02E
27 03
C02B STX SOOFF
>JMP C00C
7E C0 0C
C02E MUL
>BRA C02E
20 FE
C030 ILLOP
>(CTRL)A
Microcontrollers in Mechanical Engineering
Course Package.doc
INX mode
Store data in SCI data register.
EXT mode
Read SCI status register.
EXT mode
Send data byte.
IMM mode
Wait for empty transmit data register.
REL mode
Read SCI status register.
EXT mode
Extract RDRF bit fram status register.
IMM mode
Branch true = SCI RDR not fu11.
Branch false = SCL RDR fu11.
REL mode
Read data from SCI RDR.
EXT mode
Store data byte.
INY mode
Increment fetch pointer.
INH mode
Increment storage pointer.
INH mode
Done sending data?
IMM mode
No, get next data byte.
EXT mode
Yes, stop here.
REL mode
Exit assembler/dissembler mode.
BF
Block
Fill
BF <address1> <address2> <data>
where:
<address1>
Lower limit for fill operation.
<address2>
Upper limit for fill operation.
<data>
Fill pattern hexadecimal value.
EXAMPLE
>BF C000 C030 FF
>BF C000 C000 0
Dr. Victor Giurgiutiu
DESCRIPTION
Fill each byte of memory from C000
through C030 with data pattern FF.
Set location C000 to 0.
Page 36
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
CALL
Execute
Subroutine
CALL [<address>]
where: <address> is the starting address where user program subroutine execution begins.
EXAMPLE
>CALL C000
P-COOO Y-DEFE X-F4FF A-44
B-FE C-DO 5-004A
DESCRIPTION
Execute program subroutine.
Displays status of registers at
time RTS encountered (except
P register contents).
G(GO)
Execute
Program
G [<address>]
where: <address> is the starting address where user program execution begins.
EXAMPLE
>G C000
P-COOO Y-DEFE X-F4FF A-44
B-FE C-DO 5-004A
DESCRIPTION
Execute program subroutine.
Displays status of registers at
time RTS encountered (except
P register contents).
HELP
Help Screen
HELP
Display monitor commands
MD
Memory
Display
MD [<address1> <address2>]
Display a block of user memory beginning at address 1 and continuing to address 2.
EXAMPLE
>MD C000 C00F
C000 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
MM
Memory Modify
MM [<address>]
Examine/Modify contents in user memory at specified address in an interactive manner
EXAMPLE
Dr. Victor Giurgiutiu
DESCRIPTION
Page 37
8/19/2008
EMCH 367
>MM C700
C700 44 66(RETURN)
>MM C000
C000 55 80 C2 00 CE C4
Microcontrollers in Mechanical Engineering
Course Package.doc
Display memory location C700.
Change data at C700
Examine location $C000.
Examine next 1ocation(s) using (SPACE BAR).
RM
Register Modify
RM [p,y,x,a,b,c,s]
The RM command is used to modify the MCU program counter (P), Y index (Y), X index (X), A accumulator (A), B
accumulator (B), Condition Code Register (C), and stack pointer (S) register contents.
EXAMPLE
DESCRIPTION
>RM
P-C007 Y-7982 X-FF00 A-44 B-70 C-C0 S-0054
P-C007 C020
Display P register contents.
>RM X
P-C007 Y-7982 X-FF00 A-44 B-70 C-C0 S-0054
X-FFOO C020
Display X register contents.
Modify P register contents.
Modify X register contents.
T
Trace
T[<n>]
Where: <n> is the number ($1~$FF) of instructions to execute.
Monitor program execution on an instruction-by-instruction basis. Execution starts at the current program counter
(PC).
EXAMPLE
>T
Op-86
P-C002 Y-DEFE X-FFFF A-44 B-00 C-00 S-0048
>T2
Op-B7
P-C005 Y-DEFE X-FFFF A-44 B-00 C-00 S-004B
Op-01
P-C006 Y-DEFE X-FFFF A-44 B-00 C-00 S-004B
Dr. Victor Giurgiutiu
Page 38
DESCRIPTION
Single trace
Register contents after
execution.
Multiple trace (2)
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
DEBUGGING TIPS
MICROCONTROLLER PROBLEMS
•
•
•
•
Is the processor plugged into the PC serial port?
Is the processor plugged into the power supply?
Is the power supply turned on?
Is the serial port plugged into the correct connector?
HARDWARE PROBLEMS
•
•
•
•
•
•
•
•
•
•
Does the component have power? - Check all voltages
Are the chips oriented correctly - notch in the correct direction?
Do the chips straddle the gap in the center of the board?
Make sure all chips have power (not just input & output lines).
Verify the direction of diodes and electrolytic capacitors.
Verify the power at intermediate locations - use 5 or 0 volts from the supply instead of chip input to
check various conditions.
Verify that the PC ports are giving the expected output signals.
Verify chip and transistor pins with the pin diagrams.
Are there any "open" lines, no voltage connection instead of zero volts?
Verify resistor codes and capacitor values.
SOFTWARE PROBLEMS
•
•
•
•
•
•
•
•
•
•
•
•
•
Is the correct program currently in memory?
Is the correct starting location being used (G ????).
Verify the program with ASM.
Use trace (T) to step through and verify branches, jumps and data.
Compare memory locations with expected information after the program stops.
Insert SWI at a key location to allow verification of branch, memory and accumulator values.
Do branches and jumps have the correct offsets?
Have RET and RTI commands been reversed somewhere?
For serial communications, has TE or RE been set?
For serial communications, has TDRE or RDRF been reset?
For parallel port C, has 1007 been set for input or output?
Has the interrupt mask been cleared (CLI)?
Has the stack pointer changed substantially?
Use the BUFFALO commands to do step-by-step (Trace, T) and Break-Point (BR) execution of the
program. Press F1 for details of the BUFFALO commands.
Dr. Victor Giurgiutiu
Page 39
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
THRSIM11 SIMULATION OF PARALLEL COMMUNICATION
The specific windows that need to be open during the THRSim11 simulation of parallel communication
are:
• Port registers
• Port B pins
• Port C pins
Dr. Victor Giurgiutiu
Page 40
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
THE THRSIM11IO BOX
The THRSim11 IO box is use, among others, to perform the simulation of Port B and Port C functions.
Port B, which is only an output port, is simulated as the eight LED’s PB0, PB1, … , PB7. When a
logical 1 signal is sent to a Port B pin, PBx, the corresponding LED lights up (becomes red).
Port C pins (PC0, PC1, … , PC7) can be selected as either input or output using the DDRC register bits
in your program. When selected as input (DDRCx = 0, x = 0, 1, … , 7), the switches are used to send
signals into the MCU along the PCx line. When selected as output (DDRCX = 1), the switches flip up
and down according to the value on that PCx line. (up = 1, down = 0)
Dr. Victor Giurgiutiu
Page 41
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
ASCII AND BCD CODES
Dr. Victor Giurgiutiu
Page 42
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
THRSIM11 SIMULATION OF SERIAL COMMUNICATION
The specific windows that need to be open during the THRSim11 simulation of serial communication
are:
• Serial registers
• Serial transmitter
• Serial receiver
Dr. Victor Giurgiutiu
Page 43
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
THE THRSIM11 SERIAL TRANSMITTER
The THRSim11 serial transmitter simulates the PC keyboard in the lab. It sends characters to the MCU.
During simulation, with your program running, type a character in the transmitter and press the Send
button. The MCU should receive it and react according to your instructions.
Dr. Victor Giurgiutiu
Page 44
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
THE THRSIM11SERIAL RECEIVER
The THRSim11 serial receiver acts like the PC monitor in the lab. It receives signals sent by the MCU.
With your program running, and the serial receiver window open, you should see a character displayed
in the receiver window every time the MCU transmits a character while executing your program.
Dr. Victor Giurgiutiu
Page 45
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
THRSIM11 SIMULATION OF TIMER FUNCTIONS
The specific windows that need to be open during the THRSim11 timer functions simulation are:
• Timer registers
• Port A pins
• Number of Clock cycles
Dr. Victor Giurgiutiu
Page 46
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
THRSIM11 SIMULATION OF ANALOG TO DIGITAL CONVERSION
The specific windows that need to be open during the THRSim11 simulation of analog to digital
conversion are:
• AD converter registers
• Sliders E port
Dr. Victor Giurgiutiu
Page 47
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
EE ENGINEERING BASICS
Dr. Victor Giurgiutiu
Page 48
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
BASIC MULTIMETER OPERATION
BASIC MULTIMETER INFORMATION
Multimeter is a measuring instrument. It can be used to measure voltage, current and resistance.
An analog meter (Figure a) moves a needle along a scale. The function of the meter can be changed by
switching the dial. Analog multimeter shown in the figure is cheap but difficult for beginners to read
accurately.
Most modern multimeters are digital. Similar to analog ones, digital multimeter (Figure b) has a dial to
select its function. However, instead of having to interpret the reading of an analog scale, the data is
shown directly in digital format on the LCD display. In addition, the units are also shown.
Multimeter will be used in several labs, and important for checking circuit when doing your final project.
Digital multimeters will be provided by the lab. A check out form must be approved and signed by a TA
or instructor of this class before you can get a multimeter in the lab.
(b)
(a)
BASIC MEASUREMENT PROCEDURES
1. Before using the multimeter, estimate the value you will measure, make sure it is within the
range that the multimeter can measure or withstand.
2. Choose to the function you want to use by switching the dial. Turn on the power.
3. When measuring voltage, connect the BLACK probe (COM) to the ground (0V), and the RED
probe to the nod you want to check. When measuring resistor, first make sure the resistor is not
connected to any other component or power supply, then connect the probes to the two ends of
the resistor.
4. Two alligator clips are supplied with probes. For your safety, alligator clips MUST be used
when measuring any voltage more than 36V. They can also be used to free your hands by
clipping the probes onto the circuit. Put the alligator clips back in the box after each use.
5. Read the data on the LCD display, remember the units.
6. Turn off the power after you finish.
MULTIMETER TROUBLESHOOTING
1.
2.
3.
4.
Is the BLACK probe in the COM plug?
Is the RED probe in the correct plug?
Is the function dial turned to the correct position?
Is the power of the multimeter on?
Dr. Victor Giurgiutiu
Page 49
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
BASIC OSCILLOSCOPE OPERATION
BASIC MEASUREMENT PRINCIPLES
The oscilloscope (O-scope) is a valuable tool for both diagnostic and measurement purposes. It displays
a voltage vs. time plot. The voltage displayed is determined as the difference between the measured
voltage and the reference voltage.
Both the measured and the reference voltage are determined from the probe. Although there are many
types of probes, they all have three basic components: a measured voltage lead, a reference voltage lead,
and a connection to the oscilloscope. To measure a voltage, or potential difference, with the oscilloscope,
one must do three things:
1)
2)
3)
Establish a reference. This is done by attaching the reference lead of the probe to the desired
potential. For our purposes we will always use ground (0V) for our reference.
Measure the voltage. This is done by placing the measuring lead of the probe to the potential to
be measured.
Display the measurement properly and interpret the results.
The first two aspects are relatively straightforward. They involve physical placement of the probe leads.
The third aspect of oscilloscope use is critical; to be a useful tool, the oscilloscope must be configured
such that the user knows the voltage vs. time profile.
Vertical and horizontal
position adjusters
Signal
display
adjusters
Time
scale
Channel 1
Voltage scale
for channel 1
Trigger
Voltage scale
for channel 2
Channel 2
Probe
adjuster
External
trigger
In the EMCH367 lab, you will be using the analog Tektronix 2225 O-scope, which can display 2
channels, as indicated in the above figure. The voltage (vertical) scale for each channel can be set
separately, using the appropriate knobs. You can display the channels separately or together, or perform
basic arithmetic operations on the signals (addition, inversion). The time (horizontal) scale can display
from .05μs to 0.5s per division, with 10 horizontal divisions. Results that the maximum wavelength able
to be displayed is 10x0.5s=5s, corresponding to a minimum frequency of 0.2Hz.
If you have doubts about the proper functioning of one of the O-scope channels or the probes, you can
ask a TA for help, or check yourself, using the following procedure: a) hook up the probe corresponding
Dr. Victor Giurgiutiu
Page 50
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
to the supposedly bad channel to the “Probe adjuster” pin; b) set the timescale to .5ms; c) if the probe
you use is 1X, set the appropriate voltage scale to 0.5 V; if the probe is 10X, set the voltage scale to
50mV; d) set the “Trigger Source” on the tested channel; e) use the vertical and horizontal adjuster to
clearly see the signal on the O-scope display. If the equipment is in good condition, you should see a
square wave with the half-wavelength equal to a horizontal division, and the height equal one vertical
division.
TRIGGER
Most of the measurements made in this course will have fairly long time periods with respect to the
capability of the oscilloscope to measure it, but more importantly, with respect to your eyes' ability to
interpret the plots. In some cases, though, the use of a trigger function of the oscilloscope is very useful.
A trigger is used when the signal to be measured is very rapid, difficult to measure, or occurs
sporadically. In essence, the trigger is a separate probe, which looks for a pulse, or a transition of the
voltage from one state to another. Once the oscilloscope trigger probe detects a pulse, the oscilloscope
knows that the signal of interest is going to follow along the measuring probe. Then, the pulse can be
displayed along with the signal to give a point of reference. You will use the trigger function in Lab 4,
Serial Communications.
OSCILLOSCOPE TROUBLESHOOTING
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
If the oscilloscope image is not what you think it should be, consider the following:
Make sure the oscilloscope power is on.
Make sure that the intensity is not turned all the way down.
Make sure the probe is plugged into the oscilloscope.
Make sure you are measuring the proper voltage (What is the probe touching?).
Make sure you have the proper reference voltage (Where is the reference wire?).
Make sure you are displaying the signal from your probe channel.
Make sure the voltage is set for the proper scale for your probe (most lab probes are 10x).
Make sure the oscilloscope is set to measure a DC voltage.
Use the beam find function to verify that the beam is on the screen. Adjust the horizontal and
vertical position if it is not.
Make sure the calibration knobs are properly set. The knobs should be turned counter clockwise
till they “click”.
If you are using the trigger function, make sure the trigger is properly set.
Adjust the time scale.
Dr. Victor Giurgiutiu
Page 51
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
RESISTORS
CHART TO READ RESISTORS
R = (First Digit)(Second Digit) x (Multiplier) ± (Tolerance)
R = (First Band)(Second Band) x (Third Band) ± (Fourth Band)
st
Color
1 Band
2nd Band
Black
0
0
Brown
1
1
Red
2
2
Orange
3
3
Yellow
4
4
Green
5
5
Blue
6
6
Violet
7
7
Gray
White
8
9
Silver
10%
brown black
red
8
9
Fourth Band Represents Tolerance
Gold
rd
3 Band
1 (100)
10 (101)
100 (102)
1k (103)
10k (104)
100k (105)
1M (106)
10M (107)
100M (108)
--5%
gold
| 1 | 0 | x 100 = 1000 Ω = 1 kΩ ±5%
A quick reference for retrieving the resistance of a particular resistor, based on the color code:
http://www.electrician.com/resist_calc/resist_calc.htm
RESISTORS AVAILABLE IN THE EMCH 367 LAB
10 Ω
22 Ω
47 Ω
56 Ω
100 Ω
200 Ω
220 Ω
470 Ω
1 kΩ
1.8 kΩ 2.2 kΩ 4.7 kΩ 5.6 kΩ 6.8 kΩ 8.2 kΩ 10 kΩ
27 kΩ
56 kΩ
100 kΩ 220 kΩ 470 kΩ 680 kΩ 820 kΩ 1 ΜΩ
A selection of variable resistors (potentiometers or “pots”) is also available.
Dr. Victor Giurgiutiu
Page 52
680 Ω
16 kΩ
4.7 ΜΩ
10 Ω, 5 W
22 kΩ
10 ΜΩ
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
EMITTER-DETECTOR
Dr. Victor Giurgiutiu
Page 53
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
OPEN COLLECTOR COMPARATOR
Dr. Victor Giurgiutiu
Page 54
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
OPEN COLLECTOR BUFFER
Dr. Victor Giurgiutiu
Page 55
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
OP AMP
POWER TRANSISTOR
Dr. Victor Giurgiutiu
Page 56
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
PORT PROTECTION
GENERIC INPUT TO MICROCONTROLLER PORTS
Dr. Victor Giurgiutiu
Page 57
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
PORT A PROTECTION
OPTOISOLATOR (OPEN COLLECTOR)
Dr. Victor Giurgiutiu
Page 58
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
KEYBOARD AND DISPLAY CIRCUITS
Dr. Victor Giurgiutiu
Page 59
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
EMCH367 HARDWARE LIST
Dr. Victor Giurgiutiu
Component
Stock
8 Pin
8 Pin connector
DIP socket 8 PIN
DIP socket 14 PIN
DIP socket 16 PIN
DIP socket 20 PIN
DIP socket 24 PIN
DIP socket 28 PIN
DIP socket 40 PIN
PLCC socket 52 PIN
Socket adaptor 60 PIN
8 Pin connector cover
BNC T Jack-Jack-Jack
BNC Connector
BNC T Jack-plug -Jack
BNC Jack-Jack
BNC terminal
BNC wall outlet
BNC misc.
Crystal (8M)
Fuse (125V, 4A)
HP display IC
Heat sink
Jumper
Led red
Led green
Led yellow
Led 7-segment (common anode)
led 10-segment
Magnetic switch
Micro-phone
Switch NC push button
Switch NO push button
Switch light touch
Switch lever type
Switch SPST DIP
Switch toggle type
SMD-DIP adapter
Terminal Block
10 Ω resistors
50
40
30
20
15
4
20
20
6
15
15
40
2
1
1
7
3
0
1
12
3
2
10
25
300
5
30
30
20
1
1
30
1
8
8
15
10
2
20
100
Page 60
Reorder?
(Y/N)
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
Y
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
22 Ω resistors
47 Ω resistors
56 Ω resistors
100 Ω resistors
150 Ω resistors
200 Ω resistors
220 Ω resistors
470 Ω resistors
680 Ω resistors
5.6KΩ resistors
1.8KΩ resistors
2.2KΩ resistors
2.4KΩ resistors
4.7KΩ resistors
1KΩ resistors
6.8KΩ resistors
8.2KΩ resistors
10KΩ resistors
16KΩ resistors
22KΩ resistors
24KΩ resistors
27KΩ resistors
56KΩ resistors
100KΩ resistors
220KΩ resistors
470KΩ resistors
680KΩ resistors
820KΩ resistors
1MΩ resistors
4.7MΩ resistors
10MΩ resistors
10Ω/5W resistors
POT 0.5K
POT 1K
POT 50K
POT 100K
POT 200K
POT (for lab 250KΩ)
5PF capacitor
10PF capacitor
27PF capacitor
100PF capacitor
1000PF capacitor
0.1 μF capacitor
Dr. Victor Giurgiutiu
Page 61
Course Package.doc
50
50
50
100
100
20
100
100
100
40
30
30
40
100
50
30
40
40
50
40
50
30
40
50
40
40
40
40
80
30
4
20
0
1
4
6
0
13
3
20
50
30
20
30
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
Y
N
N
N
Y
N
N
N
N
N
N
N
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
0.047 μF capacitor
0.68μF capacitor
4.7μF capacitor
22μF capacitor
33μF capacitor
220μF capacitor
0.1μF/50V capacitor
2.1μF capacitor
22PF capacitor
Diodes
LM 431 Adjustable Precision Zener Shunt Regulator
Transistor 2N 2219A
Transistor PN 2222A
TIP 120
TIP 121
TIP 122
TIP 42
TIP 30B
IRF 530
7805 voltage regulator
7812 voltage regulator
7912 voltage regulator
Temperature Sensor
Modular Jack (RJ45)
12-bit A/D converter LTC 1290
INA 118 precision amplifier
7420 Dual 2 input NAND
7430 8 input NAND
7475 Quad Latch
7483 4-bit BIN Adder
7486 Quad 2 input XOR
7490 Decade counter
74125 Quad tri-state buffer
74132 Quad 3 input NAND Schmitt trigger
74136 Quad 2 input XOR OC output
74138 3-8 line decoder
74193 Sync. 4-bit up/down BIN counter
74136 Sync. 4-bin counter
74154 4-16 line decoder
74244 Octal tri-state
74373 latch
LM301 OP-AMP
LM311 Voltage comparator
LM555 timer
Dr. Victor Giurgiutiu
Page 62
Course Package.doc
50
4
10
40
20
10
1
10
5
100
20
5
5
50
20
15
10
10
30
10
10
5
0
10
1
1
10
5
25
10
40
15
8
20
10
0
30
2
20
20
20
0
40
15
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
Y
N
N
N
N
N
N
N
N
N
N
N
N
Y
N
N
N
N
N
Y
N
N
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
LM741 OP-AMP
LM 1458 dual OP-AMP
LM 3914 Dot/Bar graph display driver
ADC0833 serial I/O 8-bit A/D converter
DAC0808 8-bit D/A converter
CD4013 dual D-flip flop
CD4066 Quad bilateral switch
CD 4511 BCD decoder
MC14049 HEX Buffer Inverter
MC1488 Quad line driver
MC1489 Quad line receiver
PS2501 OPTICALLY COUPLED ISOLATORS
MC6810/6811
MC6850
TC9402 voltage-to-frequency (V/F) converter
MAX232
Solid relay
Beaded tie
DC motor plate
Braided wire
Terminals
5 inch bolt
DC-DC converter
Chip extractors
Wire cutters
Soldering irons
Solder suckers
Solder
IC printed circuit boards
Solid, single conductor wire in many different colors
Multi-conductor wire in red/black
Electromagnets/magnet wire
Ribbon cable
MRTl00F connector repair tool
2 pin jumpers
+12V
Battery
+6V
+1.5V
Small Digital Meters
Large digital Meters
Electromagnets & Solenoids
Large
Speaker
Small
Battery holder
Dr. Victor Giurgiutiu
Page 63
Course Package.doc
20
20
10
8
30
4
2
30
5
3
4
60
25
25
5
8
5
50
10
1
40
1
2
1
20
3
1
2
3
1
1
1
1
1
40
1
1
4
10
8
5
3
6
25
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
DC motor (Super Jack)
Fan(with DC motor)
Power adapter
115AC-8.5VDC
115AC-12VDC
Push Button Box (for lab)
Servo Motor
10-Segment led board
Oscilloscope Probes
DC-pump
Light
Large breadboard
Small Breadboard
Robot
Stepper Motor Driver boards (for lab)
Small Analog Meters
Magnetic Sensor
Motion Sensor
Emitter/Detector (Omron)
Pressure sensor
Sensors
Temperature sensor
Emitter detector (amplified)
Emitter detector (Non-amplified)
Thermocouple
EVB Port Cable
Dr. Victor Giurgiutiu
Page 64
Course Package.doc
16
1
2
1
1
2
12
13
10
8
8
24
1
5
15
3
3
3
2
1
9
25
1
12
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
INTRODUCTION TO FUNCTIONAL MODULES
An essential part of our mechatronics education is the construction of functional modules to help
teaching hands-on skills related to the interfacing of mechanical, electrical, and electronic components
of a Mechatronics system. Non-EE engineering students need hands-on experience to increase their
ability and confidence in tackling electrical and electronics concepts, especially during the realization
phase of a Mechatronics project. To address this need, we started developing a suit of functional
teaching modules.
The modules that have been developed include:
i) voltage divider;
ii) op-amp signal amplifiers;
iii) opto-electronic sensor;
iv) on/off (field-effect MOSFET) power amplifier;
v) linear power amplifier;
vi) pulse-width modulation dc motor drive unit;
vii) stepper motor drive unit;
viii) AC/DC converter;
ix) temperature sensor;
x) humidity sensor;
xi) H-bridge for DC motor (relay and transistor);
xii) dimmer circuit;
xiii) open collector buffer;
xiv) voltage comparator;
xv) limit switch;
xvi) wireless transmitter and receiver;
xvii) ultrasonic sensor.
Accompanying the functional modules are electrical and component schematics, applicable equations,
and a full experimental report containing calibration results. These functional modules are intended as
bolt-on building blocks with clearly defined inputs and outputs, and an explanation of the underlying
operational principles. To achieve this, the functional modules are housed in transparent casings, which
allow the students to see the actual electric/electronic components of the circuitry, and to compare this
image with the intricacy of the circuit diagram. The students are expected to use the functional modules
as a learning tool. After understanding their functionality, they are expected to duplicate the circuitry on
their own breadboards to be incorporated into their Mechatronics class projects, as well as into other
hands-on projects.
ASK YOUR TA ABOUT THE FUNCTIONAL MODULES BINDER. IT WILL BE VERY USEFUL
FOR THE PROJECT.
Dr. Victor Giurgiutiu
Page 65
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
ATTACHMENT 1: EMCH 367 PROJECT PROPOSAL
Team members:
_____________
_____________
_____________
_____________
Project Title:
Project Proposal
1. Proposed idea
2. System overview
3. Program design, with flowcharts
4. Hardware design, with necessary component list and components diagram
Note: Just brief description. Program flowcharts are required. If you need to use some electronic
components, please attach the related diagrams. Example: The LM1458 operational amplifier diagram:
LM1458
B
A
output A
+ 15V
Inverting
input A
output B
Non-inverting
input A
Inverting
input B
- 15V
Dr. Victor Giurgiutiu
Non-inverting
input B
Page 66
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
ATTACHMENT 2: PROJECT REPORT TEMPLATE
University of South Carolina
Department of Mechanical Engineering
EMCH367 – Fundamentals of Microprocessors
Spring 2003 Course Project Report
TA Mentor: _______________________
XXXXXXX TITLE XXXXXXX
by
YYY YYYYYY
ZZZ ZZZZZZ
Date: …………….
Dr. Victor Giurgiutiu
Page 67
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
Table of Contents
(Insert Table of Contents auto-generated by Word from the Insert menu)
Dr. Victor Giurgiutiu
Page 68
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
Note on using the heading styles in Word
Through out your typing, you should take advantage of using the heading styles in MS
Word. Using heading styles has multiple advantages:
1. It helps you organize your report easily
2. It lets you make an automatic Table of Contents
3. It lets you shift text around using the Outline View
4. Others (can you name more? -- email them to me at victorg@sc.edu)
You can make a text entry be raised to a certain heading level (Heading 1, or Heading 2,
3 etc.) by selecting the appropriate heading style from the style window (where you
usually see “Normal”). If the heading styles are visible in the styles window pull-down
menu, go to Format/Styles and select the desired heading style from the list. I have
already used heading styles when writing this template. You may add more headings to
the document as needed. DO NOT DELETE THE HEADING ALREADY EXISTING –
THEY ARE REQUIRED.
Note on using the Word picture editor
This is a Word picture
Figure 3 This is a Word picture.
If you have not used other software for producing the drawing, sketches, or circuit
diagrams, use WORD PICTURE EDITOR. To start a Word picture, go the pull down
menu Insert/Object, and select Microsoft Word Picture. You will be opened into a Word
Picture Editor screen. Activate the Drawing toolbar from the View pull down menu (if
not already activated), and use the available drawing tools. YOU WILL HAVE FUN.
When ready, press the Reset Picture Boundary button on the Edit Picture tool bar, and
then press Close.). By done last action: make the picture layout ‘In line with the text’ (By
default, the picture is floating over text). To do so, right click on the picture, choose
Format Object, select the Layout tab, and choose ‘In line with the text’.
To Drawing toolbar has Flowchart symbols. To access them, go to Autoshapes/Flowchart.
Dr. Victor Giurgiutiu
Page 69
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
Note on using pictures created in Excel, MathCad, and other
software packages
When copy and paste from Excel, MathCad, or other software, DO NOT PASTE
DIRECTLY. Rather, use the PASTE SPECIAL under the Edit menu, and select ‘Paste as
picture’. The difference is that if you paste directly, you are going to embed into you
Word file the original Excel, MathCad, etc. file, such that when you double click on the
picture, you will be opened into the original application. You do not need this feature,
and you DO NOT WANT to do it, since your Word file will quickly grow to very large
size. Hence, paste special as a picture. This will keep your file size manageable.
Note on the template
This template is intended for your orientation. You are free to modify and add to it as
needed. However, remember that you are responsible for making a full comprehensive
report.
Dr. Victor Giurgiutiu
Page 70
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
1. EXECUTIVE SUMMARY
(Give a 1-paragraph summary of your report)
2. INTRODUCTION
Introduce the reader to the subject, make him/her familiar to the state of the art in the
subject, identify the target market, discuss the demand for your product, and put forward
your proposed concept.
Background
Needs and Opportunities
Proposed Concept
3. TECHNICAL DESCRIPTION
(In this section, you will transfer all the technical information for the reader to duplicate
your work, if the need arises)
3.1 SYSTEM OVERVIEW
Give a short overview of the system.
Describe expected behavior.
List function the product should fulfil)
Use figure/photos/sketches to bring your point home.
Being an overview (and not the full description), do not exceed 1 page.
3.2 HARDWARE DESIGN
Describe the hardware design of your product.
Include drawings, schematics, sketches, and circuit diagrams, as needed to properly
convey the message and identify each important component.
Describe the function of each component, how it works and what it does.
3.3 SOFTWARE DESIGN
Describe the logic flow (intelligence component) in your product.
Include flowcharts
Include program printout
3.4 ACCEPTANCE TESTS
Describe the tests you have done to prove the product is working.
Include results in table or chart format.
Dr. Victor Giurgiutiu
Page 71
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
4. ECONOMIC ASPECTS
Give a succinct description of the economic aspect related to producing the prototype and
future production. Determine the commercial feasibility of your product.
4.1 PROTOTYPE COSTS
Work out the prototype costs using the Excel spreadsheet below. Introduce your own
estimates of personnel rates and times and of material costs base on your experience with
building the prototype.
PROTOTYPE COSTS
Engineer
Technician
Others
Total Personnel Costs
Materials
Total Direct Costs
Indirect Costs @
Total Prototype Costs
$/hr
50
40
30
hours
10
10
2
Personnel
costs
$
500
$
400
$
60
$
960
$
100
$ 1,060
$
482
$ 1,542
45.50%
4.2 PRODUCTION COSTS, PRODUCTION PRICE, AND RETAIL PRICE.
Work out the production costs and production price using the Excel spreadsheet. Estimate
retail and distribution costs and work out a retail price per item.
PRODUCTION COSTS and FACTORY PRICE per 1000 items
Personnel
$/hr
hours
costs
50
80
$
4,000
Engineer
40
120
$
4,800
Technician
30
20
$
600
Others
Total Personnel Costs
$
9,400
Materials
$ 50,000
Total Direct Costs
$ 59,400
Indirect Costs @
45.50%
$ 27,027
Total Production Costs per 1000 items
$ 86,427
Profit @
7%
$
6,050
$ 92,477
Total Factory Price per 1000 items
Factory Retail Price per item
$
92.48
4.3 COMMERCIAL FEASIBILITY
Based on the cost and price items above, and using data about similar items (either
already on the market or in preparation for the market by the competition), make an
estimate of the commercial feasibility of your product.
Dr. Victor Giurgiutiu
Page 72
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
5. CONCLUSIONS
Write up a succinct wrap up of your project. Highlight achievements and project the
course forward. Insist on the mental image that you want the reader to be left with after
reading your report.
6. REFERENCES
List the references that you used in writing up the report.
1. Engineer's Mini Notebook Series, Radio Shack, Inc.
2. National Semiconductor Databooks
3. Found in the lab, these books contain all the technical specifications of the electronic
devices we will use. They are generally called "The Blue Books."
4. The Engineering Handbook. Richard C. Dorf (Ed), CRC Press, 1995,
ISBN 0-8493-8344-7.
5. Mark’s Standard Handbook of Mechanical Engineers, E. A. Avallone and T.
Baumeister III, 9th Edition, McGraw Hill, 1987.
6. Others
Dr. Victor Giurgiutiu
Page 73
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
ATTACHMENT 3: PRESENTATION TEMPLATE
General Instructions
•You have the liberty to select the background, transition effects, sounds, etc.
•Use the Slide Master view to make settings that apply to the whole document
•Use the following slides as a minimum requirement. Add to them as necessary to carry
your point through effectively.
•Use figures, photos, diagrams liberally. This is a visual show!!! We have both a digital
still camera and a digital video camera for those who wish to use them.
Acknowledgements
• Here is the place to express gratitude for th
help and/or support received from others
Introduction
Outline
• Bullet the main items of your talk
• What?…Describe your product.
• Who?…Identify your target market.
• Why?…Discuss the demand for your
product.
Technical Description (several
slides -- this is the main body)
• How
• Materials Used
• Hardware considerations
– Diagrams, schematics, etc
– Photo of project with callout
• Software Considerations
– Subroutines, Difficult Logic?
Dr. Victor Giurgiutiu
Troubleshooting
• Testing
• Problems encountered
Page 74
8/19/2008
EMCH 367
Microcontrollers in Mechanical Engineering
Course Package.doc
(Continued)
Economic Aspects
• Here you should have charts showing
– prototype costs and price
– production costs and retail price
• Use table format similar to that given to yo
in the Report Template.
Miscellaneous. Info.
• Commercial Feasibility
• Anything else?
Conclusion
• Wrap up your work nicely and leave a goo
feeling about it.
Dr. Victor Giurgiutiu
Page 75
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Examples
EXAMPLES
Examples are mainly intended for the students to get started quickly with the basic concepts,
programming language, and hex/binary conventions. The following examples are available:
Word file
Example_1
Example_2
Example_3
Example_4
Example_5
Example_6
Example_7
Example_8
Example_9
Example_10
Example_delay
Example_sq_wave
Example_buttons_bx
Example_SCI_transm
Example_SCI_recept
Example_IC
Example_OC
Example_RPM_1
Example_RPM_2
Example_Step
Example_Long_Delay
Example_Sort
Example_AD_convert
ASM file(s)
Ex1.asm
Ex2.asm
Ex3.asm
Ex4.asm
Ex5.asm
Ex6.asm
Ex7.asm
Ex8.asm
Ex9.asm
Ex10.asm
Ex_Delay.as
m
Sq_wav1.asm
Buttons_bx.as
m
SCI_transm.a
sm
SCI_recept.as
m
Ex_IC.asm
Ex_OC.asm
Ex_RPM_1.as
m
Ex_RPM_2.as
m
Ex_Step.asm
Ex_Long_Del
ay.asm
Ex_Sort.asm
Ex_AD_1.as
m
Sq_wav1.asm
HEX_BCD.as
m
Ex_AD_2.as
m
Ex_AD_3.asm Ex_AD_4.asm
An overview of the examples is presented next.
Dr. Victor Giurgiutiu
Page 76
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Examples
EXAMPLES OVERVIEW
#
Example_1
Example_2
Example_3
Example_4
Example_5
Example_6
Dr. Victor Giurgiutiu
Concepts
• Familiarize the user with the THRSim11 simulator environment
• Introduce the user to the syntax and concepts of Assembly (.asm) language
• Familiarize the user the way arithmetic operations are handled by the
microcontroller
• Instruct the user to interpret the List (.LST) file.
• Teach the user to perform the simulation and follow the step-by-step results.
• Introduce the LDAA, LDAB and ABA operations
• Introduce inherent mode
• Introduce immediate mode
• Familiarize the user with the THRSim11 simulator environment
• Introduce the user to the syntax and concepts of Assembly (.asm) language
• Familiarize the user the way arithmetic operations are handled by the
microcontroller
• Instruct the user to interpret the List (.LST) file.
• Teach the user to perform the simulation and follow the step-by-step results.
• Introduce ADDA operation
• Review the principles of the decimal numbers, i.e., in the range 0 – 9
• Review the decimal carry concept, i.e., when a result is outside the 0 – 9 range.
• Prepare the ground for hex arithmetic
• Introduce hex numbers and hex symbols, a, b, c, d, e, f.
• Introduce single precision and double precision registers
• Introduce hex arithmetic.
• Review 2-digit decimal arithmetic with carry to prepare the ground for 2-digit hex
arithmetic with carry.
• Introduce hex arithmetic with carry
• Facilitate comparison with the decimal case by using the same numbers as in
Example 5
Page 77
8/19/2008
EMCH 367
Example_7
Example_8
Example_9
Example_10
Example_
delay
Example_
sq_wave
Fundamentals of Microcontrollers
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Dr. Victor Giurgiutiu
Examples
Introduce 2-digit hex arithmetic with carry
Introduce the ‘lost carry’ concept
Introduce unsigned hex overflow
Introduce incrementation (INCA)
Introduce decrementation (DECA)
Review decimal borrow concepts using decrementation
Introduce hex borrow using decrementation
Introduce 2’s complement negative hex numbers as decrementation of zero with
free borrow
Show the decimal equivalent of the 2-digit hex decrementation of zero
Introduce hex subtraction
Introduce hex subtraction with negative results using the free borrow concept.
Show the decimal equivalent of hex subtraction with negative results using free
borrow.
Introduce 8-bit binary numbers
Introduce connection between 8-bit binary numbers and 2-digit hex numbers.
Introduce 8-bit binary arithmetic
Introduce binary 8-bit logic
Introduce masking
Review the use of branching
Illustrate a delay (wait) program
Demonstrate a flowchart and its relation with the program tasks list and program
code
Demonstrate the calculation of clock cycles from the clock cycles of each operation
Demonstrate the calculation of MCU time from the clock cycles
Review the use parallel ports
Illustrate the generation of a square wave using Port B output and a waiting
sequence
Demonstrate the use of a subroutine to shorten the length of a program
Examine the relation between displayed simulation time and clock cycles in
THRSim11 simulator
Page 78
8/19/2008
EMCH 367
Example_
buttons_bx
Example_
SCI_transm
Example_
SCI_recept
Example_IC
Fundamentals of Microcontrollers
•
•
•
•
•
•
Review the use parallel ports
Illustrate the use of Port C for input and output
Introduce the concept of shifting register and memory content
Practice the use of the THRSim11 IO box for input and output
Review the use of serial communication interface (SCI) for transmission
Illustrate the sending of a character through SCI
•
•
•
•
•
•
Review the use of serial communication interface (SCI) for reception
Illustrate the receiving of a character through SCI
Review the use of MCU Timer function as an Input Capture (IC) device
Review the use of the free running clock, TCNT, and it overflow flag, TOF
Review the use of a input capture clock, TIC1, and its event flag, IC1F
Demonstrated how the selection of signal transition to be captured is made (here
rising edge, EDG1A) and that the MCU is only sensitive to that particular
transition.
Show the calculation of actual time in μs from the timer readings, T1, T0, and
overflow count, NOF.
Review the use of MCU Timer function as an Output Compare (OC) device
Review the setting of OMx and OLx bits to select a desired OC event (in this
example, we set OM3=0, OL3=1, to generate a toggle on the OC3 pin)
Review the detection of the TOCx match with TNCT and the corresponding OC
action
Present the correlation between delay, DT, with actual frequency of the square
wave.
Explore the accuracy with which frequency can be adjusted
Explore the determination of low and high bounds on the frequencies that can be
generated with the MCU
Review the use of MCU Timer function as an Input Capture (IC) device
Review the use of the free running clock, TCNT, and it overflow flag, TOF
Review the use of a input capture clock, TIC1, and its event flag, IC1F
Demonstrated how the selection of signal transition to be captured is made (here
rising edge, EDG1B) and that the MCU is only sensitive to that particular
transition.
Introduce the use of soft masks (here, IC1_MSK, TOF_MSK).
Introduce the concept of layered flowcharting of a program: big-picture with
generic descriptions; detailed flowcharts for particular sections of the program.
•
Example_OC
•
•
•
•
•
•
Example_
RPM_1
•
•
•
•
•
•
Dr. Victor Giurgiutiu
Examples
Page 79
8/19/2008
EMCH 367
Example_
RPM_2
Fundamentals of Microcontrollers
•
•
•
•
•
•
•
Example_
Step
•
•
•
•
•
•
Example_
Sort
Example_
Long_Delay
•
•
•
•
•
Example_
AD_convert
•
•
Dr. Victor Giurgiutiu
Examples
Review the used of two time captures to calculate the time duration of an event
Illustrate the use of scaling factors (100s) to deal with numbers that are larger than
the microcontroller word length
Illustrate the handling of overflow counts, with special attention to the situation
when the two time captures are on one side and another of a timer overflow (timechange line)
Introduce the method of calculating multiplication through repeated additions and
decrementation of a counter
Introduce the use of a conversion subroutine to convert from hex to BCD
Illustrate rotation speed calculation from rotation period.
Illustrate the use of scaling factors (100s) to present the result on a display with
limited number of digits.
Review the use and control of stepper motors.
Discuss the stepper motor energizing patterns, 1- and 2-phase energizing types,
full- and half-step motion.
Introduce the concept of creating quasi-continuous motion through a sequence of
steps
Introduce the concept of sequential accessing a finite set of stored patterns through
index addressing with a continuously updating pointer.
Illustrate a method to ‘load’ a single-precision (2-hex) variable into a double
precision (4-hex) register.
Introduce the concept of automatic incrementation/decrementation of the
addressing pointer with a programmable step size
Discuss the reset actions to be taken when the pointer hits the ‘roof’ or ‘floor’.
Review the use of keystroke commands for controlling a process
Introduce the concept of ‘multiple sort’ and its ‘sequential sort’ equivalent
Present a subroutine that can implement a long delay between stepper motor steps
Introduce the concept of how to achieve double precision delays (4-hex) using
single precision (2-hex) variables
Review the use of A/D conversion function of the M68HC11 microcontroller.
Illustrate various modes of performing A/D conversion.
Page 80
8/19/2008
EMCH 367
Dr. Victor Giurgiutiu
Fundamentals of Microcontrollers
Examples
Page 81
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 1
EXAMPLE 1
OBJECTIVE
This simple example has the following objectives:
• Familiarize the user with the THRSim11 simulator environment
•
Introduce the user to the syntax and concepts of Assembly (.asm) language
•
Familiarize the user the way arithmetic operations are handled by the microcontroller
•
Instruct the user to interpret the List (.LST) file.
•
Teach the user to perform the simulation and follow the step-by-step results.
•
Introduce the LDAA, LDAB and ABA operations
•
Introduce immediate addressing mode
•
Introduce inherent addressing mode
PROGRAM
Ex1.asm program is very simple. It performs the arithmetic operation 3 + 2 = 5 using the ABA operation
in immediate mode. To achieve this, the program does the following operations:
•
Load the number 3 into accA using the opcode mnemonic LDAA with operand #3. The symbol #
signifies that the number 3 is used immediately. For this reason, this mode of operation is called
immediate mode).
•
Load the number 2 into accB using the opcode mnemonic LDAB with operand #2, i.e., using
immediate mode
•
Add the number in accA (i.e., 3) with the number in accB (i.e., 2) using the opcode mnemonic
ABA and no operand. This mode, which uses no operant, is called inherent mode.
The symbolic representation of this process is:
3ÆA
(immediate mode)
2ÆB
(immediate mode)
A + B Æ A (inherent mode)
This signifies that number 3 is loaded into accA, number 2 is loaded into accB, and the content of accA
is added to the content of accB with the result being put back into accA.
EXECUTION
1. Open THRSim11.
2. Maximize THRSim11 window.
3. Close the Commands window.
4. Open file Ex1.asm.
Dr. Victor Giurgiutiu
Page 82
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 1
5. Assemble file by pressing the Assemble button.
During assembly, you must have inserted in the A: floppy disk drive the floppy disk with the file
VAR_DEF.ASM. In this way, the assembler will find the file path A:\VAR_DEF.ASM when
executing the Assembly directive #INCLUDE. Else, you get error.
6. Tile windows by pressing the ‘Tile button’.
7. Set a break point to the line containing the opcode mnemonic SWI.
To do so, select the line, right click, and chose ‘Set Breakpoint’. The line becomes amber.
8. Change to decimal the display mode of registers A, B in the ‘CPU Registers’ window.
achieve this, right click on the line and select ‘Decimal’.
To
9. Put zeros in (i.e. reset) registers D, X, Y
To achieve this, highlight the line, type in the values, and hit Enter. Unless you hit enter, the
value will not take effect. (A and B get automatically reset by resetting D, since A and B are the
two halves of D). Your screen should look like this:
The green highlight in the .LST window indicates which line of program is to be executed next.
The memory address of the highlighted line, as given in the first column, is $c000. This means
that the program counter (PC) at $c000. Indeed, in the CPU registers window, you can see PC
$c000. The PC value indicates the memory address of the instruction to be executed next.
10. Use the ‘Step’ button
to step through the program.
For the Step button to be active, you need to be in the .LST window. Hence, select the .LST
window, if you have not done so already.
Dr. Victor Giurgiutiu
Page 83
8/19/2008
EMCH 367
Press the Step button
Fundamentals of Microcontrollers
Example 1
once. Your screen should look like this:
The green highlight moves to the next line, which starts at address $c001. The program counter
in the CPU registers window is PC $c001.
The line $c001 performs the loading of number 3 into accA. This line has not been executed yet.
It will be executed next when the Step button is pressed.
11. Press the Step button
Dr. Victor Giurgiutiu
again. Your screen should look like this:
Page 84
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 1
The green highlight has moved to the next line, starting at address $c003. It has jumped by 2
counts because the line that has just been executed had to Opcodes (i.e., machine instructions)
in it, 86 and 03. Each Opcode takes up one memory address, hence the program has move
forward by 2 locations. The current value of the program counter is PC $c003, as can be readily
verified in the CPU registers window.
The result of executing the previous instruction is now apparent. The number 3 has been loaded
into accA. You can verify this by noting that, in the CPU registers window, you see A 3.
12. Press the Step button again. The screen looks like this:
The execution of the previous instruction has loaded the number 2 into accB, just as the number
3 was loaded into accA. The result of this operation is apparent in the CPU registers window
where now we can see B 2.
13. Press the Step button again. The screen looks like this:
Dr. Victor Giurgiutiu
Page 85
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 1
The execution of the previous instruction has performed the addition between the contents of
accA (i.e., 3) and the contents of accB (i.e., 2). The result of the operation has been put back
into accA. This means that the arithmetic operation 3 + 2 = 5 has been executed. The result of
the addition is shown in the CPU registers window: the accA has become A 5, as expected.
The green highlight has moved to the next line which starts at memory address $c006. (In the
CPU registers window, the program counter indicates PC $c006.) The move of the program
counter was only by one memory location because the operation ABA just executed does not
have operand (inherent mode), and only requires one Opcode.
The line $c006 contains the opcode mnemonic SWI which signifies the end of the program. You
are done! (Do not press the ‘Step’ again, because it will throw you out of the program area.)
14. To rerun the program, you have to place the program counter again at the beginning of the
program. Select the line $c001, i.e., where the meaningful part of the program starts. Right click
and select ‘Place program counter on …’. The line that was selected becomes green highlighted.
You can now step again through the program and see how it operates. You can also press the
‘Run’ button
, and the program will automatically execute up to the next breakpoint. In our
case, the program will run all the way to the SWI instruction where the breakpoint is placed.
WHAT YOU HAVE LEARNED
In this simple exercise, you have learned quite a few things:
• New words and concepts: Opcode, opcode mnemonic, immediate mode, Assembly language
(.asm), list file (.LST), reset, program counter (PC), break point, registers, .
•
Microprocessor opcode mnemonics LDAA, LDAB, and ABA.
•
Meaning of immediate mode and how to invoke it by using the symbol #
•
Meaning of inherent mode.
•
Symbolic representation of the operations and their meaning
Dr. Victor Giurgiutiu
Page 86
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 1
•
Open and customize THRSim11 environment
•
Assemble an .asm file
•
Interpret an .LST file
•
Tile the THRSim11 windows (remember that the tiling sequence follows the sequence in which
you accessed the files, with the most recently accessed window tiled in the left upper corner!)
•
Put a value in a memory address, e.g. when you put zeros in the registers
•
Set a break point
•
Step through the program simulation and follow the changes taking place in the ‘CPU registers’
window.
•
See how program execution is affecting accA and accB. Identify the results of the calculation, i.e.
3 + 2 = 5 makes accA to take the value A 5.
Dr. Victor Giurgiutiu
Page 87
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 2
EXAMPLE 2
OBJECTIVE
This simple example has the following objectives:
• Familiarize the user with the THRSim11 simulator environment
•
Introduce the user to the syntax and concepts of Assembly (.asm) language
•
Familiarize the user the way arithmetic operations are handled by the microcontroller
•
Instruct the user to interpret the List (.LST) file.
•
Teach the user to perform the simulation and follow the step-by-step results.
•
Introduce ADDA operation
PROGRAM
Ex2.asm program is very simple. It performs the arithmetic operation 3 + 2 = 5 using the ADDA
operation in immediate mode. To achieve this, the program does the following operations:
•
Load the number 3 into accA using the opcode mnemonic LDAA with the operand #3, i.e., using
immediate mode.
•
Add the number in accA (which is 3) with the number 2 using the opcode mnemonic ADDA with
the operand #2. (Note that the immediate mode is again used.)
The symbolic representation of this process is:
3ÆA
(immediate mode)
A+2ÆA
(immediate mode)
This signifies that number 3 is loaded into accA, number 2 is loaded into immediate memory, and the
content of accA is added to of memory with the result being put back into accA.
EXECUTION
1. Open THRSim11.
2. Maximize THRSim11 window.
3. Close the Commands window.
4. Open file Ex2.asm.
5. Assemble file by pressing the Assemble button.
During assembly, you must have inserted in the A: floppy disk drive with the file
VAR_DEF.ASM. In this way, the assembler will find the file path A:\VAR_DEF.ASM when
executing the Assembly directive #INCLUDE. Else, you get error.
Dr. Victor Giurgiutiu
Page 88
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 2
6. Tile windows by pressing the ‘Tile button’.
7. Set a break point to the line containing the opcode mnemonic SWI.
To do so, select the line, right click, and chose ‘Set Breakpoint’. The line becomes amber.
8. Change to decimal the display mode of registers A, B in the ‘CPU Registers’ window. To
achieve this, right click on the line and select ‘Decimal’.
9. Put zeros in (i.e. reset) registers D, X, Y.
To achieve this, highlight the line, type in the values, and hit Enter. Unless you hit enter, the
value will not take effect. (A and B get automatically reset by resetting D, since A and B are the
two halves of D). Your screen should look like this:
The green highlight in the A:\Ex2.LST window indicates which line of program is to be executed
next. The memory address of the highlighted line, as given in the first column, is $c000. This
means that the program counter (PC) at $c000. Indeed, in the CPU registers window, you can
see PC $c000. The PC value indicates the memory address of the instruction to be executed
next.
10. Use the ‘Step’ button
to step through the program.
For the Step button to be active, you need to be in the .LST window. Hence, select the .LST
window, if you have not done so already.
Dr. Victor Giurgiutiu
Page 89
8/19/2008
EMCH 367
Press the Step button
Fundamentals of Microcontrollers
Example 2
once. Your screen should look like this:
The green highlight moves to the next line, which starts at address $c001. The program counter
in the CPU registers window is PC $c001.
The line $c001 performs the loading of number 3 into accA. This line has not been executed yet.
It will be executed next when the Step button is pressed.
11. Press the Step button again. Your screen should look like this:
The green highlight has moved to the next line, starting at address $c003. It has jumped by 2
counts because the line that has just been executed had two Opcodes (i.e., machine
instructions) in it, 86 and 03. Each Opcode takes up one memory address, hence the program
has move forward by 2 locations. The current value of the program counter is PC $c003, as can
be readily verified in the CPU registers window.
The result of executing the previous instruction is now apparent. The number 3 has been loaded
into accA. You can verify this by noting that, in the CPU registers window, you see A 3.
12. Press the Step button again. The screen looks like this:
Dr. Victor Giurgiutiu
Page 90
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 2
The execution of the previous instruction has performed the addition between the contents of
accA (i.e., 3) and the number kept in the immediate memory (i.e., 2). The result of the operation
has been put back into accA. This means that the arithmetic operation 3 + 2 = 5 has been
executed. The result of the addition is shown in the CPU registers window: the accA has
become A 5, as expected.
The green highlight has moved to the next line which starts at memory address $c005. (In the
CPU registers window, the program counter indicates PC $c005.) The line $c005 contains the
opcode mnemonic SWI which signifies the end of the program. You are done! (Do not press the
‘Step’ again, because it will throw you out of the program area.)
13. To rerun the program, you have to place the program counter again at the beginning of the
program. Select the line $c001, i.e., where the meaningful part of the program starts. Right click
and select ‘Place program counter on …’. The line that was selected becomes green highlighted.
You can now step again through the program and see how it operates. You can also press the
‘Run’ button
, and the program will automatically execute up to the next breakpoint. In our
case, the program will run all the way to the SWI instruction where the breakpoint is placed.
WHAT YOU HAVE LEARNED
In this simple exercise, you have learned quite a few things:
• New words and concepts: Opcode, opcode mnemonic, immediate mode, Assembly language
(.asm), list file (.LST), reset, program counter (PC), break point, registers, .
•
Microprocessor opcode mnemonics LDAA and ADDA
•
Meaning of immediate mode and how to invoke it by using the symbol #
•
Symbolic representation of the operations and their meaning
•
Open and customize THRSim11 environment
•
Assemble an .asm file
•
Interpret an .LST file
•
Tile the THRSim11 windows (remember that the tiling sequence follows the sequence in which
you accessed the files, with the most recently accessed window tiled in the left upper corner!)
Dr. Victor Giurgiutiu
Page 91
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 2
•
Put a value in a memory address, e.g. when you put zeros in the registers
•
Set a break point
•
Step through the program simulation and follow the changes taking place in the ‘CPU registers’
window.
•
See how program execution is affecting accA. Identify the results of the calculation, i.e.
3 + 2 = 5 makes accA to show A 5.
Dr. Victor Giurgiutiu
Page 92
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 2
(This page is left intentionally blank)
Dr. Victor Giurgiutiu
Page 93
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 3
EXAMPLE 3
OBJECTIVE
This simple example has the following objectives:
• Review the principles of the decimal numbers, i.e., in the range 0 – 9
•
Review the decimal carry concept, i.e., when a result is outside the 0 – 9 range.
•
Prepare the ground for hex arithmetic
PROGRAM
Ex3.asm program is similar to ex2.asm, but uses numbers that give the result outside the 0 – 9 range. It
performs the arithmetic operation 7 + 6 = 13. To achieve this, the program does the following:
• Load the number 7 into accA using LDAA, i.e.,
7ÆA
•
Load the number 6 into accB using LDAB, i.e.,
•
Add the number in accA (i.e., 7) with the number in accB (i.e., 6) A + B Æ A
6ÆB
A 13
EXECUTION
Open THRSim11. Maximize THRSim11 window. Close the Commands window. Open file Ex3.asm.
Assemble file. Tile windows. Set break point at the line containing SWI. Set the display of A, B
registers to ‘Decimal’. Reset registers D, X, Y. Your screen should look like this:
Dr. Victor Giurgiutiu
Page 94
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 3
Use the ‘Step’ button to step through the program. Press the Step button once. The registers do not
change. Press again. Number 7 is loaded into accA. Press again. Number 6 is loaded into accB. Press
again. AccA and AccB are added together. The result, 13, appears in accA. The number 6 is still
preserved in AccB. Your screen should look like this:
WHAT YOU HAVE LEARNED
In this simple exercise, you have prepared the ground for understanding hex arithmetic by reviewing
decimal arithmetic with results outside the range 0 – 9. The things that you have reviewed are:
• In decimal arithmetic, the base of the number system is ten
•
Ten independent symbols exist for representing the first ten numbers in the decimal system: 0, 1,
2, 3, 4, 5, 6, 7, 8, 9. These symbols are called digits.
•
The greatest number that can be represented with a single decimal symbol is nine.
•
Numbers greater than nine are represented with two or more digits. For example, number thirteen
is represented as 13, i.e. with two digits.
•
The symbol furthest to the left is called the most significant digit (MSD). In number 13, the most
significant digit is 1. It signifies the number of tens contained in the number. In our case, we
have only one ten, since 1 x ten = ten
•
The symbol furthest to the right is called the least significant digit (LSD). In number 13, the least
significant digit is 3. It signifies the number of units contained in the number. In our case, we
have three units, since 3 x units = three.
•
The complete number is assembled by adding the contribution of all digits, from LSD through
MSD. In number 13 there are two digits, MSD = 1, LSD = 3. The complete number is 1 x ten + 3
x units = ten + three = thirteen.
•
When the result of an addition is greater than nine, a carry occurs.
•
New words and notations: digits, most significant digit (MSD), least significant digit (LSD),
carry.
Dr. Victor Giurgiutiu
Page 95
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 4
EXAMPLE 4
OBJECTIVE
This simple example has the following objectives:
• Introduce hex numbers and hex symbols, a, b, c, d, e, f.
•
Introduce single precision and double precision registers
•
Introduce hex arithmetic.
PROGRAM
Ex4.asm program is identical to ex3.asm, but uses hex numbers. It performs the arithmetic operation $07
+ $06 = $0d. To achieve this, the program does the following:
• Load the number $07 into accA using LDAA, i.e.,
$07 Æ A
•
Load the number $06 into accB using LDAB, i.e.,
•
Add the number in accA (i.e., $07) with the number in accB (i.e., $06) A + B Æ A
$06 Æ B
A $0d
During this process, the number $07 was incremented six times by one. Sequentially, it went through
$08, $09, $0a, $0b, $0c, and finally, $0d. Hence, to achieve $07 + $06 we can choose two paths:
- Path 1: start with $07 in accA and increment six times using the ADDA opcode.
- Path 2: Start with $07 in accA and $06 in accB and do the addition using ABA.
EXECUTION
Open THRSim11. Maximize THRSim11 window. Close the Commands window. Open file Ex4.asm.
Assemble file. Tile the windows. Set break point at the line containing SWI. Set the display of A, B
registers to ‘Hexadecimal’. Reset registers D, X, Y. Your screen should look like this:
Note that, in single-precision 8-bit arithmetic, hex numbers are always represented with two digits, even
if the most significant digit (MSD) is zero. For example, the single-precision accA and accB are
Dr. Victor Giurgiutiu
Page 96
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 4
represented as $00 and $00. In double precision 8-bit arithmetic, hex numbers are always represented
with four digits, even if the more significant ones are zero. For example, double precision accD and
index registers X and Y are all represented as $0000. This convention helps us discern quickly between
the single precision and the double precision registers.
Use the ‘Step’ button to step through the program. Press the Step button once. The registers do not
change. Press again. Your screen should look like this:
During the operation, number 7 has been loaded into accA as $07. Also changed is accD, which results
from concatenation of accA:accB. Since accA is $07 and accB is $00, accD is $0700. This
concatenation process is always done in hex format, and is not apparent when decimal display is used
(check that this is so by looking into Example 1 through Example 3).
From here on, two paths are possible. They will be followed in sequence.
Dr. Victor Giurgiutiu
Page 97
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 4
PATH 1
Step again. AccA has incremented by one from $07 to $08. The screen should look like this:
Continue stepping and watch accA going sequentially through $0b, $0c, $0d. Finally, the screen should
look like this:
Dr. Victor Giurgiutiu
Page 98
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 4
This is result of the addition $07 + $06 = $0d, achieved through successive incrementation.
Dr. Victor Giurgiutiu
Page 99
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 4
PATH 2
The PC is placed at beginning of Path 2. Step once. The accA is reloaded with $07. Your screen looks
like this:
Step again. Your screen looks like this:
During the operation, number 6 has been loaded into accB as $06. Since accA is $07 and accB is $06,
accD is $0706.
Dr. Victor Giurgiutiu
Page 100
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 4
Now, step again to perform the addition $07 + $ 06 = $0d. The screen looks like this:
During the last operation, AccA and AccB have been added together. The result of the operation $07 +
$06 = $0d appears in accA. The number $06 is still preserved in AccB.
WHAT YOU HAVE LEARNED
In this simple exercise, you have understood how hex arithmetic works:
• In hex arithmetic, the base of the number system is sixteen (hexadecimal).
•
Sixteen independent symbols exist for representing the first sixteen numbers in the hex system: 0,
1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f.
•
The greatest number that can be represented with a single hex symbol is fifteen.
•
In single-precision 8-bit arithmetic, hex numbers are always represented with two digits, even if
the most significant digit (MSD) is zero. For example, you saw during this exercise how the
single-precision accA and accB took values $07 and $06. Later on, accA became $0d.
•
In double precision 8-bit arithmetic, hex numbers are always represented with four digits, even if
the more significant ones are zero.
•
In hex arithmetic, single-precision numbers can be built into double precision numbers through
concatenation (i.e., by putting them side by side). For example, when accA was $07 and accB
was $06, accD, which is simply accA:accB, was $0706. This was not so in decimal arithmetic
(check that this is so by looking into Example 2 and Example 3).
•
New words: hex arithmetic, hexadecimal, single precision, double precision, 8-bit arithmetic,
concatenation.
Dr. Victor Giurgiutiu
Page 101
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 5
EXAMPLE 5
OBJECTIVE
This simple example has the following objectives:
• Review 2-digit decimal arithmetic with carry to prepare the ground for 2-digit hex arithmetic
with carry.
PROGRAM
Ex5.asm program is similar to ex3.asm, but uses numbers outside the 0 – 9 range. It performs the
arithmetic operation 9 + 8 = 17. To achieve this, the program does the following:
• Load 9 into accA using LDAA, i.e.,
9ÆA
•
Load 8 into accB using LDAB, i.e.,
8ÆB
•
Add accA (i.e., 9) with accB (i.e., 8)
A+BÆA
A 17
EXECUTION
Open THRSim11. Maximize THRSim11 window. Close the Commands window. Open file Ex5.asm.
Assemble file. Tile windows. Set break point at the line containing SWI. Set the display of A, B
registers to ‘Decimal’. Reset registers D, X, Y. Your screen should look like this:
Dr. Victor Giurgiutiu
Page 102
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 5
Use the ‘Step’ button to step through the program. Press the Step button once. The registers do not
change. Press again. Number 9 is loaded into accA. Press again. Number 8 is loaded into accB. Press
again. AccA and AccB are added together. The result, 17, appears in accA. The number 8 is still
preserved in AccB. Your screen should look like this:
During the addition 9 + 8 = 17, decimal arithmetic with carry has been performed. The numbers nine
and eight, when added, give the number seventeen, which is greater than nine. Since the greatest number
that can be represented with just one decimal digit is nine, a carry to the next level, tens, had to be
enacted. In words: “nine plus eight makes seven carry one”. In symbols: 9 + 8 = 17.
WHAT YOU HAVE LEARNED
In this simple exercise, you have reviewing decimal arithmetic with carry to prepare the ground for
understanding hex arithmetic with carry. The things that you have reviewed are:
• The greatest number that can be represented with a single decimal digit is nine.
•
Numbers greater than nine are represented with two or more digits. For example, number
seventeen is represented as 17, i.e. with two digits.
•
When the result of adding two decimal numbers is greater than nine, a carry takes place.
•
New words and notations: addition with carry.
Dr. Victor Giurgiutiu
Page 103
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 6
EXAMPLE 6
OBJECTIVE
This simple example has the following objectives:
• Introduce hex arithmetic with carry
•
Facilitate comparison with the decimal case by using the same numbers as in Example 5
PROGRAM
Ex6.asm program is similar to ex5.asm, but uses hex numbers representation. It performs the arithmetic
operation $09 + $08 = $11. To achieve this, the program follows two paths:
Path 1: Load $09 into accA increment eight times.
• During this process, the number $09 is increased by one eight times using the INCA opcode.
Sequentially, it goes $09 Æ $0a Æ $0b Æ $0c Æ $0d Æ $0e Æ $0f Æ $10 Æ $11.
•
After the first six increments, the end of the hex symbols list ( i.e., symbol f) has been reached.
The process is at $0f.
•
The next (seventh) increment is performed with a carry, i.e. a zero is placed in the units
placeholder and a one is carried over into the next placeholder. At this point, the number $10 is
obtained.
•
The remaining and last increment moves the number from $10 to $11 by adding a one to the
units placeholder.
Path 2: Load $09 into accA, $08 into accB and perform the addition A + B Æ A. The result is $09 +
$08 = $11. (You can check this by using a Hex calculator.)
Path 1 is explicit and lets the user understand the carry process. Path 2 is shorter and is usually taken in
programming. Note that the result, $11, is the hex equivalent of the decimal number 17 from Example 5.
Dr. Victor Giurgiutiu
Page 104
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 6
EXECUTION
Open THRSim11. Maximize THRSim11 window. Close the Commands window. Open file Ex6.asm.
Assemble file. Tile windows. Set break point at the line containing SWI. Set the display of A, B, and D
registers to ‘Hexadecimal’. Reset registers D, X, Y. Your screen should look like this:
Use the ‘Step’ button to step through the program. Press the Step button once. The registers do not
change.
Dr. Victor Giurgiutiu
Page 105
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 6
Path 1
Step again. The numbers $09 is been loaded into accA. Your screen should look like this:
Step again. AccA has increased by one from $09 to $0a. The screen should look like this:
Dr. Victor Giurgiutiu
Page 106
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 6
Continue stepping and watch accA going sequentially through $0b, $0c, $0d, $0e, $0f. At this point, the
screen should look like this:
Step again. An increment from $0f to $10 takes place. The screen should look like:
Perform the final step and get the desired result at the end of Path 1, A $11.
Path 2: Place PC at $c013 (beginning of Path 2). Step once. The accA is reloaded with $09. Your screen
looks like this:
Dr. Victor Giurgiutiu
Page 107
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 6
Step again to load accB with $08. Now, step again to perform the addition $09 + $ 08 = $11. The result
appears in accA. The screen looks like this:
Dr. Victor Giurgiutiu
Page 108
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 6
WHAT YOU HAVE LEARNED
In this simple example, you have understood hex arithmetic with carry:
1. In Path 1, you saw addition as a repeated incrementation. The number $09 was loaded in accA
and subsequently incremented.
•
After 6 increments, from $09 to $0a, $0b, $0c, $0d, $0d, $0e, and $0f, the hex symbols
were exhausted.
•
The next increment (the seventh) enacted a carry such that the second placeholder (MSD)
was increased from 0 to 1, while the first placeholder (LSD) was reset to 0. At this stage,
the value in accA was $10. (This is by far different from the decimal 10).
•
The next and final increment (the eighth) incremented the LSD and the number in accA
moved from $10 to $11.
2. In Path 2, you saw the direct application of the hex addition using accA and accB, such that $09
+ $08 = $11.
3. You should note that the result $11 is the hex equivalent of the decimal result 17 from Example 5
(recall, 9 + 8 = 17).
4. New words: hex arithmetic with carry, placeholder.
Dr. Victor Giurgiutiu
Page 109
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 7
EXAMPLE 7
OBJECTIVE
This simple example has the following objectives:
• Introduce 2-digit hex arithmetic with carry
•
Introduce the ‘lost carry’ concept
•
Introduce ‘half carry’ concept
•
Introduce MSB carry
PROGRAM
Ex7.asm program performs the following arithmetic operations
• 15 + 27 = 42 (decimal) using the opcode mnemonics LDAA, LDAB, ABA
•
$0f + $1b = $2a (hex half carry - from bit 3) using the opcode mnemonics LDAA, LDAB, ABA
•
$ff + $01 = $00 (hex MSB carry) using the opcode mnemonics LDAA, ADDA
•
255 + 1 = 0 (decimal equivalent of a hex MSB carry) using the opcode mnemonics LDAA,
ADDA
Note: To facilitate understanding, the same numbers are used in both decimal and the hex cases.
CODING AND EXECUTION
Open THRSim11. Maximize THRSim11 window. Close the Commands window. Open file Ex7.asm.
Assemble file. Tile the windows. Set a break point at the line containing SWI. Reset registers D, X, Y.
Your screen should look like this:
Dr. Victor Giurgiutiu
Page 110
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 7
Use the ‘Step’ button to step through the program. Press the Step button once. The registers do not
change. You get to the beginning of a section in your program.
SECTION: 15 + 27 = 42 (DECIMAL) USING THE OPCODE MNEMONICS LDAA, LDAB, ABA
Set the display option of accA and accB to Decimal.
Use the Step button to step through this section of your program. After 2 steps, the screen looks like this:
During the previous 2 operations, the numbers 15 and 27 have been loaded into accA and acc B,
respectively.
Press the step button once. The screen looks like this:
Dr. Victor Giurgiutiu
Page 111
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 7
Congratulations! The first section in this example has been completed. You have achieved the decimal
addition 15 +27 = 42. AccA shows A 42, which is the expected result.
Note:
• A decimal carry happen during this operation, since, in the LSD, 5 + 7 = 12, ‘keep 2 and carry
1’.
•
In the result, the LSD is 2. This signifies that of the result with carry, which was 12, the least
significant digit, 2, was retained, and the most significant digit was carried in the next higher
position.
•
In the result, the MSD is 4. This signifies that the MSD of the result was obtained through the
addition of the most significant digits of the constituents, 1 and 2, and the carry 1, i.e., 1+2+1 =
4.
SECTION: $0F + $1B = $2A (HEX HALF-CARRY) USING THE OPCODE MNEMONICS LDAA, LDAB, ABA
Reset accA and accB by typing zero into them. Set the display option of accA and accB to hex. Your
screen looks like this:
Dr. Victor Giurgiutiu
Page 112
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 7
Use the Step button to step through this section of your program. After 2 steps, the screen looks like this:
During the previous 2 operations, the numbers $0f and $1b have been loaded into accA and acc B,
respectively.
Press the step button once. The screen looks like this:
Dr. Victor Giurgiutiu
Page 113
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 7
Congratulations! The second section in this example has been completed. You have achieve the hex
addition $0f + $1b = $2a. AccA shows A $2a, which is the expected result.
Note:
• A hex half carry happen during this operation, since, in the LSD, $f + $b = $1a, ‘keep a and
carry 1’.
•
In the result, the LSD is a. This signifies that of the result with carry, which was $1a, the least
significant digit, a, was retained, and the most significant digit, 1, was carried in the next higher
position.
•
In the result, the MSD is 2. This signifies that the MSD of the result was obtained through the
addition of the most significant digits of the constituents, 0 and 1, and the carry 1, i.e., 0+1+1 =
2.
Note that the decimal equivalent of your result is $1a = 42, i.e., the same as in the previous section.
Dr. Victor Giurgiutiu
Page 114
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 7
$FF + $01 = $00 (MSB CARRY) USING THE OPCODE MNEMONICS LDAA, ADDA
Reset accA and accB by typing zero into them. Set the display option of accA and accB to hex.
Use the Step button to step through this section of your program. After the first step, your screen looks
like this:
During this operation, the number $ff has been loaded into accA.
Press again the step button. Your screen looks like this:
During this operation, $01 was added to the number $ff existing in accA. If more than two hex digit
could be displayed, the operation would have looked like $0ff + $001 = $100. Alas, the 8-bit
architecture of our microcontroller does not allow for more than two hex digits. Hence, the third digit in
Dr. Victor Giurgiutiu
Page 115
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 7
the result is lost. (We have just experienced a ‘lost carry’). The result is $00. The event that you have
just witnessed is called hex MSB carry. However, the fact that this event took place has been recorded
by the microcontroller logic by setting the bit 0 in the condition code (CC) register. Before this operation,
the CC register was %1111000; after this operation, the CC register has become %11110101. The bits
that have been set by this operation are:
• C = 1 (bit 0 in CC register), signifying that a MSB carry took place during the operation
•
Z = 1 (bit 2 in CC register), signifying that the result of the operation was zero
Also affected by this operation was the bit N (CC register bit 3) which switched from 1 to 0. The
meaning of this will be explained in a later example, in which negative numbers are studied.
255 + 1 = 0 (DECIMAL EQUIVALENT OF HEX MSB CARRY) USING THE OPCODE MNEMONICS LDAA,
ADDA
Reset accA and accB by typing zero into them. Set the display option of accA and accB to decimal.
After the first step, your screen looks like this:
During this operation, the decimal number 255 has been loaded into accA. (This decimal number is the
decimal equivalent of the hex number $ff used in the previous section.)
Press again the step button. Your screen looks like this:
Dr. Victor Giurgiutiu
Page 116
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 7
During this operation, 1 was added to the number 255 existing in accA. The result should have been 256.
No decimal carry happened. However, the result is too large to be stored in 2-digit hex format, since 256
= $100. Hence, the third highest digit in the hex representation is lost, and only the last two digits are
retained. The displayed result $00, i.e., 0 in decimal. This proves again that, internally, the MCU works
in hex!
Dr. Victor Giurgiutiu
Page 117
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 7
WHAT YOU HAVE LEARNED
In this example, you have learned the following:
• In hex arithmetic, the symbol furthest to the left is also called the most significant digit (MSD).
In number $1d, the most significant digit is 1. It signifies the number of sixteens contained in the
number. In our case, we have only one sixteen, since 1 x sixteen = sixteen
•
In hex arithmetic, the symbol furthest to the right is called the least significant digit (LSD). In
number $1d, the least significant digit is d. It signifies the number of units contained in the
number. In our case, we have thirteen units, since the hex number d represents the number
thirteen, and d x units =thirteen.
•
The hex number $1d has the value twenty-nine, since sixteen plus thirteen makes twenty-nine.
•
You have observed a hex MSB carry. In our case, the machine has 2-digit hex precision; hence,
it cannot store numbers with more than two digits. When to the number $ff we added the number
$01, the result should have been $100 (Proof: $0ff + $001 = $100). But our MCU we cannot
store more than 2 hex digits in single precision, hence, the leading 1 is lost (‘lost carry’). The
phenomenon is called MSB carry. (The name MSB signifies most significant bit and it refers to
the binary equivalent of the hex number).
•
You have also observed the decimal representation of a hex MSB carry. This happened when to
the decimal number 255 we added the number 1. The result was 0, instead of 256 as you would
have expected. This illustrates the range limitation of your MCU (8-bit, 2-hex). Also illustrated
is the fact that, internally, MCU works in hex. YOU SHOULD TRAIN YOURSELF TO THINK
IN HEX TO BETTER UNDERSTAND THE WORKING OF THE MCU !
•
New words and notations: most significant digit (MSD), least significant digit (LSD), 8-bit
arithmetic, most significant bit (MSB), addition with carry, hex arithmetic with carry, ‘lost carry’,
hex half carry, MSB carry.
Dr. Victor Giurgiutiu
Page 118
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 7
(This page is left intentionally blank)
Dr. Victor Giurgiutiu
Page 119
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 8
EXAMPLE 8
OBJECTIVE
This exercise has the following objectives:
• Introduce decrease (SUBA)
•
Review decimal borrow concepts using decrease
•
Introduce hex borrow using decrease
•
Introduce 2’s complement negative hex numbers as decrease of zero with free borrow
•
Show the 2-digit 2's complement negative hex numbers
•
Show the decimal equivalent of the
2-digit 2's complement negative hex numbers
2-digit
hex
decrease
of
zero
and
of
Note: To facilitate understanding, the same numbers are used in both decimal and the hex cases.
PROGRAM
The program ex8.asm performs the following arithmetic operations:
• 7 – 1 = 6 (decimal) using the opcode mnemonics LDAA, SUBA
• $07 - $01 = $06 (hex) using the opcode mnemonics LDAA, SUBA
• 10 - 1 = 9 (decimal) using the opcode mnemonics LDAA, SUBA
• $10 - $01 = $0f (hex) using the opcode mnemonics LDAA, SUBA
• $00 - $01 = $ff (hex) using the opcode mnemonics LDAA, SUBA
• 0 - 1 = 255 (decimal equivalent of 2-digit hex arithmetic) using the opcode mnemonics LDAA,
SUBA
CODING AND EXECUTION
Open THRSim11. Maximize THRSim11 window. Close the Commands window. Open ex8.asm.
Assemble, tile the windows, set the breakpoint, and reset the registers. Your screen looks like this:
Dr. Victor Giurgiutiu
Page 120
8/19/2008
EMCH 367
Dr. Victor Giurgiutiu
Fundamentals of Microcontrollers
Example 8
Page 121
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 8
SECTION: 7 – 1 = 6 (DECIMAL) USING THE OPCODE MNEMONICS LDAA, SUBA
Set accA display to decimal. Step through section i) of the code. At the end of this section, your screen
looks like this:
During the execution of this section, decimal number 7 was loaded into accA, and decreased by 1 to
become 6. During the decrease, decimal borrow did not need to happen.
Dr. Victor Giurgiutiu
Page 122
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 8
SECTION: $07 - $01 = $06 (HEX) USING THE OPCODE MNEMONICS LDAA, SUBA
Set accA display to hex. Step through section ii) of the code. At the end of this section, your screen
looks like this:
During the execution of this section, hex number $07 was loaded into accA, and decreased by 1 to
become $06. During the decrease, hex borrow did not need to happen.
Dr. Victor Giurgiutiu
Page 123
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 8
SECTION: 10 - 1 = 9 (DECIMAL) USING THE OPCODE MNEMONICS LDAA, SUBA
Set accA display to decimal. Step through section iii) of the code. At the end of this section, your screen
looks like this:
During the execution of this section, decimal number 10 was loaded into accA, and decreased by 1 to
become 9. During the decrease, decimal borrow happened because the LSD was 0.
Dr. Victor Giurgiutiu
Page 124
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 8
SECTION: $10 - $01 = $0F (HEX) USING THE OPCODE MNEMONICS LDAA, SUBA
Set accA display to hex. Step through section vi) of the code. At the end of this section, your screen
looks like this:
During the execution of this section, hex number $10 was loaded into accA, and decreased by 1 to
become $0f. During the decrease, hex borrow happened because the LSD was 0.
Dr. Victor Giurgiutiu
Page 125
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 8
SECTION: $00 - $01 = $FF (HEX) USING THE OPCODE MNEMONICS LDAA, SUBA
Set accA display to hex. Step through section v) of the code. At the end of this section, your screen
looks like this:
During the execution of this section, hex number $00 was loaded into accA, and decreased by 1 to
become $ff. During the decrease, hex borrow happened because the LSD was 0. Since MSD was also 0,
a ‘free borrow’ beyond the MSD happened. Hence, the result of $00-$01 is the same as the result of
$000+$100-$001=$0ff, i.e. $ff.
Dr. Victor Giurgiutiu
Page 126
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 8
SECTION: 0 - 1 = 255 (DECIMAL EQUIVALENT OF 8-BIT HEX ARITHMETIC) USING THE OPCODE
MNEMONICS LDAA, SUBA
Set accA display to decimal. Step through section vi) of the code. At the end of this section, your screen
looks like this:
During the execution of this section, decimal number 0 was loaded into accA, and decreased by 1 to
become 255. We notice that the operation is equivalent to 0+256-1=255. This indicates that, although
the operation was displayed in decimal, a hex free borrow actually happened, since 256=$100.
USING CALCULATOR TO OBTAIN HEX NEGATIVE NUMBERS FOR –100
Use your calculator to find the HEX equivalent of negative decimal number –100. Type –100 into your
calculator, and convert to hex. After you have done this, you will see hex number F…FFF9C in your
screen. (The number of F depends on the maximum display length of your calculator.) The last two
digits, 9C, are the hex negative number of –100.
Dr. Victor Giurgiutiu
Page 127
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 8
WHAT YOU HAVE LEARNED
In this exercise, you have learned:
• In decimal arithmetic, decrease results in the value of the number being reduced by one unit
•
In hex arithmetic, decrease has the same meaning as in decimal arithmetic: the value of the
number is being reduced by one unit
•
For a 2-digit decimal number with the LSD zero, e.g., 10, decrease required a borrow to be
performed from the MSD into the LSD. As a result, we could perform the decrease and the result
was 9. The result showed that, because of the borrow, the MSD decreased from 1 to 0, and the
LSD increase from 0 to 9, i.e., from the bottom of the decimal symbols sequence to the top of the
sequence.
•
For a 2-digit hex number with the LSD zero, e.g., $10, decrease also required a borrow to be
performed from the MSD into the LSD. As a result, we could perform the decrease and the result
was $0f. The result showed that, because of the borrow, the MSD decreased from 1 to 0, and the
LSD increase from 0 to f, i.e., from the bottom of the hex symbols sequence to the top of the
sequence.
•
The difference between 10 (ten) and $10 (hex one-zero = decimal sixteen).
•
For a 2-digit hex number with zero LSD but also zero MSD (i.e., $00), decrease is still possible
using the ‘free-borrow’ concept. The free-borrow concept, which is implemented on most
microcontrollers, allows us to freely borrow a value of one from the next higher digit beyond the
precision of the machine. In other word, if we extend the range to 3 hex digits and write $ff as
$0ff, incrementing by one yields $0ff + $001 = $100. Conversely, decreasing $100 by one yields
$0ff, i.e., $ff. This leads directly to the concept of 2's complement negative numbers
•
2-digit 2's complement negative hex numbers are the numbers that appear to the left of the hex
zero in the following sequence: …, $fd, $fe, $ff, $00, $01, $02, $03, …. We notice that:
•
•
$ff is the negative of $01, and $ff + $01 = $00
•
$fe is the negative of $02, and $fe + $02 = $00
•
$fd is the negative of $03, and $fd + $031 = $00
•
etc.
New words and notations: decrease, free borrow, 2's complement negative numbers.
Dr. Victor Giurgiutiu
Page 128
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 8
(This page is left intentionally blank)
Dr. Victor Giurgiutiu
Page 129
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 9
EXAMPLE 9
OBJECTIVE
This exercise has the following objectives:
• Introduce hex subtraction
•
Introduce hex subtraction with negative results using the free borrow concept.
•
Show the decimal equivalent of hex subtraction with negative results using free borrow.
Note: To facilitate understanding, the same numbers are used in both decimal and the hex cases.
PROGRAM
The program ex9.asm performs the following arithmetic operations:
I. $0d - $06 = $07 (hex) using the opcode mnemonics LDAA, LDAB, SBA
II. $00 - $05 = $fb (hex) using the opcode mnemonics LDAA, LDAB, SBA
III. 0 - 5 = 251 (decimal equivalent of 8-bit hex arithmetic) using the opcode mnemonics LDAA,
LDAB, SBA
IV. $0e - $3a = $d4 (hex) using the opcode mnemonics LDAA, LDAB, SBA
V. 14 - 58 = 212 (decimal equivalent of 8-bit hex arithmetic) using the opcode mnemonics LDAA,
LDAB, SBA
Dr. Victor Giurgiutiu
Page 130
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 9
CODING AND EXECUTION
Open THRSim11. Maximize THRSim11 window. Close the Commands window. Open ex9.asm.
Assemble, tile the windows, set the breakpoint, and reset the registers. Your screen looks like this:
Dr. Victor Giurgiutiu
Page 131
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 9
SECTION: $0D - $06 = $07 (HEX) USING THE OPCODE MNEMONICS LDAA, LDAB, SBA
Load and assemble ex9.asm. Set accA display to hex. Step through section vii) of the code. At the end of
this section, your screen looks like this:
During the execution of this section, hex number $0d was loaded into accA, hex number $06 was loaded
into accB, and then accB was subtracted from accA. The result of the arithmetic operation remained in
accA. The result was $07. A hex borrow did not happen, since the number in accB was less than the
number in accA, and the LSD of the number in accB was also less than the LSD of the number in accA.
Dr. Victor Giurgiutiu
Page 132
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 9
SECTION: $00 - $05 = $FB (HEX) USING THE OPCODE MNEMONICS LDAA, LDAB, SBA
Set accA accB displays to hex. Step through section viii) of the code. At the end of this section, your
screen looks like this:
During the execution of this section, hex number $00 was loaded into accA, hex number $05 was loaded
into accB, and then accB was subtracted from accA. The result of the arithmetic operation remained in
accA. The result was $fb. This is equivalent to the hex operation $000+$100-$005=$0fb, and indicates
that a hex free borrow happened.
Dr. Victor Giurgiutiu
Page 133
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 9
SECTION: 0 - 5 = 251 (DECIMAL EQUIVALENT OF 8-BIT HEX ARITHMETIC) USING THE OPCODE
MNEMONICS LDAA, LDAB, SBA
Set accA and accB displays to decimal. Step through section ix) of the code. At the end of this section,
your screen looks like this:
During the execution of this section, decimal number 0 was loaded into accA, and decimal number 5
into accB. Then, accB was subtracted from accA. The result of the subtraction remained in accA. The
result was 251. We notice that the following decimal arithmetic operation happened 0-5=251. This
operation is equivalent to 0+256-1=255. This indicates that, although the operation was displayed in
decimal, a hex free borrow actually happened since 256=$100.
Dr. Victor Giurgiutiu
Page 134
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 9
SECTION: $0E - $3A = $D4 (HEX) USING THE OPCODE MNEMONICS LDAA, LDAB, SBA
Set accA accB displays to hex. Step through section x) of the code. At the end of this section, your
screen looks like this:
During the execution of this section, hex number $0e was loaded into accA, hex number $3a was loaded
into accB, and then accB was subtracted from accA. The result of the arithmetic operation remained in
accA. The result was $d4. This is equivalent to the hex operation $00e+$100-$03a=$0d4, and indicates
that a hex free borrow happened.
Dr. Victor Giurgiutiu
Page 135
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 9
SECTION: 14 - 58 = 212 (DECIMAL EQUIVALENT OF 8-BIT HEX ARITHMETIC) USING THE OPCODE
MNEMONICS LDAA, LDAB, SBA
Set accA and accB displays to decimal. Step through section xi) of the code. At the end of this section,
your screen looks like this:
During the execution of this section, decimal number 14 was loaded into accA, and decimal number 58
into accB. Then, accB was subtracted from accA. The result of the subtraction remained in accA. The
result was 212. We notice that the following decimal arithmetic operation happened 14-58=212. This
operation is equivalent to 14+256-58=212. This indicates that, although the operation was displayed in
decimal, a hex free borrow actually happened since 256=$100.
Dr. Victor Giurgiutiu
Page 136
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 9
WHAT YOU HAVE LEARNED
In this exercise, you have learned:
• Subtraction using SBA opcode mnemonic happened as expected, in both decimal and hex
arithmetic, as long as the minuend is greater than the subtrahend (e.g., 13-6=7, $0d-$06=$07).
•
When the minuend is less than the subtrahend, the result of the subtraction operation is
calculated using a free borrow (e.g., $0e-$3a=$00e+$100-$03a=$0d4=$d4).
•
Even if decimal display of numbers is used, the calculations and the free borrow still happen in
hex (e.g., 14-58=14+256-58=212, where 256=$100).
•
New words and notations: subtraction, minuend, subtrahend.
Dr. Victor Giurgiutiu
Page 137
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example 10
EXAMPLE 10
OBJECTIVE
This example has the following objectives:
• Introduce 8-bit binary numbers
•
Introduce connection between 8-bit binary numbers and 2-digit hex numbers.
•
Introduce 8-bit binary arithmetic
•
Introduce the half carry (bit 3 carry) concept
•
Introduce 8-bit binary logic
•
Introduce masking
PROGRAM
Use Ex10.asm code to do the following:
ι)• Construct the numbers zero, one, two, three, four, five, six, seven, eight, nine, ten, eleven, twelve,
thirteen, fourteen, fifteen, sixteen, seventeen using the addition command ADDA. Represent these
numbers in decimal, binary, and hex using the display options of accA.
ιι)• 3 + 2 = 5 in binary and hex using LDAA, LDAB, ABA
ιιι)•
13 – 6 =7 in binary and hex using LDAA, LDAB, SBA
ιϖ)•
$0f + $01 = $10 in binary and hex using LDAA, LDAB, ABA (half carry, or
bit-3 carry)
ϖ)•
$10 -$01 = $0f in binary and hex using LDAA, SUBA
ϖι)•
$ff + $01 = $00 in binary and hex using LDAA, ADDA (MSB carry)
ϖιι)•
$00 - $01 = $ff in binary and hex using LDAA, SUBA
ϖιιι)•
1 AND 0 = 0 using LDAA, ANDA
ιξ)•
1 OR 0 = 1 using LDAA, ORAA
ξ)• 1 XOR 0 = 1 using LDAA, EORA
ξι)•
1 OR 1 = 1 using LDAA, ORAA
ξιι)•
1 XOR 1 = 0 using LDAA, EORA
ξιιι)•
%11111111 NAND %00000000 = %11111111 using LDAA, ANDA, COMA
ξιϖ)•
%00000000 NOR %11111111 = %00000000 using LDAA, ORAA, COMA
ξϖ)•
%10101110 AND %00000010 = %00000010 using LDAA, ANDA (masking)
(Note: the NAND and NOR instructions do not exist in the MC6811 instruction set, but can be obtained
by using the COM instruction after the AND and OR instructions.)
Dr. Victor Giurgiutiu
Page 138
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
CODING AND EXECUTION
Open THRSim11. Maximize THRSim11 window. Close the Commands window. Open and assemble
Ex10.asm. Tile the windows, set the breakpoint, and reset the registers. Reset accA and accB by typing
zero into them. Set the display option of accA to binary. Your screen should look like this:
Dr. Victor Giurgiutiu
Page 139
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
SECTION: REPRESENT NUMBERS ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN,
ELEVEN, TWELVE, THIRTEEN, FOURTEEN, FIFTEEN, SIXTEEN, SEVENTEEN
IN DECIMAL, BINARY, AND HEX
Use the Step button to step through this section of your program. After first step your screen looks like
this:
During this operation, the number zero has been loaded into accA. Your[VG1] Assembly instruction used
the decimal 1, and the simulator converted it to binary, %00000001, per your display setting. The
number one stored in accA is represented using all the 8 bits, though the seven highest bits (preceding
bits) are zero, i.e., %00000001. This rules always apply when binary numbers are represented in this
simulator.
Change the display option of accA to hex. Your screen will look like this:
Step through the rest of the operations, incrementing each time accA by one. At each step, observe the
binary representation, then switch to hex, then to decimal, and back to binary. When incrementing,
observe how the binary bits either increment from 0 to 1, or increment from 1 to 0 with a binary carry to
the left. When you get to the equivalent of number ten, your binary screen should look like this:
Dr. Victor Giurgiutiu
Page 140
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
Change the display option of accA to HEX, your screen looks like this:
Continue with the incrementation process until you reach fifteen. Note that during this process, only the
lower four binary bits and the corresponding hex LSD are being affected. The higher four binary bits
and the hex MSD are not being affected. When you reached fifteen, your binary screen should look like
this:
Dr. Victor Giurgiutiu
Page 141
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
Change the display option of accA to HEX, your screen looks like this:
Return to the binary display. Note that all the lower bits (bit 0, bit 1, bit 2, bit 3) have been filled with
1’s, while all the higher bits (bit 4, bit 5, bit 6, bit 7) are still filled with 0’s. You have reached the point
where further incrementation will produce a carry from bit 3 into bit 4. When this happens, the lower bit
will be returned to 0, while a 1 will appear in the least significant position of the upper bits. In hex
Dr. Victor Giurgiutiu
Page 142
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
display, this will correspond to a hex carry from the lower to higher nibble of the hex number, i.e. from
$0f to $10.
Press the step button to effect this incrementation. Your binary screen looks like this:
Change the display of accA to HEX; your screen looks like this:
The decimal equivalent of the number in accA at this point is 16. Further incrementation will again
affect only the lower bits, until a bit 3 carry takes again place.
At the end of this section of your program, the binary screen looks like this:
Dr. Victor Giurgiutiu
Page 143
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
Change the display option of accA to HEX, your screen looks like this:
Dr. Victor Giurgiutiu
Page 144
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
SECTION: PERFORM 3 + 2 = 5 IN BINARY AND HEX USING LDAA, LDAB, ABA
Place PC at the beginning of section ii) in the code. Turn display of accA and accB to binary. Step
through this section of the code until the numbers three and two have been loaded into accA and accB,
respectively. They will show as binary, as illustrated by the screen capture below:
Perform the addition of accB to accA; the result is shown in accA. Observe that a carry from bit 1 into
bit 2 has happened. The screen should look like this:
Dr. Victor Giurgiutiu
Page 145
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
Repeat this section with the display of accA and accB turned to hex. Observe that, in hex, no carry is
apparent. The corresponding screen captures are:
Dr. Victor Giurgiutiu
Page 146
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
SECTION: PERFORM 13 – 6 =7 IN BINARY AND HEX USING LDAA, LDAB, SBA
Place PC at the beginning of section iii) in the code. Turn display of accA and accB to binary. Step
through this section of the code until the two numbers have been loaded into accA and accB,
respectively. The screen looks like this:
Perform the subtraction operation. Note that a borrow was enacted from bit 2 into bit 1 and then from bit
3 into bit 2 to permit the operation to take place. After subtraction, your screen looks like this:
Dr. Victor Giurgiutiu
Page 147
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
Repeat this section with the display of accA and accB turned to hex. Observe that, in hex, no borrow is
apparent. The screen corresponding captures are:
Dr. Victor Giurgiutiu
Page 148
8/4/20068/21/20058/19/2005
EMCH 367
Dr. Victor Giurgiutiu
Fundamentals of Microcontrollers
Page 149
Example 10
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
SECTION: PERFORM $0F + $01 = $10 IN BINARY AND HEX USING LDAA, ADDA (HALF CARRY OR BIT 3
CARRY)
Reset accA and accB. Place PC at the beginning of section iv) in the code. Turn display of accA to
binary. Step through this section of the code until the number $0f has been loaded into accA. The screen
looks like this:
Dr. Victor Giurgiutiu
Page 150
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
Perform the incrementation. Note the carry that takes place from bit 3 into bit 4. Your screen looks like
this:
Dr. Victor Giurgiutiu
Page 151
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
Repeat this section with the display of accA turned to hex. Observe that, in hex, a carry is also apparent.
The corresponding screen captures are:
Dr. Victor Giurgiutiu
Page 152
8/4/20068/21/20058/19/2005
EMCH 367
Dr. Victor Giurgiutiu
Fundamentals of Microcontrollers
Page 153
Example 10
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
SECTION: PERFORM $10 -$01 = $0F IN BINARY AND HEX USING LDAA, SUBA
Reset accA and accB. Place PC at the beginning of section v) in the code. Turn display of accA to binary.
Step through this section of the code until the number $10 has been loaded into accA. The screen looks
like this:
Perform the decrementation. Note that a borrow takes place from bit 4 into bit 3. Your screen looks like
this:
Repeat this section with the display of accA turned to hex. Observe that, in hex, a borrow is also
apparent. The corresponding screen captures are:
Dr. Victor Giurgiutiu
Page 154
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
SECTION: PERFORM $FF + $01 = $00 IN BINARY AND HEX USING LDAA, ADDA (MSB CARRY)
Reset accA and accB. Place PC at the beginning of section vi) in the code. Turn display of accA to
binary. Step through this section of the code until the number $ff has been loaded into accA. The screen
looks like this:
Dr. Victor Giurgiutiu
Page 155
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
Perform the increment. Note the lost carry that takes place from bit 7. Your screen looks like this:
Repeat this section with the display of accA turned to hex. Observe that, in hex, a lost carry is also
apparent. The corresponding screen captures are:
Dr. Victor Giurgiutiu
Page 156
8/4/20068/21/20058/19/2005
EMCH 367
Dr. Victor Giurgiutiu
Fundamentals of Microcontrollers
Page 157
Example 10
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
SECTION: PERFORM $00 - $01 = $FF IN BINARY AND HEX USING LDAA, SUBA
Reset accA and accB. Place PC at the beginning of section vii) in the code. Turn display of accA to
binary. Step through this section of the code until the number $00 has been loaded into accA. The screen
looks like this:
Perform the decrementation. Note the free borrow that takes place from into bit 7. Your screen looks
like this:
Repeat this section with the display of accA turned to hex. Observe that, in hex, a free borrow is also
apparent. The corresponding screen captures are:
Dr. Victor Giurgiutiu
Page 158
8/4/20068/21/20058/19/2005
EMCH 367
Dr. Victor Giurgiutiu
Fundamentals of Microcontrollers
Page 159
Example 10
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
SECTION: 1 AND 0 = 0 USING LDAA, ANDA
Reset accA and accB. Place PC at the beginning of section viii) in the code. Turn display of accA to
decimal. Step through this section of the code until the number 1 has been loaded into accA. The screen
looks like this:
Step again. The number 1 is AND-ed with 0. The result is 0. Your screen looks like this:
Dr. Victor Giurgiutiu
Page 160
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
SECTION: 1 OR 0 = 1 USING LDAA, ORAA
Reset accA and accB. Place PC at the beginning of section ix) in the code. Leave display of accA to
decimal. Step through this section of the code until the number 1 has been loaded into accA. The screen
looks like this:
Step again. The number 1 is OR-ed with 0. The result is 1. Your screen looks like this:
Dr. Victor Giurgiutiu
Page 161
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
SECTION: 1 XOR 0 = 1 USING LDAA, EORA
Place PC at the beginning of section x) in the code. Leave display of accA to decimal. Step through this
section of the code until the number 1 has been loaded into accA. The screen looks like this:
Step again. The number 1 is XOR-ed with 0. The result is 1. Your screen looks like this:
Dr. Victor Giurgiutiu
Page 162
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
SECTION: 1 OR 1 = 1 USING LDAA, ORAA
Place PC at the beginning of section xi) in the code. Leave display of accA to decimal. Step through this
section of the code until the number 1 has been loaded into accA. The screen looks like this:
Step again. The number 1 is OR-ed with 1. The result is 1. Your screen looks like this:
Dr. Victor Giurgiutiu
Page 163
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
SECTION: 1 XOR 1 = 0 USING LDAA, EORA
Place PC at the beginning of section xii) in the code. Leave display of accA to decimal. Step through
this section of the code until the number 1 has been loaded into accA. The screen looks like this:
Step again. The number 1 is OR-ed with 1. The result is 0. Your screen looks like this:
Dr. Victor Giurgiutiu
Page 164
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
SECTION: %11111111 NAND %00000000 = %11111111 USING LDAA, ANDA, COMA
Place PC at the beginning of section xiii) in the code. Turn display of accA to binary. Step through this
section of the code until the number %11111111 has been loaded into accA. The screen looks like this:
Step again. The number %11111111 is AND-ed with %00000000. The result is %00000000. Your
screen looks like this:
Dr. Victor Giurgiutiu
Page 165
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
[VG2]
Dr. Victor Giurgiutiu
Page 166
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
Step again. We get the Boolean inversion of the result using the COMA (complement of accA) opcode.
The result is now %11111111 (note that COMA inverses all the bits). Your screen looks like this:
SECTION: %00000000 NOR %11111111 = %00000000 USING LDAA, ORAA, COMA
Place PC at the beginning of section xiv) in the code. Reset accA and accB. Turn display of accA to
binary. Step through this section of the code until the number %00000000 has been loaded into accA.
The screen looks like this:
Dr. Victor Giurgiutiu
Page 167
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
Step again. The number %00000000 is OR-ed with %11111111. The result is %11111111. Your screen
looks like this:
Dr. Victor Giurgiutiu
Page 168
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
Step again. We get the Boolean inversion of the result using the COMA opcode (complement of accA).
The result is now %00000000 (note that COMA inverses all the bits). Your screen looks like this:
SECTION: %10101110 AND %00000010 = %00000010 USING LDAA, ANDA (MASKING)
This section demonstrates how the mask %00000010 selects the second bit (bit 1) of the number
%10101110. Place PC at the beginning of section xv) in the code. Leave display of accA to binary. Step
through this section of the code until the number %10101110 has been loaded into accA. The screen
looks like this:
Dr. Victor Giurgiutiu
Page 169
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
Step again. The number %10101110 is AND-ed with %00000010. The result is %00000010. Your
screen looks like this:
Dr. Victor Giurgiutiu
Page 170
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
Notice the effect of the mask. Out of all the bits that were set in accA, only that bit (bit 1) that coincides
with the mask has remained. Mask is useful for checking the status of selected bits (e.g., flags).
WHAT YOU HAVE LEARNED
In this example, you have learned:
• The 8-bit binary numbers
•
The connection between 8-bit binary numbers and 2-digit hex numbers.
•
The 8-bit binary arithmetic
•
The half carry (bit 3 carry) concept
•
The 1-bit and 8-bit binary logic
•
The fact that logic operations are performed bit-by-bit
•
Boolean inversion using the complement opcode (e.g., COMA).
•
Masking, i.e., the selection of bits using masks
•
New words and notations: 8-bit binary arithmetic, 8-bit binary logic; complement opcode;
masking, flags.
Dr. Victor Giurgiutiu
Page 171
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
•
Dr. Victor Giurgiutiu
Page 172
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
(This page is intentionally left blank)
Dr. Victor Giurgiutiu
Page 173
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example 10
ank)
Dr. Victor Giurgiutiu
Page 174
8/4/20068/21/20058/19/2005
EMCH 367
Fundamentals of Microcontrollers
Example DELAY
EXAMPLE DELAY
OBJECTIVE
This example has the following objectives:
• Review the use of branching
•
Illustrate a delay (wait) program
•
Demonstrate a flowchart and its relation with the program tasks list and program code
•
Demonstrate the calculation of clock cycles from the clock cycles of each operation
•
Demonstrate the calculation of MCU time from the clock cycles
PROGRAM
The program does the following:
Code
Flowchart
(i) Define variable DELAY at
$0000
(ii) Load DELAY into accA
Define variables:
DELAY
Æ
$0000
Load DELAY into accA
(iii) Decrement accA
(iv) Branch back to (iii) if the
result is higher than zero
(unsigned >0)
LABEL1
Y
(vi) SWI
Subtract 1 from accA
Brach if higher
than zero
N
SWI
DELAY
RMB
1
LDAA DELAY
LABEL1
BHI
SUBA #1
LABEL1
SWI
CODING
The essential code for this program is shown in the third column above. The program has been coded
into the file Ex_delay.asm using the standard template.
Dr. Victor Giurgiutiu
Page 175
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example DELAY
EXECUTION
Open THRSim11. Close the Commands window. Open the memory window. Open and assemble
Ex_delay.asm. Tile windows, set breakpoint, and reset registers. Set standard labels (Label/Set Standard
Labels). Remove labels RAM and DATA. Set display of memory DELAY to decimal. Press the RESET
button. Your screen should look like this:
a) Put 5 into variable DELAY: click $ff on line $0000 in the memory list, and type in the value 5 in
the highlighted location. Your screen looks like this:
Dr. Victor Giurgiutiu
Page 176
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example DELAY
Note “Clock Cycles 2” in the lower right corner. This indicates that 2 clock cycles were expended just to
get the MCU started and reset.
b) Step through the program; after each step, observe the number of cycles taken by each operation.
You will notice that NOP takes 2 cycles, LDAA takes 3, SUBA takes 2, and BHI takes 3. Look
up these opcodes in the Motorola MC68HC11 Programming Reference Guide pocketbook and
verify these numbers in the ‘Cycles’ column of the Instructions table.
c) After each pass through LABEL1, accA is decremented by one. When reaching the branch
instruction BHI, the program branches back to LABEL1 if the result of the decrementation is
still higher than zero. After the first pass, accA was decremented from 5 to 4. The screen looks
like this:
Dr. Victor Giurgiutiu
Page 177
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example DELAY
Note that clock cycles counter shows 12. This number is made up as follows: 2+2+3+2+3=12. During
this pass, accA was reduced from $05 to $04. These are illustrated in the table below:
Cycles count table, actual and cumulative, opcode by opcode, after pass 1.
AccA start
2
START NOP
2
LDAA DELAY 3
LABEL1 SUBA #1
2
BHI
LABEL1 3
SWI
AccA end
Dr. Victor Giurgiutiu
Pass 1
$05
2
4
7
9
12
$04
Page 178
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example DELAY
After the second pass, the screen looks like this:
Note that clock cycles counter shows 17. This number is made up as follows: 2+2+3+2(2+3)=17. During
this pass, accA was reduced from $04 to $03. These are illustrated in the table below:
Cycles count table, actual and cumulative, opcode by opcode, after pass 2.
AccA start
START
NOP
LDAA DELAY
LABEL1 SUBA #1
BHI
LABEL1
SWI
AccA end
Dr. Victor Giurgiutiu
2
2
3
2
3
Pass 1
$05
2
4
7
9
12
$04
Pass 2
$04
2
3
14
17
$03
Page 179
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example DELAY
After the third pass, the screen looks like this:
Note that clock cycles counter shows 22. This number is made up as follows: 2+2+3+3(2+3)=22. During
this pass, accA was reduced from $03 to $02. These are illustrated in the table below:
Cycles count table, actual and cumulative, opcode by opcode, after pass 3.
AccA start
START
NOP
LDAA DELAY
LABEL1 SUBA #1
BHI
LABEL1
SWI
AccA end
Dr. Victor Giurgiutiu
2
2
3
2
3
Pass 1
$05
2
4
7
9
12
$04
Pass 2
$04
2
3
14
17
$03
Page 180
Pass 3
$03
2
3
19
22
$02
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example DELAY
After the fourth pass, the screen looks like this:
Note that clock cycles counter shows 27. This number is made up as follows: 2+2+3+4(2+3)=27. During
this pass, accA was reduced from $02 to $01. These are illustrated in the table below:
Cycles count table, actual and cumulative, opcode by opcode, after pass 4.
AccA start
START
NOP
LDAA DELAY
LABEL1 SUBA #1
BHI
LABEL1
SWI
AccA end
Dr. Victor Giurgiutiu
2
2
3
2
3
Pass 1
$05
2
4
7
9
12
$04
Pass 2
$04
2
3
14
17
$03
Page 181
Pass 3
$03
2
3
19
22
$02
Pass 4
$02
2
3
24
27
$01
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example DELAY
After the fifth and final pass, the screen looks like this:
Note that clock cycles counter shows 32. This number is made up as follows:
2+2+3+4(2+3)+2+3=7+5*5=32. During this pass, accA was reduced from $01 to $00. At the branch
point, the loop was exited, and the operation SWI was executed after which the program stopped. These
are illustrated in the table below:
Cycles count table, actual and cumulative, opcode by opcode, after pass 5.
AccA start
START
NOP
LDAA DELAY
LABEL1 SUBA #1
BHI
LABEL1
SWI
AccA end
2
2
3
2
3
Pass 1
$05
2
4
7
9
12
$04
Pass 2
$04
2
3
14
17
$03
Pass 3
$03
2
3
19
22
$02
Pass 4
$02
2
3
24
27
$01
Pass 5
$01
2
3
29
32
$00
The total number of cycles expended during the operation of this program with DELAY=5 was 32. The
number of cycles was calculated with formula: N_cycles=7+DELAY*5=7+5*5=32
a) Each clock cycle takes 1/2MHz=0.5 micro-sec. The total time taken by the MCU to execute this
program can be calculated with the formula D_t=N_cycles*0.5 micro-sec. For DELAY=5,
N_cycles=32, and D_t=16 micro-sec=0.000016 sec. This value is shown in the lower left corner
of the simulator window as ‘Simulated time: 0.000016 sec’. To see it, you may have to expand
the window. Your screen should look like this:
Dr. Victor Giurgiutiu
Page 182
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example DELAY
b) Reset the simulator. Run the program by pressing the Run button. The program stops when
accA has been reduced to zero. The values shown on the task bar are Simulated time: 0.000016
sec in the lower left corner and Clock Cycles 32 in the lower right corner.
c) Reset the simulator. Put value 10 in DELAY.
d) Predict the number of cycles with the formula N_cycles=7+DELAY*5=7+10*5=57. Calculate
the time D_t=N_cycles*0.5=57*0.5=28.5 micro-sec=0.0000285.
e) Run the program. The screen capture is:
Note that ‘Clock Cycles 57’, while ‘Simulated time: 0.0000285 sec.
Dr. Victor Giurgiutiu
Page 183
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example DELAY
WHAT YOU HAVE LEARNED
In this example, you have learned:
• The use of variables
•
The use of labels and branching
•
The flowchart and its relation with the program tasks list and program code
•
Calculation of clock cycles from the clock cycles of each operation
•
Calculation of MCU time from the clock cycles knowing that each clock cycle lasts 0.5 microsec
•
How to read clock cycles and simulated time in the simulator window
•
How to write a delay (wait) program
•
New words and notations: variables, labels, branch, clock cycles, MCU time.
Dr. Victor Giurgiutiu
Page 184
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SQUARE WAVE
EXAMPLE SQUARE WAVE
OBJECTIVE
This example has the following objectives:
• Review the use parallel ports
•
Illustrate the generation of a square wave using Port B output and a waiting sequence
•
Demonstrate the use of a subroutine to shorten the length of a program
•
Examine the relation between displayed simulation time and clock cycles in THRSim11 simulator
Figure 1 Square wave schematics showing the half-wave duration, Δt, and the low (L) and high (H)
states.
PROGRAMS
This example uses two programs that produce the same output – the generation of a square wave of
programmable wavelength. The wavelength is programmed using the variable DELAY. The square-wave
electrical signal is output through second pin of Port B, i.e., pin PB1. The difference between the first and
second program consist in the use of a subroutine. The use of a subroutine compresses the code and
shortens the total length of the program.
Dr. Victor Giurgiutiu
Page 185
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SQUARE WAVE
PROGRAM SQ_WAV1
Instructions
Code
Flowchart
DELAY
Define variable DELAY at $0000
Load REGBAS in reg. X
Send low signal
Load %00000000 in accA
Store accA in Port B
Load DELAY into accB
Decrease accB in a loop until zero
Send high signal
Load %00000010 in accA
Store accA in Port B
Define DELAY Æ$0000
Initialize REGBAS in reg X
BEGIN Send low signal
Load %00000000 in accA
Store accA in Port B
Load DELAY into accB
LABEL1 Decrease accB by 1
Loop until zero
Send high signal
Load %00000010 in accA
Store accA in Port B
Load DELAY into accB
Decrease accB in a loop until zero
Branch back to (iii)
Load DELAY into accB
LABEL2 Decrease accB by 1
Loop until zero
SWI
RMB
* Start main program
START
ORG
PROGRAM
LDX
#REGBAS
* Begin typing your code
* Send low signal
BEGIN
LDAA
#%00000000
STAA
PORTB,X
LDAB
DELAY
LABEL1 SUBB
BHI
#1
LABEL1
* Send high signal
LDAA
#%00000010
STAA
PORTB,X
LDAB
SWI
1
LABEL2 SUBB
DELAY
#1
BHI
LABEL2
BRA
BEGIN
SWI
FLOWCHART AND CODE
The program flowchart is show to the right of the program instructions. Note the ‘send low signal’ and
‘send high signal’ blocks. Also note the two wait blocks, one sending the low signal, the other after
sending the high signal. The wait blocks are not detailed, since they have been covered in a previous
example and can be directly cloned from there (the ‘code reuse’ concept).
The essential code for this program is shown to the left of the flowchart. The file Sq_wav1.asm is the
result of incorporating this code in the standard template.
EXECUTION
Open THRSim11. Close the Commands window. Open memory list, port registers, and THRSim11 IO
box. Open and assemble Sq_wav1.asm. Set breakpoint at SWI as an insurance against the program
running wild. Reset the registers. Set standard labels (Label/Set Standard Labels). Set display of accA to
binary. Set display of PORTB to binary. Tile windows. Arrange windows for maximum benefit: memory
$0000 only; registers A through X; sufficient of .asm and .LST windows to show the code. Reset
DELAY, A, B, X. Your screen should look like this:
Dr. Victor Giurgiutiu
Page 186
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SQUARE WAVE
a) Put $04 into variable DELAY. Reset the simulator. The PORTB register is %00000000, and all
the lights in the THRSim11 IO box are off.
b) Note the initialization readings: clock cycles = 2, simulated time = 0.0000010 sec = 1.0 μs. These
values are entered as N_1 and T_1 in the "Initialize" row of Table 1.
c) Make one step through the program. The REGBAS value of $1000 is being loaded into X. This
will assist with accessing the port registers in Extended mode using register X. Your screen
looks like this:
Dr. Victor Giurgiutiu
Page 187
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SQUARE WAVE
d) This is the end of the initialization cycle and the beginning of the low-signal part, L, of the square
wave. Step twice. Your screen looks like this:
Dr. Victor Giurgiutiu
Page 188
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SQUARE WAVE
e) Note the start up readings: clock cycles = 11, simulated time = 0.0000055 sec = 5.5 μs. These
values are entered as N_2 and T_2 in the Initialize row, and as N_1 and T_1 in the first (L) row
of Table 1.
Dr. Victor Giurgiutiu
Page 189
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Table 1
DELAY
State
$04
Initialize
L
H
L
H
L
H
L
H
L
H
L
H
Initialize
L
H
L
H
L
H
L
H
L
H
L
H
$40
f)
Clock cycles
ΔN
N_1 N_2
2
11
9
11
40
29
40
72
32
72 101
29
101 133
32
133 162
29
162 194
32
194 223
29
223 255
32
255 284
29
284 316
32
316 345
29
345 377
32
2
11
9
11 340
329
340 672
332
672 1001
329
1001 1333
332
1333 1662
329
1662 1994
332
1994 2323
329
2323 2655
332
2655 2984
329
2984 3316
332
3316 3645
329
3645 3977
332
T_1
1.0
5.5
20.0
36.0
50.5
66.5
81.0
97.0
111.5
127.5
142.0
158.0
172.5
1.0
5.5
170.0
336.0
500.5
666.5
831.0
997.0
1161.5
1327.5
1492.0
1658.0
1822.5
Time, μs
T_2
5.5
20.0
36.0
50.5
66.5
81.0
97.0
111.5
127.5
142.0
158.0
172.5
188.5
5.5
170.0
336.0
500.5
666.5
831.0
997.0
1161.5
1327.5
1492.0
1658.0
1822.5
1988.5
Example SQUARE WAVE
ΔT ΔN/ΔT ΔT/ΔN
4.5
14.5 2.0
0.5
16.0 2.0
0.5
14.5 2.0
0.5
16.0 2.0
0.5
14.5 2.0
0.5
16.0 2.0
0.5
14.5 2.0
0.5
16.0 2.0
0.5
14.5 2.0
0.5
16.0 2.0
0.5
14.5 2.0
0.5
16.0 2.0
0.5
4.5
164.5 2.0
0.5
166.0 2.0
0.5
164.5 2.0
0.5
166.0 2.0
0.5
164.5 2.0
0.5
166.0 2.0
0.5
164.5 2.0
0.5
166.0 2.0
0.5
164.5 2.0
0.5
166.0 2.0
0.5
164.5 2.0
0.5
166.0 2.0
0.5
Step through the program until PORTB becomes %00000010 and PB1 in THRSim11 IO box
turns on. Your screen looks like this:
Dr. Victor Giurgiutiu
Page 190
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SQUARE WAVE
Note the clock cycles and the simulated time as N_2 = 40 and T_2 = 20.0 the first (L) row of Table 1.
Compute ΔN = 29 and ΔT = 14.5. Also compute ΔN/ΔT = 2.000 and ΔT/ΔN = 0.500. Enter the current
values N_2 = 40 and T_2 = 20.0 as N_1 =40 and T_1 = 20.0 in the first (H) row of Table 1.
g) Step through the program until PORTB becomes again %00000000 and PB1 in THRSim11 IO
box turns off. Your screen looks like this:
Dr. Victor Giurgiutiu
Page 191
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SQUARE WAVE
Note the clock cycles and the simulated time as N_2 = 72 and T_2 = 36.0 in Table 1. Compute ΔN = 32
and ΔT = 16.0. Also compute ΔN/ΔT = 2.000 and ΔT/ΔN = 0.500. Enter the N_2 and T_2 values of this
(H) row as N_1 and T_1 values on the next (L) row.
h) You are now again in a low-signal state. Step through the program until the light PB1 comes on
again. Your screen looks like this
Dr. Victor Giurgiutiu
Page 192
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SQUARE WAVE
Observe the N_2 and T_2 values and compare them with the appropriate values in Table 1.
i)
Repeat this until all the values in the $04 portion of Table 1 have been observed. Note that the
ratios ΔN/ΔT and ΔT/ΔN are consistently 2.000 and 0.500, as theoretically predicted.
j)
Also, note the wavelength of your square wave. The low (L) portion of the signal has 29 cycles,
i.e., 14.5 μs, while the high (H) portion has 32 cycles, i.e., 16.0 μs. The H portion is longer since
in includes an additional operation, BRA, which brings us back to the beginning of the program.
However, at higher wavelength, these differences will fade away. These observations are
important for future use of the MCU as a timing device.
k) Set breakpoints at $c007 and $c011. These points correspond to the moments just after the
sending of %00000000 to PORTB, and the sending of %00000010 to PORTB, respectively.
These breakpoints will allow us to run the program automatically, ensuring that it will stop each
time the signal status is changed.
l)
Reset the MCU. Observe again the clock cycles and the simulated time, and verify that they
correspond to the N_1=2 and T_1=1.0 on row ‘$04 Initialize’ in Table 1.
m) Run to the first breakpoint. Verify N_2=11 and T_2=5.5 in Table 1.
n) Run to the next breakpoint. You have run through the first L lap. Verify N_2=40 and T_2=20.0 on
the corresponding row in Table 1.
o) Run to the next breakpoint. You have run through the first H lap. Verify N_2=72 and T_2=36.0 on
the corresponding row in Table 1.
p) Repeat until you have exhausted the $04 portion of Table 2.
Observe the ratios ΔN/ΔT and ΔT/ΔN Note that the ratios ΔN/ΔT and ΔT/ΔN are consistently 2.000 and
0.500, as theoretically predicted.
Dr. Victor Giurgiutiu
Page 193
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SQUARE WAVE
q) Put $40 into the variable DELAY. Reset the simulator. Repeat the above procedure and verify
the values entered in Table 2 under the $40 section.
Observe the durations of the L and H half-waves of the square wave. They are 164-165 μs and 166 μs,
respectively. The consistency of the L and H parts of signal has greatly improved.
Observe the ratios ΔN/ΔT and ΔT/ΔN Note that the ratios ΔN/ΔT and ΔT/ΔN are consistently 2.000 and
0.500, as theoretically predicted.
PROGRAM SQ_WAV2
Define
variable
DELAY at $0000
DELAY
Define DELAY Æ$0000
Initialize REGBAS in reg X
Load REGBAS in reg. X
Send low signal
Load %00000000 in accA
Store accA in Port B
Jump to subroutine WAIT
BEGIN Send low signal
Load %00000000 in accA
Store accA in Port B
Jump to subroutine
Send high signal
Load %00000010 in accA
Store accA in Port B
Jump to subroutine WAIT
Branch back to (iii)
SWI
Send high signal
Load %00000010 in accA
Store accA in Port B
Jump to subroutine
Subroutine WAIT
(ii)
Load
DELAY
into accB
(iii)
Decrease
DELAY
(iv)
Loop until zero
(v)
Return
from
subroutine
Code
Flowchart
Instructions
(i)
RMB
1
* Start main program
ORG
PROGRAM
START
LDX
#REGBAS
BEGIN
LDAA
#%00000000
STAA
PORTB,X
JSR
SR_WAIT
LDAA
#%00000010
STAA
PORTB,X
JSR
SR_WAIT
BRA
BEGIN
SWI
SR_WAIT
Load DELAY into accB
Decrease accB
Loop until zero
Return from subroutine
SR_WAIT LDAB
DELAY
LABEL1 SUBB
#1
BHI
LABEL1
RTS
SWI
FLOWCHART AND CODE
The program flowchart is show to the left of the program instructions. Note the ‘send low signal’ and
‘send high signal’ blocks. Also, note that the two wait blocks of the program Sq_wav1 have been
replaced by a single subroutine block that is repeatedly called. The essential code for this program is
shown to the left of the flowchart. The file Sq_wav2.asm is the result of incorporating this code in the
standard template.
EXECUTION
Open and assemble Sq_wav2.asm. Set breakpoint at SWI, and reset registers. Set standard labels
(Label/Set Standard Labels). Set display of accA to binary. Set display of PORTB to binary. Tile and
arrange windows for maximum benefit: memory $0000 only; registers A through X; sufficient of .asm
and .LST windows to show the code. Reset DELAY, A, B, X. DO NOT RESET THE SP (stack pointer)
REGISTER, BECAUSE, IF YOU DO SO, ACCESS TO YOUR SUBROUTINE WILL NOT WORK.
Dr. Victor Giurgiutiu
Page 194
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SQUARE WAVE
a) Put $04 into variable DELAY. Reset the simulator. The PORTB register is %00000000, and all
the lights in the THRSim11 IO box are off. Step through the program until you reach subroutine.
Your screen will look like this:
b) Step through the subroutine until you get to RTS and are ready to jump back to the program.
Your screen looks like this:
c) After another step, you are back into the main program:
Dr. Victor Giurgiutiu
Page 195
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SQUARE WAVE
d) As you step further, you observe that the Port B pin 1 is toggled, and the light PB1 in the IO box
comes on. The main program is again ready to jump to the subroutine:
e) Further stepping takes you back into the subroutine, and out again.
f)
Run the program on automatic. You will notice how the subroutine is accessed every time the
PB1 light changes.
g) Put breakpoints at the two JSR lines. Run the program on automatic, and record in Table 2 the
values recorded for DELAY = $04, and for DELAY = $40.
h) Compare the values from Table 2 with those in Table 1. You will notice:
i) For same values of delay (say, DELAY = $04), the duration of the half waves are
different: in Table 2 (20 μs and 21.5 μs) from those in Table 1 (14.5 μs and 16 μs).
This difference is due to the different way in which the two programs were constructed.
Dr. Victor Giurgiutiu
Page 196
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SQUARE WAVE
ii) At low delay values (DELAY = $04), the difference between the durations of the L and
H half waves is significant (7.5%). As the delay increased, this difference fades away.
At DELAY = $40, the difference has come down to 0.9%.
Table 2
DELAY
$04
$40
State
Clock cycles
N_1
N_2
Initialize
2
11
L
11
51
H
51
94
L
94
134
H
134
177
L
177
217
H
217
260
L
260
300
H
300
343
L
343
383
H
383
426
L
426
466
H
466
509
Initialize
2
11
L
11
351
H
351
694
L
694 1034
H
1034 1377
L
1377 1717
H
1717 2060
L
2060 2400
H
2400 2743
L
2743 3083
H
3083 3426
L
3426 3766
H
3766 4109
ΔN
9
40
43
40
43
40
43
40
43
40
43
40
43
9
340
343
340
343
340
343
340
343
340
343
340
343
T_1
1.0
5.5
25.5
47.0
67.0
88.5
108.5
130.0
150.0
171.5
191.5
213.0
233.0
0.0
5.5
175.5
347.0
517.0
688.5
858.5
1030.0
1200.0
1371.5
1541.5
1713.0
1883.0
Time, μs
T_2
5.5
25.5
47.0
67.0
88.5
108.5
130.0
150.0
171.5
191.5
213.0
233.0
254.5
5.5
175.5
347.0
517.0
688.5
858.5
1030.0
1200.0
1371.5
1541.5
1713.0
1883.0
2054.5
ΔT
4.5
20.0
21.5
20.0
21.5
20.0
21.5
20.0
21.5
20.0
21.5
20.0
21.5
5.5
170.0
171.5
170.0
171.5
170.0
171.5
170.0
171.5
170.0
171.5
170.0
171.5
ΔN/ΔT ΔT/ΔN
2.000
2.000
2.000
2.000
2.000
2.000
2.000
2.000
2.000
2.000
2.000
2.000
0.500
0.500
0.500
0.500
0.500
0.500
0.500
0.500
0.500
0.500
0.500
0.500
2.000
2.000
2.000
2.000
2.000
2.000
2.000
2.000
2.000
2.000
2.000
2.000
0.500
0.500
0.500
0.500
0.500
0.500
0.500
0.500
0.500
0.500
0.500
0.500
WHAT YOU HAVE LEARNED
In this example, you have learned:
• The use of Port B
•
The use of displayed clock cycles and simulated time, and their relative accuracy
•
The fact that the round-off error becomes less severe as the magnitude of the number increases
•
The usefulness of subroutines for shortening programs
•
The use of Port B to generate a square wave
•
New words and notations: subroutine, jump to subroutine (JSR), return from subroutine (RTS),
square wave, wavelength, IO (Input-Output), IO box, accuracy, round-off.
Dr. Victor Giurgiutiu
Page 197
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SQUARE WAVE
(This page is intentionally left blank)
Dr. Victor Giurgiutiu
Page 198
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example BUTTONS BOX
EXAMPLE BUTTONS BOX
OBJECTIVE
This example has the following objectives:
• Review the use of parallel ports
•
Illustrate the use of Port C for input and output
•
Introduce the concept of shifting register and memory content
•
Practice the use of the THRSim11 IO box for input and output
PROGRAMS
This example demonstrates the use of Port B for output and of Port C for both input and output. Port C is
configured to have the even pins PC0, PC2, PC4, PC6 for output. This is achieved using the Data
Direction Register for port C (DDRC). Since the default setting for Port C is input, the pins that have to
be set to output have their image set to 1 in DDRC. In our case, the bits 0, 2, 4, and 6 of DDRC are set to
1. Thus, the Port C pins PC0, PC2, PC4, PC6 become output, while pins PC1, PC3, PC5, PC7 remain
input.
The program loops continuously, reading data from some Port C pins, and sending data back to the other
Port C pins. Simultaneously, the data is also sent to Port B.
PROGRAM BUTTONS_BX
Instructions
Flowchart
Please fill in yourself
Code
START
LDX
#REGBAS
(vi)
Load REGBAS in reg. X
* Begin typing your code
(vii)
Clear port B by storing zero in it
* Clear Port B
Select odd Port C pins for output
(viii) Load %01010101 in accA
(ix)
LDAA
#%00000000
STAA
PORTB,X
* Select PC0, PC2, PC4, PC6 for
output
Store accA to DDRC
Main loop
LDAA
#%01010101
STAA
DDRC,X
(x)
Load Port C to accA
* Main loop
(xi)
Shift accA to the right
BEGIN
(xii)
LDAA
PORTC,X
LSRA
Store accA to Port C and Port B
*
(xiii) Branch back to (v)
(xiv) SWI
STAA
PORTC,X
STAA
PORTB,X
BRA
BEGIN
SWI
FLOWCHART AND CODE
The program flowchart is not provided, since is simpler than in previous examples. The students are
encouraged to use the space provided for filling in their own flowcharts of the program. The essential
code for this program is shown to the right of the flowchart. The file Buttons_bx.asm is the result of
incorporating this code in the standard template.
Dr. Victor Giurgiutiu
Page 199
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example BUTTONS BOX
EXECUTION
Open THRSim11. Close the Commands window. Open port registers, and THRSim11 IO box. Open and
assemble Buttons_bx.asm. Set breakpoint, and reset registers. Set standard labels (Label/Set Standard
Labels). Set display of accA to binary. Set display of PORTB and PORTC to binary. Tile windows.
Arrange windows for maximum benefit. Your screen should look like this:
a) Before you run the program, verify the Port C pins functionality. In the THRSim11 IO box, toggle
up the switch PC3. You will see that the corresponding bit in Port C register, bit 3, becomes 1
immediately. Your screen looks like this:
Dr. Victor Giurgiutiu
Page 200
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example BUTTONS BOX
b) Toggle down the switch PC3 in the IO box.
c) Run the program. The program will loop continuously between label BEGIN and opcode BRA.
d) With the program running, toggle up the switch PC3 in the IO box. Immediately, bit 3 in PORTC
will switch to one. Simultaneously, pin 2 in PORTB will become 1, and the light PB2 in the IO
box will lit. Press the stop button and capture the screen. Your screen should look like this:
Dr. Victor Giurgiutiu
Page 201
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example BUTTONS BOX
e) Try to toggle other PC switches in the IO box. You will notice that now only the odd switches
(PC1, PC3, PC5, PC7) are producing the setting of the corresponding bits in PORTC register.
The other switches (PC0, PC2, PC4, PC6) can be toggled, but with no effect on the PORTC
register. This illustrates how DDRC controls PORTC register.
f)
Restart the program by pressing the Run button. With the program running, try to toggle the
other switches. You will notice that the toggling of the odd switches (PC1, PC3, PC5, PC7) has
the effect of switching on the even Port B lights (PB0, PB2, PB4, PB6). This is the result of the
data from the odd Port C pins is loaded in accA, right shifted, and sent back to Port B.
WHAT YOU HAVE LEARNED
In this example, you have learned:
• The use of PORTC for input and output
•
The concept of shifting a register
•
The use of the THRSim11 IO box for both input and output
•
New words and expressions: toggle switch; shift a register, shift data.
Dr. Victor Giurgiutiu
Page 202
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SCI TRANSMISSION
EXAMPLE SCI TRANSMISSION
OBJECTIVE
This example has the following objectives:
• Review the use of serial communication interface (SCI) for transmission
•
Illustrate the sending of a character through SCI
PROGRAM SCI_TRANSMIT
This program is an example of SCI transmission. The character T is being sent to SCDR when TDRE is
set.
Instructions
a)
Load REGBAS in reg. X
b)
Initialize BAUD=9600
c)
Initialize 8-bit word
d)
Initialize TE and RE
e)
Load character 'T' in AccB
f)
Check if TDRE is set
g)
Store accB to SCDR
h)
Branch back to (v)
i)
SWI
Code
Flowchart
START
Initialize REGBAS in reg X
Initialize SCI:
BAUD = 9600
8-bit word
TE=1, RE=1
LABEL2
Load ‘T’ in accB
Check if TDRE is set
LABEL3 Load SCSR into accA
AND with mask %10000000
Loop if zero
LDX
#REGBAS
LDAA
#%00110000
STAA
BAUD,X
LDAA
#%00000000
STAA
SCCR1,X
LDAA
#%00001100
STAA
SCCR2,X
LABEL2 LDAB
#'T'
* Send the character to the terminal
LABEL3 LDAA
SCSR,X
ANDA
#%10000000
BEQ
LABEL3
* You are here when the transmission reg. is
empty
STAB
SCDR,X
BRA
LABEL2
SWI
Store AccB to SCDR
SWI
FLOWCHART AND CODE
The program flowchart is show to the right of the program instructions. Note the initialization block,
which contains reg. X initialization and SCI initialization. After initialization, the character T is loaded
into accB. Then, the status of TDRE (transmission data register empty) flag is checked in a loop. When
TDRE is found set, the loop is exited and the contents of accB is stored in SCDR (serial communication
data register). This operation automatically resets TDRE. Now, the program loops back to the beginning
and tries to send again.
The essential code for the program is shown to the right of the program flowchart. This essential code
was incorporated into the standard asm template to generate the file SCI_transmit.asm.
EXECUTION
Open THRSim11. Close the Commands window. View serial registers. View serial receiver. Open and
assemble SCI_transmit.asm. Set breakpoint at STAB SCDR,X instruction and at SWI. Reset registers.
Set standard labels (Label/Set Standard Labels). Set display of accA to binary. Set display of BAUD,
SCCR1, SCCR2, SCSR to binary. Arrange windows for maximum benefit: Reset, A, B, X. Press the
RESET button. Your screen should look like this:
Dr. Victor Giurgiutiu
Page 203
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SCI TRANSMISSION
Note that the reset value of SCSR is %11000000, i.e., it has the flags TDRE and TC set. This indicates
that the transmitter is ready to transmit.
a) Press the RUN button. The program should loop on LABEL3 and exit the loop when the
condition TDRE=1 is satisfy. This condition is checked with the mask %10000000. The mask is
applied on the value found in SCSR. When bit 7 in SCSR is set, the mask senses it and the
condition for exiting the loop is satisfied. Since TDRE=1 from the reset, the loop is passed
through and exited.
Dr. Victor Giurgiutiu
Page 204
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SCI TRANSMISSION
b) When the ‘check TDRE’ loop is exited, the program gets to the line
STAB
SCDR,X
This line is a breakpoint. At this moment, the screen looks like this:
c) Step manually to the next line, which stores accB into SCDR. This store operation automatically
resets TDRE. The screen looks like this:
Dr. Victor Giurgiutiu
Page 205
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SCI TRANSMISSION
Note that SCSR is %00000000. This proves that TDRE has been reset by the storing to SCDR. Also note
that the value $54 from accB has not yet arrived in SCDR. (The reason for this is that the simulator has
an internal delay when running SCI in manual mode.)
d) Press RUN again. The program loops several times on LABEL3 before exiting. While looping,
you can see SCSR=%00000000, i.e., TDRE=0. When exiting, SCSR=%10000000, i.e.,
TDRE=1. When the program pause, the screen looks like this:
Note that SCSR=%10000000, i.e., TDRE=1. The transmission of the character was done, and SCI
is ready to transmit again.
e) Press RUN again 2 times. Note that the character T has appeared in the serial receiver window.
Your screen capture looks like this:
Dr. Victor Giurgiutiu
Page 206
8/19/2008
EMCH 367
f)
Fundamentals of Microcontrollers
Example SCI TRANSMISSION
Press RUN again. You get an additional character in the serial receiver window. Your screen
capture looks like this:
WHAT YOU HAVE LEARNED
In this example, you have learned:
• The use of serial communication interface (SCI) for transmission
•
The sending of a character through SCI
•
New words and notations: SCSR, SCDR, TDRE.
Dr. Victor Giurgiutiu
Page 207
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SCI TRANSMISSION
•
Dr. Victor Giurgiutiu
Page 208
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SCI RECEPTION
EXAMPLE SCI RECEPTION
OBJECTIVE
This example has the following objectives:
• Review the use of serial communication interface (SCI) for reception
•
Illustrate the receiving of a character through SCI
PROGRAM SCI_RECEPT
This program is an example of SCI reception. The character T is being sent to SCDR when TDRE is set.
Flowchart
Instructions
a)
b)
c)
d)
Load REGBAS in reg. X
Initialize BAUD=9600
Initialize 8-bit word
Initialize TE and RE
Wait for the reception of a keystroke
e)
check if RDRF is set by
loading SCSR into accA and
AND with mask for RDRF,
%00100000
You are here when reception data reg. is full
f)
Load SCDR into accB
g)
Store accB through Port B
h)
Branch back to (e)
i)
SWI
Initialize REGBAS in reg X
Initialize SCI:
BAUD = 9600
8-bit word
TE=1, RE=1
LABEL0
No operation
Check if RDRF is set
LABEL1 Load SCSR into accA
AND with mask %00100000
Loop if zero
Code
START
LDX
LDAA
STAA
LDAA
STAA
LDAA
STAA
LABEL0 NOP
#REGBAS
#%00110000
BAUD,X
#%00000000
SCCR1,X
#%00001100
SCCR2,X
LABEL1 LDAA
ANDA
BEQ
LDAB
STAB
BRA
SWI
SCSR,X
#%00100000
LABEL1
SCDR,X
PORTB,X
LABEL0
Load accB from SCDR
Store accB to Port B
SWI
FLOWCHART AND CODE
The program flowchart is show to the right of the program instructions. Note the initialization block,
which contains reg. X initialization and SCI initialization. After initialization, the status of RDRF
(reception data register full) flag is checked in a loop. When RDRF is set, the loop is exited and the
content of SCDR (serial communication data register) is loaded in accB. This operation automatically
resets RDRF. Now, the program loops back to the beginning and waits for another transmission.
The essential code for the program is shown to the right of the program flowchart. This essential code
was incorporated into the standard asm template to generate the file SCI_recept.asm.
EXECUTION
Open THRSim11. Close the Commands window. View ports registers and serial registers. View serial
transmitter. Open and assemble SCI_recept.asm. Set breakpoint at LDAB SCDR,X and at SWI. Reset
registers. Set standard labels (Label/Set Standard Labels). Set display of BAUD, SCCR1, SCCR2, SCSR
to binary. Set display of accA to binary. Arrange windows for maximum benefit: Reset, A, B, X, PORTB.
Press the RESET button. Your screen should look like this:
Dr. Victor Giurgiutiu
Page 209
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SCI RECEPTION
a) Press the RUN button. The program should loop on LABEL1 and exit the loop when the
condition RDRF=1 is satisfy. This condition is checked with the mask %00100000. The mask is
applied on the value found in SCSR. When bit 5 in SCSR is set, the mask senses it and the
condition for exiting the loop is satisfied.
b) Type the character T in the serial transmitter window and press Send. The character is sent to
the MCU. The MCU takes a few laps to sense it. When the MCU senses it, the RDRF gets set,
and the ‘check RDRF’ loop is exited.
c) When the ‘check RDRF’ loop is exited, the program gets to the line
LDAB
SCDR,X
This line is a breakpoint. At this moment, the screen looks like this:
Dr. Victor Giurgiutiu
Page 210
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SCI RECEPTION
Note that that SCSR is %11100000, i.e., the RDRF flag (bit 5 of SCSR) is set. This indicates that the
character was received. (The TDRE and TE flags, i.e., bits 6 and 7, are also set, but this is due to the
reset.) Note also that the ASCII code for the character T, $54 appears in SCDR (serial communication
data register). From SCDR it will be loaded into accB.
d) Step manually to the next line, which loads the data from SCDR into accB. This load operation
automatically resets RDRF. The screen looks like this:
Note that SCSR is %11000000. This proves that RDRF (bit 5) has been reset by the loading from SCDR;
but TDRE and TC remained set, since they are not affected by reception operations.
e) Step again. The content of accB is stored in PORTB. Your screen looks like this:
Dr. Victor Giurgiutiu
Page 211
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SCI RECEPTION
Note that the ASCII code for T, i.e., $54, appears in PORTB.
f)
Switch again to auto run. The program loops now again on LABEL1. Press again the send button
in the serial transmitter. The character T is sent again, and after a few laps the program exits the
loop and gets to the LDAB SCDR,X breakpoint.
g) Run again automatically. Change the character in the serial transmitter to A. You will notice that
the corresponding ASCII code, $41, appear in SCDR, and then, after manual steps, gets loaded
in accB and stored in PORTB.
WHAT YOU HAVE LEARNED
In this example, you have learned:
• The use of serial communication interface (SCI) for reception
•
The reception of a character through SCI
•
New words and notations: RDRF, ASCII code.
Dr. Victor Giurgiutiu
Page 212
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example INPUT CAPTURE TIMER FUNCTION
EXAMPLE INPUT CAPTURE TIMER FUNCTION
OBJECTIVE
This example has the following objectives:
• Review the use of MCU Timer function as an Input Capture (IC) device
• Review the use of the free running clock, TCNT, and it overflow flag, TOF
• Review the use of a input capture clock, TIC1, and its event flag, IC1F
• Demonstrated how the selection of signal transition to be captured is made (here rising edge,
EDG1A) and that the MCU is only sensitive to that particular transition.
• Show the calculation of actual time in μs from the timer readings, T1, T0, and overflow count,
NOF.
PROGRAM EX_IC
This program is an example of timer input capture. The process is started when a keystroke is received.
Then, the time is measured until a low-high transition is captured on line IC1. In this process, the initial
time, T0, and the capture time, T1, as well as the number of overflows are recorded. After the input
capture, the IC1F flag is reset, the overflow counter is zeroed, and the process is repeated.
FLOWCHART AND CODE
The program flowchart is show to the right of the program instructions. Note the variable definition block
in which T0, T1, and NOF are defined. Next, the initialization block contains reg. X initialization, timer
IC initialization, and SCI initialization. The program loop starts at label BEGIN with the overflow
counter, NOF, being zeroed. First, the RDRF (reception data register full) flag is checked in a loop to
verify if a keystroke has been received. When keystroke was received, the time counter is read and stored
in T0. Then, the programs loops on LABEL1 until and input capture IC1 is recorded. In this loop, TOF is
first check to verify if timer overflow takes place. When timer overflow is detected, the overflow counter,
NOF, is incremented and TOF is reset. Next, IC1F is check to verify if input capture on IC1 took place.
If input capture is not detected, the program returns to LABEL1. When input capture is detected, the
program exits the loop, loads the IC1 timer from TIC1 and stores it in the capture time variable, T1. The
program loops back to the beginning and wait for a new keystroke to restart the process.
The essential code for the program is shown to the right of the program flowchart. This essential code
was incorporated into the standard asm template to generate the file Ex_IC.asm.
Dr. Victor Giurgiutiu
Page 213
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Instructions
i)
ii)
iii)
iv)
v)
vi)
vii)
viii)
ix)
x)
xi)
xii)
xiii)
xiv)
xv)
xvi)
xvii)
xviii)
Define variables:
a. Origin of time, T0 = 2 bytes
b. Capture time, T1 = 2 bytes
c. Overflow counter, NOF1 = 1
byte
Initialize
Initialize index X to REGBAS
Initialize timer IC1 function: set
EDG1A in TCTL2
Initialize SCI
Wait for a keystroke reception
Store initial time
Zero overflow counter NOF1
Reset TOF
Wait for the input capture
Check TOF
Jump if no TOF; else
a. Increment overflow counter
b. Reset TOF
Check IC1F
Loop back
After input capture
Load and store t1
Reset IC1F by writing 1 to it
Loop back to iii) and do it again
Code
Flowchart
Define variables:
• Origin of time, T0 = 2 bytes
• Capture time, T1 = 2 bytes
• Overflow counter, NOF1 = 1 byte
START • Initialize REGBAS in reg X
• Initialize timer IC function:
set EDG1A in TCTL2
• Initialize SCI:
BEGIN NOP
Check if RDRF is set
LABEL0
• Load TCNT into T0
• Zero NOF1
• Reset TOF
LABEL1
N
Check TOF
Y
• Increment NOF1
• Reset TOF
LABEL2
Check IC1F
N
Y
• Load and store measured
time from TIC1 into T1
• Reset IC1F
SWI
Dr. Victor Giurgiutiu
Example INPUT CAPTURE TIMER FUNCTION
Page 214
ORG
T0
RMB
T1
RMB
NOF1
RMB
ORG
START LDX
LDAA
STAA
LDAA
STAA
LDAA
STAA
LDAA
STAA
BEGIN NOP
LABEL0 LDAA
ANDA
BEQ
LDAA
LDD
STD
LDAA
STAA
LDAA
STAA
LABEL1 LDAA
ANDA
BEQ
INC
LDAA
STAA
LABEL2 LDAA
ANDA
BEQ
LDD
STD
LDAA
STAA
BRA
SWI
DATA
2
2
1
PROGRAM
#REGBAS
#%00010000
TCTL2,X
#%00110000
BAUD,X
#%00000000
SCCR1,X
#%00001100
SCCR2,X
SCSR,X
#%00100000
LABEL0
SCDR,X
TCNT,X
T0
#$00
NOF1
#%10000000
TFLG2,X
TFLG2,X
#%10000000
LABEL2
NOF1
#%10000000
TFLG2,X
TFLG1,X
#%00000100
LABEL1
TIC1,X
T1
#%00000100
TFLG1,X
BEGIN
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example INPUT CAPTURE TIMER FUNCTION
EXECUTION
Open THRSim11. Close the Commands window. View CPU registers, timer registers, port A pins,
memory list, serial transmitter. Open and assemble Ex_IC.asm. Set breakpoints at $c01a, $c02e, $c03b,
and at SWI[VG3]. Reset registers and memory. Set standard labels (Label/Set Standard Labels). Set display
of TCTL2, TFLG1, TFLG2 to binary. Arrange windows for maximum benefit: Press the RESET button.
Your screen should look like this:
[VG4]
Dr. Victor Giurgiutiu
Page 215
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example INPUT CAPTURE TIMER FUNCTION
a) Press the RUN button. The program should loop on LABEL0. Type letter T into the serial
transmitter and send. The program should exit the loop and stop at $c01a. At this point your
screen looks like this:
Dr. Victor Giurgiutiu
Page 216
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example INPUT CAPTURE TIMER FUNCTION
b) Step. You will notice that the contents of SCDR ($54, i.e. ASCII for T) has been loaded into accA
c) Step again. The screen looks like this:
You notice that the contents of TCNT (in this case, $101c) has been loaded into accD. (The double
accumulator accD is used, since the time values are in double precision, i.e., require 4 hex digits).
Dr. Victor Giurgiutiu
Page 217
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example INPUT CAPTURE TIMER FUNCTION
d) Step again.
You notice that the content of accD (for me, $101c, but you may get something else!) has been loaded in
memory at location T0. It takes two consecutive memory locations, and is loaded as $10 followed by $1c.
At this stage, The timer count (TNCT) value was captured and stored into T0 as initial time.
a) Check for TOF. Switch display of accA to binary. Step. The value of TFLG2 (%01000000) is
loaded into accA.
b) Step 2 times. The value in accA is AND-ed with the TOF mask (%10000000). Since TOF was
not set, the result is zero and the BEQ operation jumps to LABEL2.
c) Check for IC1F. Step once. The value of TFLG1 (%00000000) is loaded into accA. Step 2 times.
The value in accA is AND-ed with the IC1F mask (%00000100). Since IC1F was not set, the
result is zero and the BEQ operation jumps to LABEL1.
d) You are back at LABEL1. Step through the TOF check and stop when you are at $c035
e) Toggle IC1 pin in Port A pins window from 0 to 1. Notice that, as you do so, bit 2 in TFLG1 gets
also set. This bit is the IC1F bit, and it detects that a transition has taken place on line IC1.
Dr. Victor Giurgiutiu
Page 218
8/19/2008
EMCH 367
f)
Fundamentals of Microcontrollers
Example INPUT CAPTURE TIMER FUNCTION
Step. The value in TFLG1 (%00000100) gets loaded into accA. Step again. AccA is AND-ed with
the IC1F mask (%00000100). The result is (%00000100), i.e., non-zero.
g) Step again. Since the result of the previous operation was non-zero, the BEQ operation does not
branch, and you proceed to line $c03b
h) Change display of accA to hex. Step. The value in TIC1 (for me, $2994, but you may get
something else!) is loaded in accD (The double accumulator accD is needed, since the timer
values are in double precision, i.e., four hex long)
i)
Step again. The value in accD (for me, $2994, but you may have something else!) is stored as
the captured time in T1. Note that two memory location are used, and the storage is done as $29
followed by $94
j)
You will do this now on automatic. Press the Run button. Then, press the send button in the
serial transmitter to start the input-capture process. Your program stops at the breakpoint $c01a.
k) Step. The TCNT value (mine is $cf13, yours may differ!) gets captured in accD.
l)
Step two times. The TCNT value ends up in T0 (in my case, $cf13, yours may differ!).
m) Run. Toggle pin IC1 in port A window. As you toggle from 1 to 0, nothing happens, since you
only set EDG1A=1 in the initialization section. This means that you programmed the MCU to only
recognize raising edges on line IC1, i.e., transitions from 0 to 1.
n) Toggle again, now from 0 to 1. Note that the loop is exited, and the program stops at the
breakpoint $c03b.
o) Run again several times, and consolidate your understanding of the way the program runs. Try
sending different characters, and notice that the program is only sensitive to you sending a
character, but insensitive to what character you sent.
p) When you are content with your understanding, remove all breakpoint but SWI. Set a new
breakpoint at $c043. Run, go through the sending and the toggling, and, after it stops at the
breakpoint, write below the values of T0, T1, NOF:
My results
T0
$49c8
T1
$6227
NOF
Your results
0
Calculate the time taken between your sending of the character (start of the process) and your toggling
of IC1 from low to high (stop of the process).
(Δt)mine = (T1-T0 + $10000*NOF)*0.5 μs = ($6227 - $49c8 + $10000*0)* 0.5 μs = 3119 μs = 3.1 ms
(Δt)yours = (T1-T0 + $10000*NOF)*0.5 μs = ($???? - $???? + $10000*0)* 0.5 μs = ???? μs = ???.? ms
Dr. Victor Giurgiutiu
Page 219
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example INPUT CAPTURE TIMER FUNCTION
q) Try to wait for the NOF to change to 1 before you toggle the IC1 pin. write below the values of
T0, T1, NOF:
My results
T0
$872e
T1
$366e
NOF
Your results
1
(Δt)mine = (T1-T0 + $10000*NOF)*0.5 μs = ($366e - $872e + $10000*1)* 0.5 μs = 55,200 μs = 55.2 ms
(Δt)yours = (T1-T0 + $10000*NOF)*0.5 μs = ($???? - $???? + $10000*1)* 0.5 μs = ????? μs = ???.? ms
Note: The results from u) and t) do not need to agree. They depend on human factor, like when you
decide to toggle the IC1 bit.
WHAT YOU HAVE LEARNED
In this example, you have learned:
• The use of MCU Timer function as an Input Capture (IC) device
•
The use of the free running clock, TCNT, and it overflow flag, TOF
•
The use of a input capture clock, TIC1, and its event flag, IC1F
•
The selection of signal transition to be captured (here rising edge, EDG1A) and the fact that the
MCU is only sensitive to that particular transition.
•
The calculation of actual time in μs from the timer readings, T1, T0, and overflow count, NOF.
Dr. Victor Giurgiutiu
Page 220
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example OUTPUT COMPARE TIMER FUNCTION
EXAMPLE OUTPUT COMPARE TIMER FUNCTION
OBJECTIVE
This example has the following objectives:
• Review the use of MCU Timer function as an Output Compare (OC) device
•
Review the setting of OMx and OLx bits to select a desired OC event (in this example, we set
OM3=0, OL3=1, to generate a toggle on the OC3 pin)
•
Review the detection of the TOCx match with TNCT and the corresponding OC action
•
Present the correlation between delay, DT, with actual frequency of the square wave.
•
Explore the accuracy with which frequency can be adjusted
•
Explore the determination of low and high bounds on the frequencies that can be generated with
the MCU
V
Logical 1, +5 V
L
Logical 0, 0 V
H
L
H
t
Δt
Δt
Δt
Δt
Figure 1 Square wave schematics showing the half-wave duration, Δt, and the low (L) and high (H)
states.
PROGRAM EX_OC
This program is an example of timer output compare. The program runs freely and generates repeated
toggles of the output compare pin OC3 (PA5) at equal intervals that are determined using the delay
variable DT. Thus, a square wave is generated. The program instructions are given in the first column
below.
FLOWCHART AND CODE
The program flowchart is show to the right of the program instructions. Note the variable definition block
in which DT is defined. Next, the initialization block contains reg. X initialization and timer OC
initialization. The program stores the current time (TCNT) plus the delay DT in the OC3 timer TOC3. A
loop is entered in which the OC3 flag, OC3F is checked. When OC3F is set, the loop is exited. The
OC3F is reset, and the value of TOC3 is updated with the current time plus the delay. Then, the program
loops back.
The program loops back to the beginning and waits for a new keystroke to restart the process.
The essential code for the program is shown to the right of the program flowchart. This essential code
was incorporated into the standard asm template to generate the file Ex_OC.asm.
Dr. Victor Giurgiutiu
Page 221
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Instructions
i) * Define variable
•
Half wave duration DT = 2 bytes
ii) Initialize
•
Initialize index X to REGBAS
•
Initialize timer OC3 function:
set to toggle (OM3=0, OL3=1)
iii) Store initial time + DT in TOC3
iv) Wait and loop until OC3F is set;
when OC3F set, proceed
v) Reset OC3F
vi) Update TOC3: add DT to current
time and store in TOC3
vii) Branch back iv)
Example OUTPUT COMPARE TIMER FUNCTION
Flowchart
Define variables:
• Half wave duration DT = 2 bytes
START • Initialize index X to REGBAS
• Initialize timer OC3 function:
set to toggle (OM3=0,
OL3=1)
Store TCNT+DT in TOC3
LABEL1
Check if OC3F is set
Reset OC3F
Store TCNT+DT in TOC3
Code
ORG
DT
RMB
ORG
START LDX
LDAA
STAA
LDD
ADDD
STD
LABEL1 LDAA
ANDA
BEQ
LDAA
STAA
LDD
ADDD
STD
BRA
SWI
DATA
2
PROGRAM
#REGBAS
#%00010000
TCTL1,X
DT
TCNT,X
TOC3,X
TFLG1,X
#%00100000
LABEL1
#%00100000
TFLG1,X
DT
TCNT,X
TOC3,X
LABEL1
SWI
Dr. Victor Giurgiutiu
Page 222
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example OUTPUT COMPARE TIMER FUNCTION
EXECUTION
Open THRSim11. Close the Commands window. View CPU registers, timer registers, port A pins,
memory list. Open and assemble Ex_OC.asm. Set breakpoints at $c013 and at SWI. Reset registers and
memory. Set standard labels. Set display of TCTL1, TFLG1 to binary. Arrange windows for maximum
benefit: Press the RESET button. Your screen should look like this:
a) Put $0020 in DT. When doing this, note that DT takes two memory locations, $0000:$0001.
b) Step through your program. Notice how the bit 4 is initialized in TCTL1 (this sets OC3 to toggle).
Dr. Victor Giurgiutiu
Page 223
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example OUTPUT COMPARE TIMER FUNCTION
c) Step further. Note that the value in TCNT is added with DT and stored in TOC3. At this point,
your screen looks like this
d) Step further. The program goes through the loop on LABEL1. As long as TCNT is less than
TOC3, the bit OC3F in TFLG1 (bit 5) remains zero, and the program loops.
e) When the value of TCNT exceeds TOC3, the bit OC3F gets set. Simultaneously, the output
compare function is activated. Recall that our program was set to toggle the value in pin OC3
when output compare condition is met. Look in the Port A pins window. Notice that the pin OC3
(PA5) is set. Your screen looks like this:
Dr. Victor Giurgiutiu
Page 224
8/19/2008
EMCH 367
f)
Fundamentals of Microcontrollers
Example OUTPUT COMPARE TIMER FUNCTION
At this point, the condition for exiting the loop is met, and, when stepping further, the loop is
exited. Your program gets to $c013. The mask for OC3F is stored in TFLG1 and OC3F gets
reset. Your screen is:
Dr. Victor Giurgiutiu
Page 225
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example OUTPUT COMPARE TIMER FUNCTION
g) Step further. The time increment, DT, is added to the current time, TCNT, and stored in TOC3 as
the new time. Your screen is:
h) Step again through your program. Observe that the whole procedure is repeated, only that this
time the toggle was from 1 to 0. This shows that, effectively, a square wave of half wave duration
DT is being generated at pin OC3 (PA5). Next we will verify the length of the half wave in time
units and determine the effective frequency.
i)
Press the Reset button. Press the RUN button. The program should again loop on LABEL1 for a
while, and then exit the loop and stop at $c013. At this point your screen looks like this:
Dr. Victor Giurgiutiu
Page 226
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example OUTPUT COMPARE TIMER FUNCTION
Note that the clock cycles are 62 and the simulation time is 31 μs. These values are entered in Table 1.
j)
Run again through the program. At the next breakpoint, your screen looks like this:
Note that the clock cycles are 113 and the simulation time is 56.5 μs. These values are entered again in
Table 1.
Dr. Victor Giurgiutiu
Page 227
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example OUTPUT COMPARE TIMER FUNCTION
k) Run further through your program, and after each breakpoint stop, record the clock cycles and
the simulated time in Table 1. Do this until you have completed 6 L-H groups. These correspond
to 6 square waves.
l)
Calculate the half-wave time, Δt, and the equivalent frequency, f=1/2Δt. (When doing this, omit
the first row in your readings.) Note that the time interval oscillates between 25 and 26 μs, while
the frequency oscillates between 20.0 and 19.2 kHz, i.e., 19.9±0.2 kHz, or 19.9±1% kHz. These
oscillations are an indication of the repeatability of your process, and are due to the displayed
simulation time being limited to 1 μs, while one MCU cycle takes 0.5 μs.
m) Calculate the raw frequency corresponding to the delay $0020 using the formula
f raw =
1
Hz . Notice that the raw frequency is 31.25 kHz, while the obtained
2 ⋅ DT ⋅ 0.5μs
frequency is 20 kHz. The difference is a programming overhead due to the extra cycles that are
consumed in the program between two OC events. We expect that this overhead will become
less and less significant as the delay increases, i.e. at lower frequencies.
n) Put the value $0200 in DT. Repeat the procedure above, and enter the clock cycles and simulate
time values in Table 1. Note that the effective frequency oscillated between 1.859 and 1.866
kHz, i.e., 1.8625±0.0035 kHz, or 1.8625±0.2%. The repeatability of our simulation has greatly
improved. Calculate the raw frequency corresponding to the delay $0200 using the formula
f raw =
1
Hz . Notice that the raw frequency is 2.0 kHz, while the effective frequency
2 ⋅ DT ⋅ 0.5μs
is 1.8625 kHz. The difference has reduced considerably, (-6.9% error). This confirms the
hypothesis that the programming overhead due to the extra cycles that are consumed in the
program between two OC events is less significant at higher DT values, i.e. at lower frequencies.
o) Repeat for DT=$2000. For this long delay, the frequency scale is switched from kHz to just Hz. In
just a couple of cycles, you note stable behavior, and perfect frequency accuracy. This is due to
the desired frequency (122 Hz) being much lower than the MCU clock frequency (2 MHz).
For more details of how these errors are generated in the MCU, please see Appendix 4.
Dr. Victor Giurgiutiu
Page 228
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example OUTPUT COMPARE TIMER FUNCTION
Table 1
DT
Raw f State
hex
kHz
0020
31.25 L
H
L
H
L
H
L
H
L
H
L
H
kHz
0200
2.0 L
H
L
H
L
H
L
H
L
H
L
H
2000
Hz
122 L
H
L
H
Dr. Victor Giurgiutiu
Clock cycles
T_1
T_2
2
62
62
113
113
164
164
215
215
266
266
317
317
368
368
419
419
470
470
521
521
572
572
623
ΔT
60
51
51
51
51
51
51
51
51
51
51
51
Time, μs
t_1
t_2
1.0
31.0
31.0
56.5
56.5
82.0
82.0
107.5
107.5
133.0
133.0
158.5
158.5
184.0
184.0
209.5
209.5
235.0
235.0
260.5
260.5
286.0
286.0
311.5
Δt
537
537
537
537
537
537
537
537
537
537
537
537
0.0
269.5
538.0
806.5
1075.0
1343.5
1612.0
1880.5
2149.0
2417.5
2686.0
2954.5
269.5
538.0
806.5
1075.0
1343.5
1612.0
1880.5
2149.0
2417.5
2686.0
2954.5
3223.0
270
269
269
269
269
269
269
269
269
269
269
269
19.6
19.6
19.6
19.6
19.6
19.6
19.6
19.6
19.6
19.6
19.6
kHz
1.855
1.862
1.862
1.862
1.862
1.862
1.862
1.862
1.862
1.862
1.862
1.862
2
8216 8214
8216 16430 8214
16430 24644 8214
24644 32858 8214
0.0
4108.0
8215.0
12322.0
4108.0
8215.0
12322.0
16429.0
4108
4107
4107
4107
Hz
122
122
122
122
2
539
1076
1613
2150
2687
3224
3761
4298
4835
5372
5909
539
1076
1613
2150
2687
3224
3761
4298
4835
5372
5909
6446
Page 229
26
26
26
26
26
26
26
26
26
26
26
f=1/2Δt
kHz
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example OUTPUT COMPARE TIMER FUNCTION
GENERATING A DESIRED FREQUENCY
We will now practice to obtain a desired frequency (Table 2). We will start with a low frequency, e.g.,
100 Hz, since we have noticed that our square wave generation behaves much better at low frequencies.
Then, we will increase the desired frequency, until a practical limit is obtained.
a) Examine the row 100 Hz in Table 2. Notice that the corresponding half-period is 5000 μs. Hence,
a
raw
estimation
of
the
delay
can
be
calculated
with
the
formula
delay = half-period/0.5, and then converted to hex. The result is entered as
Raw delay in Table 2.
b) Enter the DT = $2710 into the THRSim11, reset, and run. Note that the time of the breakpoint
stop is 5012 μs. Run further, and note the second time as 10024 μs. These values are entered in
Table 2. The resulting half-wave duration is 5012 μs, which corresponds to 99.8 Hz, i.e. a -0.2%
error. We consider this good enough and select to stop here.
c) Try to generate 200 Hz. According to Table 2, the corresponding half-period is
2500 μs, and the raw delay is $1388. Since we know that the MCU adds some extra cycles of its
own, we select to round down the raw delay to the value $1380. Enter this value in the
THRSim11, reset, and run. Record the times after first and second loop. These times are
entered in Table 2 as 2510 μs and 5020 μs, respectively. The corresponding frequency is 199.2
kHz, i.e., -0.4% in error. We improve on this error by making a minor adjustment to the DT from
$1380 to $1370. The value $1370 gives us the desired frequency of 200 Hz exactly.
d) Try to generate 500 Hz. According to Table 2, the corresponding half-period is
1000 μs, and the raw delay is $07D0. Enter this value in the THRSim11, reset, and run. Record
the times after first and second loop, and enter them in Table 2 as
1012 μs and 2023 μs, respectively. The corresponding frequency is 495 kHz, i.e.,
-1.1% in error. We improve on this error by making a minor adjustment to the DT, from $07d0 to
$07c0. The value $07c0 gives us the frequency 499 Hz, which is only –0.3% in error. We select
to stop here.
e) Try to generate 1000 Hz and 2000 Hz. Follow Table 2, for the values of the corresponding halfperiod, raw delay, and actual DT iterations. Notice how accuracy is being improved by small
adjustments in second hex digit of the DT.
f)
Try to generate 5000 Hz. According to Table 2, the corresponding half-period is
100 μs, and the raw delay is $00C8. This is very small delay, and we expect some difficulties!
Enter this value in the THRSim11, reset, and run. Record the times after first and second loop,
and enter them in Table 2 as 112 μs and 223 μs, respectively. The corresponding frequency is
4505 kHz, i.e., -9.9% in error. We try to improve on this error by making minor adjustments to the
DT, from $00c8 to $00c0, and then to $00b8, $00b0, $00b4. However, the accuracy cannot be
reduced below 2%. This indicates that we have reached a limit in our capability to fine-tune the
frequency. This limit is due to the low value of the desired DT. We select to stop here, and
conclude that 5000 Hz (5 kHz) is a practical limit in the square-wave frequency that can be
generated with the MCU within 2% accuracy.
For more details of how these errors are generated in the MCU, please see Appendix 4.
Dr. Victor Giurgiutiu
Page 230
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example OUTPUT COMPARE TIMER FUNCTION
Table 2
Desired f Half-period Raw Delay
μs
Hz
hex
100
5000
2710
200
2500
1388
500
1000
07D0
1000
500
03E8
2000
250
01F4
5000
100
00C8
DT
hex
2710
1380
1370
07d0
07c0
03e0
03d0
01f0
01e0
00c8
00c0
00b8
00b0
00b4
t_1
5012
2510
2502
1012
1007
508
503
260
256
112
112
108
103
103
Time, μs
t_2
10024
5020
5002
2023
2010
1015
1002
520
506
223
218
210
200
205
Δt
5012
2510
2500
1011
1003
507
499
260
250
111
106
102
97
102
f=1/Dt
Hz
99.8
199.2
200.0
495
499
986
1002
1923
2000
4505
4717
4902
5155
4902
error %
-0.2%
-0.4%
0.0%
-1.1%
-0.3%
-1.4%
0.2%
-3.8%
0.0%
-9.9%
-5.7%
-2.0%
3.1%
-2.0%
WHAT YOU HAVE LEARNED
In this example, you have learned:
• The use of MCU Timer function as an Output Compare (OC) device
•
The setting of OMx and OLx bits to select a desired OC event (in this example, we set OM3=0,
OL3=1, to generate a toggle on the OC3 pin)
•
The detection of the TOCx match with TNCT and the corresponding OC action
•
The correlation between delay, DT, with actual frequency of the square wave.
•
The accuracy with which frequency can be adjusted
•
The determination of low and high bounds on the frequencies that can be generated with the
MCU
Dr. Victor Giurgiutiu
Page 231
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example OUTPUT COMPARE TIMER FUNCTION
(This page is intentionally left blank)
Dr. Victor Giurgiutiu
Page 232
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example RPM 1
EXAMPLE RPM_1
OBJECTIVE
This example has the following objectives:
• Review the use of MCU Timer function as an Input Capture (IC) device
• Review the use of the free running clock, TCNT, and it overflow flag, TOF
• Review the use of a input capture clock, TIC1, and its event flag, IC1F
• Demonstrated how the selection of signal transition to be captured is made (here falling edge,
EDG1B) and that the MCU is only sensitive to that particular transition.
• Introduce the use of soft masks (here, IC1_MSK, TOF_MSK).
• Introduce the concept of layered flowcharting of a program: big-picture with generic descriptions;
detailed flowcharts for particular sections of the program.
PROGRAM EX_RPM_1
This program EX_RPM_1 captures the times T1 and T2 required in the tachometer RPM experiment
(Figure 1). In this experiment, a disk with an aperture (hole) drilled into it is attached to the shaft of a DC
motor. The aperture in the disk spins through an infrared emitter-detector sensor. The emitter-detector
sensor sends a High (5V) signal when the aperture in the disk allows the beam of light to pass through.
The output of the emitter-detector sensor is attached to the input capture pin IC1 on Port A. The speed of
the motor is controlled by a potentiometer electronic circuit. The potentiometer is a variable resistor. By
turning the knob of the potentiometer, the speed of the DC motor is varied. T1 is the first time when a
falling edge transition is encountered on pin IC1, while T2 is the second time when a falling edge
transition is encountered on the same pin IC1. This corresponds to the time between two consecutive
passages trough the emitter-detector sensor of the hole in the rotating disk. The difference between T2
and T1, plus the time taken by the overflows, will represent the period of rotation of the disk. Hence,
using EX_RPM_2, one can calculate the rotation speed.
MOSFET
DC
Emitter/Detector
7-Segment Display
Port B
Connection
Lamp Test
555 Timer
Speed-Controlling
Potentiometer
Figure 1 DC Motor tachometer experiment to which the present software example is relevant.
Dr. Victor Giurgiutiu
Page 233
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example RPM 1
FLOWCHART AND CODE
The program flowchart is show below. Two flowchart levels are presented: the big-picture and the details.
The big-picture is used to understand the overall architecture of the program. The details are used to
explain some of the blocks. (Details are given only for those blocks which are somehow new, and have
not been used in previous programs.) This flowchart was use to generate the code file Ex_RPM_1.asm
using the standard asm template.
Big-picture Flowchart
Define variables
Detailed Flowcharts
Define variables:
• Overflow counter, NOF (1 byte)
st
• 1 capture, T1 (2 bytes)
nd
• 2 capture, T2 (2 bytes)
• IC1_MSK=%00000100
• TOF_MSK=%10000000
START • Initialize Y= REGBAS
• Initialize IC1 for falling:
set EDG1B in TCTL2
LABEL0 Reset IC1F
LABEL1
LABEL1 Check first IC1 capture
Check IC1F
N
Y
Reset IC1F
Load and store TIC1 in T1
Clear TOF
Zero overflow counter NOF
LABEL2
Check TOF
N
Y
LABEL2 Check TOF
If TOF is set, increment NOF
and reset TOF
Check second IC1 capture
• Increment NOF
• Reset TOF
LABEL3
Check IC1F
Load and store TIC1 in T2
N
SWI
Dr. Victor Giurgiutiu
Page 234
Y
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example RPM 1
EXECUTION
Open THRSim11. Close the Commands window. View CPU registers, timer registers, port A pins,
memory list. Open and assemble Ex_RPM_1.asm. Set breakpoints at
• $c016 (after first input capture on IC1)
•
$c030 (when an overflow happens)
•
$c03f (after second input capture on IC1)
•
SWI.
Reset registers and memory. Set standard labels (Label/Set Standard Labels). Set display of TCTL2,
TFLG1, TFLG2 to binary. Arrange windows for maximum benefit: Press the RESET button. Your screen
should look like this:
Dr. Victor Giurgiutiu
Page 235
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example RPM 1
a) Toggle pin IC1 to 1. Start the program. The program stays in a loop on LABEL 1 waiting for a
falling edge transition on pin IC1.
b) Toggle pin IC1 to 0. The program stops at the first breakpoint. Notice that IC1F is set in TFLG1
(bit 2). Also notice the value captured in TIC1. This value should be very close to the value in
TCNT (It is not identical, since the program executed a few operations before stopping at the
breakpoint, hence TCNT is slightly more than TIC1.) Your screen looks like this:
Dr. Victor Giurgiutiu
Page 236
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example RPM 1
c) Step through your program until the program counter is on LABEL2. Note that IC1F is cleared.
Then, TIC1 is loaded into D and then stored in T1. Further, TOF is cleared. Finally, NOF is
zeroed. Your screen looks like this:
Dr. Victor Giurgiutiu
Page 237
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example RPM 1
d) Run. The program enters the second loop on LABEL2. You will notice the program jumping over
a section of code to LABEL3 and then back to LABEL2. The section of code that is bypassed
refers to the situation when an overflow takes place. Let the program run until the timer counter,
TCNT, goes over. At this point, the program should stop at the breakpoint $c030. Your screen
looks like this:
Dr. Victor Giurgiutiu
Page 238
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example RPM 1
e) Step through your program up to LABEL3. Notice the overflow counter, NOF, being incremented,
and the overflow flag, TOF, being reset in TFLG2 (bit 7). Your screen looks like this:
Dr. Victor Giurgiutiu
Page 239
8/19/2008
EMCH 367
f)
Fundamentals of Microcontrollers
Example RPM 1
Let the program run. Toggle pin IC1 back to 1. Nothing should happen since only falling edges
should be detected. Toggle IC1 to 0 again. The program should stop at the second breakpoint.
The value of TIC1 should be updated to a new value. Your screen should look like this:
Dr. Victor Giurgiutiu
Page 240
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example RPM 1
g) Step through your program. The new value of TIC1 is loaded and then stored in T2. The program
branches back to the beginning (LABEL0). Your screen looks like this:
After returning to the beginning, the program zeros the NOF counter and goes through the process again.
h) Let the program run again and repeat the steps above until your are satisfied that you
understand the process well.
i)
Run again but, after each breakpoint, simply hit the run button and let the program run until the
next breakpoint. Make sure you understand how the generation of a falling signal on pin IC1 (by
you toggling from 1 to 0) generates an input capture.
j)
Make sure to run the program long enough such that at least one overflow takes place. Observe
how the overflow counter is incremented and the overflow flag is reset.
Dr. Victor Giurgiutiu
Page 241
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example RPM 1
k) Synchronize your toggling of pin IC1, such that T1 will be just after an overflow and T2 is several
cycles later, i.e., T1 < T2. In this situation, T1 and T2 are on the same side of the timer overflow
event and the overflow counter, NOF, should be zero. Write down these values in Table 1, Case
1.
l)
Synchronize your toggling of pin IC1, such that T1 will be just before an overflow, while T2 will
happen just after the overflow. In this case, the value of T2 will be less than the value of T1, i.e.,
T2 < T1. Since T1 and T2 are on different sides of the timer overflow event, the overflow counter
should register NOF = 1. Write down the T1 and T2 values in Table 1, Case 2.
Table 1
NOF
Case 1:
Case 2:
T1 <T2 and on the same
side of the timer overflow
event
T2 < T1, but on opposite
sides of the timer overflow
event
T1
T2
$
$
$
$
WHAT YOU HAVE LEARNED
In this example, you have learned:
• Review the use of MCU Timer function as an Input Capture (IC) device
• Review the use of the free running clock, TCNT, and it overflow flag, TOF
• Review the use of a input capture clock, TIC1, and its event flag, IC1F
• Demonstrated how the selection of signal transition to be captured is made (here rising edge,
EDG1B) and that the MCU is only sensitive to that particular transition.
• Introduce the use of soft masks (here, IC1_MSK, TOF_MSK).
• Introduce the concept of layered flowcharting of a program: big-picture with generic descriptions;
detailed flowcharts for particular sections of the program.
Dr. Victor Giurgiutiu
Page 242
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example RPM 2
EXAMPLE RPM_2
OBJECTIVE
This example has the following objectives:
• Review the used of two time captures to calculate the time duration of an event
• Illustrate the use of scaling factors (100s) to deal with numbers that are larger than the
microcontroller word length
• Illustrate the handling of overflow counts, with special attention to the situation when the two
time captures are on one side and another of a timer overflow (time-change line)
• Introduce the method of calculating multiplication through repeated additions and decrementation
of a counter
• Introduce the use of a conversion subroutine to convert from hex to BCD
• Illustrate rotation speed calculation from rotation period.
• Illustrate the use of scaling factors (100s) to present the result on a display with limited number of
digits.
PROGRAM EX_RPM_2
This program calculates the rotation speed N_100 in 100s rpm and converts it to BCD format.
• The program assumes that the times T1 and T2 (in cycles), as well as the number of overflows,
NOF, have been separately captured and are in memory.
•
To preserve sign information during computation, the program works in hundreds of cycles.
Hence, the variables T1_100 and T2_100 are calculated by dividing T1 and T2 by decimal 100.
•
Then, the program calculates the time taken by the overflows, TOVFL. This is performed by
repeated addition of the duration between 2 overflows, $10000/100, and decrementation of NOF
(Note that the duration between two overflows was also divide by decimal 100, since the program
works in hundreds of cycles.)
•
The total time, T_100, is calculated by adding T2_100+TOVFL and then subtracting T1_100.
•
The rotation speed N_100_HEX, is calculated by dividing
2000000*60/100/100 by the total time, T_100. The result is in hex.
•
Finally, the subroutine HEX_BCD is invoked to obtain N_100_BCD, i.e., the rotation speed in
BCD format. Note that the subroutine is stored separately in the used root of the directory of your
floppy disk and is included at assembly time using the directive #INCLUDE
'A:\HEX_BCD.ASM'
the
decimal
number
To run this example, you have to enter some arbitrary values of T1, T2 and NOF in the appropriate
memory locations. Two numerical examples are given next:
Example 1: T2>T1
Data:
NOF=1, T1=$0006, T2=$110c
Results:
T1_100=$0000, T2_100=$002b, TOVFL=$028f, T_100=$02ba, N_100_HEX=$0011,
N_100_BCD=17
The rotation speed is 1700 rpm.
Example 2: T2<T1
This example gives the same time duration as Example1, but the individual times were shifted to straddle
the time-change line.
Dr. Victor Giurgiutiu
Page 243
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example RPM 2
Data:
Results:
NOF=2, T1=$fffd, T2=$1103
T1_100=$028f, T2_100=$002b, TOVFL=$051e, T_100=$02ba, N_100_HEX=$0011,
N_100_BCD=17
The rotation speed is 1700 rpm.
FLOWCHART AND CODE
The program flowchart is show below. Two flowchart levels are presented: the big-picture and the details.
The big-picture is used to understand the overall architecture of the program. The details are used to
explain some of the blocks. (Details are given only for those blocks which are somehow new, and have
not been used in previous programs.) This flowchart was use to generate the code file Ex_RPM_2.asm
using the standard asm template.
Big-picture Flowchart
Detailed Flowcharts
Define variables
START • Divide T1 by 100 and store in T1_100
• Divide T2 by 100 and store in T2_100
•
•
•
•
•
•
•
•
Overflow counter, NOF1 (1 byte)
st
1 capture, T1 (2 bytes)
nd
2 capture, T2 (2 bytes)
T1_100=T1/100 (2 bytes)
T2_100=T2/100 (2 bytes)
T_100=(total time)/100 (2 bytes)
N_100_HEX=N in 100 rpm (hex) (2 bytes)
N_100_BCD=N in 100 rpm (BCD) (1 byte)
•
•
•
•
•
•
Load T1 in accD
Load 100 in X
IDIV
Load T2 in accD
Load 100 in X
IDIV
Load $0000 in accD
Store accD to TOVFL
NOF=0?
Y
Use repeated addition to
calculate TOVFL (time taken by
overflows, in 100s of cycles)
N
LABEL5 • Load TOVFL in accD
•
•
•
•
T_100=TOVFL+T2_100-T1_100
LABEL6
N_100_HEX=2000000*60/100/100/T_100
Convert N_100_HEX to N_100_BCD
Add ($10000)/100
Store accD into TOVFL
Decrement NOF
Branch back if NOF>0
• Load lower part of N_100_HEX in accA
• JSR HEX_BCD
• STAA N_100_BCD
SWI
Please refer to the appendix for the explanation of sub routine HEX_BCD.
Dr. Victor Giurgiutiu
Page 244
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example RPM 2
EXECUTION
Open THRSim11. Close the Commands window. View CPU registers AND memory list. Open and
assemble Ex_RPM_2.asm. Set breakpoint at SWI. Reset registers and memory. Set standard labels
(Label/Set Standard Labels). Arrange windows for maximum benefit: Press the RESET button. Your
screen should look like this:
EXAMPLE 1
Recall data from Example 1 above: NOF=1, T1=$0006, T2=$110c. Use your pocket hex calculator to
estimate the result to be expected at the end of the program:
T_100 = (NOF*$10000+T2-T1)/100 = ($01*$10000+$110c-$0006)/$64 = $02ba
(1)
N_100_HEX = (2000000*60/100/100/T_100) = $2ee0/$2ba = $0011
(2)
N_100_BCD = 17
(3)
Because the program needs to work with a finite word size, the variables in Equation (1) are first divided
by decimal100, such that Equation (1) is actually treated as:
T_100 = NOF*($10000)/100+T2/100-T1/100
The terms of equation (1) are calculated separately, as TOVFL, T1_100, T2_100. Hence, the following
operations are performed:
T1_100 = T1/100 = $0006/$64 = $0000
(1a)
T2_100 = T2/100 = $110c/$64 = $002b
(1b)
Dr. Victor Giurgiutiu
Page 245
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example RPM 2
TOVFL = NOF*($10000)/100 = $01*$028f = $028f
(1c)
T_100= TOVFL + T2_100 – T1_100 = $028f + $002b - $0000 = $02ba
(1d)
Note that the result of Equation (1d) is the same as that of equation (1). Hence, Equations (2) and (3) still
stand.
These arithmetic operations are illustrated, step-by-step next.
a) Put in memory the data from Example 1 above: NOF=1, T1=$0006, T2=$110c.Your memory list
should look like Table 1. Note the number of bytes (memory locations) that these variables take:
NOF=1 byte, T1=2 bytes, T2=2 bytes (highlighted).
Table 1
Memory list after Example 1 data has been entered
NOF
T1
T2
T1_100
T2_100
TOVFL
T_100
N_100_HEX
N_100_BCD
$0000
$0001
$0002
$0003
$0004
$0005
$0006
$0007
$0008
$0009
$000a
$000b
$000c
$000d
$000e
$000f
$01
$00
$06
$11
$0c
$ff
$ff
$ff
$ff
$ff
$ff
$ff
$ff
$ff
$ff
$ff
b) Step through the section of your program that divides the variables T1 and T2 by decimal 100 to
obtain T1_100 and T2_100. Use the hex pocket calculator to verify these results. The memory
list should look like Table 2. Note that T1_100 and T2_100 also take 2 bytes each.
Table 2
Memory list after the calculation of T1_100 and T2_100
NOF
T1
T2
T1_100
T2_100
TOVFL
T_100
N_100_HEX
N_100_BCD
$0000
$0001
$0002
$0003
$0004
$0005
$0006
$0007
$0008
$0009
$000a
$000b
$000c
$000d
$000e
$000f
$01
$00
$06
$11
$0c
$00
$00
$00
$2b
$ff
$ff
$ff
$ff
$ff
$ff
$ff
c) Step through the section of your program that calculates TOVFL, the time taken by overflows,
expressed in 100s of cycles. Note that, initially, TOVFL=$0000 is stored. Then, if NOF≠0, the
Dr. Victor Giurgiutiu
Page 246
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example RPM 2
variable TOVFL is increased by ($10000)/100, while the variable NOF is decremented by one.
The process is repeated as long as NOF≥0. At the end of the process, the memory list should
look like Table 3. Note that TOVFL also takes 2 bytes. Also not that, at the end of this process,
NOF = 0.
Table 3
Memory list after the calculation of TOVFL
NOF
T1
T2
T1_100
T2_100
TOVFL
T_100
N_100_HEX
N_100_BCD
$0000
$0001
$0002
$0003
$0004
$0005
$0006
$0007
$0008
$0009
$000a
$000b
$000c
$000d
$000e
$000f
$00
$00
$06
$11
$0c
$00
$00
$00
$2b
$02
$8f
$ff
$ff
$ff
$ff
$ff
d) Step through the section of your program that calculates T_100, the total time in 100s of cycles.
Note how the formula
T_100= TOVFL + T2_100 – T1_100 = $028f + $002b - $0000 = $02ba
(1d)
is applied in two steps, first the addition, then the subtraction. At the end of the process, the
memory list should look like Table 4.
Table 4 Memory list after the calculation of T_100
NOF
T1
T2
T1_100
T2_100
TOVFL
T_100
N_100_HEX
N_100_BCD
Dr. Victor Giurgiutiu
$0000
$0001
$0002
$0003
$0004
$0005
$0006
$0007
$0008
$0009
$000a
$000b
$000c
$000d
$000e
$000f
$01
$00
$06
$11
$0c
$00
$00
$00
$2b
$02
$8f
$02
$ba
$ff
$ff
$ff
Page 247
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example RPM 2
e) Step through the section of your program that calculates the variable N_100_HEX, the hex
speed of rotation, in 100s of rpm. Note that the ‘magic’ number 2000000*60/100/100 is loaded
into accD as $2ee0 and then divided by T_100. At the end of the process, the memory list should
look like Table 5.
Table 5
Memory list after the calculation of N_100_HEX
NOF
T1
T2
T1_100
T2_100
TOVFL
T_100
N_100_HEX
N_100_BCD
f)
$0000
$0001
$0002
$0003
$0004
$0005
$0006
$0007
$0008
$0009
$000a
$000b
$000c
$000d
$000e
$000f
$01
$00
$06
$11
$0c
$00
$00
$00
$2b
$02
$8f
$02
$ba
$00
$11
$ff
Step through the last section of your program and calculate the variable N_100_BCD, which
represent the decimal expression of the hex speed of rotation, in 100s of rpm. The conversion
from hex to BCD is achieved by invoking the subroutine HEX-BCD. At the end of the process,
the memory list should look like Table 6.
Table 6
Memory list after the calculation of N_100_HEX
NOF
T1
T2
T1_100
T2_100
TOVFL
T_100
N_100_HEX
N_100_BCD
Dr. Victor Giurgiutiu
$0000
$0001
$0002
$0003
$0004
$0005
$0006
$0007
$0008
$0009
$000a
$000b
$000c
$000d
$000e
$000f
$01
$00
$06
$11
$0c
$00
$00
$00
$2b
$02
$8f
$02
$ba
$00
$11
$17
Page 248
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example RPM 2
EXAMPLE 2
Recall data from Example 2 as listed at the beginning of this document: NOF=2, T1=$fffd, T2=$1103.
Note that this data represents the same time interval as in Example 1, only that a backwards time shift of
9 cycles took place. For this reason, the times T1 and T2 are on different sides of the time-change line.
T1 happens before the time change, T2 happens after. Therefore, between T1 and T2, the time counter
TCNT goes through a timer overflow. Hence, the overflow counter has the value NOF=2, instead of 1 as
in Example 1.
Use your pocket hex calculator to estimate the result to be expected at the end of the program:
T_100 = (NOF*$10000+T2-T1)/100 = ($02*$10000+$1103-$fffd)/$64 = $02ba
(1)
N_100_HEX = (2000000*60/100/100/T_100) = $2ee0/$2ba = $0011
(2)
N_100_BCD = 17
(3)
Because the program needs to work with a finite word size, the variables in Equation (1) are first divided
by decimal100, such that Equation (1) is actually treated as:
T_100 = NOF*($10000)/100+T2/100-T1/100
The terms of equation (1) are calculated separately, as TOVFL, T1_100, T2_100. Hence, the following
operations are performed:
T1_100 = T1/100 = $fffd/$64 = $028f
(1a)
T2_100 = T2/100 = $1103/$64 = $002b
(1b)
TOVFL = NOF*($10000)/100 = $02*$028f = $051e
(1c)
T_100= TOVFL + T2_100 – T1_100 = $051e + $002b - $028f = $02ba
(1d)
Note that the result of Equation (1d) is the same as that of equation (1). Hence, Equations (2) and (3) still
stand.
These arithmetic operations are illustrated, step-by-step, next.
a) Put in memory the data from Example 1 above: NOF=2, T1=$fffd, T2=$1103. Your memory list
should look like Table 7. Note the number of bytes (memory locations) that these variables take:
NOF=1 byte, T1=2 bytes, T2=2 bytes (highlighted).
Table 7
Memory list after Example 2 data has been entered
NOF
T1
T2
T1_100
T2_100
TOVFL
T_100
N_100_HEX
N_100_BCD
Dr. Victor Giurgiutiu
$0000
$0001
$0002
$0003
$0004
$0005
$0006
$0007
$0008
$0009
$000a
$000b
$000c
$000d
$000e
$000f
$02
$ff
$fd
$11
$03
$ff
$ff
$ff
$ff
$ff
$ff
$ff
$ff
$ff
$ff
$ff
Page 249
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example RPM 2
b) Step through the section of your program that divides the variables T1 and T2 by decimal 100 to
obtain T1_100 and T2_100. Use the hex pocket calculator to verify these results. The memory
list should look like Table 8. Note that T1_100 and T2_100 also take 2 bytes each.
Table 8
Memory list after the calculation of T1_100 and T2_100
NOF
T1
T2
T1_100
T2_100
TOVFL
T_100
N_100_HEX
N_100_BCD
$0000
$0001
$0002
$0003
$0004
$0005
$0006
$0007
$0008
$0009
$000a
$000b
$000c
$000d
$000e
$000f
$02
$ff
$fd
$11
$03
$02
$8f
$00
$2b
$ff
$ff
$ff
$ff
$ff
$ff
$ff
c) Step through the section of your program that calculates TOVFL, the time taken by overflows,
expressed in 100s of cycles. Note that, initially, TOVFL=$0000 is stored. Then, if NOF≠0, the
variable TOVFL is increased by ($10000)/100, while the variable NOF is decremented by one.
The process is repeated as long as NOF≥0. At the end of the process, the memory list should
look like Table 9. Note that TOVFL also takes 2 bytes. Also not that, at the end of this process,
NOF = 0.
Table 9
Memory list after the calculation of TOVFL
NOF
T1
T2
T1_100
T2_100
TOVFL
T_100
N_100_HEX
N_100_BCD
$0000
$0001
$0002
$0003
$0004
$0005
$0006
$0007
$0008
$0009
$000a
$000b
$000c
$000d
$000e
$000f
$02
$ff
$fd
$11
$03
$02
$8f
$00
$2b
$05
$1e
$ff
$ff
$ff
$ff
$ff
d) Step through the section of your program that calculates T_100, the total time in 100s of cycles.
Note how the formula
T_100= TOVFL + T2_100 – T1_100 = $051e + $002b - $028f = $02ba
(1d)
is applied in two steps, first the addition, then the subtraction. At the end of the process, the
Dr. Victor Giurgiutiu
Page 250
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example RPM 2
value T_100=$02ba is obtained, which is the same as in Example 1. The memory list should
look like Table 10.
Table 10 Memory list after the calculation of T_100
NOF
T1
T2
T1_100
T2_100
TOVFL
T_100
N_100_HEX
N_100_BCD
$0000
$0001
$0002
$0003
$0004
$0005
$0006
$0007
$0008
$0009
$000a
$000b
$000c
$000d
$000e
$000f
$02
$ff
$fd
$11
$03
$02
$8f
$00
$2b
$05
$1e
$02
$ba
$ff
$ff
$ff
e) Step through the section of your program that calculates the variable N_100_HEX, the hex
speed of rotation, in 100s of rpm. Note that the ‘magic’ number 2000000*60/100/100 is loaded
into accD as $2ee0 and then divided by T_100. At the end of the process, the value
N_100_HEX=$0011 is obtained, which is the same as in Example 1. The memory list should
look like Table 11.
Table 11 Memory list after the calculation of N_100_HEX
NOF
T1
T2
T1_100
T2_100
TOVFL
T_100
N_100_HEX
N_100_BCD
f)
$0000
$0001
$0002
$0003
$0004
$0005
$0006
$0007
$0008
$0009
$000a
$000b
$000c
$000d
$000e
$000f
$01
$00
$06
$11
$0c
$00
$00
$00
$2b
$02
$8f
$02
$ba
$00
$11
$ff
Step through the last section of your program and calculate the variable N_100_BCD, which
represent the decimal expression of the hex speed of rotation, in 100s of rpm. The conversion
from hex to BCD is achieved by invoking the subroutine HEX-BCD. At the end of the process,
the value N_100_BCD=17 is obtained, which is the same as in Example 1. The memory list
should look like Table 12.
Table 12 Memory list after the calculation of N_100_HEX
Dr. Victor Giurgiutiu
Page 251
8/19/2008
EMCH 367
NOF
T1
T2
T1_100
T2_100
TOVFL
T_100
N_100_HEX
N_100_BCD
Fundamentals of Microcontrollers
$0000
$0001
$0002
$0003
$0004
$0005
$0006
$0007
$0008
$0009
$000a
$000b
$000c
$000d
$000e
$000f
Example RPM 2
$01
$00
$06
$11
$0c
$00
$00
$00
$2b
$02
$8f
$02
$ba
$00
$11
$17
WHAT YOU HAVE LEARNED
In this example, you have learned:
• The use of two time captures to calculate the time duration of an event
• The use of scaling factors to deal with numbers that are larger than the microcontroller word
length. In the program, the scale factor decimal 100 was used, such that the cycle counts T1 and
T2 were converted to T1_100 and T2_100, which are measured in 100s of cycles.
• The handling of overflow-counts, with special attention to the situation when the two time
captures are on one side and another of a timer overflow (time-change line). In the first numerical
example, T1 and T2 were on the same side of the time-change line. In the second numerical
example, T1 and T2 were on opposite sides of the time-change line (T1 before, T2 after). As a
result, the number of overflows recorded in the second case was greater by 1 than in the first case.
However, with proper handling, the final result of the computation was the same.
• The calculation of multiplication through repeated additions and decrementation of a counter. The
time taken by overflows, TOVFL, was calculated through repeated addition of the length between
two consecutive overflows. Every time an addition was done, the overflow counter, NOF, was
decremented by one. The loop was exited when NOF=0. This method was necessary since the
multiplication opcode MUL available in set does not contain a .
• Introduce the use of a conversion subroutine to convert from hex to BCD
• Illustrate rotation speed calculation from rotation period.
• Illustrate the use of scaling factors (100s) to present the result on a display with limited number of
digits.
Dr. Victor Giurgiutiu
Page 252
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example STEP
EXAMPLE STEP
OBJECTIVE
This example has the following objectives:
• Review the use and control of stepper motors.
• Discuss the stepper motor energizing patterns, 1- and 2-phase energizing types, full- and halfstep motion.
• Introduce the concept of creating quasi-continuous motion through a sequence of steps
• Introduce the concept of sequential accessing a finite set of stored patterns through index
addressing with a continuously updating pointer.
• Illustrate a method to ‘load’ a single-precision (2-hex) variable into a double precision (4-hex)
register.
• Introduce the concept of automatic incrementation/decrementation of the addressing pointer with
a programmable step size
• Discuss the reset actions to be taken when the pointer hits the ‘ceiling’ or ‘floor’.
Controller board
Stepper motor
8-pin input
connector
Figure 1 Stepper motor and its controller board. Control signals to the controller board are sent
through the 8-pin input connector.
PROGRAM EX_STEP
This program is to be used for stepper motor control (Figure 1). A stepper motor is controlled by
sending a binary pattern to its controller board. Eight distinct binary patterns are recognized by the
stepper motor controller board in your lab. They are given in Table 1 as sequences S0 – S7. The stepper
motor has four distinct coils, and a 1 in the energizing pattern signifies that the corresponding coil is
Dr. Victor Giurgiutiu
Page 253
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example STEP
energized. Note that in the even sequences (S0, S2, S4, S6) only one bit in the energizing pattern is set.
This indicates that only one out of the four stepper-motor coils (1 phase) is energized. On the other hand,
in the odd sequences (S1, S3, S5, S7), two bit are set, i.e., two coils (2 phases) are energized. The
sequences with two coils energized are labeled full step, while those with only one coil energized are
labeled half step.
Table 1
Stepper motor energizing patterns and their 2-hex equivalent value
Sequence
Energizing
pattern
S0
S1
S2
S3
S4
S5
S6
S7
1000
1001
0001
0101
0100
0110
0010
1010
8-bit
2-hex
equivalence
$08
$09
$01
$05
$04
$06
$02
$0A
Phase
energizing
type
1 phase
2 phase
1 phase
2 phase
1 phase
2 phase
1 phase
2 phase
Step type
Half step
Full step
Half step
Full step
Half step
Full step
Half step
Full step
When these patterns are hit in increasing order, one after the other, the motion is called ‘half speed
forward’. If only the odd sequences are hit, i.e., every second pattern is hit, the motion is ‘full speed
forward’. If the patterns are hit in decreasing order, the motion is, respectively, ‘half-speed backward’
and ‘full speed backward’ (Table 2).
Table 2
Stepper motor speed definitions
Full speed forward
Half speed forward
Half-speed backward
Full speed backward
Step
+2
+1
-1
-2
Start
Even pattern
Anywhere
Anywhere
Even pattern
To control a stepper motor, a parallel port is used to send 8-bit pattern to the stepper-motor control board.
Note the pin assignment:
MSB
LSB
I1
I2
I3
I4
N/A
N/A
N/A
N/A
(white)
(green)
(gray)
(yellow)
The program illustrates the sequentially access to memory locations using a memory pointer:
• The memory locations to be accessed have the variable names S0, S1, S2, S3, S4, S5, S6, S7, and
correspond to addresses $0000 through $0007.
•
The memory pointer has the variable name POINTER and is stored at address $0009
•
The memory pointer is used in index Y addressing. The memory pointer is entered in index
register Y, and the offset is taken as zero ($00). Thus, through Y, the pointer controls directly the
address to be accessed.
Dr. Victor Giurgiutiu
Page 254
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example STEP
•
The program automatically steps through the set of eight sequences S0—S7 and generates the
next pointer value, by adding the variable STEP. As shown in Table 2, for stepper motor control,
the values of STEP are +/-1 and +/-2. The positive values correspond to forward motion. The
negative values correspond to backward motion. Two’s complement 8-bit signed convention is
used
to
generate
the
negative
values
(-1=$ff, -2=$fe).
•
The program takes care not to send the pointer outside the eight-sequence range. Hence, when
going forward, whenever the highest sequence, S7, is hit (i.e., we hit the ceiling) the programs
resets to pointer to S0 (i.e., to the floor). When going backward, whenever the floor is hit, the
program resets the pointer to the ceiling.
In the initialization phase, the program enters the values of S0 – S7 given in Table 1 in the appropriate
memory locations. Then it sets STEP=$00, and POINTER=$00
When running the program, you have to enter into memory location STEP one of the following options:
STEP=$01 or $02, or $ff or $fe.
FLOWCHART AND CODE
The program flowchart is show below. Two flowchart levels are presented: the big-picture and the
details. The big-picture is used to understand the overall architecture of the program. The details are
used to explain some of the blocks. (Details are given only for those blocks which are somehow new,
and have not been used in previous programs.) Note that the main program is only intended to
demonstrate the use of the subroutine STEP_SR. For this reason, the main program is a mere call to the
STEP_SR subroutine. The essential code for this program is shown to the right of the flowchart. The
essential code was incorporated into the standard template asm to generate the code file Ex_Step.asm.
Dr. Victor Giurgiutiu
Page 255
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Big-picture Flowchart
START
Define variables
•
•
•
•
•
•
•
•
•
•
S0
S1
S2
S3
S4
S5
S6
S7
STEP
POINTER
Initialize
•
•
•
•
•
•
•
•
•
•
•
X=REGBAS
S0=$08
S1=$09
S2=$01
S3=$05
S4=$04
S5=$06
S6=$02
S7=$0a
STEP=$00
POINTER=$00
Call S/R STEP_SR
LABEL0
Flowchart Details
1 byte
1 byte
1 byte
1 byte
1 byte
1 byte
1 byte
1 byte
1 byte
1 byte
BRA
SWI
STEP_SR • Load POINTER to accB
• Add STEP
Y
Below ceiling?
POINTER ≤ 7?
N
Reset to floor
POINTER=0
LABEL3
Y
Above floor?
0 ≥ POINTER?
N
Reset to ceiling
POINTER=7
LABEL4
Store new value of POINTER
Put POINTER into Y
• Load new sequence code into
accA using Y
• Send sequeuce code from
accA to Port B
• Load $0000 into Y
• Add accB to Y (acc B
contains the value of
POINTER)
Example STEP
Code
* Define program variables
ORG
DATA
S0
RMB
1
S1
RMB
1
S2
RMB
1
S3
RMB
1
S4
RMB
1
S5
RMB
1
S6
RMB
1
S7
RMB
1
STEP
RMB
1
POINTER RMB
1
*Main program
ORG
PROGRAM
START LDX
#REGBAS
LDAA
#$08
STAA
S0
LDAA
#$09
STAA
S1
LDAA
#$01
STAA
S2
LDAA
#$05
STAA
S3
LDAA
#$04
STAA
S4
LDAA
#$06
STAA
S5
LDAA
#$02
STAA
S6
LDAA
#$0A
STAA
S7
* Initialize controls
LDAA
#0
STAA
STEP
LDAA
#$00
STAA
POINTER
* Start looping
LABEL0 JSR
STEP_SR
BRA
LABEL0
SWI
* Step subroutine
STEP_SR
LDAB
POINTER
ADDB
STEP
CMPB
#7
BLE
LABEL3
LDAB
#0
LABEL3 CMPB
#0
BGE
LABEL4
LDAB
#7
LABEL4 STAB
POINTER
LDY
#$0000
ABY
LDAA
$00,Y
STAA
PORTB,X
RTS
RTS
Dr. Victor Giurgiutiu
Page 256
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example STEP
EXECUTION
Open THRSim11. Close the Commands window. View CPU registers AND memory list. Open and
assemble Ex_Step.asm. Set breakpoint at SWI. Reset registers. Press the RESET button. Set standard
labels (Label/Set Standard Labels). Set breakpoint at LABEL0 and at SWI. Arrange windows for
maximum benefit: Your screen should look like this:
Dr. Victor Giurgiutiu
Page 257
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example STEP
Let the program run to the first breakpoint. Initialization of the memory variables is achieved. Scroll the
screen to have the LABEL0 line at the top. Rearrange the windows slightly to cover only essential code.
Your screen should look like this:
Dr. Victor Giurgiutiu
Page 258
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example STEP
CASE ‘SLOW-FORWARD’ (STEP=$01)
a) Put STEP=$01. This should make the program go forward in increments of one (half-speed
forward). Your screen should look like this:
Dr. Victor Giurgiutiu
Page 259
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example STEP
b) Step through the program. Notice that the program goes directly to the subroutine STEP_SR.
The following events happen:
•
The current value of the variable POINTER (POINTER=$00) is loaded into accB.
•
The value of variable STEP (STEP=$01) is added to accB. The result is accB = $01
•
The value in accB is compared with the ceiling (i.e., perform accB-$07). The result of the
comparison is a negative number. Hence, the condition code bit N is set (observe N=1 on
the simulator status bar, and bit 3 = 1 in CC register). Your screen looks like this:
Dr. Victor Giurgiutiu
Page 260
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example STEP
•
At branch BLE LABEL3, the branch condition is met (since N=1) and the program branches
to LABEL3.
•
The value of accB is now compared with the floor (i.e., perform accB-$00). The result of the
comparison is a $01. Hence, the condition code bit N is clear (observe N=0 on the simulator
status bar, and bit 3 = 0 in CC register). Your screen looks like this:
Dr. Victor Giurgiutiu
Page 261
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example STEP
•
At branch BGE LABEL4, the branch condition is met (since N=0) and the program branches
to LABEL4.
•
The value of accB is stored as the new value of POINTER (observe POINTER at memory
location $0009 having the value $01)
•
At this stage, the value of POINTER must be loaded into index register Y. To achieve this,
the value $0000 is loaded in index register Y. Then, the index register Y and the accB
(containing the current value of POINTER) are added. (This convoluted way of doing things
was needed because there is no simple way to load the single precision variable, POINTER,
into the double precision register Y.) Your screen looks like this:
Dr. Victor Giurgiutiu
Page 262
8/19/2008
EMCH 367
•
Fundamentals of Microcontrollers
Example STEP
The value of the memory where the POINTER points to is now loaded into accA. This is
achieved using index addressing with Y as the index register and $00 as the offset (i.e.,
LDAA $00,Y). In our case, POINTER=$01, hence the memory location $0001 is loaded.
This is the step S1, which has the value S1=$09. Hence, you should see the value $09 in
accA (i.e., A $09 in CPU registers). Finally, the pattern S1, which was loaded in accA, is
sent to Port B. This will make the stepper motor go to the position corresponding to pattern
S1. Your program looks like this:
c) Let your program perform another loop and observe that the POINTER and the value in Port B
have reached the next sequence pattern, S2=$01. Your screen should look like this:
Dr. Victor Giurgiutiu
Page 263
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example STEP
d) Repeat and observe each loop until the POINTER and the value in Port B have reached the last
sequence pattern, S7=$0a. Your screen should look like this:
Dr. Victor Giurgiutiu
Page 264
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example STEP
e) In the next loop, the program should hit the ceiling and return to the floor. Perform this loop
manually, to verify the logic. At the end of the loop, observe that the POINTER and the value in
Port B have come back to the first sequence pattern, S0=$08. Your screen should look like this:
Dr. Victor Giurgiutiu
Page 265
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example STEP
CASE ‘FULL-FORWARD’ (STEP=$02)
Press RESET button. Run initialization. Put the value $02 into the variable STEP and $07 into
variable POINTER. Repeat the pattern of observations covered before. You will see that only the
odd patterns (S1, S3, S5, S7) are being hit. According to Table 1, these patterns correspond to 2phase energizing of the stepper motor (full steps). Satisfy yourself that you fully understand the
logic of the program and that you have fully observed how the program is generating a full-speed
forward motion.
CASE ‘HALF-BACKWARD’ (STEP=$FF)
Put the value $ff into the variable STEP and repeat the pattern of observations covered before.
You will see all the patterns (S0--S7) being hit, but in reverse order (S1, S0, S7, S6, S5, S4, S3,
S2, S1 …). Satisfy yourself that you fully understand the logic of the program and that you have
fully observed how the program is generating a half-speed backward motion.
CASE ‘FULL-BACKWARD (STEP=$FE)
Put the value $fe into the variable STEP and repeat the pattern of observations covered before.
You will see that only the odd patterns are being hit, and that they are hit in reverse order (S1, S7,
S5, S3, S1, …). Satisfy yourself that you fully understand the logic of the program and that you
have fully observed how the program is generating a full-speed backward motion.
Dr. Victor Giurgiutiu
Page 266
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example STEP
WHAT YOU HAVE LEARNED
In this example, you have learned:
• The use and control of stepper motors.
• The stepper motor energizing patterns, 1- and 2-phase energizing types, full- and half-step
motion. Learn the eight sequences S0—S7, the odd sequences S1, S3, S5, S7 being full steps (2phase), the even sequences S0, S2, S4, S6 being half-steps (1-phase)
• The concept of creating quasi-continuous motion through a sequence of steps.
• The concept of sequential accessing a finite set of stored patterns through index addressing with
a continuously updating pointer. The eight sequences S0—S7, were stored in memory, and the
variable POINTER was used to address them. The POINTER was loaded into index register Y,
and the memory locations containing the sequences S0—S7 were addressed using the index Y
addressing mode.
• A method to ‘load’ a single-precision (2-hex) variable into a double precision (4-hex) register.
This situation was encountered in connection with the use of variable POINTER for index Y
addressing. Since there is no direct way to store a single precision variable into a double
precision register, a convoluted way was used. The double precision register Y was first loaded
with zeros ($0000) and then added with the single precision variable POINTER. Thus, the single
precision variable POINTER ended up being effectively loaded into index register Y.
• The concept of automatic incrementation/decrementation of the addressing pointer with a
programmable step size. The variable STEP was used with values 1, 2, -1, -2. The positive
values generated forward motion at half and full speed; the negative values created backward
motion. Incrementation and decrementation was done in a loop. Whenever the incremented value
hit a value outside the permissible range (0 to 7), reset was implemented. If the ‘ceiling’ was hit
(i.e., a value greater than 7) the reset was to the floor (i.e., to 0). If the ‘floor’ was hit (i.e., less
than 0) the reset was implemented to the ceiling (i.e., to 7).
Dr. Victor Giurgiutiu
Page 267
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example STEP
(This page is left intentionally blank)
Dr. Victor Giurgiutiu
Page 268
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example LONG DELAY
EXAMPLE LONG DELAY
OBJECTIVE
This example has the following objectives:
• Present a subroutine that can implement a long delay between stepper motor steps
• Introduce the concept of how to achieve double precision delays (4-hex) using single precision
(2-hex) variables
PROGRAM EX_LONG_DELAY
This program illustrates the use of subroutine DLAY_SR. This subroutine performs a long delay action
using TOC1. Although the delay is in double precision (4-hex), the controlling variable, DELAY, is
simple precision. This is one of the special features of this subroutine. DELAY controls the higher 2-hex
digits. This is how this works:
• First, clear the OC1F flag, which is bit 7 in TFLG1. When doing this, we use the OR operation in
preserve the other bits in TFLG1.
•
We load DELAY in accA, which is the higher part of accD. Then, we fill accB, i.e., the lower
part of accD, with $00. If DELAY=$XX, then the value in accD is $XX00.
•
Next, add TCNT to accD and store the result in TOC1. This is the new time
•
Step in place until OC1F is set. When the number of cycles $XX00 have elapsed, you are done.
The subroutine return control to the main program.
A stepper motor is controlled by sending binary patterns (step sequences) to its controller board. Eight
distinct binary patterns (S0 – S7) are recognized by the stepper motor controller board in your lab. When
these patterns are hit in increasing order, one after the other, the motion is called ‘half speed forward’. If
only the odd sequences are hit (i.e., every second pattern), the motion is ‘full speed forward’. If the
patterns are hit in decreasing order, the motion is, respectively, ‘half-speed backward’ and ‘full speed
backward’. The corresponding step sizes are, respectively, +1, +2, -1, -2 (Table 1). Using 2’s
complement 8-bit signed numbers convention, these values correspond to the variable STEP taking hex
values $01, $02, $ff, $fe.
Table 1
Stepper motor speed definitions
Half speed forward
Full speed forward’
Half-speed backward
Full speed backward’
Step size
+1
+2
-1
-2
STEP
$01
$02
$ff
$fe
The program is intended for stepper motor control. The stepper-motor speed is controlled through the
delay inserted between steps. A short delay ensures a high speed, while a long delay produces a slow
speed. The shortest delay that can be physically accommodated by the stepper motor dynamics is 5 ms.
For a 2 MHz processor (0.5 μs/cycle), this corresponds to 10,000 ($2710) cycles. The maximum delay is,
obviously, $ffff. Since we use a single precision variable, DELAY, we need to round the numbers $2710
and $ffff to 2 significant hex numbers. We get $2800 and $ff00 (To maintain delay integrity, the first
number was rounded up, the second number was rounded down.) Hence, the single precision variable,
DELAY, can take values between $28 and $ff.
Dr. Victor Giurgiutiu
Page 269
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example LONG DELAY
FLOWCHART AND CODE
The program flowchart is show below. The essential code for this program is shown to the right of the
flowchart. The essential code was incorporated into the standard template asm to generate the code file
Ex_Long_Delay.asm. Please refer to this file for more coding details, and coding style.
Code
Flowchart
Define variables:
• DELAY
1 byte
ORG
RMB
ORG
START
LDX
JSR
SWI
DLAY_SR LDAA
ORAA
STAA
LDAA
LDAB
ADDD
STD
LABEL5 LDAA
ANDA
BEQ
RTS
DELAY
START Initialize: X=REGBAS
Jump to subroutine DELAY_SR
SWI
DLAY SR
START
• Clear OC1F
• Add DELAY to TCNT
and store in TOC1
Step in place until
OC1F is set
DATA
1
PROGRAM
#REGBAS
DLAY_SR
#%10000000
TFLG1,X
TFLG1,X
DELAY
#$00
TCNT,X
TOC1,X
TFLG1,X
#%10000000
LABEL5
RTS
EXECUTION
Open THRSim11. Close the Commands window. Open and assemble Ex_Long_Delay.asm. View CPU
registers, timer registers, memory list for variable DELAY. Arrange windows for maximum benefit.
Reset registers. Set standard labels (Label/Set Standard Labels). Press the RESET button. Set
breakpoints at SWI and RTS. Put $28 in DELAY. Your screen should look like this:
Dr. Victor Giurgiutiu
Page 270
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example LONG DELAY
a) Step through the program. The program should initialize X=$1000, and then turn control to the
subroutine DLAY_SR.
b) Step through the subroutine. Observe how, first, the flag OC1F is reset.
c) Then note that the value of DELAY is loaded in accA (i.e., in higher part of accD), then $00 is
loaded in accB (i.e., the lower part of accD), and finally the value of TCNT is added to accD.
The result is stored in TOC1. Your screen should look like this:
Note that the value of TOC1 is close to $2800.
d) Let the program run. It should loop continuously on LABEL5 while checking for OC1F. When
TCNT goes over the value of TOC1, the flag OC1F (bit 7 in TFLG1) gets set and the code is
ready to return to the main program. Your screen looks like this:
Dr. Victor Giurgiutiu
Page 271
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example LONG DELAY
You are done.
e) Repeat the above procedure for other values in DELAY: $30, $40, $80 and $ff. Make sure that
you understand the way this subroutine works.
WHAT YOU HAVE LEARNED
In this example, you have learned:
• A subroutine that can implement a long delay between stepper motor steps
• How to achieve double precision delays (4-hex) using single precision (2-hex) variables. The
single precision variable DELAY was used. The variable was loaded into the higher part of
double accD. The higher part of accD is accA. Hence, the variable was loaded in accA using
single precision arithmetic. The lower part of the double precision accumulator accD, which is
the single precision accumulator accB, was loaded with $00. Hence, if DELAY=$XX, at the end
of the process accD=$XX00.
Dr. Victor Giurgiutiu
Page 272
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SORT
EXAMPLE SORT
OBJECTIVE
This example has the following objectives:
• Review the use of keystroke commands for controlling a process
• Introduce the concept of ‘multiple sort’ and its ‘sequential sort’ equivalent
PROGRAM EX_SORT
This program can be used for controlling a process through keystroke commands send from the terminal
keyboard. Once the keystroke command is received, it is echoed to the terminal monitor for confirmation.
Then, the keystroke in the command is compared with a set of command options, and action is
appropriately taken. The program recognizes five keystroke commands:
i)
Move forward
>
ii)
Move backward
<
iii) Increase speed (decrease delay)
+
iv) Decrease speed (increase delay)
v)
Stop program
S
The program use is intended for stepper motor control. A stepper motor is controlled by sending binary
patterns (step sequences) to its controller board. Eight distinct binary patterns (S0 – S7) are recognized
by the stepper motor controller board in your lab. When these patterns are hit in increasing order, one
after the other, the motion is called ‘half speed forward’. If only the odd sequences are hit (i.e., every
second pattern), the motion is ‘full speed forward’. If the patterns are hit in decreasing order, the motion
is, respectively, ‘half-speed backward’ and ‘full speed backward’. The corresponding step sizes are,
respectively, +1, +2, -1, -2 (Table 1). Using two’s complement 8-bit signed numbers convention, these
values correspond to the variable STEP taking hex values $01, $02, $ff, $fe.
Table 1
Stepper motor speed definitions
Half speed forward
Full speed forward’
Half-speed backward
Full speed backward’
Step size
+1
+2
-1
-2
STEP
$01
$02
$ff
$fe
The "half-speed" and "full-speed" commands are part of the coarse speed control. Fine speed control
can be attained by modifying the delay inserted between steps. A shorter delay ensures a higher speed,
while a longer delay produces a slower speed. The shortest delay that can be physically accommodated
by the stepper-motor dynamics is 5 ms. For a 2 MHz processor (0.5 μs/cycle), this corresponds to 10,000
($2710) cycles. The maximum delay is, obviously, $ffff. In the program, we use the single precision
variable, DELAY. When two numbers, $2710 and $ffff are rounded to 2 significant hex numbers, one
gets $2800 and $ff00 (To maintain delay integrity, the first number was rounded up, the second number
was rounded down.) Hence, the single precision variable, DELAY, can take values between $28 and $ff.
The following is the ‘big-picture’ of the program:
a) Define control variables: STEP, DELAY
b) Initialize program:
i)
Dr. Victor Giurgiutiu
Initialize X=REGBAS
Page 273
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SORT
ii)
Initialize SCI
iii) Initialize control variables STEP=0, DELAY=$ff
c) Verify if new keystroke command has arrived. If N, jump directly to e)
d) "Echo" the command back to the terminal monitor for confirmation
e) Sort and process the keystroke command. Modify stepper motor controls based on the keystroke
command:
vi) >
STEP=$01
vii) <
STEP=$ff
viii) +
Increase speed (decrease delay, but not below $28)
ix) Decrease speed (increase delay but not above $ff)
x)
S Stop program
f) Loop back to c)
In the initialization phase, the program enters the values of S0 – S7 given in Table 1 in the appropriate
memory locations. Then it sets STEP=$00, and POINTER=$00
FLOWCHART AND CODE
The program flowchart is show below. Two flowchart levels are presented: the big-picture and the details.
The big-picture is used to understand the overall architecture of the program. The details are used to
explain some of the blocks. (Details are given only for those blocks which are somehow new, and have
not been used in previous programs.) The essential code for this program is shown to the right of the
flowchart. The essential code was incorporated into the standard template asm to generate the code file
Ex_Sort.asm. Please refer to this file for more coding details, and coding style.
Dr. Victor Giurgiutiu
Page 274
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Big-picture Flowchart
Example SORT
Code
Flowchart Details
ORG
RMB
RMB
ORG
START
LDX
LDAA
STAA
LDAA
STAA
LDAA
STAA
LDAA
STAA
LDAA
STAA
LABEL0 NOP
LABEL1 LDAA
ANDA
BEQ
LDAB
LABEL2 LDAA
ANDA
BEQ
STAB
CMPB
BEQ
CMPB
BEQ
CMPB
BEQ
CMPB
BEQ
CMPB
BEQ
JMP
FORWD LDAA
CMPA
BGT
INCA
LABL10 STAA
JMP
BACKWD LDAA
CMPA
BLT
DECA
LABL11 STAA
JMP
FASTER LDAA
CMPA
BLS
DECA
LABEL6 STAA
JMP
SLOWER LDAA
CMPA
BHS
INCA
LABEL7 STAA
JMP
STOP
SWI
LABEL9 BRA
STEP
DELAY
• STEP
• DELAY
Define variables
START
•
•
•
•
Initialize
Keystroke?
1 byte
1 byte
X=REGBAS
SCI
STEP=$00
DELAY=$ff
N
Y
Receive and echo keystroke
FORWD
STEP>+1
>
Y
FORWD
Y
N
Increment STEP
N
BACKWD
STEP<-1
<
Y
BACKWD
N
Sort keystroke
Y
N
Decrement STEP
FASTER
DELAY≤$28
+
Y
Y
FASTER
N
Decrement DELAY
N
SLOWER
DELAY≥$ff
-
Y
Y
SLOWER
N
Increment DELAY
N
S
Y
STOP
STOP
SWI
N
Dr. Victor Giurgiutiu
Page 275
DATA
1
1
PROGRAM
#REGBAS
#%00110000
BAUD,X
#%00000000
SCCR1,X
#%00001100
SCCR2,X
#0
STEP
#$ff
DELAY
SCSR,X
#%00100000
LABEL9
SCDR,X
SCSR,X
#%10000000
LABEL2
SCDR,X
#'>'
FORWD
#'<'
BACKWD
#'+'
FASTER
#'-'
SLOWER
#'S'
STOP
LABEL9
STEP
#+1
LABL10
STEP
LABEL9
STEP
#-1
LABL11
STEP
LABEL9
DELAY
#$28
LABEL6
DELAY
LABEL9
DELAY
#$ff
LABEL7
DELAY
LABEL9
LABEL0
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SORT
EXECUTION
Open THRSim11. Close the Commands window. Open and assemble Ex_Sort.asm. View CPU registers,
serial registers SCSR (set to binary) and SCDR, timer registers TCNT through TOC1, memory list for
variables STEP and DELAY, serial transmitter, serial receiver. Arrange windows for maximum benefit.
Reset registers. Set standard labels (Label/Set Standard Labels). Press the RESET button. Your screen
should look like this:
a) Set breakpoints at the following lines:
•
LDAB SCDR,X
•
STAB SCDR,X
•
SWI
b) Step through the program up to LABEL0. The program should initialize X=$1000, SCI control
registers, and STEP=$00, DELAY=$ff.
c) Let the program run. It should loop continuously through the body of the program and back to
LABEL0, etc.
Dr. Victor Giurgiutiu
Page 276
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SORT
CHECK THE KEYSTROKE COMMAND > (FORWARD)
d) Type > in serial transmitter, and send. After some time, you will see the RDRF bit in SCSR (bit 5)
getting set, and your program should stop at the breakpoint. At this point, SCDR-$3e, i.e., ASCII
code for >. Your program looks like this:
e) Run. The program clears the RDRF flag, and stops at the next breakpoint, STAB SCDR,X.
f)
Step through your program. You will see
•
The program enters the sort sequence
•
The program branches to label FORWARD
•
The BGT condition is not satisfied, and the program increments STEP from $00 to $01. You
have set the STEP to the value +1, for ‘slow-forward’
•
The program branches to LABEL9 and then to LABEL0. Your screen looks like this:
Dr. Victor Giurgiutiu
Page 277
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SORT
g) Let your program run. You will see the program looping again in the big loop.
h) Send the character > again. The sequence of events described above repeats itself. At the end
of the process, STEP=2. You have achieved ‘fast-forward’.
i)
Let your program run. You will see the program looping again in the big loop. Send the character
> again and repeat the sequence of events. Observe carefully how the segment FORWD is
executed. You will notice that the condition BGT is now satisfied, and the program branches over
the INCA instruction. Thus, your STEP does no longer increase, and stays at its maximum value,
STEP=$02 (decimal, +2). Your screen looks like this:
Dr. Victor Giurgiutiu
Page 278
8/19/2008
EMCH 367
Dr. Victor Giurgiutiu
Fundamentals of Microcontrollers
Page 279
Example SORT
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SORT
CHECK THE KEYSTROKE COMMAND < (BACKWARD)
j)
Run. While the program is looping on LABEL0, type the character < into the serial transmitter,
and send. The program should stop at the first breakpoint. Run again. The program stops at
second breakpoint.
k) Step through the program. The program will go through the sorting sequence and end up at the
BACKWD segment. The BLT condition is not satisfies, and the program decrements STEP from
$02 to $01. You are back to ‘slow-forward’ At the end of this process, your screen looks like this:
Dr. Victor Giurgiutiu
Page 280
8/19/2008
EMCH 367
l)
Fundamentals of Microcontrollers
Example SORT
Repeat and get the variable STEP to get the value STEP=$00. This corresponds to ‘stand still’.
m) Repeat. This time the variable STEP will be decremented to the value STEP=$ff (decimal –1).
This corresponds to ‘slow-backward’.
n) Repeat. This time the variable STEP will be decremented to the value STEP=$fe (decimal –2).
This corresponds to ‘fast-backward’. Your screen should look like this:
Dr. Victor Giurgiutiu
Page 281
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SORT
CHECK THE KEYSTROKE COMMAND +(INCREASE SPEED)
o) We want to test the keystroke command +. This command should produce an increase in speed,
i.e., a decrease in DELAY from $ff to $fe. Run the program. While the program is looping on
LABEL0, type the character. After the breakpoints, you will see your program sorting at the
program segment FASTER. While going through this segment, the condition for BLS is not
satisfied, and program decrements DELAY to the value DELAY=$fe. At the end of the process,
your screen should look like this:
Dr. Victor Giurgiutiu
Page 282
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SORT
p) Repeat two times. The variable DELAY should become DELAY=$fd, then DELAY=$fc. Your
program should look like this:
Dr. Victor Giurgiutiu
Page 283
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SORT
q) Test now the logic at the lower limit of DELAY, i.e., that it does not go below $28. Make
DELAY=$28. Then, run. Send + again. After the second breakpoint, step through it. The program
gets again to the program segment FASTER, but, this time, the condition for BLS is satisfied and
the program branches over the operation DECA. Hence, the variable delay is not decremented
any further. It stays at DELAY=$28. The logic works as expected. Your screen should look like
this:
Dr. Victor Giurgiutiu
Page 284
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SORT
CHECK THE KEYSTROKE COMMAND -(DECREASE SPEED)
r) We want to test the keystroke command -. This command should produce a decrease in speed,
i.e., an increase in DELAY from $28 to $29.Run the program. While the program is looping on
LABEL0, type the character – and send. After the breakpoints, you will see your program sorting
at the program segment SLOWER. While going through this segment, the condition for BHS is
not satisfied, and program increments DELAY from $28 to$29. At the end of the process, your
screen should look like this:
s) Repeat two times. The variable DELAY should become DELAY=$2a, then DELAY=$2b. Your
program should look like this:
Dr. Victor Giurgiutiu
Page 285
8/19/2008
EMCH 367
t)
Fundamentals of Microcontrollers
Example SORT
Test now the logic at upper limit of DELAY, i.e., that it does not go over $ff. Make DELAY=$ff.
Then, run. Send - again. After the second breakpoint, step through it. The program gets again to
the program segment SLOWER, but, this time, the condition for BHS is satisfied and the
program branches over the operation INCA. Hence, the variable delay is not incremented any
further. It stays at DELAY=$ff. The logic works as expected. Your screen should look like this:
Dr. Victor Giurgiutiu
Page 286
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SORT
CHECK THE KEYSTROKE COMMAND S (STOP)
u) We want to test the keystroke command +. This command should produce the program to stop.
Run the program. While the program is looping on LABEL0, type the character S. After the
breakpoints, you will see your program sorting at the program label STOP. The operation at this
label is SWI. Your program successfully stops. (Do not step manually through SWI, since it will
throw you outside the program area, and give a disassemble error.)
FURTHER CHECKS
v) Remove the breakpoint from LDAB SCDR,X and STAB SCDR, X. Leave only the breakpoint at
SWI.
w) Run your program and test the keystroke commands >, <, +, -, S again, until you are satisfied
that you understood how they work.
Dr. Victor Giurgiutiu
Page 287
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example SORT
WHAT YOU HAVE LEARNED
In this example, you have learned:
• The use of keystroke commands for controlling a process. The following keystroke commands
have been used:
Move forward
>
i)
ii)
Move backward
<
iii) Increase speed (decrease delay)
+
iv) Decrease speed (increase delay)
v)
Stop program
S
• Introduce the concept of ‘multiple sort’ and its ‘sequential sort’ equivalent. The multiple sort was
needed to go to one of the five possible outcomes according to the keystroke value. Since a
multiple sort command is not available in the MCU programming language, an equivalent
‘sequential sort’ was used instead. The sequential sort, checks the keystroke against one
possibility at a time; if a coincidence is found, it branches out. Otherwise. it continues to check.
Dr. Victor Giurgiutiu
Page 288
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example A/D CONVERTER
EXAMPLE – A/D CONVERTER
OBJECTIVE
This example will help you learn how to use the M68HC11 microcontroller to collect analog data in
digital form. The following objectives are considered:
• Review the use of A/D conversion function of the M68HC11 microcontroller.
• Illustrate various modes of performing A/D conversion.
This example covers the following topics:
• Single channel, single conversion, MULT=0, SCAN=0;
• Single channel, continuous conversion, MULT =0, SCAN =1;
• Multiple channel, single conversion, MULT =1, SCAN =0;
• Multiple channel, continuous conversion, MULT =1, SCAN =1;
PROGRAM A/D CONVERTER
SINGLE CHANNEL, SINGLE CONVERSION, MULT=0, SCAN=0
In this section, we will study the single-channel single-conversion. The channel selected in this example
will be the pin PE1. The program will do the following
a) Initialize the A/D conversion
b) Set ADCTL to reflect the following control bits:
i)CD=0, CC=0, CB=0, CA=1 to select pin PE1
ii)SCAN=0, i.e., no scanning
iii)MULT=0, i.e., single channel
c) Check if the A/D conversion has finished. The conversion is finished when the flag CCF is set.
d) Load the results from the AD registers ADR1 – ADR4 and store them into memory locations
VAL1 – VAL4.
e) Loop back to b)
FLOWCHART AND CODE
The program flowchart is show below. Two flowchart levels are presented: the big-picture and the
details. The big-picture is used to understand the overall architecture of the program. The details are
used to explain some of the blocks. (Details are given only for those blocks which are somehow new,
and have not been used in previous programs.) The essential code for this program is shown to the right
of the flowchart. The essential code was incorporated into the standard template asm to generate the
code file Ex_AD_1.asm.
Dr. Victor Giurgiutiu
Page 289
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Big-picture Flowchart
Define variables
Initialize
Code
Flowchart Details
•
•
•
•
VAL1
VAL2
VAL3
VAL4
1 byte
1 byte
1 byte
1 byte
• X=REGBAS
• AD converter
• MULT = 0
• SCAN = 0
• CA=1
ADC
Perform A/D
conversion
LABEL1
Y
CCF=0?
N
Store conversion
results
Example A/D CONVERTER
Store
ADR1, ADR2, ADR3, ADR4 to
VAL1, VAL2, VAL3, VAL4
ORG
DATA
VAL1
RMB
1
VAL2
RMB
1
VAL3
RMB
1
VAL4
RMB
1
* Main program
ORG
PROGRAM
START
LDX
#REGBAS
* switch on A/D converter
BSET
OPTION,X,%10000000
* Perform single A/D conversion on PE0,PE1,PE2,PE3
ADC
BSET
ADCTL,X,%00000001; SCAN=0,
.
MULT=0, CA=1
LABEL1 LDAA
ADCTL,X
ANDA #%10000000
BEQ
LABEL1
* Store the four consecutive conversion values
LDAA
ADR1,X
STAA
VAL1
LDAA
ADR2,X
STAA
VAL2
LDAA
ADR3,X
STAA
VAL3
LDAA
ADR4,X
STAA
VAL4
BRA
ADC
ORG
RESET
FDB
START
EXECUTION
Open THRSim11. Close the Commands window. View CPU registers, AD converter registers, port E
pins, memory list, Sliders E port. Open and assemble Ex_AD_1.asm. Reset registers and memory. Set
standard labels (Label/Set Standard Labels). Set display of ADCTL and accA to binary. Arrange
windows for maximum benefit: Press the RESET button. Your screen should look like this:
Dr. Victor Giurgiutiu
Page 290
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example A/D CONVERTER
Step through the program up to LABEL1. The AD conversion control register ADCTL has been set to
perform a single A/D conversion on the pin PE1. Your screen looks like this:
We are now ready to perform the conversions. Set a breakpoint just after exiting the check CCF loop,
i.e., at line $c010. Make the value of PE1 = 1000 mV. Run. The program performs the AD conversion
and exists the loop. The registers ADR1 – ADR4 have the value $33, which is the hex value of
1000*$ff/5000 (check with your hex calculator!). The screen looks like this:
Step through the program until all the four AD registers get transferred into the memory storage
locations VAL1 – VAL4. The screen looks like this:
Dr. Victor Giurgiutiu
Page 291
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example A/D CONVERTER
Remove the breakpoint from $c010. Enter 1500 mV into PE1. Run. The program will run continuously.
The converted value $4c (1500*$ff/5000=$4c, check with your hex calculator!) appears in the ADR1 –
ADR4 registers and is transferred into VAL1 – VAL4. The screen looks like this:
Put value 2000 mV into PE1. The converted value $66 (2000*$ff/5000=$66, check with your hex
calculator!) appears in ADR1 – ADR4 and then in VAL1 – VAL4. The screen looks like this:
Dr. Victor Giurgiutiu
Page 292
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example A/D CONVERTER
Put value 2500 mV into PE1. The converted value $80 appears in ADR1 – ADR4 and then in VAL1 –
VAL4 (2500*$ff/5000=$7f with normal 1 bit convention, check with your hex calculator!. But
M68HC11 uses ½ bit accuracy convention, and hence rounds up to $80). The screen looks like this:
Put value 3500 mV into PE1. The converted value $b3 appears in ADR1 – ADR4 and then in VAL1 –
VAL4 (3500*$ff/5000=$b2 with normal 1 bit convention, check with your hex calculator!. But
M68HC11 uses ½ bit accuracy convention, and hence rounds up to $b3). The screen looks like this:
Dr. Victor Giurgiutiu
Page 293
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example A/D CONVERTER
Put value 5000 mV into PE1. The converted value $ff appears in ADR1 – ADR4 and then in VAL1 –
VAL4 (5000*$ff/5000=$ff, check with your hex calculator!). The screen looks like this:
At the end of this process, you have verified the conversion of six voltage values in the range 0 – 5 V,
and have obtained the results indicated in Table 1.
Dr. Victor Giurgiutiu
Page 294
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example A/D CONVERTER
Table 1
Voltage at pin PE1 (mV)
1000
1500
2000
2500
3500
5000
1
2
3
4
5
6
AD converted values (Hex)
$33
$4c
$66
$80
$b3
$ff
Let the program run, and move freely the slider bar on PE1. Observe the reaction time of the MCU
simulator, and how the converted values corresponding to the new simulated voltages appear first in the
ADR1 – ADR4 registers, and then into the VAL1 – VAL4 memory locations.
SINGLE CHANNEL, CONTINUOUS CONVERSION, MULT=0, SCAN=1
You will now perform continuous AD conversion in SCAN mode. This mode does not require you to
check the CCF flag. The program flowchart is showed below. Also two flowcharts are presented. The
essential code for this program is shown to the right of the flowchart. The essential code was
incorporated into the standard template asm to generate the code file Ex_AD_2.asm.
Big-picture Flowchart
Define variables
Initialize
Flowchart Details
•
•
•
•
VAL1
VAL2
VAL3
VAL4
1 byte
1 byte
1 byte
1 byte
• X=REGBAS
• AD converter
Perform A/D
conversion
• MULT = 0
• SCAN = 1
• CA=1
Store conversion
results
Store
ADR1, ADR2, ADR3, ADR4 to
VAL1, VAL2, VAL3, VAL4
LABEL2
Code
ORG
DATA
VAL1
RMB
1
VAL2
RMB
1
VAL3
RMB
1
VAL4
RMB
1
* Main program
ORG
PROGRAM
START
LDX
#REGBAS
* switch on A/D converter
BSET
OPTION,X,%10000000
* Perform a single A/D conversion on PE1
ADC
BSET
ADCTL,X,%00100001
SCAN=1, MULT=0, CA=1
* Store the four consecutive conversion values
LABEL2 LDAA
ADR1,X
STAA
VAL1
LDAA
ADR2,X
STAA
VAL2
LDAA
ADR3,X
STAA
VAL3
LDAA
ADR4,X
STAA
VAL4
BRA
LABEL2 ;BACK TO TOP
ORG
FDB
RESET
START
EXECUTION
Open and assemble Ex_AD_2.asm. Reset registers and memory. Set standard labels (Label/Set Standard
Labels). Run the program. Notice that after addressing ADCTL once at the beginning, the program now
loops only for storing the values of ADR1 – ADR4 into memory locations VAL1 – VAL4. Enter 1000
mV in PE1. The value is converted to $33 and stored in memory. The screen looks like this:
Dr. Victor Giurgiutiu
Page 295
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example A/D CONVERTER
Continue with the other values in Table 1, until you are satisfied with the functioning of the program.
MULTIPLE CHANNEL, SINGLE CONVERSION, MULT=1, SCAN=0
We will now perform AD conversion on multiple channels, single conversion. This mode is selected by
setting MULT=1 and SCAN=0 such that the conversion is performed once.
The program flowchart is shown below. Two flowchart levels are presented: the big-picture and the
details. The essential code for this program is shown to the right of the flowchart. The essential code was
incorporated into the standard template asm to generate the code file Ex_AD_3.asm.
Dr. Victor Giurgiutiu
Page 296
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Big-picture Flowchart
Define variables
Initialize
Code
Flowchart Details
•
•
•
•
VAL1
VAL2
VAL3
VAL4
1 byte
1 byte
1 byte
1 byte
• X=REGBAS
• AD converter
• MULT = 1
• SCAN = 0
• CD,CC = 0
ADC
Perform A/D
conversion
LABEL1
Y
CCF=0?
N
Store conversion
results
Example A/D CONVERTER
Store
ADR1, ADR2, ADR3, ADR4 to
VAL1, VAL2, VAL3, VAL4
ORG
DATA
VAL1
RMB
1
VAL2
RMB
1
VAL3
RMB
1
VAL4
RMB
1
* Main program
ORG
PROGRAM
START
LDX
#REGBAS
* switch on A/D converter
BSET
OPTION,X,%10000000
* Perform a single A/D conversion on PE0, PE1, PE2, PE3
ADC
LDAA
#%00010000 ; SCAN=0, MULT=1
STAA
ADCTL,X
LABEL1 LDAA
ADCTL,X
ANDA #%10000000
BEQ
LABEL1
* Store the four consecutive conversion values
LABEL2 LDAA
ADR1,X
STAA
VAL1
LDAA
ADR2,X
STAA
VAL2
LDAA
ADR3,X
STAA
VAL3
LDAA
ADR4,X
STAA
VAL4
BRA
ADC
;BACK TO TOP
ORG
RESET
FDB
STAR
EXECUTION
Open and assemble Ex_AD_3.asm. Reset registers and memory. Set standard labels (Label/Set Standard
Labels). The screen looks like this:
Dr. Victor Giurgiutiu
Page 297
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example A/D CONVERTER
Enter 2500 mV in PE0, 1000 mV in PE1, 3500 mV in PE2, 2000 mV in PE3. Run the program. The
converted value $80, $33, $b3, $66 appear in ADR1 – ADR4, and then get stored in memory locations
VAL1 – VAL4. The screen looks like this:
MULTIPLE CHANNEL, CONTINUOUS CONVERSION, MULT=1, SCAN=1
We will now perform AD conversion on multiple channels continuous conversion. This mode is selected
by setting MULT=1 and SCAN=1 such that the conversion is performed continuously.
The program flowchart is shown below. Two flowchart levels are presented: the big-picture and the
details. The essential code for this program is shown to the right of the flowchart. The essential code was
incorporated into the standard template asm to generate the code file Ex_AD_4.asm.
Dr. Victor Giurgiutiu
Page 298
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Big-picture Flowchart
Define variables
Initialize
Perform A/D
conversion
LABEL2
Store conversion
results
Code
Flowchart Details
•
•
•
•
VAL1
VAL2
VAL3
VAL4
Example A/D CONVERTER
1 byte
1 byte
1 byte
1 byte
• X=REGBAS
• AD converter
• MULT = 1
• SCAN = 1
• CD, CC = 0
Store
ADR1, ADR2, ADR3, ADR4 to
VAL1, VAL2, VAL3, VAL4
ORG
DATA
VAL1
RMB
1
VAL2
RMB
1
VAL3
RMB
1
VAL4
RMB
1
* Main program
ORG
PROGRAM
START
LDX
#REGBAS
* switch on A/D converter
BSET
OPTION,X,%10000000
* Perform a single A/D conversion on PE1
ADC
LDAA
#%00110000 ; SCAN=1, MULT=1
STAA
ADCTL,X
* Store the four consecutive conversion values
LABEL2 LDAA
ADR1,X
STAA
VAL1
LDAA
ADR2,X
STAA
VAL2
LDAA
ADR3,X
STAA
VAL3
LDAA
ADR4,X
STAA
VAL4
BRA
LABEL2 ;BACK TO TOP
ORG
FDB
RESET
START
EXECUTION
Open and assemble Ex_AD_4.asm. Reset registers and memory. Set standard labels (Label/Set Standard
Labels). Run the program. Notice that after addressing ADCTL once at the beginning, the program now
loops only for storing the values of ADR1 – ADR4 into memory locations VAL1 – VAL4. Enter 2500
mV in PE0, 1000 mV in PE1, 3500 mV in PE2, 2000 mV in PE3. The converted value $80, $33, $b3,
$66 appear in ADR1 – ADR4, and then get stored in memory locations VAL1 – VAL4. The screen
looks like this:
Dr. Victor Giurgiutiu
Page 299
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Example A/D CONVERTER
Repeat the process with other values in the four PE1 – PE4 pins. Obtain voltage values by moving the
sliding controls on these pins up and down and observing the converted values being appearing in the
ADR1 – ADR4 registers, and then into the VAL1 – VAL4 memory locations.
WHAT YOU HAVE LEARNED
In this exercise, you have:
• Review the use of A/D conversion function of the M68HC11 microcontroller.
• Illustrated 3 modes of performing A/D conversion:
¾ Single channel single conversion
¾ Single channel continuous conversion
¾ Multiple channel single conversion
¾ Multiple channel continuous conversion
Dr. Victor Giurgiutiu
Page 300
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Homework Assignments
HOMEWORK ASSIGNMENTS
Hmwk1
basic operations
Hmwk2
hex operations
Hmwk3
Programs\SR
Hmwk4a
Parallel com
Hmwk4b
Serial com
Hmwk5
Timer functions
Hmwk6
Digital Tachometer
Hmwk7
Step, sort, delay
Hmwk8
AD conversion
Homework consists of a series of exercises that can be performed individually on the THRSim11
simulator. The exercises introduce the student gradually to basic concepts, programming language, and
hex/binary conventions, branching and logic flow, intermediate level programming, MCU main
functions (Parallel ports, serial communication, timer functions, AD conversion), and advanced
programming. By doing the homework, the students build up his programming and code creation skills.
Homework assignments are shown in the table below:
Exercise 1
Exercise 2
Exercise 3-7
Exercise 8-9
Exercise 10
Ex_delay
Ex_sq_wave
Ex_buttons_bx
Ex_Serial
Ex _Timer
Ex_DC_motor_RPM
Ex_Stepper_motor
Ex_AD_converter
Dr. Victor Giurgiutiu
X
X
X
X
X
X
X
X
X
X
X
X
X
Page 301
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Homework Assignments
(This page is left intentionally blank)
Dr. Victor Giurgiutiu
Page 302
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise 1
EXERCISE 1
GENERAL NOTE
• Before starting this exercise, read Example 1 and work through it using the THRSim11 simulator.
•
Then, read this exercise. You will notice that the present exercise is practically identical with
Example 1, only that is uses different numbers.
•
'Save As' this Word file in the personalized format indicated in the course pack.
•
To complete the exercise, you will have to make it look like Example 1 by doing the following:
•
Type in text
•
Insert screen/window captures from the THRSim11 simulator.
OBJECTIVE
This simple exercise has the following objectives:
• Familiarize the user with the THRSim11 simulator environment
•
Introduce the user to the syntax and concepts of Assembly (.asm) language
•
Familiarize the user the way arithmetic operations are handled by the microcontroller
•
Instruct the user to interpret the List (.LST) file.
•
Teach the user to perform the simulation and follow the step-by-step results.
•
Introduce the LDAA, LDAB, ABA operations
•
Introduce the immediate and inherent modes
PROGRAM
You have to write a .asm program that will perform the arithmetic operation 4 + 5 = 9 using the opcode
mnemonics LDAA, LDAB, ABA.
Insert here the symbolic representation of the process: 5 points
Explain what the symbolic representation means: 5 points
CODING AND EXECUTION
Open THRSim11
Maximize THRSim11 window
Close the Commands window
Open the template.asm file and save it with the personalized name LASTNAME_Firstname_Ex1 (Please
respect the upper and lower conventions.).
Type your program in the .asm window after the line saying *Begin typing your code.
Follow Example 1 to assemble your file, tile the windows, set the breakpoint, and reset the registers.
Paste your screen capture below. 10 points
Insert below text to answer the questions:
Dr. Victor Giurgiutiu
Page 303
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
•
What is the meaning of the green highlight? 4 points
•
What is the meaning of the amber highlight? 4 points
•
At what memory address is the program counter placed? 4 points
Exercise 1
Use the Step button to step through the program.
first step
Explain:
• What happened to the green highlight 4 points
•
What is the value of the program counter 4 points
•
What is the program going to do next 4 points
second step.
Explain:
• What is the result of executing the previous instruction 4 points
•
What is the value of the program counter 4 points
•
What has changed in the CPU registers 4 points
•
What is the program going to do next 4 points
third step.
Explain:
• What is the result of executing the previous instruction 4 points
•
What is the value of the program counter 4 points
•
What has changed in the CPU registers 4 points
•
What is the program going to do next 4 points
fourth step.
Explain:
• What is the result of executing the previous instruction 4 points
•
What is the value of the program counter 4 points
•
What has changed in the CPU registers 4 points
•
What is the program going to do next 4 points
Place the program counter at the beginning of your part of the program.
Run the program again step-by-step. What have you noticed? 4 points
Run the program on automatic using the button ‘Run’. What have you noticed? 4 points
Dr. Victor Giurgiutiu
Page 304
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise 1
WHAT YOU HAVE LEARNED
In this simple exercise, you have learned quite a few things:
• Symbolic representation of the operations and their meaning
•
Writing an Assembly language code
•
Microprocessor opcode mnemonics LDAA, LDAB, ABA.
•
Immediate mode and how to invoke it by using the symbol #
•
Inherent mode
•
Open and customize THRSim11 environment
•
Assemble an .asm file
•
Tile the THRSim11 windows (remember that the tiling sequence follows the sequence in which
you accessed the files, with the most recently accessed window tiled in the left upper corner!)
•
Put a value in a memory address, e.g. when you put zeros in the registers
•
Set a break point
•
Interpret an .LST file
•
Step through the program simulation and follow the changes taking place in the ‘CPU registers’
window.
•
See how program execution is affecting accA and accB. Identify the results of the calculation, i.e.
4 + 5 = 9 makes accA to take the value A $09.
New words and concepts: Opcode, opcode mnemonic, immediate mode, Assembly language (.asm), list
file (.LST), reset, program counter (PC), break point, registers,
Dr. Victor Giurgiutiu
Page 305
8/19/2008
EMCH 367
Dr. Victor Giurgiutiu
Fundamentals of Microcontrollers
Exercise 1
Page 306
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise 2
EXERCISE 2
GENERAL NOTE
• Before starting this exercise, read Example 2 and work through it using the THRSim11 simulator.
•
Then, read this exercise. You will notice that the present exercise is practically identical with
Example 2, only that is uses different numbers.
•
'Save As' this Word file in the personalized format indicated in the course pack.
•
To complete the exercise, you will have to make it look like Example 2 by doing the following:
•
Type in text
•
Insert screen/window captures from the THRSim11 simulator.
OBJECTIVE
This simple exercise has the following objectives:
• Familiarize the user with the THRSim11 simulator environment
•
Introduce the user to the syntax and concepts of Assembly (.asm) language
•
Familiarize the user the way arithmetic operations are handled by the microcontroller
•
Instruct the user to interpret the List (.LST) file.
•
Teach the user to perform the simulation and follow the step-by-step results.
•
Introduce the LDAA, ADDA operations
•
Introduce the immediate mode
PROGRAM
You have to write a .asm program that will perform the arithmetic operation 4 + 5 = 9 using the opcode
mnemonics LDAA, ADDA.
Insert here the symbolic representation of the process: 7 points
Explain what the symbolic representation means: 7 points
CODING AND EXECUTION
Open THRSim11
Maximize THRSim11 window
Close the Commands window
Open the template.asm file and save it with the personalized name LASTNAME_Firstname_Ex2 (Please
respect the upper and lower conventions.).
Type your program in the .asm window after the line saying *Begin typing your code.
Follow Example 2 to assemble your file, tile the windows, set the breakpoint, and reset the registers.
Paste your screen capture below. 8 points
Insert below text to answer the questions:
Dr. Victor Giurgiutiu
Page 307
8/19/2008
EMCH 367
•
Fundamentals of Microcontrollers
Exercise 2
At what memory address is the program counter placed? 6 points
Use the Step button to step through the program.
first step
Explain:
• What is the value of the program counter 6 points
•
What is the program going to do next 6 points
second step.
Explain:
• What is the result of executing the previous instruction 6 points
•
What is the value of the program counter 6 points
•
What has changed in the CPU registers 6 points
•
What is the program going to do next 6 points
third step.
Explain:
• What is the result of executing the previous instruction 6 points
•
What is the value of the program counter 6 points
•
What has changed in the CPU registers 6 points
•
What is the program going to do next 6 points
Place the program counter at the beginning of your part of the program. Reset accumulator A and B.
Run the program again step-by-step. What have you noticed? 6 points
Run the program on automatic using the button ‘Run’. What have you noticed? 6 points
Dr. Victor Giurgiutiu
Page 308
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise 2
WHAT YOU HAVE LEARNED
In this simple exercise, you have learned quite a few things:
• Symbolic representation of the operations and their meaning
•
Writing an Assembly language code
•
Microprocessor opcode mnemonics LDAA, ADDA.
•
Immediate mode and how to invoke it by using the symbol #
•
Inherent mode
•
Open and customize THRSim11 environment
•
Assemble an .asm file
•
Tile the THRSim11 windows (remember that the tiling sequence follows the sequence in which
you accessed the files, with the most recently accessed window tiled in the left upper corner!)
•
Put a value in a memory address, e.g. when you put zeros in the registers
•
Set a break point
•
Interpret an .LST file
•
Step through the program simulation and follow the changes taking place in the ‘CPU registers’
window.
•
See how program execution is affecting accA and accB. Identify the results of the calculation, i.e.
4 + 5 = 9 makes accA to take the value A $09.
•
New words and concepts: Opcode, opcode mnemonic, immediate mode, Assembly language
(.asm), list file (.LST), reset, program counter (PC), break point, registers, .
Dr. Victor Giurgiutiu
Page 309
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise 2
(This page is left intentionally blank)
Dr. Victor Giurgiutiu
Page 310
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercises 3-7
EXERCISE 3-7
GENERAL NOTE
• Before starting this exercise, read Examples 3, 4, 5, 6, 7 and work through them using the
THRSim11 simulator.
•
Then, read this exercise. You will notice that the present exercise is practically identical with these
examples, only that is uses different numbers.
•
'Save As' this Word file in the personalized format indicated in the course pack.
•
To complete the exercise, you will have to do the following:
•
Type in text
The exercise has 6 sections. Do them in sequence.
OBJECTIVE
This exercise has the following objectives:
• Review decimal numbers and decimal symbols: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
•
Review the decimal carry concept, i.e., when a result is outside the 0 – 9 range
•
Review 2-digit decimal arithmetic with carry
•
Prepare the ground for hex arithmetic
•
Introduce hex numbers and hex symbols: a, b, c, d, e, f
•
Introduce2-digit hex arithmetic
•
Introduce 2-digit hex carry as a repeated incrementation
•
Introduce 2-digit hex arithmetic with carry
•
Introduce the ‘lost carry’ concept
•
Introduce MSB carry
•
Introduce single precision and double precision register concepts
Note: To facilitate understanding, the same numbers are used in both decimal and the hex cases.
Dr. Victor Giurgiutiu
Page 311
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercises 3-7
PROGRAM
You have to write .asm code to perform the arithmetic operations listed below:
• 8 + 7 = 15 (decimal) using the opcode mnemonics LDAA, LDAB, ABA
• $08 + $07 = $0f (hex) using the opcode mnemonics LDAA, LDAB, ABA
• 9 + 9 = 18 (decimal) using the opcode mnemonics LDAA, LDAB, ABA
• $09 + $09 = $12 (hex half carry) using the opcode mnemonics LDAA, ADDA
• $09 + $09 = $12 (hex) using the opcode mnemonics LDAA, LDAB, ABA
• 12 + 29 = 41 (decimal) using the opcode mnemonics LDAA, LDAB, ABA
• $0c + $1d = $29 (hex) using the opcode mnemonics LDAA, LDAB, ABA
• $ff + $01 = $00 (MSB carry) using the opcode mnemonics LDAA, ADDA
• 255 + 1 = 0 (decimal equivalent of a MSB carry) using the opcode mnemonics LDAA, ADDA
CODING AND EXECUTION
Open THRSim11. Maximize THRSim11 window. Close the Commands window.
Open the template.asm file and save it with the personalized name LASTNAME_Firstname_Ex3-7
(Please respect the upper and lower conventions.).
Type your program in the .asm window after the line saying *Begin typing your code.
Assemble your file, tile the windows, set the breakpoint, and reset the registers.
Paste the screen capture here. 1 point(s)
SECTION: 8 + 7 = 15 (DECIMAL) USING THE OPCODE MNEMONICS LDAA, LDAB, ABA
Reset accA and accB by typing zero into them. Set the display option of accA and accB to Decimal.
Use the Step button to step through this section of your program.
Explain:
• Which are the MSD and the LSD in the result 15? What do they represent? 3 point(s)
•
What is a decimal carry 2 point(s)
•
Did a decimal carry happen or not? Why? 3 point(s)
SECTION: $08 + $07 = $0F (HEX) USING THE OPCODE MNEMONICS LDAA, LDAB, ABA
Reset accA and accB by typing zero into them. Set the display option of accA and accB to hex.
Use the Step button to step through this section of your program.
Explain:
• How many digits are used to represent the number eight in hex on the simulator? Why? 3 point(s)
•
What is the meaning of concatenation? 2 point(s)
Dr. Victor Giurgiutiu
Page 312
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercises 3-7
•
Which registers are concatenated and what is the result of the concatenation? 2 point(s)
•
What was the content of accD after you loaded $08 in accA? Why? 3 point(s)
•
What was the content of accD after you loaded $08 in accA and $07 in accB? Why?
2 point(s)
•
What is a hex carry 2 point(s)
•
Did a hex carry happen or not? Why? 2 point(s)
SECTION: 9 + 9 = 18 (DECIMAL) USING THE OPCODE MNEMONICS LDAA, LDAB, ABA
Reset accA and accB by typing zero into them. Set the display option of accA and accB to Decimal.
Use the Step button to step through this section of your program.
Explain:
• What is a decimal carry 2 point(s)
•
Did a decimal carry happen or not? Why? 2 point(s)
SECTION: $09 + $09 = $12 (HEX) USING THE OPCODE MNEMONICS LDAA, ADDA,
Part I: start with $09 in accA and increment by 1 using the ADDA opcode
Reset accA and accB by typing zero into them. Set the display option of accA and accB to hex.
Use the Step button to step through this section of your program until the first has been executed.
Use the Step button to step further through this section of your program until accA has reached the value
$0f.
Use the Step button to do an additional step through this section of your program. AccA should change
to $10.
Use the Step button to do further step through this section of your program until the operation $09 + $09
= $12 using is completed.
Explain:
• Did a hex carry happen or not? Why? 3 point(s)
•
After how many executions has the carry happen? 2 point(s)
•
What was the value of accA before the hex carry? 2 point(s)
•
What was the value of accA after the hex carry? 2 point(s)
•
What was the final value of accA? 2 point(s)
SECTION: $09 + $09 = $12 (HEX) USING THE OPCODE MNEMONICS LDAA, LDAB, ABA
Part II: start with $09 in accA and $09 in accB. Do the addition using the ABA opcode
Reset accA and accB by typing zero into them. Set the display option of accA and accB to hex.
Use the Step button to step through this section of your program.
Explain:
• Did a hex carry happen or not? Why? 3 point(s)
•
What is the hex result of your operation? 2 point(s)
Dr. Victor Giurgiutiu
Page 313
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
•
What is the MSD of the result? What does is signify? 3 point(s)
•
What is the LSD of the result? What does it signify? 3 point(s)
•
What is the decimal equivalent of the result? 3 point(s)
Exercises 3-7
SECTION: 12 + 29 = 41 (DECIMAL) USING THE OPCODE MNEMONICS LDAA, LDAB, ABA
Reset accA and accB by typing zero into them. Set the display option of accA and accB to Decimal.
Use the Step button to step through this section of your program.
Explain:
• Did a decimal carry happen or not? Why? 3 point(s)
•
What is the LSD in the result? 2 point(s)
•
What is the MSD in the result? 2 point(s)
SECTION: $0C + $1D = $29 (HEX) USING THE OPCODE MNEMONICS LDAA, LDAB, ABA
Reset accA and accB by typing zero into them. Set the display option of accA and accB to hex.
Use the Step button to step through this section of your program.
Explain:
• Did a hex carry happen or not? Why? 2 point(s)
•
What is the hex result of your operation? 2 point(s)
•
What is the LSD of the result? What does it signify? 3 point(s)
•
What is the MSD of the result? What does is signify? 3 point(s)
•
What is the decimal equivalent of the result? 3 point(s)
$FF + $01 = $00 (HEX) USING THE OPCODE MNEMONICS LDAA, ADDA
Reset accA and accB by typing zero into them. Set the display option of accA and accB to hex.
Use the Step button to step through this section of your program.
Explain:
• What is the result of your operation? 2 point(s)
•
Did a hex carry happen or not? Why? 2 point(s)
•
What type of carry was this? 2 point(s)
•
What is the name of the event that happened? 2 point(s)
•
How do you explain what happened? 3 point(s)
255 + 1 = 0 (DECIMAL) USING THE OPCODE MNEMONICS LDAA, ADDA
Reset accA and accB by typing zero into them. Set the display option of accA and accB to decimal.
Use the Step button to step through this section of your program.
Explain:
• What is the result of your operation? 3 point(s)
•
Did a decimal carry happen or not? Why? 3 point(s)
•
Did a hex carry happen or not? Why? 3 point(s)
Dr. Victor Giurgiutiu
Page 314
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
•
What type of carry was this? 3 point(s)
•
How do you explain what happened? 3 point(s)
Dr. Victor Giurgiutiu
Page 315
Exercises 3-7
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercises 3-7
WHAT YOU HAVE LEARNED
In this exercise, you have learned:
• In decimal arithmetic, the base of the number system is ten. Ten independent symbols exist for
representing the first ten numbers in the decimal system: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. These symbols
are called digits.
•
The greatest decimal number that can be represented with a single decimal symbol is nine.
•
Decimal numbers greater than nine are represented with two or more digits. For example,
number fifteen is represented as 15, i.e. with two digits.
•
When the result of adding two decimal numbers is greater than nine, a carry takes place.
•
The symbol furthest to the left is called the most significant digit (MSD). In number 15, the most
significant digit is 1. It signifies the number of tens contained in the number. In our case, we
have only one ten, since 1 x ten = ten
•
The symbol furthest to the right is called the least significant digit (LSD). In number 15, the least
significant digit is 5. It signifies the number of units contained in the number. In our case, we
have five units, since 5 x units = five.
•
A complete number is assembled by adding the contribution of all digits, from LSD through
MSD. In number 15 there are two digits, LSD = 5, MSD = 1. The complete number is 1 x ten + 5
x units = ten + five = fifteen.
•
In decimal arithmetic, when the result of an addition is greater than nine, a carry occurs.
•
In hex arithmetic, the base of the number system is sixteen (hexadecimal). Sixteen independent
symbols exist for representing the first sixteen numbers in the hex system: 0, 1, 2, 3, 4, 5, 6, 7, 8,
9, a, b, c, d, e, f.
•
The greatest hex number that can be represented with a single hex symbol is fifteen.
•
In single-precision 8-bit arithmetic, hex numbers are always represented with two digits, even if
the most significant digit (MSD) is zero. For example, during this exercise, the single-precision
accA and accB took values $08 and $07. After addition, accA became $0f.
•
In double precision 8-bit arithmetic, hex numbers are always represented with four digits, even if
the more significant ones are zero.
•
In hex arithmetic, single-precision numbers can be built into double precision numbers through
concatenation (i.e., by putting them side by side). For example, when accA was $08 and accB
was $07, accD, which is simply accA:accB, was $0807. This was not so in decimal arithmetic
(check this out by looking into the part of your program performing the decimal addition 8 + 7,
with accA, accB and accD set to decimal display).
•
In hex arithmetic, the symbol furthest to the left is also called the most significant digit (MSD).
In number $1d, the most significant digit is 1. It signifies the number of sixteens contained in the
number. In our case, we have only one sixteen, since 1 x sixteen = sixteen
•
In hex arithmetic, the symbol furthest to the right is called the least significant digit (LSD). In
number $1d, the least significant digit is d. It signifies the number of units contained in the
Dr. Victor Giurgiutiu
Page 316
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercises 3-7
number. In our case, we have thirteen units, since the hex number d represents the number
thirteen, and d x units =thirteen.
•
The hex number $1d has the value twenty-nine, since sixteen plus thirteen makes twenty-nine.
•
Addition can be viewed as a repeated incrementation. The number $09 was loaded in accA and
subsequently incremented nine times.
•
After the first six increments, from $09 to $0a, $0b, $0c, $0d, $0d, $0e, and $0f, the hex
symbols in the MSD were exhausted.
•
The next increment (the seventh) enacted a carry such that the MSD was increased from
0 to 1, while the first placeholder (LSD) was reset to 0. At this stage, the value in accA
was $10. (This is by far different from the decimal 10).
•
The next and final increment (the eighth) incremented the LSD and the number in accA
moved from $10 to $11.
•
You saw the direct application of the hex addition using accA and accB, such that $09 + $08 =
$12.
•
You should note that the result $12 is the hex equivalent of the decimal result 18 (recall, 9 + 8 =
17).
•
You have observed an MSB carry. In our case, the machine has 2-digit hex precision, hence it
cannot store numbers with more than two digits. However, if to the number $ff we add $01, the
result should be $100 (Proof: $0ff + $001 = $100). Since we cannot store more than 2 hex digits,
the leading 1 is lost (‘lost carry’). The phenomenon is called MSB carry where MSB refers to the
most significant bit from binary representation.
•
New words and notations: digits, most significant digit (MSD), least significant digit (LSD), hex
arithmetic, hexadecimal, single precision, double precision, 8-bit arithmetic, concatenation,
addition with carry, hex arithmetic with carry, increment, placeholder, ‘lost carry’, most
significant bit (MSB), MSB carry.
Dr. Victor Giurgiutiu
Page 317
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercises 8-9
EXERCISE 8-9
GENERAL NOTE
• Before starting this exercise, read Examples 8, 9 and work through them using the THRSim11
simulator.
•
Then, read this exercise. You will notice that the present exercise is practically identical with these
examples, only that is uses different numbers, at times.
•
'Save As' this Word file in the personalized format indicated in the course pack.
•
To complete the exercise, you will have to do the following:
•
Type in text
•
Insert screen/window captures from the THRSim11 simulator.
The exercise has 11 sections. Do them in sequence.
OBJECTIVE
This exercise has the following objectives:
• Review decrementation
•
Review decimal borrow concepts using decrementation
•
Introduce hex borrow using decrementation
•
Introduce 2’s complement negative hex numbers as decrementation of zero with free borrow
•
Show the decimal equivalent of the 8-bit decrementation of zero
•
Introduce hex subtraction as a repeated decrementation
•
Introduce hex subtraction with negative results using the free borrow concept.
•
Show the decimal equivalent of hex subtraction with negative results using free borrow.
Note: To facilitate understanding, the same numbers are used in both decimal and the hex cases.
PROGRAM
You have to write .asm code to perform the arithmetic operations listed below:
• 8 – 1 = 7 (decimal) using the opcode mnemonics LDAA, SUBA
•
$08 - $01 = $07 (hex) using the opcode mnemonics LDAA, SUBA
•
20 – 1 = 19 (decimal) using the opcode mnemonics LDAA, SUBA
•
$20 - $01 = $1f (hex) using the opcode mnemonics LDAA, SUBA
•
$00 - $01 = $ff (hex) using the opcode mnemonics LDAA, SUBA
•
0 - 1 = 255 (decimal equivalent of 8-bit hex arithmetic) using the opcode mnemonics LDAA,
SUBA
•
$0f - $07 = $08 (hex) using the opcode mnemonics LDAA, LDAB, SBA
•
$00 - $07 = $f9 (hex) using the opcode mnemonics LDAA, LDAB, SBA
Dr. Victor Giurgiutiu
Page 318
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercises 8-9
•
0 - 7 = 249 (decimal equivalent of 8-bit hex arithmetic) using the opcode mnemonics LDAA,
LDAB, SBA
•
$0f - $2b = $e4 (hex) using the opcode mnemonics LDAA, LDAB, SBA
•
15 - 43 = 228 (decimal equivalent of 8-bit hex arithmetic) using the opcode mnemonics LDAA,
LDAB, SBA
CODING AND EXECUTION
Open THRSim11. Maximize THRSim11 window. Close the Commands window.
Open the template.asm file and save it with the personalized name LASTNAME_Firstname_Ex8-9
(Please respect the upper and lower conventions.).
Type your program in the .asm window after the line saying *Begin typing your code.
Assemble your file, tile the windows, set the breakpoint, and reset the registers.
Paste your screen capture below. 4 point(s)
SECTION: 8 - 1 = 7 (DECIMAL) USING THE OPCODE MNEMONICS LDAA, SUBA
Reset accA and accB by typing zero into them. Set the display option of accA to decimal.
Use the Step button to step through this section of your program. When the operation has been
completed, capture your screen.
Paste the screen capture here. 4 point(s)
Explain:
• What is a decimal borrow? 4 point(s)
•
Did a decimal borrow happen or not? Why? 4 point(s)
SECTION: $08 - $01 = $07 (HEX) USING THE OPCODE MNEMONICS LDAA, SUBA
Reset accA and accB by typing zero into them. Set the display option of accA and accB to hex.
Use the Step button to step through this section of your program.
Explain:
• What is a hex borrow? 4 point(s)
•
Did a hex borrow happen or not? Why? 4 point(s)
SECTION: 20 - 1 = 19 (DECIMAL) USING THE OPCODE MNEMONICS LDAA, SUBA
Reset accA and accB by typing zero into them. Set the display option of accA and accB to decimal.
Use the Step button to step through this section of your program.
Explain:
Dr. Victor Giurgiutiu
Page 319
8/19/2008
EMCH 367
•
Fundamentals of Microcontrollers
Exercises 8-9
Did a decimal borrow happen or not? Why? 4 point(s)
SECTION: $20 - $01 = $1F (HEX) USING THE OPCODE MNEMONICS LDAA, SUBA
Reset accA and accB by typing zero into them. Set the display option of accA and accB to hex.
Use the Step button to step through this section of your program.
Explain:
• What is a hex borrow? 4 point(s)
•
Did a hex borrow happen or not? Why? 4 point(s)
•
Do the operations 20 – 1 and $20 - $01 give the same result or not? Why? 4 point(s)
SECTION: $00 - $01 = $FF (HEX) USING THE OPCODE MNEMONICS LDAA, SUBA
Reset accA and accB by typing zero into them. Set the display option of accA and accB to hex.
Use the Step button to step through this section of your program.
Explain:
• Did a hex borrow happen or not? Why? 4 point(s)
SECTION: 0 - 1 = 255 (DECIMAL EQUIVALENT OF 8-BIT HEX ARITHMETIC) USING THE OPCODE
MNEMONICS LDAA, SUBA
Reset accA and accB by typing zero into them. Set the display option of accA and accB to decimal.
Use the Step button to step through this section of your program.
Explain:
• Did a borrow happen or not? Why? 4 point(s)
•
What type of borrow happened? 4 point(s)
•
Why did you get the answer 255? 4 point(s)
SECTION: $0F - $07 = $08 (HEX) USING THE OPCODE MNEMONICS LDAA, LDAB, SBA
Reset accA and accB by typing zero into them. Set the display option of accA and accB to hex.
Use the Step button to step through this section of your program.
Explain:
• Did a hex borrow happen or not? 4 point(s)
•
What type of borrow was it? 4 point(s)
Dr. Victor Giurgiutiu
Page 320
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercises 8-9
SECTION: $00 - $07 = $F9 (HEX) USING THE OPCODE MNEMONICS LDAA, LDAB, SBA
Reset accA and accB by typing zero into them. Set the display option of accA and accB to hex.
Use the Step button to step through this section of your program.
Explain:
• Did a hex borrow happen or not? 4 point(s)
•
What type of borrow was it? 4 point(s)
SECTION: 0 - 7 = 249 (DECIMAL EQUIVALENT OF 8-BIT HEX ARITHMETIC) USING THE OPCODE
MNEMONICS LDAA, LDAB, SBA
Reset accA and accB by typing zero into them. Set the display option of accA and accB to decimal.
Use the Step button to step through this section of your program.
Explain:
• Why did you get the answer 249? 6 point(s)
SECTION: $0F - $2B = $E4 (HEX) USING THE OPCODE MNEMONICS LDAA, LDAB, SBA
Reset accA and accB by typing zero into them. Set the display option of accA and accB to hex.
Use the Step button to step through this section of your program.
Explain:
• Did a hex borrow happen or not? 4 point(s)
•
What type of borrow was it? 4 point(s)
SECTION: 15 - 43 = 228 (DECIMAL EQUIVALENT OF 8-BIT HEX ARITHMETIC) USING THE OPCODE
MNEMONICS LDAA, LDAB, SBA
Reset accA and accB by typing zero into them. Set the display option of accA and accB to decimal.
Use the Step button to step through this section of your program.
Explain:
• Why did you get the answer 228? 6 point(s)
USE CALCULATOR TO OBTAIN HEX NEGATIVE NUMBERS OF –56 AND –120
Insert your answers here:
-56: _________;
-120: ____________ 8 point(s)
Dr. Victor Giurgiutiu
Page 321
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercises 8-9
WHAT YOU HAVE LEARNED
In this exercise, you have learned:
• In decimal arithmetic, decrementation results in the value of the number being reduced by one
unit
•
In hex arithmetic, decrementation has the same meaning as in decimal arithmetic: the value of
the number is being reduced by one unit
•
For a 2-digit decimal number with the LSD zero, e.g., 20, decrementation required a borrow to
be performed from the MSD into the LSD. As a result, we could perform the decrementation and
the result was 19. The result showed that, because of the borrow, the MSD decreased from 2 to 1,
and the LSD increase from 0 to 9, i.e., from the bottom of the decimal symbols sequence to the
top of the sequence.
•
For a 2-digit hex number with the LSD zero, e.g., $20, decrementation also required a borrow to
be performed from the MSD into the LSD. As a result, we could perform the decrementation and
the result was $1f. The result showed that, because of the borrow, the MSD decreased from 2 to
1, and the LSD increase from 0 to f, i.e., from the bottom of the hex symbols sequence to the top
of the sequence.
•
Note the difference between 20 (twenty) and $20 (hex two-zero = decimal thirty-two).
•
For a 2-digit hex number with zero LSD but also zero MSD, decrementation is still possible
within the ‘free-borrow’ concept. The free-borrow concept, which is implemented on most
microcontrollers, allows to freely borrow a one from the next higher digit beyond the precision
of the machine.
•
In our case, the machine has 2-digit hex precision, hence the next higher digit beyond the
machine precision is a third digit. In other word, if we extend the range to 3 hex digits and write
$ff as $0ff, incrementing by one yield $0ff + $001 = $100. Conversely, decrementing $100 by
one yields $0ff, i.e., $ff.
•
Subtraction using SBA opcode mnemonic happened as expected, in both decimal and hex
arithmetic, as long as the minuend is greater than the subtrahend (e.g., 15-7=8, $0f-$07=$08).
•
When the minuend is less than the subtrahend, the result of the subtraction operation is
calculated using a free borrow (e.g., $0f-$2b=$00f+$100-$02b=$0e4=$e4).
•
Even if decimal display of numbers is used, the calculations and the free borrow still happen in
hex (e.g., 15-43=15+256-43=228, where 256=$100).
•
New words and notations: free borrow, minuend, subtrahend.
Dr. Victor Giurgiutiu
Page 322
8/19/2008
EMCH 367
Dr. Victor Giurgiutiu
Fundamentals of Microcontrollers
Page 323
Exercises 8-9
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise 10
EXERCISE 10
GENERAL NOTE
• Before starting this exercise, read Example 10 and work through it using the THRSim11 simulator.
•
Then, read this exercise. You will notice that the present exercise is practically identical with this
example, only that is uses different numbers, at times.
•
'Save As' this Word file in the personalized format indicated in the course pack.
•
To complete the exercise, you will have to do the following:
•
Type in text
•
Insert screen/window captures from the THRSim11 simulator.
The exercise has 15 sections. Do them in sequence.
OBJECTIVE
This exercise has the following objectives:
• Introduce 8-bit binary numbers
•
Introduce connection between 8-bit binary numbers and 2-digit hex numbers.
•
Introduce 8-bit binary arithmetic
•
Introduce binary 8-bit logic
PROGRAM
You have to write .asm code to do the following:
i) Represent numbers one, two, three, four, five, six, seven, eight, nine, ten, eleven, twelve, thirteen,
fourteen, fifteen, sixteen, seventeen in decimal, binary, and hex
ii) Perform 5 + 4 = 9 in binary and hex using LDAA, LDAB, ABA
iii) Perform 15 – 7 = 8 in binary and hex using LDAA, LDAB, SBA
iv) Perform $1f + $01 = $ in binary and hex using LDAA, ADDA (bit 3 carry)
v) Perform $20 -$01 = $ in binary and hex using LDAA, SUBA
vi) Perform $ff + $01 = $ in binary and hex using LDAA, ADDA (MSB carry)
vii) Perform $00 - $01 = $ in binary and hex using LDAA, SUBA
viii) 0 AND 1 =
using LDAA, ANDA
ix) 0 OR 1 =
using LDAA, ORAA
x) 0 XOR 1 =
using LDAA, EORA
xi) 1 OR 1 =
using LDAA, ORAA
xii) 1 XOR 1 =
using LDAA, EORA
xiii) %00000000 NAND %11111111 = %
using LDAA, ANDA, COMA
xiv) %11111111 NOR %00000000 = %
using LDAA, ORAA, COMA
Dr. Victor Giurgiutiu
Page 324
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
xv) %10101110 AND %00001000 = %
Exercise 10
using LDAA, ANDA (masking)
(Note: the NAND and NOR instructions do not exist in the MC6811 instruction set, but can be obtained
by using the COM instruction after the AND and OR instructions.)
CODING AND EXECUTION
Open THRSim11. Maximize THRSim11 window. Close the Commands window. Open the
template.asm file and save it with the personalized name LASTNAME_Firstname_Ex10 (Please respect
the upper and lower conventions.). Type your program in the .asm window after the line saying *Begin
typing your code. Assemble your file, tile the windows, set the breakpoint, and reset the registers.
SECTION: REPRESENT NUMBERS ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN,
ELEVEN, TWELVE, THIRTEEN, FOURTEEN, FIFTEEN, SIXTEEN, SEVENTEEN IN DECIMAL, BINARY, AND HEX
Reset accA. Place PC at the beginning of section i) of your code. Set display of accA to binary.
Perform first step.
Explain what happened during this operation. 3 point(s)
Change the display option of accA to hex.
Explain what happened. 3 point(s)
Change the display option of accA to decimal.
Explain what happened. 3 point(s)
Perform the rest of the steps.
Step through the rest of the operations, incrementing each time accA by one. At each step, observe the
binary representation, then switch to hex, then to decimal, and back to binary. When incrementing,
observe how the binary bits either increment from 0 to 1, or increment from 1 to 0 with a binary carry to
the left. While binary numbers experience a carry at each step, the decimal and hex numbers do not.
Watch out for decimal and hex carries! You will only need to capture and paste below those
situations when a decimal or a hex carry happened.
Paste here your screen capture when a decimal carry happened. 5 point(s)
Type in the binary and hex equivalents of the number in
accA:_________________________________________3 point(s)
Explain what happened. 2 point(s)
Paste here your screen capture when a hex carry happened. 5 point(s)
Type in the binary and decimal equivalents of the number in accA:
_____________________________________ 2 point(s)
Explain what happened. 2 point(s)
Dr. Victor Giurgiutiu
Page 325
8/19/2008
EMCH 367
SECTION: PERFORM 5 + 4 =
Fundamentals of Microcontrollers
Exercise 10
IN BINARY AND HEX USING LDAA, LDAB, ABA
Perform the operation.
5 + 4 =_____________ 3 point(s)
Type in the binary and hex equivalents of the results:
%________________________________$_________ 2 point(s)
SECTION: PERFORM 15 – 7 =
IN BINARY AND HEX USING LDAA, LDAB, SBA
Perform the operation.
15 – 7 =_____________3 point(s)
Type in the binary and hex equivalents of the results:
%________________________________$_________ 2 point(s)
SECTION: PERFORM $1F + $01 = $
IN BINARY AND HEX USING LDAA, ADDA (BIT 3 CARRY)
Fill in the blank with the result evaluated by hand.
$1f + $01 = $_______3 point(s)
Perform the operation in the THRSIM11 simulator. Type in the binary and hex equivalents of the results:
%________________________________2 point(s)
$_________ 2 point(s)
SECTION: PERFORM $20 -$01 = $
IN BINARY AND HEX USING LDAA, SUBA
Fill in the blank with the result evaluated by hand.
$20 -$01 = $________3 point(s)
Perform the operation in the THRSIM11 simulator. Type in the binary and hex equivalents of the results:
%________________________________2 point(s)
$_________ 2 point(s)
SECTION: PERFORM $FF + $01 = $
IN BINARY AND HEX USING LDAA, ADDA (MSB CARRY)
Fill in the blank with the result evaluated by hand.
$ff + $01 = $_______3 point(s)
Perform the operation in the THRSIM11 simulator. Type in the binary and hex equivalents of the results:
%______________________________________2 point(s)
$_________ 2 point(s)
SECTION: PERFORM $00 - $01 = $
Dr. Victor Giurgiutiu
IN BINARY AND HEX USING LDAA, SUBA
Page 326
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise 10
Fill in the blank with the result evaluated by hand.
$00 - $01 = $_______3 point(s)
Perform the operation in the THRSIM11 simulator. Type in the binary and hex equivalents of the results:
%______________________________________2 point(s)
$_________ 2 point(s)
SECTION: 0 AND 1 =
USING LDAA, ANDA
Fill in the blank with the result evaluated by hand.
0 AND 1 = _________4 point(s)
Perform the operation in the THRSIM11 simulator.
SECTION: 0 OR 1 =
USING LDAA, ORAA
Fill in the blank with the result evaluated by hand.
0 OR 1 =___________4 point(s)
Perform the operation in the THRSIM11 simulator.
SECTION: 0 XOR 1 =
USING LDAA, EORA
Fill in the blank with the result evaluated by hand.
0 XOR 1 =__________4 point(s)
Perform the operation in the THRSIM11 simulator.
SECTION: 1 OR 1 =
USING LDAA, ORAA
Fill in the blank with the result evaluated by hand.
1 OR 1 =__________4 point(s)
Perform the operation in the THRSIM11 simulator.
SECTION: 1 XOR 1 =
USING LDAA, EORA
Fill in the blank with the result evaluated by hand.
1 XOR 1 =__________4 point(s)
Perform the operation in the THRSIM11 simulator.
SECTION: %00000000 NAND %11111111 = %
USING LDAA, ANDA, COMA
Fill in the blank with the result evaluated by hand.
%00000000 NAND %11111111 = %____________________4 point(s)
Perform the operation in the THRSIM11 simulator.
Dr. Victor Giurgiutiu
Page 327
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
SECTION: %11111111 NOR %00000000 = %
Exercise 10
USING LDAA, ORAA, COMA
Fill in the blank with the result evaluated by hand.
%11111111 NOR %00000000 = %____________________4 point(s)
Perform the operation in the THRSIM11 simulator.
SECTION: %10101110 AND %00001000 = %
USING LDAA, ANDA (MASKING)
Fill in the blank with the result evaluated by hand.
%10101110 AND %00001000 = %____________________4 point(s)
Perform the operation in the THRSIM11 simulator.
WHAT YOU HAVE LEARNED
In this exercise, you have learned:
• The 8-bit binary numbers
•
The connection between 8-bit binary numbers and 2-digit hex numbers.
•
The 8-bit binary arithmetic
•
The 1-bit and 8-bit binary logic
•
The fact that logic operations are performed bit-by-bit
•
Boolean inversion using the complement opcode (e.g., COMA).
•
Masking, i.e., the selection of bits using masks
•
New words and notations: 8-bit binary arithmetic, 8-bit binary logic; complement opcode;
masking, flags.
Dr. Victor Giurgiutiu
Page 328
8/19/2008
EMCH 367
Dr. Victor Giurgiutiu
Fundamentals of Microcontrollers
Page 329
Exercise 10
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise DELAY
EXERCISE DELAY
OBJECTIVE
This exercise has the following objectives:
• Review the use of branching
•
Illustrate a delay (wait) program
•
Demonstrate a flowchart and its relation with the program tasks list and program code
•
Demonstrate the calculation of clock cycles from the clock cycles of each operation
•
Demonstrate the calculation of MCU time from the clock cycles
PROGRAM
The program does the following:
(i) Define variable DELAY at
$0000
(ii) Load DELAY into accB
(iii) Decrease accB by 1
(iv) Branch back to (iii) if the
result is higher than zero
(unsigned >0)
(vi) SWI
Flowchart 5 point(s)
Code 4 point(s)
FLOWCHART
Draw a flowchart for the program in the space provided above.
CODING
Type the essential code for this program in the space provided above. Code the program in to the
personalized file LASTNAME_Firstname_delay.asm using the standard template.
EXECUTION
Open THRSim11. Close the Commands window. Open the memory window. Open and assemble
LASTNAME_Firstname_delay.asm. Tile windows, set breakpoint, and reset registers. Set standard
labels (Label/Set Standard Labels). Set display of memory DELAY to decimal. Optimize the look of
your screen.
x) Put 3 into variable DELAY by modifying it’s corresponding value in the memory list.
Insert your screen: 1 point(s)
Note the value of “Clock Cycles”. .
Dr. Victor Giurgiutiu
Page 330
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise DELAY
y) Step to the subroutine and after each step observe the number of cycles taken by each
operation. Enter these values in Table 1. Look up the opcodes in the Motorola
MC68HC11 Programming Reference Guide pocketbook and verify the numbers in
the ‘Cycles’ column of the Instructions table with the numbers that you entered in
Table 1. Put a check mark here ____ when you did so. Did it agree? ___Y;
____N
1 point(s)
z) After each pass through LABEL1, accB is decremented by one. When reaching the
branch instruction BHI, the program branches back to LABEL1 if the result of the
decrementation is still higher than zero. After the first pass, accB was decremented
from 3 to 2. The screen looks like this: (Insert your screen) 1 point(s)
Note that clock cycles counter shows 12. This number is made up as follows: 2+2+3+2+3=12. During
this pass, accB was decremented from $03 to $02. These are illustrated in the table below:
Table 11 Cycles count table, actual and cumulative, opcode by opcode, after pass 1.
NOP
????
????
??????
????
BHI
????
SWI
AccB end
cumulative
Actual
cumulative
Actual
cumulative
2
Actual
cumulative
2
cumulative
Actual
AccB start
Actual
Pass 1
$03
START
$02
After the second pass, paste your screen below: 1 point(s)
Note that value of the clock cycles counter. Explain how is this number made up.
Fill in the entries for Pass 1 and 2 in the table below. 28 point(s)
Table 2
Cycles count table, actual and cumulative, opcode by opcode, after pass 2.
Pass 1
Pass 2
AccB start
START
NOP
????
LABEL1 ????
BHI
Dr. Victor Giurgiutiu
????
????
Page 331
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise DELAY
SWI
AccB end
Repeat for the other passes, until the program exits the loop and reaches SWI. Each time:
Paste your screen at the end of the pass. 1 point(s)
Paste an updated table 28 point(s)
Explain what happens 4 point(s)
Derive a formula for calculating the number of cycles. Write the formula below 8 point(s)
N_cycles=??+DELAY*?? =
a) Reset the simulator. Run the program by pressing the Run button. The program stops when accB
has been reduced to zero. Record the values shown on the task bar:
Simulated time = ________ sec = _______ micro-sec 2 point(s)
Clock Cycles = ________
2 point(s)
b) Reset the simulator. Put value 20 in DELAY.
c) Predict the number of cycles with your formula N_cycles=??+DELAY*??=?+???*??=???
2 point(s).
Calculate the time D_t=N_cycles*0.5=??*0.5=??? micro-sec=???????? sec.
2 point(s)
d) Run the program. Insert screen capture when it stops: 1 point(s)
e) Record the values shown on the task bar:
Simulated time = ________ sec = _______ micro-sec 3 point(s)
Clock Cycles = ________
3 point(s)
Do these values agree with your predictions? ___Y ____N 3 point(s)
Dr. Victor Giurgiutiu
Page 332
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise DELAY
WHAT YOU HAVE LEARNED
In this example, you have learned:
• The use of variables
•
The use of labels and branching
•
The flowchart and its relation with the program tasks list and program code
•
Calculation of clock cycles from the clock cycles of each operation
•
Calculation of MCU time from the clock cycles knowing that each clock cycle lasts 0.5 microsec
•
How to read clock cycles and simulated time in the simulator window
•
How to write a delay (wait) program
•
New words and notations: variables, labels, branch, clock cycles, MCU time.
Dr. Victor Giurgiutiu
Page 333
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise SQUARE WAVE
EXERCISE SQUARE WAVE
OBJECTIVE
This exercise has the following objectives:
• Review the use parallel ports
•
Illustrate the generation of a square wave using Port B output and a waiting sequence
•
Demonstrate the use of a subroutine to shorten the length of a program
•
Examine the relation between displayed simulation time and clock cycles in THRSim11 simulator
PROGRAMS
This exercise uses two programs that produce the same output – the generation of a square wave of
programmable wavelength. The wavelength is programmed using the variable DELAY. The square-wave
electrical signal is output through first pin of Port B, i.e., pin PB0. The difference between the first and
second program consist in the use of a subroutine. The use of a subroutine compresses the code and
shortens the total length of the program.
PROGRAM SQ_WAV1
Instructions
Flowchart 6 point(s)
Code 6 point(s)
Define variable DELAY at $0000
Load REGBAS in reg. X
Send low signal through PB0
Load %00000000 in accA
Store accA in Port B
Load DELAY into accB
Decrease accB in a loop until zero
Send high signal through PB0
Load %???????? in accA
Store accA in Port B
Load DELAY into accB
Decrease accB in a loop until zero
Branch back to (iii)
SWI
FLOWCHART
Draw a flowchart for the program in the space provided.
CODING
Type the essential code for this program in the space provided above. Code the program in the
THRSim11 using the standard template and save it in the personalized file
LASTNAME_Firstname_Sq_wav1.asm. Store it on floppy disk.
Dr. Victor Giurgiutiu
Page 334
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise SQUARE WAVE
EXECUTION
Open THRSim11. Close the Commands window. Open memory list, port registers, and THRSim11 IO
box. Open and assemble your LASTNAME_Firstname_Sq_wav1.asm. Set breakpoint at SWI, and reset
registers. Set standard labels (Label/Set Standard Labels). Set display of accA to binary. Set display of
PORTB to binary. Tile windows. Arrange windows for maximum benefit: Reset DELAY. Paste your
screen below: 1 point(s)
Table 1
Time, ⎠ s
DELAY
State
Clock cycles
T_1
T_2
⎠N
⎠ T ⎠ N⎠/ T ⎠ T⎠/ N
N_1 N_2
$03
Initialize
2
11
1.0
5.5
9
4.5
L
0.5
11
40
29
5.5
20.0 14.5 2.0
H
0.5
40
72
32
20.0
36.0 16.0 2.0
L
0.5
72 101
29
36.0
50.5 14.5 2.0
H
0.5
101 133
32
50.5
66.5 16.0 2.0
L
0.5
133 162
29
66.5
81.0 14.5 2.0
H
2.0
0.5
162 194
32
81.0
97.0 16.0
$30
Initialize
2
11
1.0
5.5
9
4.5
L
0.5
11 340
329
5.5 170.0 164.5 2.0
H
0.5
340 672
332 170.0 336.0 166.0 2.0
L
0.5
672 1001
329 336.0 500.5 164.5 2.0
H
0.5
1001 1333
332 500.5 666.5 166.0 2.0
L
0.5
1333 1662
329 666.5 831.0 164.5 2.0
H
2.0
0.5
1662 1994
332 831.0 997.0 166.0
Note: (i) The numbers in the table are not real. You need to substitute them with your actual numbers.
(ii) This is an Excel table, and it has formulae in it. You only need to fill in the N_1 and T_1
values on the Initialize row, and the N_2 and T_2 values in all the rows.
a) Put $03 into variable DELAY. Reset the simulator.
The PORTB register is %???????? 1 point(s)
The lights in the THRSim11 IO box are ____off ____on ? 2 point(s)
b) Record the initialization readings:
Clock cycles = _____ 3 point(s)
Simulated time = ___________ sec = ___ μs.
3 point(s)
c) Make one step through the program. Explain what happens: _____ 3 point(s)
d) Step through the program until PORTB has been loaded with %00000000. Record the start up
readings:
Dr. Victor Giurgiutiu
Page 335
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise SQUARE WAVE
Clock cycles = _____ 2 point(s)
Simulated time = ___________ sec = ___ μs.
2 point(s)
Enter these values as N_2 and T_2 in the Initialize row, and as N_1 and T_1 in the first (L) row of
Table 1..
e) Step through the program until PORTB gets set. The value is %__________1 point(s)
The light PB___1 point(s) in THRSim11 IO box turns on. Paste your screen: 1 point(s)
Record the clock cycles and the simulated time as N_2 = ___ and T_2 = ____ and enter these values in
Table 1. 4 point(s)
(You should notice that Table 1, which is in Excel, automatically puts these values also as N_1 and T_1
on the next row.)
Compute:
ΔN = ___
2 point(s)
ΔT = ____
2 point(s)
ΔN/ΔT = ____
2 point(s)
ΔT/ΔN = _____.
2 point(s)
f)
Step through the program until PORTB becomes again %00000000 and PB0 in THRSim11 IO
box turns off. 1 point(s)
Record the clock cycles and the simulated time as N_2 and T_2 in Table 1. Observe ΔN, ΔT, ΔN/ΔT,
ΔT/ΔN.
g) You are now again in a low-signal state. Step through the program until the light PB? comes on
again. 1 point(s)
Record N_2 and T_2 and enter them into Table 1.
h) Repeat this until all the rows in Table 1 have been observed and recorded. Check if the ratios
ΔN/ΔT and ΔT/ΔN are consistently 2.000 and 0.500, as theoretically predicted. ___Y ____N 1
point(s) ?
i)
Also, record the half-wave durations of your square wave.
The low (L) portion of the signal has:
______ cycles
2 point(s)
_____ μs,
1 point(s)
The high (H) portion has:
Dr. Victor Giurgiutiu
______cycles,
2 point(s)
_______ μs.
1 point(s)
Page 336
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise SQUARE WAVE
Explain what happens: 2 point(s)
What is this observation is important for ________________________ 2 point(s)
j)
Set breakpoints in the program at the following instances:
•
When the low signal is being loaded
•
When the high signal is being loaded
What do these points correspond to: 2 point(s)
What will these breakpoints allow us to do: 2 point(s)
k) Reset the MCU. Record again the clock cycles and simulated time, and verify that they
correspond to the N_1 and T_1 on row ‘$03 Initialize’ in Table 1.
l)
Run to the first breakpoint. Verify that N_2 and T_2 are the same as before. Do they agree?
___Y ____N. 1 point(s)
m) Run to the next breakpoint. You have run through the first L lap. Enter N_2 and T_2 in Table 2
and verify that they are the same with those entered in Table 1. Do they agree? ___Y ____N. 1
point(s)
n) Run to the next breakpoint. You have run through the first H lap. Verify that N_2 and T_2 are the
same as before. Do they agree? ___Y ____N. 1 point(s)
o) Repeat until you have exhausted the $03 portion of Table 2.
Observe the ratios ΔN/ΔT and ΔT/ΔN. Compare with the theoretical values:
ΔN/ΔTtheory = ????? 1 point(s)
ΔT/ΔNtheory = ???? 1 point(s)
p) Put $30 into the variable DELAY. Reset the simulator. Repeat the above procedure. Observe
and enter the values of N-2 and T_2 in Table 1, under the $30 section.
Observe the wavelengths of the L and H parts of the square wave. They are ____ μs and ____ μs,
respectively.2 point(s)
Calculate the durations of the L and H half-waves for short delay ($03) and long delay ($30):
Short delay: ΔTL = ____ μs, ΔTH = ____ μs, difference = % 2 point(s)
Long delay: ΔTL = ____ μs, ΔTH = ____ μs, difference = % 2 point(s)
Observe the ratios ΔN/ΔT and ΔT/ΔN. Are there any deviations from the theoretical values: ___Y ____N.
1 point(s)
Dr. Victor Giurgiutiu
Page 337
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise SQUARE WAVE
Program SQ_WAV2
Instructions
Flowchart 6 point(s)
Code 6 point(s)
I
i)
Define variable DELAY at
$0000
Load REGBAS in reg. X
Send low signal
Load %00000000 in accA
Store accA in Port B
Jump to subroutine WAIT
Send high signal
Load %???????? in accA
Store accA in Port B
Jump to subroutine WAIT
Branch back to (iii)
SWI
ii)
Subroutine WAIT
??????
FLOWCHART
Draw a flowchart for the program in the space provided above.
CODING
Type the essential code for this program in the space provided above. Code the program in the
THRSim11 using the standard template and save it in the personalized file
LASTNAME_Firstname_Sq_wav2.asm. Store it on floppy disk.
EXECUTION
Open THRSim11. Close the Commands window. Open memory list, port registers, and THRSim11 IO
box. Open and assemble your LASTNAME_Firstname_Sq_wav1.asm. Set breakpoint, and reset registers.
Set standard labels (Label/Set Standard Labels). Set display of accA to binary. Set display of PORTB to
binary. Tile windows. Arrange windows for maximum benefit: Reset DELAY, A, B, X.
DO NOT RESET THE SP (stack pointer) REGISTER, BECAUSE, IF YOU DO SO, ACCESS TO
YOUR SUBROUTINE WILL NOT WORK.
i)
Put $03 into variable DELAY. Reset the simulator. The PORTB register is %00000000, and all the
lights in the THRSim11 IO box are off. Step through the program until you jump to subroutine.
j)
Step through the subroutine until you get to RTS and are ready to jump back to the program.
k) After another step, you are back into the main program.
l)
As you step further, you observe that the Port B pin 0 is toggled, and the light PB0 in the IO box
comes on. The main program is again ready to jump to the subroutine.
m) Further stepping takes you again inside the subroutine, and out again.
n) Run the program on automatic. You will notice how the subroutine is accessed every time the PB0
light changes.
Dr. Victor Giurgiutiu
Page 338
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise SQUARE WAVE
o) Put breakpoints at the two JSR lines. Run the program on automatic, and record in Table 2 the
values recorded for DELAY = $03, and for DELAY = $30. Compare these values with those in Table
1. 5 point(s)
Table 2
DELAY
State
$03
Initialize
L
H
L
H
L
H
Initialize
L
H
L
H
L
H
$30
Clock cycles
N_1
N_2
2
11
11
51
51
94
94
134
134
177
177
217
217
260
2
11
11
351
351
694
694 1034
1034 1377
1377 1717
1717 2060
N
9
40
43
40
43
40
43
9
340
343
340
343
340
343
Time, s
T_1
T_2
1.0
5.5
5.5
25.5
25.5
47.0
47.0
67.0
67.0
88.5
88.5 108.5
108.5 130.0
0.0
5.5
5.5 175.5
175.5 347.0
347.0 517.0
517.0 688.5
688.5 858.5
858.5 1030.0
T
4.5
20.0
21.5
20.0
21.5
20.0
21.5
5.5
170.0
171.5
170.0
171.5
170.0
171.5
N ⌠T
T ⌠N
2.000
2.000
2.000
2.000
2.000
2.000
0.500
0.500
0.500
0.500
0.500
0.500
2.000
2.000
2.000
2.000
2.000
2.000
0.500
0.500
0.500
0.500
0.500
0.500
Note: (i) The numbers in the table are not real. You need to substitute them with your actual numbers.
(ii) This is an Excel table, and it has formulae in it. You only need to fill in the N_1 and T_1
values on the Initialize row, and the N_2 and T_2 values in all the rows.
p) Compare the values from Table 2 with those in Table 1. Discuss what you notice:
i) For same delay values, the difference between the results of Table 2 and Table 1
consists of: … 5 point(s)
ii) In Table 2, the difference between the durations of the L and H half waves for short
delays and for long delay is explained as follows: … 5 point(s)
WHAT YOU HAVE LEARNED
In this exercise, you have learned:
• The use of Port B
•
The use of displayed clock cycles and simulated time, to track the duration of Low and High
signal half waves in a square wave
•
The usefulness of subroutines for shortening programs
•
The use of Port B to generate a square wave
•
New words and notations: subroutine, jump to subroutine, return from subroutine, square wave,
wavelength.
Dr. Victor Giurgiutiu
Page 339
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise BUTTONS BOX
EXERCISE BUTTONS BOX
GOALS AND OBJECTIVES
The goal of this exercise is to review the use of the parallel ports as an input/output (I/O) device.
Registers that control the parallel ports will be explored. A 4-button 4-LED box will be used as a
communications link. This exercise has the following objectives:
• Review the use of parallel ports
•
Illustrate the use of Port C for input and output
•
Introduce the concept of shifting register and memory content
•
Practice the use of the THRSim11 IO box for input and output
BASIC CONCEPTS
a)
Define in your own words a PARALLEL port. 6 point(s)
b)
How many parallel ports are on the M68HC11 ? _______________________6 point(s)
c)
What are they called? ____________________________________________6 point(s)
d)
What is the difference between them? _______________________________6 point(s)
e)
What are the memory locations that are used by each of them? ___________________
______________________________________________________________6 point(s)
f)
What is DDRC called and how does it work? __________________________________
______________________________________________________________6 point(s)
g)
If you place $fa in DDRC at address $1007 and then load $cf into PORTC at address $1003, what
will the output of parallel Port C be? Fill the result into the table. 12 point(s)
DDRC
pins
Value
Port C
pins
Value
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PC7
PC6
PC5
PC4
PC3
PC2
PC1
PC0
PROGRAM BUTTONS_BX
This program demonstrates the use of Port B for output and of Port C for both input and output. Port C is
configured to have the pins PC1, PC3, PC5, PC7 for output. This is achieved using the Data Direction
Register for port C (DDRC). Since the default setting for Port C is input, the pins that have to be set to
output have their image set to 1 in DDRC. In our case, the bits ?, ?, ?, and ? of DDRC are set to 1. Thus,
the Port C pins PC1, PC3, PC5, PC7 become output, while pins PC0, PC2, PC4, PC6 remain input.
Dr. Victor Giurgiutiu
Page 340
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise BUTTONS BOX
The program loops continuously, reading data from the some Port C pins, and sending data back to the
other Port C pins. Simultaneously, the data is also sent to Port B.
Instructions
a)
Load REGBAS in reg. X
b)
Clear port B by storing zero
in it
Flowchart 17 point(s)
Code 17 point(s)
Select ??? Port C pins for output
c)
Load %???????? in accB
d)
Store accB to DDRC
e)
Load Port C to accB
Main loop
f)
Shift accB to the left
g)
Store accB to Port C
h)
Store accB to Port B
i)
Branch back to (v)
j)
SWI
FLOWCHART
Draw a flowchart for the program in the space provided above.
CODING
Use the flowchart to code your program in the simulator. Write or paste your coded program in the space
provided. Code the program in to the personalized file LASTNAME_Firstname_Buttons_bx.asm using
the standard template.
EXECUTION
Open THRSim11. Close the Commands window. Open port registers and THRSim11 IO box. Open your
program. Before assembling your program, disactivate the “Store accB to Port C” instruction by putting *
at its beginning (see the code in Example Button Box). Set breakpoint, and reset registers. Set standard
labels (Label/Set Standard Labels). Set display of accB to binary. Set display of PORTB and PORTC to
binary. Tile windows. Arrange windows for maximum benefit. Paste your screen below:
a) Before you run the program, verify the Port C pins functionality. In the THRSim11 IO box, toggle
up the switch PC2. You will see that the corresponding bit in Port C register, bit ?, becomes 1
immediately. Paste your screen below: 3 point(s)
b) Toggle down the switch PC2 in the IO box.
c) Run the program. The program will loop continuously between label ?????? and opcode
??????. 6 point(s)
d) With the program running, toggle up the switch PC2 in the IO box. Immediately, bit ? (3
point(s))in PORTC will switch to one. Simultaneously, pin ? in PORTB will become 1, and the
Dr. Victor Giurgiutiu
Page 341
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise BUTTONS BOX
light PB? (3 point(s)) in the IO box will lit. Press the stop button and capture the screen. Paste
your screen below: 3 pointa(s)
e) Try to toggle other PC switches in the IO box. You will notice that now only the even switches
(PC0, PC2, PC4, PC6) are producing the setting of the corresponding bits in PORTC register.
The odd switches (PC?, PC?, PC?, PC?) can be toggled, but with no effect on the PORTC
register. This illustrates how DDRC controls PORTC register.
f)
Restart the program by pressing the Run button. With the program running, try to toggle the
other switches. You will notice that the toggling of the even switches (PC?, PC?, PC?, PC?) has
the effect of switching on the odd Port B lights (PB?, PB?, PB?, PB?). This is the result of the
data from the odd Port C pins is loaded in accB, left shifted, and sent back to Port B.
g) Finally, re-activate the line “store accB to Port C” by removing the *. This makes your program
ready to be used in Lab2.
WHAT YOU HAVE LEARNED
In this exercise, you have learned:
• The use of PORTC for input and output
•
The concept of shifting a register
•
The use of the THRSim11 IO box for both input and output
•
New words and expressions: toggle switch; shift a register, shift data.
Dr. Victor Giurgiutiu
Page 342
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise BUTTONS BOX
(This page is left intentionally blank)
Dr. Victor Giurgiutiu
Page 343
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise SERIAL COMMUNICATION
EXERCISE -- SERIAL COMMUNICATION
OBJECTIVE
The objective of this homework is to learn how to use the serial communication port of the M68HC11:
• Basic concepts of serial communications are reviewed.
•
The BAUD rate and other aspects of the serial communications interface (SCI) are investigated.
•
The registers used to transmit and receive serial communications data are examined
•
The TDRE and RDRF flags used to identify whether or not serial communications data has been
transmitted or received are used
•
The concept of echo is developed
BASIC CONCEPTS
1)
Describe in your own words, using formulae or diagrams, as needed:
a) Baud Rate: 2 point(s)
b) Start Bit: 2 point(s)
c) Stop Bit: 2 point(s)
d) ASCII Code: 2 point(s)
e) BCD code 2 point(s)
2)
Using the chart in the back of M68HC11 Quick Reference Manual, write the ASCII code in hex
and in 8-bit binary for the following characters: 16 point(s)
Character
a
&
P
6
3)
ASCII
$61
Binary
01100001
Character
DEL
D
#
x
ASCII
Binary
Convert the following decimal numbers into BCD and hex formats: 16 point(s)
Number
80
08
65
84
Dr. Victor Giurgiutiu
BCD
1000 0000
Hex
$50
Binary
%01010000
Page 344
Number
32
78
89
00
BCD
Hex
Binary
8/19/2008
EMCH 367
4)
Fundamentals of Microcontrollers
Exercise SERIAL COMMUNICATION
Consider the character 'Q' being transmitted through serial communication. Sketch and label the
ten bits that make up this communication (the serial-data word). 3 point(s)
Label
Value
5)
Name and briefly describe the five Serial Communications Interface (SCI) registers. 8 point(s)
6)
Briefly describe the functions of the RE and TE bits in the SCI. 2 point(s)
7)
The following questions refer to RDRF:
a) Describe in your own words the function of RDRF 2 point(s)
b) In what register is it located? 2 point(s)
c) How does one write a program to check the status of RDRF? 2 point(s)
d) How is RDRF cleared? 2 point(s)
The following questions are related to TDRE:
8)
a) Describe in your own words the function of TDRE. 2 point(s)
b) In what register is it located? 2 point(s)
c) How does one write a program to check the status of TDRE? 2 point(s)
d) How is TDRE cleared? 2 point(s)
PROGRAM ECHO
Note: This program is based on the examples SCI_recept and SCI_transm. In fact, it can be assembled
from these two examples. Before performing the present programming, review, duplicate, and operate
the coding in examples SCI_recept and SCI_transm.
• The program ECHO will continuously check if the MCU has received the transmission signal
from the terminal keyboard here simulated by the serial transmitter.
•
When keyboard transmission is received, the binary pattern of the character’s ACII code will be
sent to Port B for display. This way, you will check that the bit pattern corresponds to that from
the ASCII table.
Dr. Victor Giurgiutiu
Page 345
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise SERIAL COMMUNICATION
•
Then, the character is transmitted back to the terminal to be displayed on the monitor screen here
simulated by the serial receiver.
•
To achieve synchronization with lab equipment during future use of this program in the lab, a
sync pulse (low-high-low) is generated in Port C just before the serial transmission.
INSTRUCTIONS
i.
viii.
ix.
Set the BAUD register to 9600 and the SCCR1 to 8 bits. (This step is not necessary
when connecting to the microcontroller through MiniIDE, but it must be included in order
to run this program on the simulator.)
Initialize the serial communication interface (SCI) for reception and transmission
Initialize all Port C pins for output
Branch in place until the reception data register is full (i.e., branch back if RDRF is not
set). This checks if the SCI transmission has been received.
Continue when the SCI transmission has been received
Load the key code into AccB and send it out through PORTB. This will be shown on the
IOBox LED display.
Branch in place until the transmission register is empty (i.e., branch back if TDRE is not
set). This checks if the transmission can take place.
Send out a low-high-low pulse through PORTC.
Send back the character (echo) through SCI.
x.
Loop continuously from (vii)
ii.
iii.
iv.
v.
vi.
vii.
FLOWCHART
Draw a flowchart for the program in the space provided.
CODING
Use the flowchart to code your program in the simulator using the standard template.. Save the program
in the personalized file name LASTNAME_Firstname_Echo.asm. Write or paste your coded program in
the space provided.
Flowchart 11 point(s)
Dr. Victor Giurgiutiu
Code 10 point(s)
Page 346
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise SERIAL COMMUNICATION
EXECUTION
Open THRSim11. Close the Commands window. View ports registers and serial registers. View serial
transmitter and receiver. View IO box. Open and assemble your program. Set breakpoints as follows:
• After RDRF has been detected and its loop exited
•
After TDRE has been detected and its loop exited
•
At SWI
Reset registers. Set standard labels (Label/Set Standard Labels). Set display of BAUD, SCCR1, SCCR2,
SCSR to binary. Set display of accA to binary. Set display of ports B and C to binary. Arrange windows
for maximum benefit: Reset, A, B, X, PORTB, PORTC. Press the RESET button. Paste your screen: 1
point(s)
a) Fill in the ASCII codes for each key listed in Table 1. 7 point(s)
Table 1
Key
Q
ASCII code
51
IO box
MSBÆLS
8- LED pattern B01010001
Equivalent Hex
$51
values
Agreement (Y/N)
Y
2
5
B
b) Run your program in the simulator. The program should be looping at the beginning showing
that it is waiting on a keystroke.
c) Once the program is running, enter the letter Q into the serial transmitter window and click Send.
This means that the letter Q is being sent to the microcontroller. After a few moments, the letter
Q should begin appearing in the serial receiver window. This means that the microcontroller has
sent the letter Q back to the terminal.
*You should see the ASCII code for the character Q represented by the red lights in the IO box
and by the values in the Port B pins window.
*You can also detect a “flicker” of the Port C switches in the IO box and a “flicker” of the
values in the Port C pins window as the program sends out the High-Low-High pulse each time
the character is transmitted.
Repeat with the other keys mentioned in Table 1 and check that your program runs successfully.
If you do not get the desired results, debug your program. If you cannot solve the problems,
please contact your TA.
Dr. Victor Giurgiutiu
Page 347
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise TIMER FUNCTIONS
EXERCISE TIMER FUNCTIONS
GOALS AND OBJECTIVES
This exercise will practice the MC6811 functions for time measurements. Input capture (IC) and output
compare (OC) functions will be reviewed and applied to measure a bolt drop and to generate a square
wave.
Part I will review the groundwork. Part II will perform time measurements on a dropping bolt using
input capture (IC) timer functions. Part III will generate a square wave using output compare (OC) timer
functions.`
PART I -- BASIC CONCEPTS
1)
How long are the timer registers? ____________ bits; __________hex digits 2 point(s)
2)
How many memory locations are needed to store one timer information? ___________ 1 point(s)
3)
How are the timer flags reset (cleared)? _____________________________________2 point(s)
4)
Describe the free-running time counter (TCNT) concept: 2 point(s)
Answer:
a) What is the reset value of TCNT? __________ 1 point(s)
b) Can the free-running counter be stopped while MCU is on: ____Y ______N 1 point(s)
c) How long does a count last? ______ μs 1 point(s)
d) How many bits are in TCNT? _________1 point(s)
e) What is the greatest hex number that can appear in TCNT? ___________ 1 point(s)
f) What happens after TCNT has reached its maximum value?____________________________
___________________________________________________________________2 point(s)
g) What is the maximum time duration that TNCT can measure between two consecutive overflows?
___________ μs = ___________ ms. 2 point(s)
h) What is the name and the function of TOF? Name: _____________ Function: __________
___________________________________________________________________3 point(s)
i) Where is TOF located? __________________________1 point(s)
j) What is the mask for TOF? %_____________________1 point(s)
5)
Input Capture Function
a) Describe the Input Capture (IC) concept: __________________________________________
__________________________________________________________________2 point(s)
b) How many IC registers are there and what are their names? ___________________3 point(s)
c) What happens with the IC registers at MCU reset? __________________________1 point(s)
d) Can you change the value in an IC register? ____Y _________N 1 point(s)
e) Where are the input capture flags (ICxF) located? __________________________1 point(s)
Dr. Victor Giurgiutiu
Page 348
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise TIMER FUNCTIONS
f) When do the input capture flags (ICxF) get set? ___________________________________
_________________________________________________________________1 point(s)
g) What are the masks for the input capture flags? Fill in the table: 3 point(s)
IC1F
IC2F
IC3F
%
%
%
h) What is the name of EDGxB and EDGxA bits ? _____________________1 point(s)
i) Where are EDGxB and EDGxA bits located? _______________________1 point(s)
j) What function do EDGxB and EDGxA perform? _____________________1 point(s)
6)
Output Compare Function
k) Describe the output compare concept: ____________________________2 point(s)
l) How many OC registers are there and what are their names?
___________________________________________________________5 point(s)
m) What happens with the OC registers at MCU reset? _________________________1 point(s)
n) Where are the output compare flags (OCxF) located? _______________________1 point(s)
o) When do the output compare flags (OCxF) get set? _________________________1 point(s)
p) Can you change the value in an OC register? ___________Y _________N
1 point(s)
q) Where are the OMx, OLx bits located? ___________________________________1 point(s)
r) What do the OMx, OLx bits do? _________________________________________1 point(s)
s) What are the masks for output compare flags (OCxF)? Fill the table below: 5 point(s)
OC1F
OC2F
OC3F
OC4F
OC5F
Dr. Victor Giurgiutiu
%
%
%
%
%
Page 349
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise TIMER FUNCTIONS
PART II: INPUT CAPTURE – BOLT DROP EXPERIMENT TIMER PROGRAM
Note: This program is based on the example Ex_IC and
Figure 1 Bolt drop experimental setup
previous examples regarding the use of Port B and of SCI.
Before performing the present program, review, run, and
thoroughly understand the coding in example Ex_IC.
MC6811 will be used in an experiment to measure travel
times. A 1.5-in bolt will be held by an electromagnet at the
top of a drop shaft. The electromagnet is connected to the
MCU. This magnet is controlled by any of the 8 pins on
PORTB. It is turned on by sending 5V through parallel
PORTB. When a keystroke occurs, the MCU commands
the electromagnet to release the bolt. Simultaneously, the
time origin, T0, is recorded. The bolt travels down the shaft.
After falling a specified distance (L = 48.75-in), the bolt
crosses an infrared emitter-detector sensor and interrupts its
beam causing its output voltage to fall from high (+5V) to
low (~0V). When the bolt exits the emitter detector sensor,
its output voltage comes back up to high (+5V). The output
from the emitter-detector sensor is wired into the input
capture pins IC1 and IC2 of the MCU. You will program
the microprocessor to perform the following functions:
(a) Control the electromagnet
Electromagnet
Drop shaft
Electronics
(b) Take the initial time when the process starts
(c) Measure the time when the free-falling bolt reaches
the emitter-detector
(d) Measure the time the bolt passes through the
emitter-detector
7)
Emitter-detector
sensor
Using basic Physics -- Mechanics, calculate the theoretical time for the bolt to drop (time or
arrival), t1, the theoretical instantaneous velocity of the bolt when entering the emitter-detector
sensor, v1, the theoretical time of exit, t2, and the time it takes the bolt to completely pass through
the emitter-detector, Δt. Show your work below: 5 point(s)
t1 = _________ ms, v1 = ________ in/s,
Dr. Victor Giurgiutiu
t2 = ________ ms,
Page 350
Δt = ________ ms
8/19/2008
EMCH 367
8)
Fundamentals of Microcontrollers
Exercise TIMER FUNCTIONS
You are looking for two separate types of signal transition from the emitter-detector. Based on the
description above:
a) What is the type of the first transition observed on the emitter detector sensor (i.e., when the bolt
enters the emitter detector sensor)? _____________ (1 point(s)) Sketch the signal below
(1 point(s)). This transition will be attached to IC1. What values do you attach to EDG1B and
EDG1A? Enter the answer in the table below. (1 point(s))
EDG1B
EDG1A
b) What is the type of the second transition observed on the emitter detector sensor (i.e., when the bolt
exits the emitter detector sensor)? _____________ (1 point(s)) Sketch the signal below
(1 point(s)). This transition will be attached to IC2. What values do you attach to EDG2B and
EDG2A? Enter the answer in the table below. (1 point(s))
EDG2B
EDG2A
Where are IC1 and IC2 located (port and pin)? Enter your answer here: ________________(2 point(s))
9)
Draw a flowchart (draw it on the next page) to do the following:
i)
Set up the following variable names and locations
• TIME0 @ $0000 & $0001
• TIME1 @ $0002 & $0003
• TIME2 @ $0004 & $0005
• NOF1 @ $0006
• NOF2 @ $0007
ii)
Set the EDGA and EDGB bits of the TCTL2 register for the signal transitions that you
expect to see on IC1 and IC2 as discussed above.
iii)
Turn the electromagnet on. This magnet is controlled by any of the 8 pins on PORTB. It
is turned on by sending 5V through all the pins of the parallel PORTB. (Subsequently, it
is turned off by sending 0V through PORTB.)
iv)
Wait for a key to be pressed.
v)
When a key is pressed, have the electromagnet turn off and store the value of the timer
counter (TCNT) in TIME0.
vi)
Keep track of the time it takes for the bolt to fall from the magnet until it enters the beam
of the emitter-detector sensor. Keep track of the number of timer overflows that occur
until the first input capture occurs by incrementing NOF1 and NOF2.
vii)
Store the value of the timer counter TIC1 when the bolt enters the emitter-detector sensor
into TIME1.
viii) Store the value of the timer counter TIC2 when the bolt leaves the emitter-detector sensor
into TIME2. Keep track of the number of timer overflows that occur until the second
input capture occurs by incrementing NOF2.
Dr. Victor Giurgiutiu
Page 351
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
ix)
Exercise TIMER FUNCTIONS
End Program.
FLOWCHART
Below, draw a flowchart for your program.5 point(s)
CODING
Use the flowchart to code your program in the simulator using the standard template. Save the program
in the personalized file name LASTNAME_Firstname_Drop.asm. Write or paste your coded program
below. 5 point(s)
EXECUTION
Open THRSim11. Close the Commands window. View ports registers and serial registers, serial
transmitter, serial receiver, IO box, Port A pins, timer registers, memory locations$0000-$0007. Set
display of TCTL2, TFLG1, TFLG2 to binary. Arrange windows for maximum benefit: Open and
assemble your program. Reset. Set standard labels. Set breakpoints as follows:
• Just after the bolt has been released
•
Just after the first input capture
•
Just after the second input capture
•
At SWI
i)
Toggle the value of Pin PA2/IC1 from "0" to "1" by double clicking on it. This simulates the
signal that the Input capture registers are from the emitter detector sensor.
ii)
Run your program in the simulator. The program should be looping at the beginning showing that
it is waiting on the keystroke. You should also notice the value of Port B in the I/O box. The red
lights should be on, ensuring that of the electromagnet is on.
iii)
Once the program is running, enter character S into the serial transmitter window and click Send.
The keystroke detection loop should be exited, and your program should stop at the first
breakpoint.
iv)
Step through the program. Port B lights should turn off and the value of the TCNT should be
stored in TIME0.
v)
Run. The program should then begin the loop looking for the first input capture, while also
verifying for timer overflows and incrementing NOF1 when they occur. Let this part of the
program run for a while. Watch as the TCNT changes from $ffff to $0000. This should cause your
program to increment your timer overflow counters NOF1 and NOF2.
vi)
Trigger the first input capture by toggling the value of Pin PA2/IC1 in the Port A Pins window
from "1" to "0" (double clicking on it). The MCU should see this as the awaited transition on IC1,
and the flag IC1F flag should get set. The first input capture loop should be exited, and your
program should stop at the breakpoint.
Dr. Victor Giurgiutiu
Page 352
8/19/2008
EMCH 367
vii)
Fundamentals of Microcontrollers
Exercise TIMER FUNCTIONS
Step through the program. Observe the value of TIC1 be stored in TIME1.
viii) Run again. Your program should loop looking for the second input capture, while also verifying
for timer overflows and incrementing NOF2 when they occur.
ix)
Trigger the second input capture by changing the value of Pin PA1/IC2 in the port A Pins window
from "0" to "1". This should cause the second input capture loop to be exited and the program to
stop at the next break point.
x)
Step through the program and watch the value of TIC2 being stored in TIME2. Your program
should terminate.
xi)
Reset and run your program again. This time, after each stop at the breakpoint, simply press the
run button and let it go on. Verify that your program runs well. Do any corrections necessary.
PART III: OUTPUT COMPARE – SQUARE WAVE GENERATION
Note: This program is based on the example Ex_OC. Before performing the present program, review,
run, and thoroughly understand the coding in examples Ex_OC.
You want to generate a square wave using the MCU output compare timer function OC5. The half
wavelength duration, in machine cycles, should be stored in the double-precision variable DT. The Low
and High states of the square wave will be created by toggling the OC5 pin at DT intervals.
a) Indicate the Port and Pin value where OC5 is located ________________________2 point(s)
b) Indicate the values of OM5 and OL5 that will ensure toggle: OM5___ OL5 ____
2 point(s)
c) Draw a flow chart (draw it on the next page) to perform the following:
i)
Set the OM5 and OL5 pins of the TCTL1 to toggle
ii)
Add DT to TCNT and store it in TOC5
iii)
Loop until successful output compare happens on OC5
iv)
Add DT to TCNT and store it in TOC5
v)
Loop back.
vi)
Branch back to iii).
FLOWCHART
5 point(s)
CODING
Use the flowchart to code your program in the simulator using the standard template. Save the program
in the personalized file name LASTNAME_Firstname_OC_sqwav.asm. Write or paste your coded
program below. 5 point(s)
EXECUTION
Open THRSim11. Close the Commands window. View CPU registers, timer registers, port A pins,
memory list. Open and assemble your program. Set breakpoints at
Dr. Victor Giurgiutiu
Page 353
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
•
Just after output compare happens
•
At SWI
Exercise TIMER FUNCTIONS
Reset registers and memory. Set standard labels. Set display of TCTL1, TFLG1 to binary. Arrange
windows for maximum benefit: Press the RESET button.
a) Run your program and verify it in a manner similar to Ex_OC and verify that it works as
expected
b) Use the calculation patterns of Ex_OC to complete the information in Table 1. Insert your
calculations below. 13 point(s)
Hex Number
Half wavelength
duration (μs)
Frequency (Hz)
T = Theory;
Dr. Victor Giurgiutiu
$0100
$1000
$8000
$a000
$ffff
$
$
T
E
T
250
E
1500
E = Experiment.
Page 354
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise TIMER FUNCTIONS
(This page is left intentionally blank)
Dr. Victor Giurgiutiu
Page 355
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise DC MOTOR TACHOMETER
EXERCISE DC MOTOR TACHOMETER
GOALS AND OBJECTIVES
The objectives of this exercise are:
•
•
•
•
•
•
•
•
•
•
•
To verify the student’s understanding of DC motor functionality
To develop a DC motor tachometer (RPM counter) program to be used in the lab
Review the use of MCU Timer functions (free running clock, TCNT, overflow flag, TOF, input
capture clock, TIC1, and its event flag, IC1F, the selection of signal transition to be captured
(here rising edge, EDG1B) and that the MCU is only sensitive to that particular transition.
Introduce the use of soft masks (here, IC1_MSK, TOF_MSK).
Introduce the concept of layered flowcharting of a program: big-picture with generic
descriptions; detailed flowcharts for particular sections of the program.
Review the use of two time captures to calculate the time duration of an event
Illustrate the use of scaling factors (100s) to deal with numbers that are larger than the
microcontroller word length
Introduce the method of calculating multiplication through repeated additions and
decrementation of a counter
Introduce the use of a conversion subroutine to convert from hex to BCD
Illustrate rotation speed calculation using the recorded period of rotation
Illustrate the use of scaling factors (100s) to present the result on a display with limited number
of digits.
PART I – THEORY OF DC MOTORS (30%)
1)
List all the types of electric motors that you know. Give a one-sentence description of each type. 4
point(s)
2)
Draw a 2-view schematic sketch of a direct current (DC) motor. Identify torque (T), speed (ω,
internal resistance (R), back emf (E), and applied voltage (V). 2 point(s)
3)
Write the relationship between back emf and speed. Sketch this relationship in ω-E coordinates.
2 point(s)
Dr. Victor Giurgiutiu
Page 356
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise DC MOTOR TACHOMETER
4)
Write the relationship between torque and current. Sketch this relationship in I-T coordinates
2 point(s)
5)
Write the expression for heat power that needs to be dissipated from a running DC motor.
max
Assuming the maximum power dissipation is Pdiss
, express the maximum current, Imax, and the
maximum torque, Tmax. 3 point(s)
6)
Write the electrical model of a DC motor. 2 point(s)
a) Derive the expression of speed at a given torque, T 2 point(s)
b) Derive the expression for the no-load speed, ω0. This is the maximum speed that the motor can
run at. 2 point(s)
c) Derive the expression for the zero-speed torque, T0, at a given supply voltage, V. This is the
start-up torque. 2 point(s)
PART II – DC MOTOR TACHOMETER PROGRAM (70%)
Note: This program is based on two examples: Example_RPM_1 and Example_RPM_2. Before
performing the present program, review, run, and thoroughly understand the coding in these examples.
The program that you will construct will be used in Lab 4: DC motor tachometer RPM experiment
(Figure 1). In this experiment, a disk with an aperture (hole) drilled into it is attached to the shaft of a
DC motor. The aperture in the disk spins through an infrared emitter-detector sensor. The emitter-
Dr. Victor Giurgiutiu
Page 357
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise DC MOTOR TACHOMETER
detector sensor sends a High (5V) signal when the aperture in the disk allows the beam of light to pass
through. The output of the emitter-detector sensor is attached to the input capture pin IC1 on Port A.
The speed of the motor is controlled by a potentiometer and to an electronic circuit. The potentiometer is
a variable resistor. By turning the knob of the potentiometer, the speed of the DC motor is varied.
T1 is the first time when a falling edge transition is encountered on pin IC1, while T2 is the second time
when a falling edge transition is encountered on the same pin IC1. This corresponds to the time between
two consecutive passages trough the emitter-detector sensor of the hole in the rotating disk. The
difference between T2 and T1, plus the time taken by the overflows, will represent the period of rotation
of the disk. Hence, one can calculate the rotation speed.
MOSFET
DC
Emitter/Detector
7-Segment Display
Port B
Connection
Lamp Test
555 Timer
Speed-Controlling
Potentiometer
.
Figure 1 DC Motor tachometer experiment to which the present software example is relevant.
7)
Table
Calculate the time between two consecutive passes of the hole through the emitter detector (period
of rotation, τ, in ms, and T in cycles) for various frequencies of rotation (Hz). Show your work
below. Enter the results in the Table below. 9 point(s)
Calculation of period of rotations for various rotation speeds
Assumed speed,
N (rpm)
8,000
6,000
4,000
2,000
1,000
800
Dr. Victor Giurgiutiu
Frequency of
rotation, f (Hz)
Period of rotation
T (MCU cycles)
τ (ms)
Page 358
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise DC MOTOR TACHOMETER
THE PROGRAM INSTRUCTIONS
i.
Use the microcontroller input-capture functions to capture the times, T1 and T2, and the
number of overflows, NOF, corresponding to two consecutive passes of the aperture through
the emitter-detector sensor.
ii.
Use decimal 100 to scale down T1 and T2, and obtain the scaled values T1_100 and T2_100,
i.e. the time values in 100’s of cycles.
iii.
Calculate the time taken by overflows, TOVFL, in 100’s of cycles
iv.
Calculate the total time, T_100, in 100’s of cycles
v.
Use T_100 to calculate N_100_hex, the rotation speed in 100’s RPM
vi.
Convert the hex number N_100_hex to 2-digit BCD representation using subroutine
HEX_BCD. Store the 2-digit BCD representation to N_100_BCD
vii.
Output the N_100_BCD to port B to be routed to a 2 digit 7-segment LED display. This display
will show the rotation speed in 100s RPM.
FLOWCHART
Draw, below, a flowchart for your program. 6 point(s)
CODING
Use the flowchart to code your program in the simulator using the standard template. Save the program
in the personalized file name LASTNAME_Firstname_RPM.asm. Write or paste your coded program
below. 5 point(s)
EXECUTION
Open THRSim11. Close the Commands window. View CPU registers, timer registers, port A pins,
memory list. Open and assemble your program. Set breakpoints at
• After first input capture on IC1
•
When an overflow happens
•
After second input capture on IC1
•
SWI
Reset registers and memory. Set standard labels. Set display of TCTL2, TFLG1, TFLG2 to binary.
Arrange windows for maximum benefit: Press the RESET button. Paste your screen below: 1 point(s)
a) Toggle pin IC1 to 1. Start the program. The program should stay in a loop waiting for a falling
edge transition on pin IC1.
b) Toggle pin IC1 to 0. The program should stop at the first breakpoint. Notice that IC1F is set in
TFLG1 (bit 2). Also notice the value captured in TIC1. This value should be very close to the
Dr. Victor Giurgiutiu
Page 359
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise DC MOTOR TACHOMETER
value in TCNT (It is not identical, since the program executed a few operations before stopping
at the breakpoint, hence TCNT is slightly more than TIC1.)
c) Step through your program until IC1F is cleared, TIC1 is loaded into D and then stored in T1,
TOF is cleared, and NOF is zeroed.
d) Run. The program enters the second IC1 capture loop. Let the program run until the timer
counter, TCNT, goes through an overflow. At this point, the program should stop at a
breakpoint.
e) Step through your program and notice the overflow counter, NOF, being incremented, and the
overflow flag, TOF, being reset.
f)
Let the program run. Toggle pin IC1 back to 1. Nothing should happen since only falling edges
should be detected. Toggle IC1 to 0 again. The program should stop at the second IC1 capture
breakpoint. The value of TIC1 should be updated to a new value.
g) Step through your program. The new value of TIC1 is loaded and then stored in T2. The
program branches back to the beginning (LABEL0).
After returning to the beginning, the program zeros the NOF counter and goes through the process again.
h) Let the program run again and repeat the steps above until you are satisfied that your program
runs well.
i)
Run again but, after each breakpoint, simply hit the run button and let the program run until the
next breakpoint. Make sure you verify that the generation of a falling edge signal on pin IC1 (by
you toggling from 1 to 0) generates an input capture.
j)
Make sure to run the program long enough such that at least one overflow takes place. Observe
how the overflow counter is incremented and the overflow flag is reset.
k) Synchronize your toggling of pin IC1, such that T1 will be just after an overflow, and T2 several
cycles later. In this situation, T1 and T2 are on the same side of the overflow (same side of the
time-change line) and the overflow counter, NOF, should be zero. Write down these values in
the table below, Case 1. 3 point(s)
l)
Synchronize your toggling of pin IC1, such that T1 will be just before an overflow, while T2 will
happen after the overflow. Write down these values in the table below, Case 2. 3 point(s)
NOF
Case 1:
Case 2:
T1 <T2 and on the same side of the timer overflow
event
T2 < T1, but on opposite sides of the timer overflow
event
T1
T2
$
$
$
$
VERIFICATION OF CASE 1 OF EXAMPLE_RPM_2
Recall data from Case 1 of Example_RPM_2: NOF=1, T1=$0006, T2=$110c. Use your pocket hex
calculator to estimate the results to be expected at the end of the program: 6 point(s)
T_100 = (NOF*$10000+T2-T1)/100 = ($01*$10000+$110c-$0006)/$64 = $_______
(1)
N_100_HEX = (2000000*60/100/100/T_100) = $2ee0/$2ba = $_______
(2)
N_100_BCD =_______
(3)
Dr. Victor Giurgiutiu
Page 360
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise DC MOTOR TACHOMETER
Because the program needs to work with a finite word size, the variables in Equation (1) are first divided
by decimal100, such that Equation (1) is actually treated as:
T_100 = NOF*($10000)/100+T2/100-T1/100
The terms of equation (1) are calculated separately, as TOVFL, T1_100, T2_100. Hence, the following
operations are performed: 4 point(s)
T1_100 = T1/100 = $0006/$64 = $_______
(1a)
T2_100 = T2/100 = $110c/$64 = $_______
(1b)
TOVFL = NOF*($10000)/100 = $01*$028f = $_______
(1c)
T_100= TOVFL + T2_100 – T1_100 = $028f + $002b - $0000 = $_______
(1d)
Note that the result of Equation (1d) is the same as that of equation (1). Hence, Equations (2) and (3)
still stand.
Next, verify these arithmetic operations step-by-step:
a) Put Case 1 data in memory: NOF=1, T1=$0006, T2=$110c. Table 1 reflects your memory list.
Fill in the missing values (marked by ??). 5 point(s)
Table 1
Memory list after Case 1 data has been entered
NOF
T1
T2
T1_100
T2_100
TOVFL
T_100
N_100_HEX
N_100_BCD
$0000
$0001
$0002
$0003
$0004
$0005
$0006
$0007
$0008
$0009
$000a
$000b
$000c
$000d
$000e
$000f
$??
$??
$??
$??
$??
$ff
$ff
$ff
$ff
$ff
$ff
$ff
$ff
$ff
$ff
$ff
b) Step through the section of your program that divides the variables T1 and T2 by decimal 100
to obtain T1_100 and T2_100. Use the hex pocket calculator to verify these results
T1_100=____________________2 point(s)
T2_100=____________________2 point(s)
c) Step through the section of your program that calculates TOVFL, the time taken by overflows,
expressed in 100s of cycles.
TOVFL=_____________________ 2 point(s)
d) Step through the section of your program that calculates T_100, the total time in 100s of cycles.
Note how the formula
T_100= TOVFL + T2_100 – T1_100
(1d)
is applied in two steps, first the addition, then the subtraction.
Dr. Victor Giurgiutiu
Page 361
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise DC MOTOR TACHOMETER
T_100=_____________________2 point(s)
e) Step through the section of your program that calculates the variable N_100_HEX, the hex
speed of rotation, in 100s of rpm. Note that the ‘magic’ number ???????*??/???/??? is loaded
into accD as $???? and then divided by T_100. At the end of the process, the value
N_100_HEX=$???? is obtained.
N_100_HEX=________________ 2 point(s)
f)
Table 2
Step through the last section of your program and calculate the variable N_100_BCD, which
represent the decimal expression of the hex speed of rotation, in 100s of rpm. The conversion
from hex to BCD is achieved by invoking the subroutine HEX-BCD. Fill in the missing values
(marked by ??). 1 point(s)
Memory list after the calculation of N_100_HEX
NOF
T1
T2
T1_100
T2_100
TOVFL
T_100
N_100_HEX
N_100_BCD
$0000
$0001
$0002
$0003
$0004
$0005
$0006
$0007
$0008
$0009
$000a
$000b
$000c
$000d
$000e
$000f
$??
$??
$??
$??
$??
$??
$??
$??
$??
$??
$??
$??
$??
$??
$??
$??
VERIFICATION OF CASE 2 OF EXAMPLE_RPM_2
Recall data from Case 2 of Example_RPM_2: NOF=2, T1=$fffd, T2=$1103. Note that this data
represents the same time interval as in Case 1, only that a backwards time shift of 9 cycles took place.
For this reason, the times T1 and T2 are on different sides of the time-change line. T1 happens before
the time change, T2 happens after. Therefore, between T1 and T2, the time counter TCNT goes through
a timer overflow. Hence, the overflow counter has the value NOF=2, instead of 1 as in Case 1.
Use your pocket hex calculator to estimate the result to be expected at the end of the program:
6 point(s)
T_100 = (NOF*$10000+T2-T1)/100 = ($02*$10000+$1103-$fffd)/$64 = $______
(1)
N_100_HEX = (2000000*60/100/100/T_100) = $2ee0/$2ba = $______
(2)
N_100_BCD = ______
(3)
Because the program needs to work with a finite word size, the variables in Equation (1) are first divided
by decimal100, such that Equation (1) is actually treated as:
T_100 = NOF*($10000)/100+T2/100-T1/100
Dr. Victor Giurgiutiu
Page 362
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise DC MOTOR TACHOMETER
The terms of equation (1) are calculated separately, as TOVFL, T1_100, T2_100. Hence, the following
operations are performed: 4 point(s)
T1_100 = T1/100 = $fffd/$64 = $______
(1a)
T2_100 = T2/100 = $1103/$64 = $______
(1b)
TOVFL = NOF*($10000)/100 = $02*$028f = $______
(1c)
T_100= TOVFL + T2_100 – T1_100 = $051e + $002b - $028f = $______
(1d)
Note that the result of Equation (1d) is the same as that of equation (1). Hence, Equations (2) and (3)
still stand.
Next, verify these arithmetic operations step-by-step:
g) Put Case 2 data in memory: NOF=2, T1=$fffd, T2=$1103. Table 3 reflects your memory list. Fill
in the missing values (marked by ??). 5 point(s)
Table 3
Memory list after Case 2 data has been entered
NOF
T1
T2
T1_100
T2_100
TOVFL
T_100
N_100_HEX
N_100_BCD
$0000
$0001
$0002
$0003
$0004
$0005
$0006
$0007
$0008
$0009
$000a
$000b
$000c
$000d
$000e
$000f
$??
$??
$??
$??
$??
$ff
$ff
$ff
$ff
$ff
$ff
$ff
$ff
$ff
$ff
$ff
h) Step through the section of your program that divides the variables T1 and T2 by decimal 100
to obtain T1_100 and T2_100. Use the hex pocket calculator to verify these results.
T1_100=___________________ 2point(s)
T2_100=___________________ 2point(s)
i)
Step through the section of your program that calculates TOVFL, the time taken by overflows,
expressed in 100s of cycles. Note that, initially,
TOVFL=___________________ 2 point(s)
j)
Step through the section of your program that calculates T_100, the total time in 100s of cycles.
Note how the formula
T_100= TOVFL + T2_100 – T1_100
(1d)
is applied in two steps, first the addition, then the subtraction. At the end of the process, the
same T_100 value as in Case 1 should be obtained.
T100=____________________2 point(s)
Dr. Victor Giurgiutiu
Page 363
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise DC MOTOR TACHOMETER
k) Step through the section of your program that calculates the variable N_100_HEX, the hex
speed of rotation, in 100s of rpm. Note that the ‘magic’ number ???????*??/???/??? is loaded
into accD as $???? and then divided by T_100. At the end of the process, the value
N_100_HEX=$???? is obtained, which is the same as in Case 1.
N_100_HEX=______________ 2 point(s)
l)
Step through the last section of your program and calculate the variable N_100_BCD, which
represent the decimal expression of the hex speed of rotation, in 100s of rpm. The conversion
from hex to BCD is achieved by invoking the subroutine HEX-BCD. At the end of the process,
the same N_100_BCD value as in Case 1 should be obtained. Fill in the missing values
(marked by ??). 1 point(s)
Table 4
Memory list after the calculation of N_100_BCD
NOF
T1
T2
T1_100
T2_100
TOVFL
T_100
N_100_HEX
N_100_BCD
$0000
$0001
$0002
$0003
$0004
$0005
$0006
$0007
$0008
$0009
$000a
$000b
$000c
$000d
$000e
$000f
$??
$??
$??
$??
$??
$??
$??
$??
$??
$??
$??
$??
$??
$??
$??
$??
WHAT YOU HAVE LEARNED
In this exercise, you have:
•
•
•
•
•
•
•
•
•
•
Consolidated your understanding of DC motor functionality
Developed a DC motor tachometer (RPM counter) program to be used in the lab
Reviewed the use of MCU Timer functions (free running clock, TCNT, overflow flag, TOF, input
capture clock, TIC1, and its event flag, IC1F, the selection of signal transition to be captured
(here rising edge, EDG1B) and that the MCU is only sensitive to that particular transition.
Started to use soft masks (here, IC1_MSK, TOF_MSK).
Been introduced to the concept of layered flowcharting of a program: big-picture with generic
descriptions; detailed flowcharts for particular sections of the program.
Reviewed the used of two time captures to calculate the time duration of an event
Used scaling factors (100s) to deal with numbers that are larger than the microcontroller word
length
Used a method of calculating multiplication through repeated additions and decrementation of a
counter
Used of a conversion subroutine to convert from hex to BCD
Performed rotation speed calculation using the recorded period of rotation
Dr. Victor Giurgiutiu
Page 364
8/19/2008
EMCH 367
•
Fundamentals of Microcontrollers
Exercise DC MOTOR TACHOMETER
Used of scaling factors (100s) to present the result on a display with limited number of digits.
Dr. Victor Giurgiutiu
Page 365
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise STEPPER MOTOR
EXERCISE – STEPPER MOTOR
OBJECTIVE
This exercise will help you learn how to control a stepper motor through keyboard using the serial
communication and parallel ports of the M68HC11: The following objectives are considered:
• Review the use and control of stepper motors.
• Discuss the stepper motor energizing patterns, 1- and 2-phase energizing types, full- and halfstep motion.
• Introduce the concept of creating quasi-continuous motion through a sequence of steps
• Introduce the concept of sequential accessing a finite set of stored patterns through index
addressing with a continuously updating pointer.
• Illustrate a method to ‘load’ a single-precision (2-hex) variable into a double precision (4-hex)
register.
• Introduce the concept of automatic incrementation/decrementation of the addressing pointer with
a programmable step size
• Discuss the reset actions to be taken when the pointer hits the ‘roof’ or ‘floor’.
• Review the use of keystroke commands for controlling a process
• Introduce the concept of ‘multiple sort’ and its ‘sequential sort’ equivalent
• Use a subroutine that can implement a long delay between stepper motor steps
• Introduce the concept of how to achieve double precision delays (4-hex) using single precision
(2-hex) variables
BASIC CONCEPTS
1) Using a stepper motor involves "stepping" through a series of control signals. For the stepper motor
configuration discussed in class, show the 2-hex numbers corresponding to full-step and half-step
operation during a complete revolution. 42 point(s)
Full-step operation
Step
Sequence
number
1
S1
2
3
4≡0
Half-step operation
Number
Sequence
2-hex of excited
coils
Step number
number
½
S0
$09
2
1
S1
1½
2
2½
3
3½
4≡0
2-hex
number
$08
$09
Number
of excited
coils
1
2
2) How does the step pattern differ for a rotation in the opposite direction from that in question 1?
4 point(s)
Dr. Victor Giurgiutiu
Page 366
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise STEPPER MOTOR
3) If a half step pattern is used, the number of steps per rotation is doubled. This technique decreases
the "holding power" of the motor. Explain why. 6 point(s)
4) Describe the difference between unipolar and bipolar connection of stepper motor coils. 6 point(s)
5) The stepper motors used in this lab are low speed devices. The maximum effective rotation speed is
approximately 200 steps/sec. This physical condition necessitates a wait loop between each step. It is
suggested that you use wait loop to let the stepper motor perform the command before sending to it
another command. A timer offset could be used and altered to meet the changing speed requirements
of the program. Considering the speed of the microprocessor, what is the smallest wait loop that
could be used? Enter your answer here: _________________________6 point(s)
PROGRAM STEPPER MOTOR
Note: This program will be based on the examples Step, Sort, and Long Delay. In fact, it can be
assembled from these two examples. Before performing the present programming, review, duplicate,
and operate the example codes Ex_Step.asm, Ex_Sort_asm, and Ex_Long_Delay.
This program should make the stepper motor run forward and backward, at half speed and full speed,
according to control keystrokes send through the keyboard and echoed on the screen. The "half-speed"
and "full-speed" commands are part of the coarse speed control. Fine speed control (increase speed,
decrease speed) should be attained by modifying the delay inserted between steps. The program should
recognize five keystroke commands:
i)
Move forward
>
ii)
Move backward
<
iii)
Increase speed (decrease delay)
+
iv)
Decrease speed (increase delay)
v)
Stop program
S
This program will take a little more thought. The programming will need to be done at several layers of
complexity, using program segments and subroutines from the examples Step, Sort, and Long Delay and
from previous examples. The following is the ‘big-picture’ of your program:
Dr. Victor Giurgiutiu
Page 367
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise STEPPER MOTOR
a) Define variables: patterns S0, S1, S2, S3, S4, S5, S6, S7; variables STEP, POINTER, DELAY
b) Initialize program:
Initialize X=REGBAS
i)
ii)
Initialize SCI
iii) Initialize stepper motor sequence S0—S7;
iv) Initialize control variables STEP=0, POINTER=$00, DELAY=$ff
c) Verify if new keystroke command has arrived. If N, jump directly to f)
d) "Echo" the command back to the terminal monitor for confirmation
e) Sort and process the keystroke command. Modify stepper motor controls based on the keystroke
command.
f) Perform delay
g) Perform step:
i)
Calculate pointer
ii)
Access next step pattern
iii)
Send step pattern to the stepper motor through Port B
h) Loop back to c)
FLOWCHART
Draw a flowchart for the program. Use a layered flowchart approach. Use subroutines to perform
delay and to perform step. It is up to you to go with your layered flowcharting as detailed as needed
for successful programming. Insert the flowchart below. 15 point(s)
CODING
Use the flowchart to code your program in the simulator using the standard template. Save the program
in the personalized file name LASTNAME_Firstname_Stepper_Motor.asm. Write or paste your coded
program below. 15 point(s)
EXECUTION
Open THRSim11. Close the Commands window. View CPU registers, PORTB register, serial register
SCSR (display binary), serial transmitter, serial receiver, active memory. Open and assemble your
program. Set standard labels. Set breakpoints as follows:
• Just before the program checks for SCI reception
•
After SCI reception
•
After SCI transmission
•
At beginning of delay subroutine
•
At beginning of step subroutine
•
At SWI
Arrange windows for maximum benefit. Press the RESET button.
Dr. Victor Giurgiutiu
Page 368
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise STEPPER MOTOR
a) Run your program to the first breakpoint. The program should go through initialization and give
values to the variables S0—S7, STEP, POINTER, DELAY. Paste your screen. 3 point(s).
b) Run further. The program should be looping at the beginning and wait for a keystroke.
c) Enter the character > into the serial transmitter window and Send. After a few moments, the
character should be received and the program should stop at the breakpoint. Paste your screen
below. 3 point(s)
d) Run further. The program should be waiting for SCI transmission to happen. After a few
moments it should stop.
e) Step through the program
f) Repeat with the other control keys and check that your program runs successfully. If you do not
get the desired results, debug your program.
WHAT YOU HAVE LEARNED
In this exercise, you have:
• Reviewed the use and control of stepper motors.
• Discussed the stepper motor energizing patterns, 1- and 2-phase energizing types, full- and halfstep motion.
• Introduced the concept of creating quasi-continuous motion through a sequence of steps
• Introduced the concept of sequential accessing a finite set of stored patterns through index
addressing with a continuously updating pointer.
• Illustrated a method to ‘load’ a single-precision (2-hex) variable into a double precision (4-hex)
register.
• Introduced the concept of automatic incrementation/decrementation of the addressing pointer
with a programmable step size
• Discussed the reset actions to be taken when the pointer hits the ‘roof’ or ‘floor’.
• Reviewed the use of keystroke commands for controlling a process
• Introduced the concept of ‘multiple sort’ and its ‘sequential sort’ equivalent
• Used a subroutine that can implement a long delay between stepper motor steps
• Introduced the concept of how to achieve double precision delays (4-hex) using single precision
(2-hex) variables
Dr. Victor Giurgiutiu
Page 369
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise A/D CONVERTER
EXERCISE – A/D CONVERTER
OBJECTIVE
This exercise will help you learn how to use the M68HC11 microcontroller to collect analog data in
digital format. The following objectives are considered:
• Review the use of A/D conversion function of the M68HC11 microcontroller.
• Illustrate the use of A/D conversion to convert an analog voltage signal on a designated channel
(Port E pin) into four sequential digital values
• Demonstrate how to calculate an average of four values and send it to Port B for display
BASIC CONCEPTS
1) Explain what register must be set, and to what bit pattern, in order to activate (turn on) the AD
converter of M68HC11 microcontroller during the initialization segment of your program. 6 point(s)
2) Identify and write below the bit pattern setting of the A/D conversion control register ADCTL to
achieve a one-time conversion of the input signal on channels PE3 6 point(s)
ADCTL = %????????
3) Identify and write below the bit pattern setting of the A/D conversion control register ADCTL to
achieve continuous conversion of an the input signal on channels PE3 6 point(s)
ADCTL = %????????
4) Identify and write below the bit pattern setting of the A/D conversion control register ADCTL to
achieve a one-time conversion of input signals on channels PE4 – PE7 6 point(s)
ADCTL = %????????
5) Identify and write below the bit pattern setting of the A/D conversion control register ADCTL to
achieve continuous conversion of input signals on channels PE0 – PE3 6 point(s)
ADCTL = %????????
6) Fill Table 1 with the predicted AD conversion values for each voltage value. 18 point(s)
Table 1
1
2
3
4
5
6
Voltage at pin PE4 (mV)
750
1600
2200
3000
4000
5000
James Kendall
AD converted values (Hex)
$26
$??
$??
$??
$??
$??
Page 370
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise A/D CONVERTER
PROGRAM A/D CONVERTER
Note: This program will be based on the Example A/D converter. Before performing the present
programming, review, operate, and duplicate the example codes Ex_AD_1.asm, Ex_AD_2.asm,
Ex_AD_3.asm and Ex_AD_4.asm. However, only one of these four example codes is needed to
complete the program for this exercise (Choose wisely!).
PROGRAM DESCRIPTION
This program should make the MCU perform continuous A/D conversion on pin PE4, store the
conversion results in double precision variables VAL1 – VAL4, average some of the values VAL1 –
VAL4, and send out the averaged result through port B. The averaging is done by sequentially adding
the values VAL1 – VAL4 into accD and then dividing by 4 using the inherent operation IDIV. Because
IDIV utilizes register X, you will have to use register Y for indexed addressing in your program. Also,
note that, in this program, VAL1 – VAL4 are double precision, while in the Example A/D converter
they were single precision. You need to have VAL1 – VAL4 as double precision variables in order to
properly perform the sequential addition in accD.
The following steps should be considered in your program:
a) Define program variables, double precision VAL1 – VAL4
b) Initialize index register Y to REGBAS
c) Activate (turn-on) A/D converter function of the MCU
d) Set A/D control register ADCTL to perform continuous conversion on channel PE4
e) Zero accD
f) Load and store the converted values from ADR1 – ADR4 to VAL1 – VAL4. Perform these
operations using the appropriate accumulator such that at the end of the process the single
precision values existing in ADR1 – ADR4 get properly stored in the double precision variables
VAL1 – VAL4 (Hint: recall that accD = accA:accB).
g) Sequentially add VAL1 through VAL2 into accD.
h) Store the number 2 into register X (this is the denominator
i) Perform the division operation IDIV.
j) Send result of division through Port B for display
k) Loop back to e)
FLOWCHART
Draw a flowchart for the program. Use a layered flowchart approach. It is up to you to go with your
layered flowcharting as detailed as needed for successful programming. Insert the flowchart below.
15 point(s)
CODING
Use the flowchart to code your program in the simulator using the standard template. Save the program
in the personalized file name LASTNAME_Firstname_AD.asm. Write or paste your coded program
below. 17 point(s)
James Kendall
Page 371
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise A/D CONVERTER
EXECUTION
Open THRSim11. Close the Commands window. Activate your program. View CPU registers, Port E
pins, AD converter registers, Port B register, memory list, Sliders E port. View ADCTL as binary. Open
and assemble your program. Set standard labels. Set breakpoints at SWI. Arrange windows for
maximum benefit. Press the RESET button. Paste your screen: 2 point(s)
g) Enter the value 750 mV in PE4. Look up the expected value after conversion in Table 1. The
expected value is ______?????? 6 point(s)
h) Let your program run. The program should go through initialization and perform an AD
conversion giving values in registers ADR1 – ADR4. Stop program and paste your screen.
2 point(s)
i) Set breakpoint at the line performing ‘zero accD’.
j) Reset. Fill VAL1 – VAL 4, and PORTB with $ff. Let run to the breakpoint
k) Step through the program. The following should happen:
a. Values from registers ADR1 – ADR4 should be loaded into the lower part of accD and
then stored in the double precision values VAL1 – VAL4. Paste your screen below when
this has happened just for ADR1: 2 point(s)
b.The values in VAL1 – VAL4 should be sequentially added into accD and then divided by
X. Paste your screen below when this has happened for VAL1 and VAL2: 2 point(s)
c. The division by number 4 is performed. Paste your screen below when this has happened:
2 point(s)
d.The division result, i.e., the average value, is stored in Port B. Paste your screen below
when this has happened: 2 point(s)
l) Repeat with the other voltage values indicated in Table 1. Paste your screen below at the end of
each cycle: 2 point(s)
m) Clear the breakpoint at ‘zero accD’ and let your program run freely. Move the PE4 sliders up and
down and watch the value in Port B change accordingly.
WHAT YOU HAVE LEARNED
In this exercise, you have:
• Reviewed the use of A/D conversion function of the M68HC11 microcontroller.
• Used of A/D conversion to continuously convert an analog voltage signal on Port E pin PE4
• Stored the four sequential digital values resulting from conversion as double precision values
VAL1 – VAL4
• Calculated the average of the four values using sequential addition into accD and IDIV division
by the number 4 loaded in register X.
• Sent the double precision content of register X to Port B for display as a single precision number.
James Kendall
Page 372
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Exercise A/D CONVERTER
(This page is left intentionally blank)
James Kendall
Page 373
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Labs
LABS
The labs focus on hands-on experience with the microcontroller unit (MCU) and ancillary hardware.
Programming for the labs can be effectively achieved by using the code, programs, and subroutines
developed during the homework assignments.
Lab 1
Hmwk1
Hmwk2
Hmwk3 – Ex10
Hmwk3 – Ex_Delay
Hmwk4
Hmwk5
Hmwk6
Hmwk7
Hmwk8
Lab 2
Lab 3
Lab 4
Lab 5
X
X
X
X
X
X
X
X
X
The labs are given next
Dr. Victor Giurgiutiu
Page 374
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Labs
Lab Handout
NO food and NO drinks !!!
Door code: 41325
Color code of wires on breadboard:
Green: +15V
Black: 0V
Red: +5V
White: -15V
Yellow: signal
MINIIDE INSTRUCTIONS
1. Open miniIDE by double clicking the miniIDE icon on the desktop;
2. Connect the EVB to the host computer by 1) clicking the
icon and 2) pressing the reset button
with the pencil. If a welcome message is shown on the screen, the EVB is connected, if not, call help
to your TA.
3. Open an .ASM code file in your floppy disk. If needed, modify the codes and save. Hint: put star *
mark at the beginning of the last two lines (after the command SWI) to comment these two lines. i.e.
SWI
*
ORG
$FFFE ; reset vector
*
FDB
START ; set to start of program
4. Compile the program by clicking the
icon;
5. Type “LOAD T” in the terminal (bottom) window and press “ENTER” key;
Then click the download icon
. (Now the compiled program is downloaded into the
microcontroller’s RAM.)
6. Use command RM to check the registers, and reset them if needed. Make sure the PC (Program
Counter ) points to the starting address of your programs, i.e. PC is C000).
7. Type in “T” to run the program step by step.
8. Or, type in “GO C000” in the terminal window to run the program automatically.
Dr. Victor Giurgiutiu
Page 375
8/19/2008
EMCH 367
Type in
Fundamentals of Microcontrollers
Labs
How to use the ‘RM’ command:
>RM <enter>
PC – xxxx
Y – xxxx
X – xxxx
A – xxxx
PC – C000
Y – 0000
•
Use the “space” key to get to the next register
•
Use the “enter” key to get out of the setup
How to use the ‘MM’ command:
MM (MEMORY MODIFY) command will allow you to change the value at specific memory locations.
Type in the memory address after the MM command.
Here is an example:
MM 0000
How to use the ‘MD’ command:
MM (MEMORY DISPLAY) command will allow you to view the value at specific memory locations.
Type in the memory address after the MM command.
Here is an example:
MD 0000
Dr. Victor Giurgiutiu
Page 376
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Labs
Some of the frequently used BUFFALO commands are listed alphabetically in the Table below.
COMMAND
DESCRIPTION
HELP
Display monitor commands
ASM [<addr>]
Assembler/disassembler
BF <address1> <address2> <data>
Block fill memory with data
BR [-][<addr>]
Set up breakpoint
CALL [<address>]
Execute subroutine
Execute program
GO [<address>]
Memory Display
MD [<address1> [<address2>]]
Memory Modify
MM [<address>]
MOVE <address1> <address2>
Move memory to new location
[<destination>]
OFFSET [-]<arg>
Offset for download
Register Modify
RM [p, y, x, a, b, c, s]
Trace $1~$ff instructions
T [<n>]
RD
Register Display
miniIDE Program Interface
menu
toolbar
Editor Window
( Your .asm file here )
Output Window
( Your compile information, errors, etc. )
Terminal Window
BUFFALO 2.5
> ( type your BUFFALO command here )
Dr. Victor Giurgiutiu
Page 377
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Labs
Attention:
•
Have your .asm files ready before you come to the LAB
•
You need to print out the lab report before you come to the LAB. You will finish it when you are
doing the LAB and hand in the report right after the lab.
•
You need to keep this handout at hand as reference for Labs.
•
CLEAN UP your mess, put everything back in order and turn off the oscilloscope before you
leave.
Dr. Victor Giurgiutiu
Page 378
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Labs
(This page is left intentionally blank)
Dr. Victor Giurgiutiu
Page 379
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Lab 1
LAB 1 - BASIC PROGRAMMING
OBJECTIVE
The objective of this lab is to develop basic programming skills in direct contact with the Motorola
68HC11 microcontroller unit (MCU).
PREREQUISITES
Floppy disk with the asm codes
Hard copy (printout) of Hmwk1 Hmwk2, Hmwk 3. When printing, use the 'pages per sheet'
option in the lower right corner of the print dialog-box with settings of 4 or 2 (depending on your
eyesight) to save paper. (We may want to experiment a little with this before printing the full
document.)
PROCEDURE
The students will utilize the asm code developed with the THRSim11 simulator for Hmwk1 and Hmwk2.
The students will go through their Hmwk1 and Hmwk2 step by step and will find how the MCU
responds to their instruction. The lab is divided into sections. After completing each section, the student
will ask the TA to check the student’s work and make a check mark on that section.
The asm code is compiled and downloaded into the MCU through the MiniIDE terminal emulator
software. The same software allows to correct/modify/re-save the code as the need arises. When using
the MiniIDE, the following procedure is used to 'activate' your program in the MCU:
a) Verify that the power supply is active, and that the MCU is connected to the power supply
b) Open the MiniIDE program
c) Connect it to the processor using the menu item ‘Terminal connect/disconnect’ button.
d) Open your asm program from the floppy disk
e) Compile your asm program
f) Type “LOAD T” in the terminal window and press enter. Download the S19 code of your
program to the MCU using the 'Download' button
g) Type the BUFFALO command RM in the command window. Verify that the program counter
(PC) is set to the value $C000. If not, set it to $C000.
h) Reset accA and accB by typing 0 at the command prompt
j) To step through the program, use the BUFFALO command T
k) To run the program, use the BUFFALO command G, with the starting PC (e.g., $C000)
Hmwk 1 -- Exercise 1
Activate your LASTNAME_Firstname_Ex1.asm file.
Step through the program and compare what you see happening in PC, accA, accB with your predictions
from Exercise 1.
When satisfied with your results, call your TA and demonstrate.
TA checkmark ________
Hmwk 1 -- Exercise 2
Activate your LASTNAME_Firstname_Ex2.asm file.
Step through the program and compare what you see happening in PC, accA, accB with your predictions
from Exercise 2.
When satisfied with your results, call your TA and demonstrate.
TA
checkmark ________
Hmwk 2 -- Exercise 3-7
Activate your LASTNAME_Firstname_Ex3-7.asm file. Step through the program and compare what
you see happening in PC, accA, accB with your predictions from Exercise 3-7.
Dr. Victor Giurgiutiu
Page 380
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Lab 1
Note that when decimal numbers are specified in the asm code, their hex equivalent are actually loaded.
Verify the conversion with your pocket calculator. When satisfied with your results, call your TA and
demonstrate.
8+7=15
TA checkmark ________
$08+$07=$0f
TA checkmark ________
9+9=18
TA checkmark ________
$09+$09=$12
TA checkmark ________
12+29=41
TA checkmark ________
$0c+$1d=$29
TA checkmark ________
$ff+$01=$00
TA checkmark ________
255+1=0
TA checkmark ________
Hmwk 2 -- Exercise 8-9
Activate your LASTNAME_Firstname_Ex8-9.asm file.
Step through the program and compare what you see happening in PC, accA, accB with your
predictions from Exercise 3-7.
Note that when decimal numbers are specified in the asm code, their hex equivalent are actually
loaded.
When satisfied with your results, call your TA and demonstrate.
8-1=7
TA checkmark ________
$08-$01=$07
TA checkmark ________
20-1=19
TA checkmark ________
$20-$01=$1f
TA checkmark ________
$00-$01=$ff
TA checkmark ________
0-1=255
TA checkmark ________
$0f-$07=$08
TA checkmark ________
$00-$07=$f9
TA checkmark ________
0-7=249
TA checkmark ________
$0f-$2b=$e4
TA checkmark ________
15-43=228
TA checkmark ________
Hmwk 3 -- Exercise 10
Activate your LASTNAME_Firstname_Ex10.asm file.
Step through the program and compare what you see happening in PC, accA, accB with your
predictions from Exercise 3-7.
Note that when decimal numbers are specified in the asm code, their hex equivalent are actually
loaded.
When satisfied with your results, call your TA and demonstrate.
i) one through seventeen
TA checkmark ________
ii) 5+4=9
TA checkmark ________
iii) 15-7=8
TA checkmark ________
iv) $1f+$01=$
TA checkmark ________
v) $20-$01=$
TA checkmark ________
vi) $ff+$01=$
TA checkmark ________
vii) $00-$01=$
TA checkmark ________
viii)
0 AND 1 =
TA checkmark ________
ix) 0 OR 1 =
TA checkmark ________
x) 0 XOR 1 =
TA checkmark ________
xi) 1 OR 1 =
TA checkmark ________
xii) 1 XOR 1 =
TA checkmark ________
xiii)
%00000000 NAND %11111111 = %
TA checkmark ________
Dr. Victor Giurgiutiu
Page 381
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
xiv)
%11111111 NOR %00000000 = %
xv) %10101110 AND %00001000 = %
Dr. Victor Giurgiutiu
Page 382
Lab 1
TA checkmark ________
TA checkmark ________
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Lab 1
(This page is intentionally left blank)
Dr. Victor Giurgiutiu
Page 383
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Lab 2
LAB 2 – PARALLEL AND SERIAL COMMUNICATION
OBJECTIVE
The objectives of this lab are to review the parallel and serial communication in the MC68HC11
microcontroller. The objective of this laboratory experiment is to learn how to use the serial
communication port of the M68HC11. Basic concepts of serial communications will be reviewed. The
registers used to transmit and receive serial communications data and the RDRF and TDRE flags used to
identify whether or not serial communications data has been received or sent will be examined. The
BAUD rate and other aspects of the serial communications interface (SCI) will be investigated..
• Review the use parallel ports
•
Illustrate the generation of a square wave using Port B output and a waiting sequence
•
Illustrate the use of Port C for input and output using a 4-button 4-LED box
•
Examine the relation between time and clock cycles
•
Review the use of serial communications
•
Investigate BAUD rate, ASCII code, 10-bit serial communication
•
Develop and practice the concept of echo
•
Measure serial communications signals, including the start bit, ASCII code, and the stop bit,
using the oscilloscope with an external trigger generated by MCU
PREREQUISITES
Floppy disk with the asm codes for the programs:
• LASTNAME_Firstname_Buttons_bx.asm
•
LASTNAME_Firstname_Sq_wav1.asm
•
LASTNAME_Firstname_Sq_wav2.asm
•
LASTNAME_Firstname_Echo.asm
Hard copy (printout) of Hmwk4a and Hmwk 4b. When printing, use the 'pages per sheet' option
in the lower right corner of the print dialog-box with settings of 4 or 2 (depending on your
eyesight) to save paper. (We may want to experiment a little with this before printing the full
document.)
PROCEDURE
The students will utilize the asm code developed with the THRSim11 simulator for Hmwk4a and
Hmwk4b. The students will go through their Hmwk4a and Hmwk4b step by step and will verify that the
MCU responds to instructions as expected.
The lab is divided into sections. After completing each section, the student will ask the TA to check the
student’s work and make a check mark on that section.
The asm code is activated into the MCU following the standard procedure learned in Lab 1.
Dr. Victor Giurgiutiu
Page 384
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Lab 2
WARM UP EXERCISES
1)
Connect the oscilloscope Channel 1 through a hook probe to Port B Pin0 using a male connector.
Set the oscilloscope Channel 1 to DC, 5V/div, and zero vertically in mid screen. Use the MM
command to put $01 into PORTB, i.e., in the MCU address $1004. The oscilloscope signal
should jump to 5 V. Put again $00 in PORTB. The oscilloscope signal should jump to 0 V. Do
you observe this? ___ Y ___ N
2)
Assume $A5 is loaded into PORTB at address $1004. What will be the output of parallel port B?
Predict the results in the table below. Label which pin is the MSB.
Port B
PB7
PB6
PB5
PB4
PB3
PB2
PB1
PB0
pins
Value
Use the MM command to put $A5 into PORTB, i.e., in the MCU address $1004. Verify the output of
parallel port B with the oscilloscope and the 8-LED display. Check the voltages on all of the pins of
parallel port B (PB0 - PB7) with the oscilloscope. Then check them with the 8-LED display. Write down
your observations.
PB0:
V PB1:
V PB2:
V PB3:
V
PB4:
V PB5:
V PB6:
V PB7:
V
When satisfied with your results, call your TA and demonstrate.
TA checkmark ________
3)
If you place $fa in DDRC at address $1007 and then load $c8 into PORTC at address $1003,
what will be the output of parallel port C? Enter your prediction in the table below.
DDRC pins
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Value
Port C pins
PC7
PC6
PC5
PC4
PC3
PC2
PC1
PC0
Value
Load $fa in DDRC at address $1007 and then load $C8 into PORTC at address $1003. Verify the output
of parallel port C. Check the voltages on all of the PC0 - PC7 pins of parallel port C with the
oscilloscope probe. Then check them with the 8-LED display. Write down your observations.
PC0:
V PC1:
V PC2:
V PC3:
V
PC4:
V PC5:
V PC6:
V PC7:
V
When satisfied with your results, call your TA and demonstrate.
TA checkmark ________
Dr. Victor Giurgiutiu
Page 385
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Lab 2
SQUARE WAVE
Use the code LASTNAME_Firstname_Sq_wav2.asm generated in Hmwk4a.
The parallel port B is used to generate a square wave. A square wave is a signal that is high for a
specified period of time, then low for a specified period of time. In this case, the high state will be +5V,
and the low state will be 0V. Your target is to generate a square wave signal with the period of time for
each state (half-wavelength) approx. 100 μs. The square wave signal generated by your MCU will be
measured on the oscilloscope screen and compared with your predictions.
Your code should make the MCU send out a low signal for a specified time, then a high signal for the
same time. After sending out a high signal and then a low signal, it will repeat the process. The duration
of the high and low states is specified using the variable DELAY. The variable DELAY is used in a wait
subroutine. The MCU is a very fast device. Our M68HC11 has an 8 MHz crystal, which generates a 2
MHz clock speed. Compute and answer the following questions:
a) What is the shortest duration of time that the oscilloscope can measure per division? Look up
on the oscilloscope panel and enter your answer here: ___________________________
b) What is the duration of an M68HC11 machine cycle? Calculate your answer using the
M68HC11 clock speed of 2 MHz and enter your answer here: ________________________
Activate the code LASTNAME_Firstname_Sq_wav2.asm. According to your Example Square wave,
when value $40 is entered in DELAY (The address of DELAY is 0000; Buffalo command MM 0000 is
used to change the value of DELAY), the length of your half-wave, Δt, should be 165 μs. Hook the
oscilloscope probe to the pin corresponding to your coding, and verify that what you see on the
oscilloscope screen meets with your predictions. (Adjust the time/div button to see the square wave
properly…). Write here the half-wavelength value read on the oscilloscope screen ______ μs.
Change DELAY to the other values given in the table below, and run your program again. Enter the Δt
(μsec) predicted by you using the simulator (see Hmwk4a) and the values read on the oscilloscope
screen.
DELAY
Δt (μsec)
Measured by simulator
Δt (μsec)
Measured on
oscilloscope
Col 3
Error, %
(col 2 – col 3)/col 3
Col 1
Col 2
Col 4
$10
$__
100
100
0%
$40
165/166
165
0.3%
$A0
$FF
Try to adjust the value of DELAY to have the half-wave last 100 μs. With just a few trials, you should
be able to find the right value of DELAY to achieve this. The value you found is: DELAY =
$_________ Enter the value in the table.
When satisfied with your results, call your TA and demonstrate.
TA checkmark ________
Dr. Victor Giurgiutiu
Page 386
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Lab 2
BUTTONS BOX
You are given a box (see Figure) with four buttons and four LED’s (light emitting diodes). When
pressed, the buttons (B0, B1, B2, B3) produce either +5 Volt (Normally Open = N.O. type buttons) or 0
Volt (Normally Closed = N.C. type buttons). The buttons are connected (through a port protection card)
to the even port C pins PC0, PC2, PC4, and PC6. The LED’s are connected to the odd port C pins PC1,
PC3, PC5, and PC7.
Port C
B0
5V
PC7
LED’s
PC1
PC3 PC5
5V
Buttons
PC0 PC2 PC4
PC6
5V
W ires:
Green=Gnd
Red = +5 V
Port C connection
5V
L0
B1
L1
B2
PC0
PC1
PC2
PC3
PC4
L2
B3
PC5
PC6
L3
PC7
Figure 4
The 4-Button 4-LED Box: (a) photo; (b) diagram
Attach the box to the microprocessor through a port protection card. Be careful that you connect the
MSB of the button box to the MSB of the microprocessor. Activate your
LASTNAME_Firstname_Buttons_bx.asm program. Press buttons and see how the corresponding LED
is lighting up. When satisfied with your results, call your TA and demonstrate.
TA checkmark ________
Dr. Victor Giurgiutiu
Page 387
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Lab 2
SERIAL COMMUNICATION ECHO
You wish to create a program that will receive a keystroke from the terminal keyboard, and echo the
same keystroke, continuously, to the terminal screen. The program will also let you see the binary
pattern of keystrokes sent from the computer to the MCU. To achieve this, you will continuously check
if the MCU has received, via SCI reception, a keystroke from the computer keyboard. When a key has
been pressed, you will send out its ASCII value through the parallel port B, and back through the SCI
transmission. A LED board, affixed to the parallel port B, will display the bit pattern of the ASCII value.
This way, you check that the bit pattern corresponds to the ASCII table.
Serial cable
Wire connected to TXD
pin PD1
Figure 2
Dr. Victor Giurgiutiu
Connection diagram of serial communication
Page 388
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Lab 2
You will also monitor the communication by tapping the serial communications signal and displaying it
on the oscilloscope screen. You will be able to see the complete 10-bit pattern, and the time duration of
the communication. This exercise is based on Hmwk4b, Serial communication.
a) Fill in the ASCII codes for each key listed in Table #1.
b) Connect the LED board to port B. Attach a probe from channel 2 to parallel port C. Attach
another probe from O-scope channel 1 to the leading out wire (serial communication TXD pin
PD1). Set the O-scope trigger to channel 2, Set display to “Both”.
c) Activate your code LASTNAME_Firstname_Echo.asm. in the MCU and run it. Press key "Q"
on the keyboard. The character should appear on the screen continuously, while its ASCII code
is sent out through the parallel port B and displayed on the LED board. Read the bit pattern
displayed on the LED board and enter it in Table #1. Write the equivalent Hex number and
compare the ASCII code.
d) Manipulate the time (horizontal) scale, amplitude (vertical) scale, and the trigger level, until you
see both the triggering pulse and the serial communications transmission. Identify the start bit,
the ASCII code for the character being transmitted, and the stop bit on the oscilloscope screen.
Compare the ASCII code listed in M68HC11 Quick Reference Manual to the one displayed on
the oscilloscope. Enter your answer in Table 1.
e) Use the oscilloscope to calculate the BAUD rate of the MCU
Duration of signal Δt = ________ ms; Number of bits read in the signal N = ________;
Calculated BAUD rate = # of bits/duration = N /Δt =____________bits/sec
f) Repeat for keys 0, 3, 8, D.
g) Sketch below the 10-bit pattern observed on the oscilloscope screen for character Q.
Dr. Victor Giurgiutiu
Page 389
8/19/2008
EMCH 367
TABLE 1
Key
ASCII code
Fundamentals of Microcontrollers
Q
0
3
8
Lab 2
D
51
LED
MSBÆLSB
8-bit pattern
Equivalent
Hex values
O-scope
8-bit pattern*
Equivalent
Hex values
* This should be the 8-bit character as you see it on the O-scope screen.
When satisfied with your results, call your TA and demonstrate.
TA checkmark ________
Dr. Victor Giurgiutiu
Page 390
8/19/2008
EMCH 367
Dr. Victor Giurgiutiu
Fundamentals of Microcontrollers
Page 391
Lab 3
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Lab 3
LAB 3 – TIMER FUNCTIONS: BOLT DROP AND SQUARE WAVE
OBJECTIVE
This lab will use MC6811 to perform time measurements. Part I will perform time measurements on a
dropping bolt using input capture (IC) timer functions. Part II will generate a square wave using output
compare (OC) timer functions.
PREREQUISITES
Floppy disk with the asm codes for the programs:
• LASTNAME_Firstname_Drop.asm
•
LASTNAME_Firstname_OC_sqwav.asm
Hard copy (printout) of Hmwk5 – Timer functions. When printing, use the 'pages per sheet'
option in the lower right corner of the print dialog-box with settings of 4 or 2 (depending on your
eyesight) to save paper. (We may want to experiment a little with this before printing the full
document.)
PROCEDURE
The students will utilize the asm code developed with the THRSim11 simulator for Hmwk5. The
students will go through the printout of Hmwk5 step by step and will verify that the MCU responds to
instructions as expected.
The lab is divided into sections. After completing each section, the student will ask the TA to check the
student’s work and make a check mark on that section.
The asm code is activated into the MCU following the standard procedure learned in Lab 1.
Dr. Victor Giurgiutiu
Page 392
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Lab 3
PART I – BOLT DROP EXPERIMENT (50%)
Note: This part uses the timer program
LASTNAME_Firstname_Drop.asm developed in the Figure 1 Bolt drop experimental setup
section “Input capture – bolt drop experiment” of
Hmwk5.
Electromagnet
MC6811 will be used in an experiment to measure
travel times. A 1.5-in bolt will be held by an
electromagnet at the top of a drop shaft. The
electromagnet is connected to the MCU. . This
Drop shaft
magnet is controlled by any of the 8 pins on PORTB.
It is turned on by sending 5V through parallel PORTB.
When a keystroke occurs, the MCU commands the
electromagnet to release the bolt. Simultaneously, the
time origin, T0, is recorded. The bolt travels down the
Electronics
shaft. After falling a specified distance (L = 48.75-in),
the bolt crosses an infrared emitter-detector sensor
and interrupts its beam causing its output voltage to
fall from high (+5V) to low (~0V). When the bolt
exits the emitter detector sensor, its output voltage
comes back up to high (+5V). The output from the
emitter-detector sensor is wired into the input capture
pins IC1 and IC2 of the MCU. You will program the
microcontroller to perform the following functions: (a)
control the electromagnet, (b) take the initial time
when the process starts, (c) measure the time required
for the free-falling bolt to reach the emitter-detector;
(d) measure the time required for the bolt to pass
through the emitter-detector.
Emitter-detector
sensor
WIRING DIAGRAM
Wire
Green wire:
Red wire
Black wire
White wire:
Yellow wire
with 2 prongs:
Dr. Victor Giurgiutiu
Connection
+15V
+5V
Ground
To parallel port B pin controlling the
magnet
Signal wire to the input capture pins IC1
and IC2
Page 393
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Lab 3
BOLT DROP CIRCUIT DIAGRAM
+5V
1KΩ
E+
+15V
+D
1KΩ
+5V
Electromagnet
+5V
+5V
1KΩ
IRF510
R250
Port A pin 1
Port A pin 2
470KΩ
3
76
Port B pins
10Ω
1KΩ
1
-
+
Comparator
LM2901 12
PRE-TEST PROCEDURE
Before starting your test, perform the following pre-test procedure to verify that your experimental setup is performing correctly:
i)
Check the correct wiring of the bolt drop set up:
Wire
Green wire:
Red wire
Black wire
White wire:
Yellow wire
with 2 prongs:
Connection
+15V
+5V
Ground
To parallel port B pin controlling the
magnet
Signal wire to the input capture pins IC1
and IC2
Check mark
TA checkmark ________
ii)
Take the white wire out of the Port B connection (if connected). Check the
electromagnet holding action upon the bolt by applying 5V to the white wire. The bolt
should hold. Then, check the release action by applying 0 V. [Note that 0 V is different
from “no-voltage” (floating wire). A floating wire may not release the bolt] The bolt
should drop.
iii)
Connect O-scope Ch.1 to the signal wire (yellow). Set Trigger Mode to Auto and
Horizontal to 0.2 sec/div. You will see a spot traveling across the screen at 5V level. (If
Dr. Victor Giurgiutiu
Page 394
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Lab 3
the spot is too bright, adjust Brightness Intensity). By hand, introduce the bolt in the
emitter-detector zone at the lower end of the tube and watch the signal go to 0V on the
O-scope screen. Extract the bolt and watch the signal go back to 5V. Now, let the bolt
drop through the tube and watch the fast 5V/0V/5V transition (spot flicker) on the
screen.
iv)
Connect the white wire to port B. Manually, send a 5V voltage through port B (i.e.,
store $ff into Port B at memory location $1004) and verify that the electromagnet holds
the bolt. Now, send a 0V through port B (store $00 into Port B at memory location
$1004) and observe the electromagnet releasing the bolt. Watch the 5V/0V/5V
transition on the screen as the dropping bolt passes the emitter-detector sensor.
v)
Where are IC1 and IC2 located (port and pin)? Enter your answer here:
_____________________ Draw a sketch of the pin assignments in the space below
vi)
Connect the signal wire (yellow) to IC1 and IC2 pins.
TA checkmark ________
TEST PROCEDURE
i) Put the bolt into the electromagnet hold position
ii) Activate the program LASTNAME_Firstname_Drop.asm.
iii) Press any key. The bolt should drop and the program should stop when the bolt exits the tube.
iv) Read the memory locations for T0, T1, T2, NOF1, NOF2. Record the readings in the table.
v) Perform all the 6 trials and enter the appropriate values in the table.
TA checkmark ________
vi) Start manual calculations by completing the formulae below:
Time of entry: t1 = [T1+NOF1*($__________)-T0] cycles * (_____________ s/cycle)
Time of exit: t2 = [T2+NOF2*($__________)-T0] cycles * (_____________ s/cycle)
Time for bolt to pass: Δt = t2 – t1
Velocity: v = L/Δt = _____/Δt (in/s)
Error: ε = (theoretical – measured)/theoretical *100%
TA checkmark ________
Then, calculate t1, t2, Δt, v in the table.
vii) Use the formulae to calculate the measured time of entry in each trial
viii) Calculate the average measured time of entry, t1, and its deviation.
ix) Use the formulae to calculate the measured time of exit in each trial
x) Calculate the average measured time of exit, t2, and its deviation.
xi) Use the measured time of entry and time of exit in each trial to calculate the measured time
taken by the bolt to pass through.
xii) Calculate the average measured time of passing, Δt, and its deviation.
Dr. Victor Giurgiutiu
Page 395
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Lab 3
xiii) Use the appropriate formula to calculate the bolt velocity using the measured time of passing
and its deviation.
xiv) Use the formulae to calculate the measured time required for the bolt to pass in each trial
Trial
1
2
3
T0
T1
T2
NOF1
NOF2
T1+NOF1*$10000-T0
Measured time of entry (ms)
Average measured time of entry, t1 (ms)
Theoretical time of entry (ms) and error (%)
t1 _____ ms
εt = ____%
t1,theory = ________ ms,
T2+NOF2*($__________)-T0
Measured time of exit (ms)
Average measured time of exit, t2 (ms)
t2 _____ ms
Measured time for bolt to pass through
emitter-detector (ms)
Average Δt (ms)
Δt _____ ms
Average measured velocity v (in/s)
v ____ in/s
Theoretical velocity (in/s) and error (%)
vtheory = ________ in/s,
εv = ____%
xv)Compare the experimental results with the theoretical results calculated in Ex_Timer and discuss
any discrepancies. Comment upon the error of your measurements, and discuss possible
sources of errors. Enter your answers in the space below.
TA checkmark ________
Dr. Victor Giurgiutiu
Page 396
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Lab 3
PART II – SQUARE WAVE GENERATION WITH TIMER FUNCTIONS (50%)
In this part of the lab, you will generate a square wave with the microcontroller. In Lab 2, you generated
a square wave through a parallel port pin using a wait loop. Here, you will generate a square using the
output compare timer function of the microcontroller. The square wave will be generated at the port A
pin OC5.
WIRING DIAGRAM
Fill in the space at the end of the next sentence. The port A location of pin OC5 is at pin PA___.
Connect the oscilloscope Channel 1 probe to this pin.
TA checkmark ________
TEST PROCEDURE
1. Using the results derived in Hmwk5, fill in the missing information in the first two rows of the table
below.
2. Connect the OC5 pin of port A to the oscilloscope Channel 1.
3. Activate the program LASTNAME_Firstname_OC_sqwav.asm
4. Put the value DT=$0100 and run your program(Buffalo command MD 0000 to display the memory
area, MM ADDRESS to modify the values of variables)
5. Watch the signal on screen and measure the half wavelength duration of the square wave, in μs.
Enter the value in the table below
6. Compute the corresponding ‘measured frequency’
TA checkmark ________
7. Calculate the absolute and relative errors
8. Repeat for the other values in the table
Desired frequency
(Hz)
Calculated DT
$0100
$8000
$ffff
250
1500
$
$
Measured half
wavelength duration
(μs)
Measured Frequency
(Hz)
Absolute error (Hz)
Relative error (%)
TA checkmark ________
Dr. Victor Giurgiutiu
Page 397
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Lab 4
LAB 4 – DC MOTOR TACHOMETER
OBJECTIVE
The objectives of this laboratory are:
(a) To understand the functioning of a DC motor
(b) To test the DC motor tachometer program developed in Hmwk6.
PREREQUISITES
Floppy disk with the asm codes for the program:
• LASTNAME_Firstname_RPM.asm
Hard copy (printout) of Hmwk6 – Digital tachometer. When printing, use the 'pages per sheet'
option in the lower right corner of the print dialog-box with settings of 4 or 2 (depending on your
eyesight) to save paper. You may want to experiment a little with this before printing the full
document.
PROCEDURE
The students will utilize the asm code developed with the THRSim11 simulator for Hmwk6. The
students will go through the printout of Hmwk6 step by step and will verify that the MCU responds to
instructions as expected.
The lab is divided into sections. After completing each section, the student will ask the TA to check the
student’s work and make a check mark on that section.
The asm code is activated into the MCU following the standard procedure learned in Lab 1.
EXPERIMENTAL SETUP
The experimental setup for this experiment consists of a DC electric motor, a speed-control
potentiometer and its electronics, an emitter-detector sensor, a disk with an aperture (hole) attached to
the DC motor shaft, and a pair of 7-LED displays connected through appropriate electronics to a 8-pin
Port B connector. The aperture in the disk spins through the infrared emitter-detector sensor. The
emitter-detector sensor sends a High (5V) signal when the aperture in the disk allows the beam of light
to pass through. The emitter-detector sensor output wire is attached to the input capture pin IC1 on Port
A.
The speed of the motor is controlled by a potentiometer and an electronic timer circuit. The
potentiometer is a variable resistor. By varying the angular position of the potentiometer (turning the
knob), one varies the timer’s capacitor’s charge and discharge path resistance, which, in turn, varies the
duty cycle supplied to the DC motor. As the duty cycle to the DC motor is varied, the power delivered
and speed also vary.
Dr. Victor Giurgiutiu
Page 398
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Lab 4
WIRING DIAGRAM
Wire
Red wire
Black wire
Yellow wire
Connection
+5 V
0 V (Ground)
Signal wire to input capture pin IC1
MOSFET
DC
Transmissive
Photomicrosensor
(Emitter/Detector)
7-Segment
Display
Port B
Connection
Lamp Test
Figure 1 DC Motor tachometer experiment to which the present software example is relevant.
CIRCUIT DIAGRAM
Dr. Victor Giurgiutiu
555 Timer
Page 399
Speed-Controlling
Potentiometer
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Lab 4
PRE-TEST PROCEDURE
Before starting your test, perform the following pre-test procedure to verify that your experimental setup is performing correctly:
1)
Check the correct wiring of the DC motor set up:
Wire
Red wire
Black wire
Yellow wire
2)
Connection
+5 V
0 V (Ground)
Signal wire to the input capture pins IC1
Check mark
Press the small black “Lamp Test” button on the DC motor board. Do all the LEDs light up,
displaying the number 88? Y ___ N ____. Connect port B to the 2-digit 7-LED display. Send $99
through port B. Does the display indicate correctly? Y ___ N ____. Repeat with $66. Try other
base-10 numbers. Does the display correctly indicate all these numbers? If not, contact your TA.
TA checkmark ________
PART I –DC MOTOR SPEED-VOLTAGE CHARACTERISTIC (30%)
3)
Disconnected the motor from the circuit and measure its internal resistance, R = _________ Ω.
(You may want to borrow a digital multimeter from your TA for this measurement).
4)
Connect the circuit to the power supply terminals. Attach the voltmeter probes to the DC motor
terminals.
5)
Connect the oscilloscope Ch. 1 probe to the sensor output wire (yellow) of the circuit board. Set
the oscilloscope trigger mode to Auto, source to Ch. 1, and coupling to DC.
6)
By rotating the knob of the potentiometer, modify the duty cycle of voltage delivered to the DC
motor to increase and decrease the motor speed. Find the voltage value for the fastest speed (fullspeed). Enter this value in the table. Then find other values until you have matched all these
descriptors: full-speed, ¾-speed, ½-speed, ¼-speed, very slow, and stopped.
7)
Run the DC motor at full speed. Examine the signal on screen. Modify the sec/div setting until the
signal best fits the screen and can be measured. Measure the period of rotation, τ and enter your
result in Table 1. Repeat for the other speed settings in the table.
8)
Calculate the angular frequency, ω, motor constant, K, and the measured rotation speed based on
the measured period of rotation. Enter the values in Table 1.
Dr. Victor Giurgiutiu
Page 400
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Lab 4
Table 1
Period of
Speed Voltage
rotation, τ
description (V)
(ms)
Rotation
speed, ω
(rad/s)
RPM
Motor
constant, K
Full-speed
¾-speed
½-speed
¼-speed
Very slow
Stopped
Average motor
constant, Kav
PART II – DC MOTOR TACHOMETER (70%)
The program LASTNAME_Firstname_RPM.asm developed in Hmwk6 will be used to measure and
display the rotation speed using the microcontroller input capture function IC1. Recall from Hmwk6 that
T1 is the first time when a falling edge transition is encountered on pin IC1, while T2 is the second time
when a falling edge transition is encountered on the same pin IC1. This corresponds to the time between
two consecutive passages trough the emitter-detector sensor of the hole in the rotating disk. The
difference between T2 and T1, plus the time taken by the overflows, will represent the period of rotation
of the disk. Hence, one can calculate the rotation speed and display it. Since the experimental setup has
only two 7-LED displays, the rotation speed will be displayed in 100s RPM.
1)
Activate the program LASTNAME_Firstname_RPM.asm and let it run
TA checkmark ________
2)
Read the displayed rotational speed and enter the values in the table.
3)
Calculate the error between the displayed value and the calculated value rotation speed value. In
this calculation, take the rotation speed resulting from oscilloscope measurements as the standard.
4)
Calculate the average motor constant and enter its value in the table.
5)
Repeat for the other voltage settings.
TA checkmark ________
TA checkmark ________
Dr. Victor Giurgiutiu
Page 401
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Lab 4
Error in rotation speed
measurement (%)
Displayed speed
(x100 RPM)
Measured speed
(RPM)
Period of rotation, τ
(ms)
Voltage (V)
Speed description
Table 2
Full-speed
¾-speed
½-speed
¼-speed
Very slow
Stopped
Dr. Victor Giurgiutiu
Page 402
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Lab 4
(This page is left intentionally blank)
Dr. Victor Giurgiutiu
Page 403
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Lab 5
LAB 5 STEPPER MOTOR AND A/D CONVERSION
OBJECTIVE
The objective of this laboratory is to introduce the student to the use of:
1. Stepper motors under microprocessor control
2. A/D conversion with the 68HC11 microcontroller
The physical principles and the programming features of these devices will be studied and applied.
PART I – STEPPER MOTORS
PREREQUISITES
Floppy disk with the asm codes for the programs:
• LASTNAME_Firstname_Stepper_Motor.asm
Hard copy (printout) of Hmwk7 – Stepper Motor. When printing, use the 'pages per sheet' option
in the lower right corner of the print dialog-box with settings of 4 or 2 (depending on your
eyesight) to save paper. (We may want to experiment a little with this before printing the full
document.)
PROCEDURE
The students will utilize the asm code developed with the THRSim11 simulator for Hmwk 7 and Hmwk
8. The students will go through the printout of Hmwk7 step by step and will verify that the MCU
responds to instructions as expected.
The lab is divided into sections. After completing each section, the student will ask the TA to check the
student’s work and make a check mark on that section.
The asm code is activated into the MCU following the standard procedure learned in Lab 1.
EXPERIMENTAL SETUP
The experimental setup for this experiment consists of a stepper motor (Figure 1) and its controller
board (Figure 2). The stepper motor controller board is connected to the MCU port B. The MCU
generates a sequence of binary patterns that are used by the controller board to energize the stepper
motor coils and generate motion.
Controller board
Stepper motor
8-pin input
connector
Dr. Victor Giurgiutiu
Page 404
8/19/2008
Fundamentals of Microcontrollers
EMCH 367
Lab 5
Figure 1 Stepper motor and its controller board. Control signals to the controller board are sent
through the 8-pin input connector.
CIRCUIT DIAGRAM
BLACK
RED
Figure 2 Circuit diagram of the stepper motor controller board
WIRING DIAGRAM
Wire
Green wire:
Red wire
Black wire
Connection
+15 V
+5 V
0 V (Ground)
The 8-pin input connector on the controller board is connected to MCU Port B. Make sure to respect the
MSB convention.
PRE-TEST PROCEDURE
Before starting your test, perform the following pre-test procedure to verify that your experimental setup is performing correctly:
1. Check the correct wiring of the stepper motor controller board and input/output connectors:
Dr. Victor Giurgiutiu
Page 405
8/19/2008
Fundamentals of Microcontrollers
EMCH 367
Wire
Green wire:
Red wire
Black wire
Input connector
Output connector
Connection
+15 V
+5 V
0 V (Ground)
Port B
Stepper motor connector
Lab 5
Check mark
2. Test hardware:
Use a removable marker to make two alignment marks, one on the stator, the other on the rotor of the
stepper motor. Energize and establish communication.
Manually send the 2-hex numbers corresponding to the four full-step sequences of Table 1 to the parallel
port B. Use a pencil to mark the position of your marking after each block of four full-step sequences
has been entered. Fill in the answers below:
Estimate the angle of rotation after one complete block of four full-step sequences= ______________
Count the number of blocks of four full-step sequences needed to achieve a complete rotation = _____
Calculate the angle of rotation corresponding to one full step: _______
Deduce the angle of rotation corresponding to a half step: __________
Table 1
Stepper motor energizing patterns and their 2-hex equivalent value
Sequence
Energizing
pattern
S0
S1
S2
S3
S4
S5
S6
S7
1000
1001
0001
0101
0100
0110
0010
1010
8-bit
2-hex
equivalence
$08
$09
$01
$05
$04
$06
$02
$0A
Phase
energizing
type
1 phase
2 phase
1 phase
2 phase
1 phase
2 phase
1 phase
2 phase
Step type
Half step
Full step
Half step
Full step
Half step
Full step
Half step
Full step
STEPPER MOTOR CONTROL PROGRAM
Run the program of homework 7 using the commands >, <, +, -, S: Verify that it can be controlled to do
forward and backward motion, slower and faster. Verify that it stops.
i)Move forward
>
Check mark
ii)Move backward
<
Check mark
iii)Increase speed (decrease delay)
+
Check mark
iv)Decrease speed (increase delay)
-
Check mark
v)Stop program
S
Check mark
Dr. Victor Giurgiutiu
Page 406
8/19/2008
Fundamentals of Microcontrollers
EMCH 367
Lab 5
When satisfied with the program operation, show it to your TA.
TA checkmark ________
PART II – A/D CONVERSION
PREREQUISITES
Floppy disk with the asm codes for the program:
• LASTNAME_Firstname_AD.asm
Hard copy (printout) of Hmwk8 – A/D Conversion. When printing, use the 'pages per sheet'
option in the lower right corner of the print dialog-box with settings of 4 or 2 (depending on your
eyesight) to save paper. (We may want to experiment a little with this before printing the full
document.)
PROCEDURE
The students will utilize the asm code developed with the THRSim11 simulator for Hmwk8. The
students will go through the printout of Hmwk8 step by step and will verify that the MCU responds to
instructions as expected.
The lab is divided into sections. After completing each section, the student will ask the TA to check the
student’s work and make a check mark on that section.
The asm code is activated into the MCU following the standard procedure learned in Lab 1.
EXPERIMENTAL SETUP
+5 V
Power
Supply
Variable
Potentiometer
Port E
Protection Card
MCU
Port E pin
PE4
Multimeter
MCU
Port B
8-LED
Display
Figure 3 AD conversion experiment: block diagram
The analog-to-digital (AD) converter function of the M68HC11 microprocessor will be used to record,
as eight-bit digital data, the analog signals developed by a variable potentiometer and sent to the MCU
through port E pin PE4.
The experimental setup (Figure 3) consists of a variable potentiometer, port E protection card,
multimeter, the MCU port E, the MCU port B, and an 8-LED display. The potentiometer generates an
adjustable voltage (analog signal) in the range 0 – 5 V. The analog signal is through the port E
protection card to the MCU port E. The multimeter records the value (mV) of the analog signal that
enters the MCU. Inside the MCU, the analog signal is converted to 8-bit digital. Conversion is effected
continuously, in a round-robin fashion and stored internally in four variables (VAL1 – VAL4). The
average of these four values is calculated by software and output through MCU port B for digital display
on the 8-LED display.
Dr. Victor Giurgiutiu
Page 407
8/19/2008
Fundamentals of Microcontrollers
EMCH 367
Lab 5
WIRING DIAGRAM
Wire
Red wire
Black wire
Yellow wire
Connection
+5 V
0 V (Ground)
Potentiometer variable output (0 – 5 V)
EQUIPMENT LIST
• +5V power supply
•
variable potentiometer
•
8-LED display
•
multi-meter
PRE-TEST PROCEDURE
Before starting your test, perform the following pre-test procedure to verify that your experimental setup is performing correctly:
1. Check the correct wiring of the potentiometer, port E protection card, port E pin PE4:
Wire
Red wire
Black wire
Port E protection
card and port E
Input connector
Multimeter
Output connector
Connection
+5 V
0 V (Ground)
MSB alignment
Check mark
Port E protection card pin PE4
Probe to PE4
8-LED display MSB alignment
2. Connect multimeter to yellow wire. Adjust the potentiometer and verify that voltages in the
range 0 – 5 V can be generated.
3. Set potentiometer to generate approx. 750 mV. Check with the multimeter probe that the
generated voltage passes through the port E protection card and arrives at actual port E pin PE4.
AD CONVERTION TEST PROCEDURE
When you are satisfied that the hardware works satisfactorily, proceed with the actual AD conversion
experiment. Table 2 list six target voltage values. With your program running, do the following for each
target voltage:
1. Reading with the multimeter, adjust the potentiometer to within the target value, and, when the
reading is steady, record it in the ‘Actual’ column of Table 2.
2. Calculate the predicted value resulting from AD conversion. Perform the calculation in hex, then
convert to binary. Enter the values in the corresponding column under the heading ‘Predicted’.
3. Call TA to verify.
4. Proceed to the next target voltage.
Dr. Victor Giurgiutiu
Page 408
8/19/2008
Fundamentals of Microcontrollers
EMCH 367
Lab 5
Table 2
#
1
2
3
4
5
6
Voltage at pin PE4 (mV)
Target
Actual
750
1600
2200
3000
4000
5000
Dr. Victor Giurgiutiu
Digital values from AD conversion
Predicted
Displayed
Hex
Binary
$
%
%
$
%
%
$
%
%
$
%
%
$
%
%
$
%
%
Page 409
TA check
mark
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Appendix 1
APPENDIX 1 HEX_BCD
This subroutine will convert the HEX number in the ACCA register to BCD number. After this
subroutine is performed, the converted BCD number is stored in the ACCA register for future use.
* HEX_BCD subroutine
* This S/R converts from Hex to BCD the number in accA
HEX_BCD PSHX
; save X in the stack
PSHB
; save B in the stack
TAB
; transfer info from A into low D
CLRA
; clear A
LDX
#10
; load 10 into X
IDIV
; divide info by 10. Quotient ends
; in X, reminder stays in low D
TBA
; transfer reminder (1st decimal
; digit) from low D into A
PSHA
; save 1st digit in the stack
XGDX
; exchange D and X. Quotient
; (i.e., 2nd digit) is now in low D
; i.e, in B
PULA
; retrieve A from the stack.
; 1st digit is now in A
LSLB
; shift B to the left 4 times to get
LSLB
; 2nd digit to the left of B
LSLB
;
LSLB
;
ABA
; add A and B, results stays in A
; now we have both digits in A,
; in the proper order.
PULB
; retrieve original B from stack
PULX
; retrieve original X from stack
RTS
; return
Dr. Victor Giurgiutiu
Page 410
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Appendix 1
(This page is intentionally left blank)
Dr. Victor Giurgiutiu
Page 411
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Appendix 2
APPENDIX 2 HOW TO SOLDER
Soldering is defined as "the joining of metals by a fusion of alloys which have relatively low melting
points". In other words, you use a metal that has a low melting point to adhere the surfaces to be
soldered together. Soldering is more like gluing with molten metal than anything else. Soldering is also a
must have skill for all sorts of electrical and electronics work. It is also a skill that must be taught
correctly and developed with practice.
This document attempts to teach soldering through a few simple steps. Tips and tricks are also provided
at the end.
HOW TO SOLDER
Step 1: Equipment
Soldering requires two main things: a soldering iron and solder. Soldering irons are the heat source used
to melt solder. Irons of the 15W to 30W range are good for most electronics/printed circuit board work.
Anything higher in wattage and you risk damaging either the component or the board. Note that you
should not use so-called soldering guns. These are very high wattage and generate most of their heat by
passing an electrical current through a wire. Because of this, the wire carries a stray voltage that could
damage circuits and components. The choice of solder is also important. One of the things to remember
is to never use acid core solder. Acid core solder will corrode component leads, board traces and form
conductive paths between components. The best solder for electronics work is a thin rosin core solder. I
prefer a thickness of 0.75mm, but other thicknesses will also work. Just remember not to get anything
too thick.
Remember that when soldering, the rosin in the solder releases fumes. These fumes are harmful to your
eyes and lungs. Therefore, always work in a well ventilated area. Hot solder is also dangerous. Be sure
not to let is splash around because it will burn you almost instantly. Eye protection is also advised.
Step 2: Surface Preparation:
A clean surface is very important if you want a strong, low resistance joint. All surfaces to be soldered
should be cleaned with steel wool and some sort of solvent. Laquer thinner works well. Some people
like to use sand paper, but I think that it is all too easy to sand right through circuit board traces, so steel
wool is my preference. Don't neglect to clean component leads, as they may have a built up of glue from
packaging and rust from improper storage.
Step 3: Component Placement
After the component and board have been cleaned, you are ready to place the component on the board.
Bend the leads as necessary and insert the component through the proper holes on the board. To hold the
part in place while you are soldering, you may want to bend the leads on the bottom of the board at a 45
degree angle. Once you are sure that the component is properly placed, you can more on to the next step.
Dr. Victor Giurgiutiu
Page 412
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Appendix 2
Step 4: Apply Heat
Apply a very small amount of solder to the tip of the iron. This helps conduct the heat to the component
and board, but it is not the solder that will make up the joint. Now you are ready to actually heat the
component and board. Lay the iron tip so that it rests against both the component lead and the board.
Normally, it takes one or two seconds to heat the component up enough to solder, but larger components
and larger soldering pads on the board can increase the time.
Step 5: Apply Solder And Remove Heat
Once the component lead and solder pad has heated up, you are ready to apply solder. Touch the tip of
the strand of solder to the component lead and solder pad, but not the tip of the iron. If everything is hot
enough, the solder should flow freely around the lead and pad. Once the surface of the pad is completely
coated, you can stop adding solder and remove the soldering iron (in that order). Don't move the joint
for a few seconds to allow the solder to cool. If you do move the joint, you will get what's called a "cold
joint". This will be discussed shortly.
Dr. Victor Giurgiutiu
Page 413
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Appendix 2
Step 6: Cleanup
After you have made all the solder joints, you may wish to clean with steel wool or solvent to remove all
the left over rosin. You may also wish to coat the bottom of the board with laquer. This will prevent
oxidation and keep it nice and shiny.
COLD SOLDER JOINTS
A cold joint is a joint in which the solder does not make good contact with the component lead or
printed circuit board pad. Cold joints occur when the component lead or solder pad moves before the
solder is completely cooled. Cold joints make a really bad electrical connection and can prevent your
circuit from working.
Cold joints can be recognized by a characteristic grainy, dull gray colour, and can be easily fixed. This is
done by first removing the old solder with a desoldering tool or simply by heating it up and flicking it
off with the iron. Once the old solder is off, you can resolder the joint, making sure to keep it still as it
cools.
TIPS AND TRICKS
Soldering is something that needs to be practiced. These tips should help you become successful so you
can stop practicing and get down to some serious building.
Dr. Victor Giurgiutiu
Page 414
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Appendix 2
1. Use heatsinks. Heatsinks are a must for the leads of sensitive components such as ICs and
transistors. If you don't have a clip on heatsink, then a pair of pliers is a good substitute.
2. Keep the iron tip clean. A clean iron tip means better heat conduction and a better joint. Use a
wet sponge to clean the tip between joints.
3. Double check joints. It is a good idea to check all solder joints with an ohm meter after they are
cooled. If the joint measures any more than a few tenths of an ohm, then it may be a good idea to
resolder it.
4. Use the proper iron. Remember that bigger joints will take longer to heat up with an 30W iron
than with a 150W iron. While 30W is good for printed circuit boards and the like, higher
wattages are great when soldering to a heavy metal chassis.
Solder small parts first. Solder resistors, jumper leads, diodes and any other small parts before you
solder larger parts like capacitors and transistors. This makes assembly much easier.
Dr. Victor Giurgiutiu
Page 415
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Appendix 3
APPENDIX 3 FLOW CHART TEMPLATE
BASIC FLOWCHART COMPONENTS
The development of complex programs may be facilitated with the use of simple flowcharts
constructed using the following basic components. Additional logic components may also be
employed.
Flowchart symbol
Definition
Logic connectors
Action symbol
Logic symbols
Label symbol
Software interrupt symbol
EXAMPLE FLOWCHART – DELAY PROGRAM
Here is an example of a simple flowchart and how it may be used to facilitate the development of
a simple program:
(i) Define variable DELAY at $0000
(ii) Load DELAY into accA
Code
Flowchart
DELAY RMB 1
(iii) Decrement accA
(iv) Branch back to (iii) if the result is higher
than zero (unsigned >0)
LDAA DELAY
LABEL1
BHI
(vi) SWI
Dr. Victor Giurgiutiu
SUBA #1
LABEL1
SWI
Page 416
8/19/2008
EMCH 367
Dr. Victor Giurgiutiu
Fundamentals of Microcontrollers
Appendix 3
Page 417
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Course Package.doc 4
APPENDIX 4 EXPLANATION OF EXAMPLE OUTPUT COMPAE TIMER
FUNCTION
#INCLUDE
'C:\Temp\VAR_DEF.ASM'
• Define program variables
•
ORG DATA
DT
RMB 2
; Half wave duration
* Start main program
ORG PROGRAM
START
LDX #REGBAS
LDAA #%00010000 ;
*mask for OM3=0, OL3=1
STAA TCTL1,X
;
*set OC3 to toggle
LDD DT
*store TCNT+DT in TOC3
ADDD TCNT,X
STD TOC3,X
*Main loop
LABEL1
LDAA TFLG1,X
*check OC3F
ANDA #%00100000
*mask for OC3F
BEQ LABEL1
*loop back
*We are here when output compare happens
LDAA #%00100000
*reset OC3F
STAA TFLG1,X
LDD DT
*add DT to TCNT
ADDD TCNT,X
STD TOC3,X
*store new time in TOC3
BRA LABEL1
*back to the top
SWI
The output at OC3 will toggle when TCNT=OC3, and the corresponding bit in TFLG1 will also
be set. If we count the cycles of every instruction, we can draw the table as shown below:
4
9(cycles)
2
3
2
4
24(cycles)
4
6
LDAA
TFLG1,X
ANDA
#%00100000
BEQ
LABEL1
LDAA
#%00100000
STAA
TFLG1,X
LDD DT
ADDD
TCNT,X
5
STD
TOC3,X
3
BRA
LABEL
If we set a breakpoint at LDAA #%00100000, just after the checking TFLG loop is done, we may
want to know the relationship between the value of DT and ∆T. Let’s assume we start our
calculating from the breakpoint; what we want to know is how many clock cycles the program
will run till next breakpoint for a DT.
Dr. Victor Giurgiutiu
Page 418
8/19/2008
EMCH 367
Fundamentals of Microcontrollers
Course Package.doc 4
Let’s assume that before the instruction ADDD TCNT,X is performed, the value of TCNT is
TCNT1; we run the program step by step and can find that after the instruction: STD TOC3,X.
The value of TOC3 is TCNT1+4+DT, while the current value of TCNT is TCNT1+11, the
program will keep running until TCNT reaches the value of TOC3, i.e. TCNT1+4+DT. So, when
the checking procedure begins, the difference between TCNT and TOC3 Is: DT-10.
The next work is to find how many checking loops the program will need to detect if TCNT
reaches TOC3.The checking procedure occupies 9 clock cycles, so we assume:
DT-10 = a*9+b;
if b > 4, that means the toggle happens after the instruction LDAA TFLG1,X, so an additional loop is
needed for the program to detect that the TFLG has been set.
if b <=4, the program can detect the TFLG immediately so that no additional loops is needed.
After we know how many loops are needed, the total cycles between breakpoints will be:
9*(number of loops)+24.
So we can write the equations below:
∆T=9*(a+2)+24 if b>4;
or
∆T=9*(a+1)+24 if b<=4.
Let’s take DT=$0020 as one example,
DT-10= 32-10 =22, 22= 2*9 +4, a=2, b=4<=4, so
∆T=9*(a+1) +24=9*(2+1)+24=51.
Dr. Victor Giurgiutiu
Page 419
8/19/2008