Файл: The PIC Microcontroller Book for beginning (Nebojsa Matic).pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 15.06.2025
Просмотров: 1177
Скачиваний: 0
Chapter 2 - Microcontroller PIC16F84
It is recommended that WREN be turned off the whole time except when writing data to EEPROM, so that possibility of accidental writing would be minimal.
All writing to EEPROM will automatically clear a location prior to writing a new!
Previous page |
Table of contents |
Chapter overview |
Next page |
© Copyright 1999. mikroElektronika. All Rights Reserved. For any comments contact webmaster.
http://www.mikroelektronika.co.yu/english/product/books/PICbook/2_09Poglavlje.htm (3 of 3) [4/2/2003 16:18:00]
Chapter 3 - Instruction Set |
|||
Previous page |
Table of contents |
Chapter overview |
Next page |
CHAPTER 3
Instruction Set
Introduction
Instruction set in PIC16Cxx microcontroller family
Data Transfer
Arithmetic and logic
Bit operations
Directing the program flow
Instruction execution period
Word list
Introduction
We have already mentioned that microcontroller is not like any other integrated circuit. When they come out of production most integrated circuits are ready to be built into devices which is not the case with microcontrollers. In order to "make" microcontroller perform a task, we have to tell it exactly what to do, or in other words we must write the program microcontroller will execute. We will describe in this chapter instructions which make up the assembler, or lower-level program language for PIC microcontrollers.
Instruction Set in PIC16Cxx Microcontroller Family
Complete set which includes 35 instructions is given in the following table. A reason for such a small number of instructions lies primarily in the fact that we are talking about a RISC microcontroller whose instructions are well optimized considering the speed of work, architectural simplicity and code compactness. The only drawback is that programmer is expected to master "uncomfortable" technique of using a reducedt set of 35 instructions.
Data transfer
Transfer of data in a microcontroller is done between work (W) register and an 'f' register that represents any location in internal RAM (regardless whether those are special or general purpose registers).
First three instructions (look at the following table) provide for a constant being written in W register (MOVLW is short for MOVe Literal to W), and for data to be copied from W register onto RAM and data from RAM to be copied onto W register (or on the same RAM location, at which point only the status of Z flag changes). Instruction CLRF writes constant 0 in 'f ' register, and CLRW writes constant 0 in register W. SWAPF instruction exchanges places of the 4-bit nibbles field inside a register.
http://www.mikroelektronika.co.yu/english/product/books/PICbook/3_Poglavlje.htm (1 of 4) [4/2/2003 16:18:03]
Chapter 3 - Instruction Set
Arithmetic and logic
Of all arithmetic operations, PIC like most microcontrollers supports only subtraction and addition. Flags C, DC and Z are set depending on a result of addition or subtraction, but with one exception: since subtraction is performed like addition of a negative value, C flag is inverse following a subtraction. In other words, it is set if operation is possible, and reset if larger number was subtracted from a smaller one.
Logic unit of PIC has capability of performing operations AND, OR, EX-OR, complementing (COMF) and rotation (RLF and RRF).
Instructions which rotate the register contents move bits inside a register through flag C by one space to the left (toward bit 7), or to the right (toward bit 0). Bit which "comes out" of a register is written in flag C, and value of C flag is written in a bit on the "opposite side" of the register.
Bit operations
Instructions BCF and BSF do setting or cleaning of one bit anywhere in the memory. Even though this seems like a simple operation, it is executed so that CPU first reads the whole byte, changes one bit in it and then writes in the entire byte at the same place.
Directing a program flow
Instructions GOTO, CALL and RETURN are executed the same way as on all other microcontrollers, only stack is independent of internal RAM and limited to eight levels.
'RETLW k' instruction is identical with RETURN instruction, except that before coming back from a subprogram a constant defined by instruction operand is written in W register. This instruction enables us to design easily the Look-up tables (lists). Mostly we use them by determining data position on our table adding it to the address at which the table begins, and then we read data from that location (which is usually found in program memory).
Table can be formed as a subprogram which consists of a series of 'RETLW k' instructions, where 'k' constants are members of the table.
We write the position of a member of our table in W register, and using CALL instruction we call a subprogram which creates the table. First subprogram line ADDWF PCL, f adds the position of a W register member to the starting address of our table, found in PCL register, and so we get the real data address in program memory. When returning from a subprogram we will have in W register the contents of an addressed table member. In a previous example, constant 'k2' will be in W register following a return from a subprogram.
RETFIE (RETurn From Interrupt - Interrupt Enable) is a return from interrupt routine and differs from a RETURN only in that it automatically sets GIE (Global Interrupt Enable) bit. Upon an interrupt, this bit is automatically cleared. As interrupt begins, only the value of program counter is put at the top of a stack. No automatic storing of register values and status is provided.
Conditional jumps are synthesized into two instructions: BTFSC and BTFSS. Depending on a bit status in 'f' register that is being tested, instructions skip or don't skip over the next program
http://www.mikroelektronika.co.yu/english/product/books/PICbook/3_Poglavlje.htm (2 of 4) [4/2/2003 16:18:03]
Chapter 3 - Instruction Set
instruction.
Instruction Execution Period
All instructions are executed in one cycle except for conditional branch instructions if condition was true, or if the contents of program counter was changed by some instruction. In that case, execution requires two instruction cycles, and the second cycle is executed as NOP (No Operation). Four oscillator clocks make up one instruction cycle. If we are using an oscillator with 4MHz frequency, the normal time for executing an instruction is 1 µs, and in case of conditional branching, execution period is 2 µs.
Word list
f any memory location in a microcontroller W work register
b bit position in 'f' register d destination bit
label group of eight characters which marks the beginning of a part of the program TOS top of stack
[] option
<> bit position inside register
http://www.mikroelektronika.co.yu/english/product/books/PICbook/3_Poglavlje.htm (3 of 4) [4/2/2003 16:18:03]
Chapter 3 - Instruction Set
*1 If I/O port is source operand, status on microcontroller pins is read
*2 If this instruction is executed on TMR register and if d=1, prescaler assigned to that timer will automatically be cleared
*3 If PC was modified, or test result =1, instruction was executed in two cycles.
Previous page |
Table of contents |
Chapter overview |
Next page |
© Copyright 1999. mikroElektronika. All Rights Reserved. For any comments contact webmaster.
http://www.mikroelektronika.co.yu/english/product/books/PICbook/3_Poglavlje.htm (4 of 4) [4/2/2003 16:18:03]
http://www.mikroelektronika.co.yu/english/product/books/PICbook/4_Poglavlje.htm |
|||
Previous page |
Table of contents |
Chapter overview |
Next page |
CHAPTER 4
Assembly Language Programming
Introduction
An example writting program
Control directives
●4.1 define
●4.2 include
●4.3 constant
●4.4 variable
●4.5 set
●4.6 equ
●4.7 org
●4.8 end
Conditional instructions
●4.9 if
●4.10 else
●4.11 endif
●4.12 while
●4.13 endw
●4.14 ifdef
●4.15 ifndef
Data directives
●4.16 cblock
●4.17 endc
●4.18 db
●4.19 de
●4.20 dt
Configurating a directive
●4.21 _CONFIG
●4.22 Processor
Assembler arithmetic operators
http://www.mikroelektronika.co.yu/english/product/books/PICbook/4_Poglavlje.htm (1 of 15) [4/2/2003 16:18:10]
http://www.mikroelektronika.co.yu/english/product/books/PICbook/4_Poglavlje.htm
Files created as a result of program translation
Macros
Introduction
The ability to communicate is of great importance in any field. However, it is only possible if both communication partners know the same language, i.e follow the same rules during communication. Using these principles as a starting point, we can also define communication that occurs between microcontrollers and man . Language that microcontroller and man use to communicate is called "assembly language". The title itself has no deeper meaning, and is analogue to names of other languages , ex. English or French. More precisely, "assembly language" is just a passing solution. Programs written in assembly language must be translated into a "language of zeros and ones" in order for a microcontroller to understand it. "Assembly language" and "assembler" are two different notions. The first represents a set of rules used in writing a program for a microcontroller, and the other is a program on the personal computer which translates assembly language into a language of zeros and ones. A program that is translated into "zeros" and "ones" is also called "machine language".
The process of communication between a man and a microcontoller
Physically, "Program" represents a file on the computer disc (or in the memory if it is read in a microcontroller), and is written according to the rules of assembler or some other language for microcontroller programming. Man can understand assembler language as it consists of alphabet signs and words. When writing a program, certain rules must be followed in order to reach a desired effect. A Translator interprets each instruction written in assembly language as a series of zeros and ones which have a meaning for the internal logic of the microcontroller.
Lets take for instance the instruction "RETURN" that a microcontroller uses to return from a subprogram.
When the assembler translates it, we get a 14-bit series of zeros and ones which the microcontroller knows how to interpret.
Example: RETURN 00 0000 0000 1000
Similar to the above instance, each assembler instruction is interpreted as corresponding to a series of zeros and ones.
The place where this translation of assembly language is found, is called an "execution" file. We will often meet the name "HEX" file. This name comes from a hexadecimal representation of that file, as well as from the suffix "hex" in the title, ex. "test.hex". Once it is generated, the execution file is read in a microcontroller through a programmer.
An Assembly Language program is written in a program for text processing (editor) and is
http://www.mikroelektronika.co.yu/english/product/books/PICbook/4_Poglavlje.htm (2 of 15) [4/2/2003 16:18:10]
http://www.mikroelektronika.co.yu/english/product/books/PICbook/4_Poglavlje.htm
capable of producing an ASCII file on the computer disc or in specialized surroundings such as MPLAB - to be explained in the next chapter.
Assembly language
Basic elements of assembly language are:
●Labels
●Instructions
●Operands
●Directives
●Comments
Labels
A Label is a textual designation (generally an easy-to-read word) for a line in a program, or section of a program where the micro can jump to - or even the beginning of set of lines of a program. It can also be used to execute program branching (such as Goto .......) and the program can even have a condition that must be met for the Goto instruction to be executed. It is important for a label to start with a letter of the alphabet or with an underline "_". The length of the label can be up to 32 characters. It is also important that a label starts in the first clumn.
Instructions
Instructions are already defined by the use of a specific microcontroller, so it only remains for us to follow the instructions for their use in assembly language. The way we write an instruction is also called instruction "syntax". In the following example, we can recognize a mistake in writing because instructions movlp and gotto do not exist for the PIC16F84 microcontroller.
http://www.mikroelektronika.co.yu/english/product/books/PICbook/4_Poglavlje.htm (3 of 15) [4/2/2003 16:18:10]
http://www.mikroelektronika.co.yu/english/product/books/PICbook/4_Poglavlje.htm
Operands
Operands are the instruction elements for the instruction is being executed. They are usually registers or variables or constants.
Comments
Comment is a series of words that a programmer writes to make the program more clear and legible. It is placed after an instruction, and must start with a semicolon ";".
Directives
A directive is similar to an instruction, but unlike an instruction it is independent on the microcontroller model, and represents a characteristic of the assembly language itself. Directives are usually given purposeful meanings via variables or registers. For example, LEVEL can be a designation for a variable in RAM memory at address 0Dh. In this way, the variable at that address can be accessed via LEVEL designation. This is far easier for a programmer to understand than for him to try to remember address 0Dh contains information about LEVEL.
An example of a writting program
The following example illustrates a simple program written in assembly language respecting the basic rules.
When writing a program, beside mandatory rules, there are also some rules that are not written down but need to be followed. One of them is to write the name of the program at the beginning, what the program does, its version, date when it was written, type of microcontroller it was written for, and the programmer's name.
http://www.mikroelektronika.co.yu/english/product/books/PICbook/4_Poglavlje.htm (4 of 15) [4/2/2003 16:18:10]
http://www.mikroelektronika.co.yu/english/product/books/PICbook/4_Poglavlje.htm
Since this data isn't important for the assembly translator, it is written as comments. It should be noted that a comment always begins with a semicolon and it can be placed in a new row or it can follow an instruction.
After the opening comment has been written, the directive must be included. This is shown in the example above.
In order to function properly, we must define several microcontroller parameters such as: - type of oscillator,
-whether watchdog timer is turned on, and
-whether internal reset circuit is enabled. All this is defined by the following directive:
_CONFIG _CP_OFF&_WDT_OFF&PWRTE_ON&XT_OSC
When all the needed elements have been defined, we can start writing a program.
First, it is necessary to determine an address from which the microcontroller starts, following a power supply start-up. This is (org 0x00).
The address from which the program starts if an interrupt occurs is (org 0x04).
Since this is a simple program, it will be enough to direct the microcontroller to the beginning of a program with a "goto Main" instruction.
The instructions found in the Main select memory bank1 (BANK1) in order to access TRISB register, so that port B can be declared as an output (movlw 0x00, movwf TRISB).
The next step is to select memory bank 0 and place status of logic one on port B (movlw 0xFF, movwf PORTB), and thus the main program is finished.
We need to make another loop where the micro will be held so it doesn't "wander" if an error
http://www.mikroelektronika.co.yu/english/product/books/PICbook/4_Poglavlje.htm (5 of 15) [4/2/2003 16:18:10]
http://www.mikroelektronika.co.yu/english/product/books/PICbook/4_Poglavlje.htm
occurs. For that purpose, one infinite loop is made where the micro is retained while power is connected. The necessary "end" at the end of each program informs the assembly translator that no more instructions are in the program.
Control directives
4.1 #DEFINE |
Exchanges one part of text for another |
Syntax:
#define<text> [<another text>]
Description:
Each time <text> appears in the program , it will be exchanged for <another text >.
Example:
#define turned_on 1 #define turned_off 0
Similar directives: #UNDEFINE, IFDEF,IFNDEF
4.2 INCLUDE |
Include an additional file in a program |
Syntax:
#include <file_name> #include "file_name"
Description:
An application of this directive has the effect as though the entire file was copied to a place where the "include" directive was found. If the file name is in the square brackets, we are dealing with a system file, and if it is inside quotation marks, we are dealing with a user file. The directive "include" contributes to a better layout of the main program.
Example:
#include <regs.h> #include "subprog.asm"
4.3 CONSTANT |
Gives a constant numeric value to the textual |
designation |
Syntax:
Constant <name>=<value>
Description:
Each time that <name> appears in program, it will be replaced with <value>.
Example:
Constant MAXIMUM=100
Constant Length=30
Similar directives: SET, VARIABLE
4.4 VARIABLE |
Gives a variable numeric value to textual |
designation |
|
Syntax: |
|
Variable<name>=<value> |
http://www.mikroelektronika.co.yu/english/product/books/PICbook/4_Poglavlje.htm (6 of 15) [4/2/2003 16:18:10]
http://www.mikroelektronika.co.yu/english/product/books/PICbook/4_Poglavlje.htm
Description:
By using this directive, textual designation changes with particular value.
It differs from CONSTANT directive in that after applying the directive, the value of textual designation can be changed.
Example: variable level=20
variable time=13
Similar directives: SET, CONSTANT
4.5 SET |
Defining assembler variable |
Syntax:
<name_variable>set<value>
Description:
To the variable <name_variable> is added expression <value>. SET directive is similar to EQU, but with SET directive name of the variable can be redefined following a definition.
Example: level set 0
length set 12 level set 45
Similar directives: EQU, VARIABLE
4.6 EQU |
Defining assembler constant |
Syntax:
<name_constant> equ <value>
Description:
To the name of a constant <name_constant> is added value <value>
Example: five equ 5
six equ 6 seven equ 7
Similar instructions: SET
4.7 ORG Defines an address from which the program is stored in microcontroller memory
Syntax:
<label>org<value>
Description:
This is the most frequently used directive. With the help of this directive we define where some part of a program will be start in the program memory.
Example:
Start org 0×00 movlw 0xFF movwf PORTB
The first two instructions following the first 'org' directive are stored from address 00, and the other two from address 10.
http://www.mikroelektronika.co.yu/english/product/books/PICbook/4_Poglavlje.htm (7 of 15) [4/2/2003 16:18:10]