All examples presented in this book rely on the programming language Basic and its application in the mikroBasic compiler for dsPIC. It is thus necessary to introduce some of the concepts, modes of their applications, and their meanings in order to facilitate understaning of the abundant examples contained by the book. The simplest structures of Basic are used, so the examples can be understood with no need for an analysis of the programming language.
NOTE: In this chapter no complete Basic language used by the compiler has been presented, but only some of the methods of declaring types and some of the key words often used in the examples. The reader is referred to the help-system accompanying the mikroBasic compiler for a detailed study of the possibilities of the Basic language and its application in programming the microcontrollers of the family dsPIC30F.
The memory of a microcontroller of the family dsPIC30F keeps 16-bit (2-bytes) basic data. All other types of data are derived from these. The compiler also supports 1-byte and 4-bytes data. Both integer and floating point variables are supported. This chapter will present the most frequently used types of data.
Table 1-1 presents a review of integer variables supported by the dsPIC mikroBasic compiler.
|Type||Size||Range of values|
|byte, char||8–bit||0 .. 255|
|short||8–bit||-127 .. 128|
|word||16–bit||0 .. 65535|
|integer||16–bit||-32768 .. 32767|
|longword, dword||32–bit||0 .. 4294967295|
|longint||32–bit||-2147483648 .. 2147483647|
dim i, j, k as byte dim counter, temp as word
The floating point variables are supported by the type of data real, 32 bits wide in the memory and of the range (±1.17549435082 * 10-38 .. ±6.80564774407 * 1038).
dim real_number as float
A set of variables of the same type, if indexed, is represented by an array.
dim weekdays as byte dim samples as word
As can be noticed from the above examples, the indexes in an array can start from any integer value. If within the square brackets only one value is declared, the array has so many members (5 in the above example). In that case the index of the first member iz zero!
A series of characters is represented by a type of data called string. It, in essense, represents an array of the type char, but sometimes it is useful to be considered as text.
dim text as string
More difficult to understand, but often used type of data is pointer. It serves for keeping the address in the memory where some essential information is kept. The application of this type of data is of exceptional significance for the module described
in Chapter 11: DSP Engine.
dim p as ^word
Key words are the concepts in a programming language having special meanings. The names of the variables must not use this set of words. In this chapter 3 key words whose understaning is very important will be treated. More details concerning key words could be found in the help-system accompanying the mikroBasic compiler for dsPIC.
Key word asm denotes the beginning of an instruction block written in the assembler. The compiler supports the assembler instructions. If an exceptional speed of execution of a part of a code is required, and the user possesses the corresponding knowledge of the microcontroller architecture and assembler instructions, then the critical part of the programe could be written in the assembler (user-optimized parts of the code).
Note: The block of assembler instructions has to start by the key word asm and finish by end!
asm MOV W1, W0 ADD W0, W1, W0 end asm
When using the key word asm, care has to be taken of the available resources. For this reason the use of this key word is not recommended unless it is necessary. The use of the key word asm is necessary when using the DSP module which will be discussed in Chapter 11. In this case there is no alternative if the maximum use of the DSP module is targeted.
Key word absolute is used in cases when it is required that certain variable is saved at a memory cell which is determined in advance. In majority of cases the use of the key word absloute does not make sense. However, its use is sometimes necessary when using the DSP module decriberd in Chapter 11: DSP Engine.
dim x as word absolute 0x32 ' Variable x will occupy 1 word (16 bits) at address 0x32 dim y as longint absolute 0x34 ' Variable y will occupy 2 words at addresses 0x34 and 0x36
In the above example array coef is located at address $0900 in the memory. It takes 10x2=20 bytes (10 elements, 2 bytes each), i.e. 20 addresses (10 locations), thus the range of addresses containing the elements of array coef is ($0900 ... $0913). Array series is located at address $1900 in the memory. It takes 16x4=64 bytes (16 element, 4 bytes each), i.e. 64 addresses (32 locations) and the range of addresses containing the elements of array series is ($1900 ... $193F).
The key word org is used in situations when it is required that certain method (function or procedure) is saved at a preassigned address in the programe memory (the part of the memory where the programe is saved). The use of the key word org is necessary when processing the interrupts or traps. The methods (functions or procedures) of processing interrupts or traps have to be kept at a precisely specified address.
sub procedure proc(dim par as word) org 0x200 ' Procedure will start at the address 0x200; ... end sub
The above example shows the method of instructing the compiler that the given procedure is saved in the part of the program memory starting from location $2A.
The microcontrollers of the family dsPIC30F are 16-bit modified Harvard architecture processors with an enhanced instruction set. Instructions are 24-bit wide. The working registers are 16-bit wide. There are 16 working registers; the 16th working register (W15) operates as a software stack pointer.
Fig. 1-1 Block diagram of the microcontrollers of the family dsPIC30F
|DSP||Digital Signal Processing|
|UART||Universal Asynchronous Receiver Transmitter|
|I²C||Inter Integrated Circuit|
|PLL||Phase Locked Loop|
|PWM||Pulse Width Modulation|
|IVT||Interrupt Vector Table|
|AIVT||Alternate Interrupt Vector Table|
|SFR||Special Function Registers|
|CAN||Control Area Network|
|DCI||Data Converter Interface|
|PSV||Program Space Visibility|
|RAM||Random Access Memory|
|ROM||Read Only Memory|
|AGU||Address Generator Unit|
|ALU||Arithmetic Logic Unit|
|SPI||Serial Peripheral Interface|
|FIFO||First In – First Out|
|LIFO||Last In – First Out|
|SH||Sample and Hold|
|FFT||Fast Fourier Transform|
|IPMI||Intelligent Management Interface|
|DTMF||Dual Tone Multiple Frequency|
|FIR||Finite Impulse Response|
|IIR||Infinite Impulse Response|
|FRC||Fast RC Oscillator (internal)|
|FSCM||Fail-Safe Clock Monitor|
Table 1-2 The abreviations used in the book