1. Trang chủ
  2. » Công Nghệ Thông Tin

Interfacing PIC Microcontrollers 5 potx

10 347 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 115,68 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

REGISTER BANK SELECT RP1:RP0 The PIC 16F877 file register RAM is divided into four banks of 128 locations, banks 0–3 Figure 2-3 in data sheet.. To access the others, these register bank

Trang 1

Again, remember that the carry flag must be set before a subtraction operation,

so that a borrow can be detected as C ⫽ 0

DIGIT CARRY (DC)

A file register can be seen as containing 8 individual bits, or 1 byte It can also

be used as 2 ⫻ 4-bit nibbles (a small byte!) Each nibble can be represented as

1 hex digit (0-F) The digit carry records a carry from the most significant bit

of the low nibble (bit 3) Hence the digit carry allows 4-bit hexadecimal arith-metic to be carried out in the same way as 8-bit binary aritharith-metic uses the carry flag C

REGISTER BANK SELECT (RP1:RP0)

The PIC 16F877 file register RAM is divided into four banks of 128 locations, banks 0–3 (Figure 2-3 in data sheet) At power on reset, bank 0 is selected by default To access the others, these register bank select bits must be changed,

as shown in Table 1.5

It can be seen that some registers repeat in more than one bank, making it easier and quicker to access them when switched to that bank For example, the status register repeats in all banks In addition, a block of GPRs at the end of each bank repeat, so that their data contents are available without changing banks

The register banks are selected by setting and clearing the bits RP0 and RP1

in the status register More conveniently, the pseudo-operation BANKSEL can

be used instead The operand for BANKSEL is any register in that bank, or its label In effect, BANKSEL detects the bank bits in the register address and copies them to the status register bank select bits

Flag after Zero Carry

*Set carry flag before subtracting.

Table 1.4 Arithmetic results

Trang 2

POWER STATUS BITS

There are two read only bits in the status register which indicate the overall MCU status The Power Down (PD) bit is clear to zero when SLEEP mode is entered The Time Out (TO) bit is cleared when a watchdog time out has occurred

Ports

There are five parallel ports in the PIC 16F877, labelled A–E All pins can

be used as bit- or byte-oriented digital input or output Their alternate functions are summarised in Table 1.6

It can be seen that many of the port pins have two or more functions, depending on the initialisation of the relevant control registers On power up

or reset, the port control register bits adopt a default condition (see Table 2-1

in the data sheet, right hand columns) The TRIS (data direction) register bits

in bank 1 default to 1, setting the ports B, C and D as inputs If this is as required, no further initialisation is needed, since other relevant control regis-ters are generally reset to provide plain digital I/O by default

However, there is an IMPORTANT exception Ports A and E are set to ANALOGUE INPUT by default, because the analogue control register ADCON1 in bank 1 defaults to 0 - - - 0000 To set up these ports for digital I/O, this register must be loaded with the code x - - - 011x (x ⫽ don’t care), say 06h If analogue input is required only on selected pins, ADCON1 can be initialised with bit codes that give a mixture of analogue and digital I/O on

20 – 7F 96 General purpose registers

Table 1.5 Register bank select

Trang 3

Ports A and E Note that ADCON1 is in bank 1 so BANKSEL is needed to access it Initialisation for analogue I/O will be explained in more detail later

Timers

The PIC 16F877 has three hardware timers (data sheet, Sections 5, 6 and 7) These are used to carry out timing operations simultaneously with the program, to make the program faster and more efficient An example would be generating a pulse every second at an output

Timer0 uses an 8-bit register, TMR0, file register address 01 Its output is an overflow flag, T0IF, bit 2 in the Interrupt Control Register INTCON, address 0B The timer register is incremented via a clock input which is derived either from the MCU oscillator (fOSC) or an external pulse train at RA4 The register counts from 0 to 255d in binary, and then rolls over to 00 again When the reg-ister goes from FF to 00, T0IF is set

