A thorough revision that provides a clear understanding of the basic principles of microcontrollers using C programming and PIC18F assembly language
This book presents the fundamental concepts of assembly language programming and interfacing techniques associated with typical microcontrollers. As part of the second edition's revisions, PIC18F assembly language and C programming are provided in separate sections so that these topics can be covered independent of each other if desired. This extensively updated edition includes a number of fundamental topics. Characteristics and principles common to typical microcontrollers are emphasized. Interfacing techniques associated with a basic microcontroller such as the PIC18F are demonstrated from chip level via examples using the simplest possible devices, such as switches, LEDs, Seven-Segment displays, and the hexadecimal keyboard. In addition, interfacing the PIC18F with other devices such as LCD displays, ADC, and DAC is also included. Furthermore, topics such as CCP (Capture, Compare, PWM) and Serial I/O using C along with simple examples are also provided.
Microcontroller Theory and Applications with the PIC18F, 2nd Edition is a comprehensive and self-contained book that emphasizes characteristics and principles common to typical microcontrollers. In addition, the text:
- Includes increased coverage of C language programming with the PIC18F I/O and interfacing techniques
- Provides a more detailed explanation of PIC18F timers, PWM, and Serial I/O using C
- Illustrates C interfacing techniques through the use of numerous examples, most of which have been implemented successfully in the laboratory
This new edition of Microcontroller Theory and Applications with the PIC18F is excellent as a text for undergraduate level students of electrical/computer engineering and computer science.
Table of Contents
Preface xiii
Credits xvii
1. Introduction to Microcontrollers 1
1.1 Explanation of Terms 3
1.2 Microcontroller Data Types 7
1.2.1 Unsigned and Signed Binary Numbers 7
1.2.2 ASCII and EBCDIC Codes 10
1.2.3 Unpacked and Packed Binary-Coded-Decimal Numbers 10
1.3 Evolution of the Microcontroller 11
1.4 Embedded Controllers 14
2. Microcontroller Basics 17
2.1 Basic Blocks of a Microcomputer 17
2.1.1 System Bus 18
2.1.2 Clock Signals 19
2.2 Microcontroller architectures 20
2.3 Central Processing Unit (CPU) 21
2.3.1 Register Section 21
2.3.2 Control Unit 29
2.3.3 Arithmetic and Logic Unit (ALU) 30
2.3.4 Simplified Explanation of Control Unit design 30
2.4 Basic concept of pipelining 31
2.5 RISC vs. CISC 33
2.6 Functional Representation of a Typical Microcontroller---- The PIC18F4321 34
Questions and Problems 36
3. Microcontroller Memory and Input/Output (I/O) 37
3.1 Introduction to Microcontroller Memory 37
3.1.1 Main memory 38
3.1.2 READ and WRITE Timing Diagrams 40
3.1.3 Main Memory Organization 42
3.2 Microcontroller Input/Output (I/O) 45
3.2.1 Overview of digital output circuits 47
3.2.2 Simple I/O Devices 49
3.2.3 Programmed I/O 50
3.2.4 Unconditional and Conditional Programmed I/O 52
3.2.5 Interrupt I/O 53
Questions and Problems 56
4. Programming Languages 59
4.1 Computer Programming Languages 59
4.2 Machine Language 60
4.3 Assembly Language 60
4.3.1 Types of Assemblers 61
4.3.2 Assembler Delimiters 62
4.3.3 Specifying Numbers by Typical Assemblers 63
4.3.4 Assembler Directives or Pseudoinstructions 63
4.3.5 Assembly Language Instruction Formats 65
4.3.6 Typical Instruction Set 67
4.3.7 Typical Addressing Modes 73
4.3.8 Subroutine Calls in Assembly Language 74
4.4 High-Level Language 74
4.5 Introduction to C Language 76
4.5.1 Data types 78
4.5.2 Bit manipulation operators 79
4.5.3 Control structures 81
4.5.4 The if-else construct 81
4.5.5 The switch construct 82
4.5.6 The while construct 83
4.5.7 The for construct 84
4.5.8 The do-while construct 85
4.5.9 Structures, and Unions 85
4.5.10 Functions in C 86
4.5.11 Arrays 88
4.5.12 Macros 88
4.6 Choosing a programming language 88
4.7 Flowcharts 89
Questions and Problems 90
5. PIC18F Architecture and Addressing Modes 93
5.1 Basic features of the PIC18F family 93
5.2 PIC18F Register Architecture 96
5.3 PIC18F Memory Organization 100
5.3.1 PIC18F Program Memory 101
5.3.2 PIC18F Data Memory 101
5.4 PIC18F Addressing Modes 104
5.4.1 Literal or Immediate Addressing Mode 104
5.4.2 Inherent or Implied Addressing Mode 104
5.4.3 Direct or Absolute Addressing Mode 104
5.4.4 Indirect Addressing Mode 105
5.4.5 Relative Addressing Mode 110
5.4.6 Bit Addressing Mode 112
Questions and Problems 113
6. Assembly Language Programming With the PIC18F: Part 1 115
6.1 Introduction to the PIC18F MPLAB assembler 115
6.2 PIC18F Instruction Format 120
6.3 PIC18F Instruction Set 121
6.3.1 Data Movement Instructions 124
6.3.2 Arithmetic Instructions 130
6.3.3 Logic Instructions 138
6.3.4 Rotate Instructions 141
6.3.5 Bit Manipulation Instructions 147
Questions and Problems 151
7. Assembly Language Programming With the PIC18F: Part 2 155
7.1 PIC18F Jump/Branch instructions 155
7.2 PIC18F Test, Compare, and Skip instructions 157
7.3 PIC18F Table Read/Write instructions 163
7.4 PIC18F Subroutine instructions 168
7.5 PIC18F System Control instructions 170
7.6 PIC18F Hardware vs. Software stack 171
7.7 Multiplication and Division algorithms 178
7.7.1 Signed Multiplication algorithm 178
7.7.2 Unsigned Division algorithm 180
7.7.3 Signed Division algorithm 182
7.8 Advanced Programming Examples 184
7.9 PIC18F Delay Routine 188
Questions and Problems 191
8. PIC18F Programmed I/O Using Assembly & C 195
8.1 PIC18F Pins and Signals 195
8.1.1 Clock 196
8.1.2 PIC18F Reset 202
8.1.3 High Voltage and Low Voltage Programming (HVP and LVP) 205
8.1.4 “pragma config” and “config” directives 205
8.1.5 A simplified setup for the PIC18F4321 206
8.1.6 Downloading programs into the PIC18F4321 using the PICKit3 interface 206
8.2 PIC18F4321 Programmed I/O 208
8.2.1 I/O instructions in PIC18F assembly 211
8.2.2 Configuring PIC18F4321 I/O ports using PIC18F assembly 211
8.2.3 Configuring PIC18F4321 I/O ports using C 213
8.2.4 Interfacing LED’s (Light Emitting Diodes) and Seven-segment displays 215
8.2.5 Programmed I/O examples using PIC18F assembly 216
8.2.6 Programmed I/O examples using C Language 220
Questions and Problems 228
9. PIC18F Interrupt I/O, LCD, and Keyboard Interfacing 231
9.1 Basics of Polled I/O vs. Interrupt I/O 231
9.2 PIC18F Interrupts 236
9.2.1 Interrupt Procedure 236
9.2.2 PIC18F Interrupt Types 238
9.2.3 Programming the PIC18F External Interrupts 238
9.2.4 Programming PIC18F external interrupts using assembly 243
9.2.5 Programming PIC18F external interrupts using C 243
9.2.6 Accessing PIC18F on-chip peripheral devices using Polled I/O vs. Interrupt I/O 252
9.3 PIC18F Interface to a typical LCD (Liquid Crystal Display) 252
9.4 Interfacing PIC18F4321 to a hexadecimal keyboard and a seven-segment display 259
9.4.1 Basics of Keyboard and Display Interface to a Microcontroller 259
9.4.2 PIC18F4321 Interface to a Hexadecimal Keyboard and a Seven-Segment Display 261
Questions and Problems 270
10. PIC18F Timers and Analog Interface 273
10.1 PIC18F Timers 273
10.1.1 Timer0 275
10.1.2 Timer1 283
10.1.3 Timer2 289
10.1.4 Timer3 293
10.2 Analog Interface 301
10.2.1 PIC18F on-chip ADC (A/D Converter) 302
10.2.2 Interfacing an external D/A (Digital to Analog) Converter using C 315
Questions and Problems 317
11. PIC18F CCP and Serial I/O 321
11.1 PIC18F CCP (Capture/Compare/PWM (Pulse Width Modulation) Module 321
11.1.1 CCP Registers 322
11.1.2 CCP modules and associated timers 322
11.1.3 PIC18F4321 Capture mode 322
11.1.4 PIC18F4321 Compare mode 326
11.1.5 PIC18F4321 PWM (Pulse Width Modulation) mode 329
11.2 DC Motor Control 332
11.3 Serial Interface 336
11.3.1 Synchronous Serial Data Transmission 336
11.3.2 Asynchronous Serial Data Transmission 337
11.3.3 Basics of SPI and I2C 337
11.4 PIC18F Serial I/O 338
11.4.1 PIC18F SPI mode 338
11.4.2 PIC18F I2C (Inter-Integrated Circuit) mode 348
Questions and Problems 359
Appendix A: Answers to Selected Problems 363
Appendix B: Glossary 371
Appendix C: PIC18F Instruction Set (Alphabetical Order) 383
Appendix D: PIC18F Instruction Set - Details 389
Appendix E: PIC18F4321 Special Function Registers 433
Appendix F: Tutorial for Assembling and Debugging a PIC18F Assembly Language Program Using the MPLAB
Appendix G: Tutorial for Compiling and Debugging a C-Program Using the MPLAB 465
Appendix H: Interfacing the PIC18F4321 to a Personal Computer or A Laptop Using PICKIT™ 3 493
H.1 Initial Hardware Setup for the PIC18F4321 493
H.2 Connecting The Personal Computer (PC) or The Laptop to the PIC18F4321 via PICkit3 494
H.3 Programming The PIC18F4321 from a Personal Computer or a Laptop Using the PICkit3 495
Bibliography 499
Index 501