If the internal clock is used, the register acts as a timer Each instruction in the MCU takes four clock cycles to execute, so the instruction clock is fOSC/4 The timers are driven from the instruction clock, which can be monitored externally

at CLKOUT, if the chip is operating with an RC clock If preloaded with a value

of say, 155d, TMR0 will count 100 clock pulses until T0IF is set If the chip is driven from a crystal of 4 MHz, the instruction clock will be 1 MHz, and the timer

Serial port slave select input 5

Low-voltage programming input 3 I/O

In-circuit debugging 6,7 Port C 8 RC0–RC7 Timer1 clock input/output 0,1 Digital

SPI, I 2 C synchronous clock/data 3,4,5 USART asynchronous clock/data 6,7 Port D 8 RD0–RD7 Parallel slave port data I/O 0–7 Digital

I/O

Parallel slave port control bits 0,1,2 Input

Table 1.6 Port alternate functions

Trang 4

will overflow after 100 µs If this were used to toggle an output, a signal with a period of exactly 2 ⫻ 100 ⫽ 200 µs (frequency ⫽ 5 kHz) would be obtained Alternatively, a count of external pulses can be made, and read from the register when finished, or the read triggered by external signal Thus, the timers can also be used as counters Figure 5-1 in the data sheet shows the full block diagram of Timer0, which shows a pre-scale register and the watchdog

timer The pre-scaler is a divide by N register, where N⫽ 2, 4, 8, 16, 32, 64,

128 or 256, meaning that the output count rate is reduced by this factor This extends the count period or total count by the same ratio, giving a greater range

to the measurement The watchdog timer interval can also be extended, if this

is selected as the clock source The pre-scale select bits, and other control bits for Timer0 are found in OPTION_REG Some typical Timer0 configurations are detailed in Table 1.7

Timer1 is a 16-bit counter, consisting of TMR1H and TMR1L (0E AND 0F) When the low byte rolls over from FF to 00, the high byte is incremented The maximum count is therefore 65535d, which allows a higher count without sacrificing accuracy

Timer2 is an 8-bit counter (TMR2) with a 4-bit pre-scaler, 4-bit post-scaler and

a comparator It can be used to generate Pulse Width Modulated (PWM) output which is useful for driving DC motors and servos, among other things (see the data sheet, section 7, for more details) These timers can also be used in capture and compare modes, which allow external signals to be more easily measured There will be further detail provided with demonstration programs on timed I/O

11010000 Internal clock (fOSC/4) Timer mode using 1 Preload Timer0 with initial

Active bits in bold No pre-scale instruction clock value, and count up to 256

2 Clear Timer0 initially and read count later to measure time elapsed

11010011 Internal clock (fOSC/4) Timer mode using Extend the count period × 16

Pre-scale ⫽ 16 instruction clock with for applications 1 and 2

pre-scale

11110111 External clock Counter mode Count one pulse in 256 at RA4

T0CKI pin Pre-scale ⫽ 256

11111110 Watchdog timer Extend watchdog Watchdog timer checks

selected pre-scale ⫽ 64 reset period to program every second

18 × 64 ⫽ 1152 ms

Table 1.7 Typical configurations for Timer0

Trang 5

Indirect File Register Addressing

File register 00 (INDF) is used for indirect file register addressing The address

of the register is placed in the file select register (FSR) When data is written

to or read from INDF, it is actually written to or read from the file register pointed to by FSR This is most useful for carrying out a read or write on a continuous block of GPRs, for example, when saving data being read in from

a port over a period of time Since nine bits are needed to address all file registers (000–1FF), the IRP bit in the status register is used as the extra bit Direct and indirect addressing of the file registers are compared in the data sheet (Figure 2–6)

Interrupt Control Registers

The registers involved in interrupt handling are INTCON, PIR1, PIR2, PIE1, PIE2 and PCON Interrupts are external hardware signals which force the MCU to suspend its current process, and carry out an Interrupt Service Routine (ISR) An interrupt can be generated in various ways, but, in the PIC, the result is always to jump to program address 004 If more than one interrupt source is operational, then the source of the interrupt must be detected and the corresponding ISR selected

By default, interrupts are disabled, so programs can be loaded with their origin (first instruction) at address 0000, and the significance of address 0004 can be ignored If interrupts are to be used, the main program start address needs to be 0005, or higher, and a ‘GOTO start’ (or similar label) placed at address 0000 A ‘GOTO ISR’ instruction can then be placed at 004, using the ORG directive, which sets the address at which the instruction will be placed

by the assembler

The Global Interrupt Enable bit (INTCON, GIE) must be set to enable the interrupt system The individual interrupt source is then enabled For example, the bit INTCON, T0IE is set to enable the Timer0 overflow to trigger the interrupt sequence When the timer overflows, INTCON, T0IF (Timer0 Interrupt Flag) is set to indicate the interrupt source, and the ISR called The flags can be checked by the ISR to establish the source of the interrupt, if more than one is enabled A list of interrupt sources and their control bits is given in Table 1.8

The primary interrupt sources are Timer0 and Port B Input RB0 is used for single interrupts, and pins RB4–RB7 can be set up so that any change on these inputs initiates the interrupt This could be used to detect when a button on a keypad connected to Port B has been pressed, and the ISR would then process the input accordingly

The remaining interrupt sources are enabled by the Peripheral Interrupt Enable bit (INTCON, PEIE) These are then individually enabled and flagged

Trang 6

in PIE1, PIE2, PIR1 and PIR2 Many of these peripherals will be examined in more detail later, but the demonstration programs do not generally use inter-rupts, to keep them as simple as possible However, if these peripherals are used in more complex programs where multiple processes are required, inter-rupts are useful The program designer then has to decide on interrupt priority This means selectively disabling lower priority interrupts, using the enable bits, when a more important process is in progress For example, when reading

a serial port, the data has to be picked up from the port before being overwrit-ten by the next data to arrive

In more complex processors, a more sophisticated interrupt priority system may be available, so that interrupts have to be placed in order of priority, and those of a lower priority automatically disabled during a high-priority process The limited stack depth (8 return addresses) in the PIC must also be taken into account, especially if several levels of subroutine are implemented as well as multiple interrupts

Enable Flag

TMR0 INTCON,5 INTCON,2 Timer0 count overflowed

RB0 INTCON,4 INTCON,1 RB0 input changed (also uses INTEDG) RB4-7 INTCON,3 INTCON,0 Port B high nibble input changed

Peripherals INTCON,6

TMR2 PIE1,1 PIR1,1 Timer2 count matched period register PR2 CCP1 PIE1,2 PIR1,2 Timer1 count captured in or matched CCPR1 SSP PIE1,3 PIR1,3 Data transmitted or received in

Synchronous Serial Port

TX PIE1,4 PIR1,4 Transmit buffer empty in Asynchronous

Serial Port

RC PIE1,5 PIR1,5 Receive buffer full in Asynchronous

Serial Port

completed PSP PIE1,7 PIR1,7 A read or write has occurred in the

Parallel Slave Port CCP2 PIE2,0 PIR2,0 Timer2 count captured in or matched

CCPR2 BCL PIE2,3 PIR2,3 Bus collision detected in SSP (I 2 C mode)

Table 1.8 Interrupt sources and control bits

Trang 7

Peripheral Control Registers

The function of most of the peripheral blocks and their set up will be explained

as each is examined in turn, with a sample program

The only peripheral which does not require external connections is the Electrically Erasable Programmable Read Only Memory (EEPROM) This is a block of non-volatile read and write memory which stores data during power down; for example, a security code or combination for an electronic lock A set of registers in banks 2 and 3 are used to access this memory as well as a special EEPROM write sequence designed to prevent accidental overwriting of the secure data See Section 4 of the data sheet for details

SUMMARY 1

• The microcontroller contains a processor, memory and input/output devices

• The program is stored in ROM memory in numbered locations (addresses)

• The P16F877 stores a maximum of 8k ⫻ 14 instructions in flash ROM

• The P16FXXX family uses only 35 instructions

• The P16F877 has 368 bytes of RAM and 5 ports (33 I/O pins)

• The ports act as buffers between the MCU and external systems

• The program is executed in sequence, unless there is a jump instruction

• The program counter tracks the current instruction address

• A configuration word is needed to select the clock type and other chip options

• The program source code (.ASM) is assembled into machine code (.HEX)

• Subroutines are used to structure the program

• Interrupts are used to give I/O processing priority

• Hardware timers operate simultaneously with the program

• The serial ports require parallel to serial data conversion

ASSESSMENT 1

1 State the three main elements in any microprocessor system (3)

2 State the difference between a microprocessor and microcontroller (3)

Trang 8

3 Describe briefly the process of fetching an instruction (3)

4 State the advantages of flash ROM, compared with other memory types (3)

5 Explain why serial data communication is generally slower than parallel (3)

6 State why Ports A and E in the PIC 16F877 cannot be used for

7 How many bits does the 8k MCU program memory contain? (3)

8 Outline the process of installing a program in the PIC MCU (3)

9 Explain the function of each bit in the binary code for the instruction

10 Work out the configuration word required to initialise the P16F877 as follows:

RC clock, ICD enabled, PuT on, WDT off, BoD on, code protection off (3)

11 Briefly compare the operation of a subroutine and an interrupt, explaining

the role of the stack, return address, interrupt flag and the special

12 Explain how conditional program jumps are implemented in the PIC MCU (5)

ASSIGNMENTS 1

1.1 Program Execution

Describe the process of program instruction execution in a P16F877 MCU

by reference to its block diagram in the data sheet Explain the role of each block, and how the instructions and data is moved around Use the instructions MOVLW XX, ADDWF XX and CALL XXX as examples to explain the execution sequence and the nature of the operands of these instructions

1.2 Instruction Analysis

Analyse the machine code for program BIN1 List the instructions in binary and explain the function of each individual bit, or group of bits, within each instruction, by reference to the instruction set summary in the data sheet In particular, identify the operand bits, and the operand type (literal, file address

or program address)

Trang 9

1.3 Led Scanner

Study program BIN4 Suggest how the main loop could be modified to light the least significant LED, and then rotate it through each bit so that the lit LED appears to scan Explain what will happen after it reaches the last position, referring to role of the carry flag in the rotate command Suggest how the scan direction can be reversed at the end of the row of LEDs

Trang 10

2 PIC Software

The PIC microcontroller architecture has been introduced in Chapter 1, so we now turn to the software, or firmware, as it should more accurately be known, since it is stored in non-volatile memory The source code is written on a PC host using a text editor, or the edit window in MPLAB (the standard ment system), assembled and downloaded to the chip The entry-level develop-ment system hardware normally used until recently is shown in Figure 2.1 (a)

It consists of a host PC and programming unit, connected via a serial link The PC is running MPLAB, and when the program has been written and assembled, it is downloaded by placing the chip in programming unit con-nected to a PC COM (RS232) port The RS232 protocol, the simplest serial data format, will be described later since it is available as a serial port on the PIC 16F877 itself The chip is programmed via pins RB6 (clock) and RB7 (data)

The programming unit supplied by Microchip is called PICSTART Plus It has a zero insertion force (ZIF) socket in which the chip is placed, and contains another PIC within to handle the programming The firmware in the program-mer control chip can be updated in line with updates of the development sys-tem itself, since new MCU types are added continuously to the range Third party-companies also produce inexpensive programming modules, some of which are supplied in a kit form to further reduce the cost

A more recent, and versatile, method of program downloading uses ICD (In-Circuit Debugging) mode (Figure 2.1 (b)) Here, the PC is connected to an ICD module, which controls communication directly with the target chip The

Ngày đăng: 02/07/2014, 04:21