scs01

58
Sisteme de calcul specializate Cpt. conf. univ. dr. ing. Cristian MOLDER Facultatea de Sisteme Electronice ¸ si Informatice Militare Academia Tehnic˘ a Militar˘ a Cristian Molder Sisteme de calcul specializate

description

lab mcu

Transcript of scs01

Page 1: scs01

Sisteme de calcul specializate

Cpt. conf. univ. dr. ing. Cristian MOLDER

Facultatea de Sisteme Electronice si Informatice MilitareAcademia Tehnica Militara

Cristian Molder Sisteme de calcul specializate

Page 2: scs01

Seria PICmicro: arhitectura generala

EPROM

Memorieprogram

8K x 14

13 Magistrala date 8

14Magistralaprogram

Registru instr.

Program Counter

stivă cu 8 niveluri(13-bit)

RAMRegiştrii

fişier

368 x 8

Adresare directă 7

(1)RAM Addr 9

Addr MUX

Adresareindirectă

FSR reg

STATUS reg

MUX

ALU

W reg

Power-upTimer

OscillatorStart-up Timer

Power-onReset

WatchdogTimer

Decodareinstrucţiunişi control

Generatorceas

OSC1/CLKINOSC2/CLKOUT

MCLR

PORTA

VDD, VSS

PORTB

PORTC

PORTD

PORTE

RA4RA5

RC0RC1RC2

RC3RC4

RC5RC6RC7

8

8

Brown-out (2)Reset

USARTCCP ComparatoarePort serial

A/DTimer0 Timer1 Timer2

sincron

RA3RA2RA1RA0

8

3

până la

până la

RB0/INTRB1RB2

RB3RB4

RB5RB6RB7

RD0RD1RD2

RD3RD4

RD5RD6RD7

EEPROM datepână la256 x 8

Alte module Drivere LCD

Referinţăde tensiune

Module periferice

PORTFRF0RF1RF2

RF3RF4

RF5RF6RF7

PORTGRG0RG1RG2

RG3RG4

RG5RG6RG7

Port paralelslave

RE0RE1RE2

RE3RE4

RE5RE6RE7

Semnal ceasRC intern

Porturi I/O

Cristian Molder Sisteme de calcul specializate

Page 3: scs01

Registrii de uz general

Registru de control pentru configurarea prescalerului Timer0/WDT, întreruperilor externe, semnalului de ceas al Timer0şi rezistenţele de tip Weak Pull-up ale portului B.

OPTION_REG Bit nameBit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R/W (1) R/W (1) R/W (1) R/W (1) R/W (1) R/W (1) R/W (1) Features

INTEDG T0CS T0SE PSA PS2 PS1 PS0RBPU

R/W (1)

RBPU

INTEDG

T0CS

T0SE

PSA

PS2:PS0

Notă: pentru a obţine un prescaler 1:1 la modulul Timer0, prescalerul se asociază la WDT.

PortB Pull-up Enable bit1 = rezistenţele de pull-up inactive0 = rezistenţele de pull-up active

Interrupt Edge Select bit1 = întrerupere pe frontul crescător al impulsului la pinul INT0 = întrerupere pe frontul descrescător al impulsului la pinul INT

TMR0 Clock Source Select bit1 = semnal de ceas la pinul T0CKI0 = semnal de ceas de la oscilatorul intern

TMR0 Source Edge Select bit1 = increment la tranziţie 1-0 la pinul T0CKI0 = increment la tranziţie 0-1 la pinul T0CKI

Prescaler Assignment bit1 = prescaler asociat la WDT0 = prescaler asociat la Timer0

Prescaler Rate Select bits

PS2 PS1 PS0 Timer0 WDT

0 0 0 1:2 1:1

0 0 1 1:4

0 1 0 1:8

0 1 1 1:16

1 0 0 1:32

1 0 1 1:64

1 1 0 1:128

1 1 1 1:256

1:2

1:4

1:8

1:16

1:32

1:64

1:128

Cristian Molder Sisteme de calcul specializate

Page 4: scs01

Intreruperi

În registrul INTCON

În regiştrii PIR/PIE

TMR1IE

TMR1IF

TMR2IE

TMR2IF

INTFINTE

RBIFRBIE

T0IFT0IE

GIE

PEIE

Wake-up (If in SLEEP mode)

Interrupt to CPU

ADCIE

ADCIF

ADIE

ADIF

CCP1IE

CCP1IF

CCP2IE

CCP2IF

CMIE

CMIF

EEIE

EEIF

LCDIE

LCDIF

PBIE

PBIF

PSPIE

PSPIF

RCIE

RCIF

SSPIE

SSPIF

OVFIE

OVFIF

TXIE

TXIF

GPIFGPIE

Clear GIE bit

Cristian Molder Sisteme de calcul specializate

Page 5: scs01

Intreruperi

INTCON Bit nameBit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) Features

PEIE T0IE INTE RBIE T0IF INTF RBIFGIE

R/W (0)

Registru de control şi semnalizare a întreruperilor globale, periferice, ale timerului 0 şi portului B (vezi şi PIR/PIE).

GIE

PEIE

T0IE

INTE

RBIE

T0IF

INTF

RBIF

Notă: la unele MCU, RBIE este cunoscut ca GPIE, iar RBIF este cunoscut ca GPIF.

Global Interrupt Enable bit1 = activează toate întreruperile nemascate0 = dezactivează toate întreruperile

Peripheral Interrupt Enable bit1 = activează toate întreruperile periferice nemascate0 = dezactivează toate întreruperile periferice

TMR0 Overflow Interrupt Enable bit1 = activează întreruperea de overflow al Timer00 = dezactivează întreruperea de overflow al Timer0

INT External Interrupt Enable bit1 = activează întreruperea externă INT0 = dezactivează întreruperea externă INT

RB Port Change Interrupt Enable bit1 = activează întreruperea la modificarea stării portului RB0 = dezactivează întreruperea la modificarea stării portului RB

TMR0 Overflow Interrupt Flag bit1 = există overflow la Timer00 = nu există overflow la Timer0

INT External Interrupt Flag bit1 = există întrerupere externă INT0 = nu există întrerupere externă INT

RB Port Change Interrupt Flag bit1 = cel puţin unul din biţii RB7:RB4 şi-a schimbat starea0 = nici unul din biţii RB7:RB4 nu şi-a schimbat starea

Cristian Molder Sisteme de calcul specializate

Page 6: scs01

Intreruperi

PIEx Bit nameBit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) FeaturesR/W (0)

Registru de control al întreruperilor periferice (configuraţia biţilor depinde de fiecare dispozitiv).

TMR1E

TMR2E

CCP1IE

CCP2IE

SSPIE

RCIE

TXIE

ADIE

ADCIE

OVFIE

PSPIE

EEIE

LCDIE

CMIE

Timer1 Overflow Interrupt Enable bit

Timer2 Overflow Interrupt Enable bit

CCP1 Interrupt Enable bit

CCP2 Interrupt Enable bit

Synchronous Serial Port Interrupt Enable bit

USART Receive Interrupt Enable bit

USART Transmit Interrupt Enable bit

A/D Converter Interrupt Enable bit

Slope A/D Converter Comparator Trip Interrupt Enable bit

Slope A/D TMR Overflow Interrupt Enable bit

Parallel Slave Port Read/Write Interrupt Enable bit

EE Write Complete Interrupt Enable bit

LCD Interrupt Enable bit

Comparator Interrupt Enable bit

Cristian Molder Sisteme de calcul specializate

Page 7: scs01

Intreruperi

PIRx Bit nameBit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) FeaturesR/W (0)

Registru de semnalizare a întreruperilor periferice (configuraţia biţilor depinde de fiecare dispozitiv).

TMR1F

TMR2F

CCP1IF

CCP2IF

SSPIF

RCIF

TXIF

ADIF

ADCIF

OVFIF

PSPIF

EEIF

LCDIF

CMIF

Timer1 Overflow Interrupt Flag bit

Timer2 Overflow Interrupt Flag bit

CCP1 Interrupt Flag bit

CCP2 Interrupt Flag bit

Synchronous Serial Port Interrupt Flag bit

USART Receive Interrupt Flag bit

USART Transmit Interrupt Flag bit

A/D Converter Interrupt Flag bit

Slope A/D Converter Comparator Trip Interrupt Flag bit

Slope A/D TMR Overflow Interrupt Flag bit

Parallel Slave Port Read/Write Interrupt Flag bit

EE Write Complete Interrupt Flag bit

LCD Interrupt Flag bit

Comparator Interrupt Flag bit

Cristian Molder Sisteme de calcul specializate

Page 8: scs01

Semnalul de ceas: arhitectura

T1OSCEN

T1OSO

T1OSI

OSC1

OSC2

Sleep

LP, XT, HS, RC, EC

T1OSC

CPU

Periferice

Posts

cale

r

MU

X

MU

X

8 MHz

4 MHz

2 MHz

1 MHz

500 kHz

125 kHz

250 kHz

IRCF2:IRCF0

31.25 kHz

31.25 kHzOscilator

Oscilatorintern

WDT, FSCM31.25 kHz

8 MHz

Oscilator intern

(INTRC)

(INTOSC)

FOSC2:FOSC0SCS1:SCS0

Către Timer1

111

110

101

100

011

010

001

000

00

01

10

Activareoscilator

Oscilatorprimar

Oscilatorsecundar

Cristian Molder Sisteme de calcul specializate

Page 9: scs01

Semnalul de ceas: registrii de control

OSCCON Bit nameBit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R/W (1) R/W (1) R/W (0) R (1) R (0) R (0) R/W (0) Features

IRCF2 IRCF1 IRCF0 OSTS HTS LTS SCS-

IRCF2 IRCF1 IRCF0 Frequency Oscillator

1 1 1 8 MHz HFINTOSC

1 1 0 4 MHz HFINTOSC

1 0 1 2 MHz HFINTOSC

1 0 0 1 MHz HFINTOSC

0 1 1 500 kHz HFINTOSC

0 1 0 250 kHz HFINTOSC

0 0 1 125 kHz HFINTOSC

0 0 0 31 kHz LFINTOSC

Registru de control al modului de operare cu semnalul de ceas.

IRCF2:IRCF0

OSTS

HTS

LTS

SCS

Notă: registrul nu este controlat direct, ci se scrie în timpul procesului de programare a MCU.

Internal Oscillator Frequency Select bitsstabileşte raportul de divizare al semnalului de ceas.

Oscillator Start-up Time-out Status bit1 = oscilator extern în uz0 = unul din oscilatoarele interne în uz

HFINTOSC Stable bit1 = HFINTOSC este stabil0 = HFINTOSC nu este stabil

LFINTOSC Stable bit1 = LFINTOSC este stabil0 = LFINTOSC nu este stabil

System Clock Select bit1 = este utilizat oscilatorul intern0 = este utilizat oscilatorul extern

Cristian Molder Sisteme de calcul specializate

Page 10: scs01

Semnalul de ceas: registrii de control

CONFIG Bit nameBit 13 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R/P (1) R/P (1) R/P (1) R/P (1) R/P (1) R/P (1) R/P (1) Features

... MLCRE FOSC2 PWRTEN FOSC1 FOSC0

FOSC2 FOSC1 FOSC0 Mod

1 1 1 EXTRC, RA6 ca CLKO

1 1 0 EXTRC, RA6 ca I/O

1 0 1 INTRC, RA6 ca CLKO

1 0 0 INTRC, RA6 ca I/O

0 1 1 ECIO, RA6 ca I/O

0 1 0 HS

0 0 1 XT

0 0 0 LP

Registru de control al modului de operare cu semnalul de ceas.

FOSC2:FOSC0

Notă: registrul nu este controlat direct, ci se scrie în timpul procesului de programare a MCU.

Oscillator Selection bitsselectează sursa semnalului de ceas.

WDTEN

Cristian Molder Sisteme de calcul specializate

Page 11: scs01

Semnalul de ceas: calibrarea oscilatorului intern

Registru de ajustare/acord a frecvenţei oscilatorului în jurul valorii nominale.

OSCTUNE Bit nameBit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

U (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) Features

- TUN5 TUN4 TUN3 TUN2 TUN1 TUN0-

U (0)

TUN2 TUN1 TUN0 Frequency

1 1 1 Maximal

0 0 1

0 0 0 Calibrated

1 1 1

0 0 0 Minimal

TUN4 TUN3

1 1

0 0

0 0

1 1

0 0

Frecvenţă

TUN5:TUN0Zona de ajustare

4 MHz

TUN5:TUN0=011111 TUN5:TUN0=100000

> 4 MHz

< 4 MHz

TUN5:TUN0=000000

TUN5

0

0

0

1

1

Cristian Molder Sisteme de calcul specializate

Page 12: scs01

Semnalul de ceas: calibrarea oscilatorului intern

Cristian Molder Sisteme de calcul specializate

Page 13: scs01

Semnalul de ceas: configuratii

31.25 kHzOscilatorintern

10

125 kHz 10

250 kHz 10

500 kHz 10

1 MHz 10

SCS1:SCS0

2 MHz 10

4 MHz 10

Oscilatorprimar

8 MHz 10

EXTRC & CLKO 00

EXTRC 00

000

001

010

011

100

IRCF2:IRCF0

101

110

111

-

-

-

-

-

-

-

FOSC2:FOSC0

-

-

-

111

110

INTRC & CLKO 00

INTRC 00

000 ... 111

000 ... 111

101

100

ECIO 00

HS 00

-

-

011

010

XT 00

LP 00

-

-

001

000

Timer1 T1OSC 01 - -

Cristian Molder Sisteme de calcul specializate

Page 14: scs01

Semnalul de ceas: surse externe

OSC1 pin

OSC2 pin

Cuarţ

Moduri LP, XT, HS

CPU

OSC.

20-30pF

20-30pF

GND

OSC1 pin

OSC2 pin

I/O

OSC.DC-20MHz

Oscilator extern Mod EC

CPU

OSC1 pin

OSC2 pin

Mod RC

CPU

În modul EC se utilizează o sursă externă ca sursă de ceas. Modul LP : cristale de cuarţ de joasă frecvenţă (32.768 kHz).Modul XT : cristale de cuarţ cu frecvenţă medie de până la 8 MHz.Modul HS : cristale de cuarţ cu frecvenţă mare de peste 8 MHz.

OSC.

Fosc

GND

20pF

5-100K

Fosc/4

+5V

OSC1 pin

OSC2 pin

Mod RCIO

CPU

OSC.

Fosc

GND

20pF

5-100K

+5V

Modul RC. Pinul OSC1 este conectat la circuitul RC iar pinul OSC2furnizează la ieşire frecvenţa / 4.

I/O

Modul RCIO. este utilizat ca pin de I/O.

Pinul OSC1 este conectat la circuitul RC iar pinul OSC2

Cristian Molder Sisteme de calcul specializate

Page 15: scs01

Semnalul de ceas: valori ale capacitatilor

32 kHzLP -

200 kHz -

100 kHz -

455 kHz 15-68 pF

2 MHz 15-68 pF

C2C1

-

-

-

15-68 pF

C1

68-100 pF

15-30 pF

68-100 pF

-

C2

68-100 pF

15-30 pF

150-200 pF

-

Rezonator ceramic Cristal de cuarţ

15-68 pF 15-30 pF 15-30 pF

4 MHz 15-68 pF

- -

15-68 pF 15-30 pF 15-30 pF

8 MHz 10-68 pF

- -

10-68 pF 15-30 pF 15-30 pF

XT

HS

10 MHz 10-68 pF

16 MHz 10-22 pF

10-68 pF 15-30 pF 15-30 pF

10-22 pF - -

20 MHz -

15-30 pF 15-30 pF

- 15-30 pF 15-30 pF- -

Cristian Molder Sisteme de calcul specializate

Page 16: scs01

Semnalul de ceas: surse interne

OSC1 pin

OSC2 pin

I/O

Mod INTOSC

CPU

Modul INTOSC. Pinul OSC1 este disponibil ca pin de I/O, iar pinul OSC2dă la ieşire frecvenţa de oscilaţie / 4.

Fosc/4

INT.OSC.

Fosc

OSC1 pin

OSC2 pin

I/O

Mod INTOSCIO

CPUINT.

OSC.

Modul INTOSCIO. Ambii pini sunt disponibili ca pini I/O.

I/O

Fosc

Cristian Molder Sisteme de calcul specializate

Page 17: scs01

Semnalul de ceas: scheme uzuale

OSC2C2

C1

XTAL RF SLEEP

PIC16Fxxx

Logică internă

Logică internă

RS

OSC1

XTAL10k

PIC16Fxxx

Către alte disp.

4k7

CLKIN

20pF 20pF

10k

10k

+5V

74AS04

74AS04

XTAL

PIC16Fxxx

Către alte disp.330k

CLKIN

74AS0474AS04

0.1uF

74AS04

330k

CLKOUT

CEXT

FOSC/4

REXT

PIC16Fxxx

CLKIN

VDD

FOSC

Cristal de cuarţ Oscilator extern

Oscilator externCircuit oscilant RC

Cristian Molder Sisteme de calcul specializate

Page 18: scs01

Semnalul de ceas: setari de cod

PIC16F88

17

5

14

4 VPP

VDD

GND

PGD

PGC

ICSP

1

512

220R1

LED1

13C2

C115pF

15pF

XTAL8MHz

16

15

// Ex.3.1: Functionare cu oscilator intern (INTRC) de 8 MHzvoid main() { OSCCON.SCS1=1; // Oscilator intern

OSCCON.SCS0=0; // (SCS1-SCS0=10)OSCCON.IRCF2=1; // Ceas de 8 MhzOSCCON.IRCF1=1; // IRCF2:IRCF0=111OSCCON.IRCF0=1; // (doar in mod INTRC)ANSEL=0; // Porturi digitaleTRISA=0; // Portul A in mod iesirePORTA=0; // Initializare port Awhile(1) { // Bucla infinita

PORTA.B0=!PORTA.B0; // Inversare bit RA0delay_ms(500); // Pauza de 500 ms

}}

Cristian Molder Sisteme de calcul specializate

Page 19: scs01

Semnalul de ceas: exercitii

IRCF2 IRCF1 IRCF0 Frequency Oscillator

1 1 1 8 MHz HFINTOSC

1 1 0 4 MHz HFINTOSC

1 0 1 2 MHz HFINTOSC

1 0 0 1 MHz HFINTOSC

0 1 1 500 kHz HFINTOSC

0 1 0 250 kHz HFINTOSC

0 0 1 125 kHz HFINTOSC

0 0 0 31 kHz LFINTOSC

FOSC2 FOSC1 FOSC0 Mod

1 1 1 EXTRC, RA6 ca CLKO

1 1 0 EXTRC, RA6 ca I/O

1 0 1 INTRC, RA6 ca CLKO

1 0 0 INTRC, RA6 ca I/O

0 1 1 ECIO, RA6 ca I/O

0 1 0 HS

0 0 1 XT

0 0 0 LP

Exerciţii:

1) cuarţ extern de 10 MHz2) semnal de ceas extern3) semnal de ceas intern de 1 MHz cu OSC2 ca I/O4) semnal de ceas intern de 2 MHz cu OSC2 ca FOSC/45) semnal de ceas intern de 31.25 kHz6) semnal de ceas RC extern de 1 MHz7) semnal de ceas RC extern cu doua frecvente selectabile

Cristian Molder Sisteme de calcul specializate

Page 20: scs01

Reset: tipuri

POR : Power-On Reset;

MCLR : reset ın timpul functionarii normale;

MCLR : reset ın timpul starii SLEEP;

WDT : reset de la Watchdog;

BOR : Brown-Out Reset;

PER : Parity Error Reset.

Cristian Molder Sisteme de calcul specializate

Page 21: scs01

Reset: schema bloc

S

R Q

MCLR / VPP Pin

VDD

OSC1/

ModululWDT

Detectiecrestere

OST/PWRT

On-chipRC OSC

WDT Time-out

Power-on Reset

OST

PWRT

Chip_Reset

Numărător 10-biţi

Activare OST

Activare PWRT

SLEEP

Brown-outReset BODEN

CLKINPin

Numărător 10-biţi

Paritatememorieprogram

MPEEN

MCLRE

Weak Pull-up

VDD

MCLRE

I/O Pull-upEnable

VDD

Cristian Molder Sisteme de calcul specializate

Page 22: scs01

Reset: alimentarea circuitului

VDD

MCLR

TPWRT

TOST

INTERNAL POR

PWRT TIME-OUT

OST TIME-OUT

INTERNAL RESET

Configuraţiaoscilatorului

Power-up Timer

Brown-out ResetWake-up

from SLEEPEnabled Disabled

XT, HS, LP 72 ms + 1024TOSC 1024TOSC 72 ms + 1024TOSC 1024TOSC

RC 72 ms — 72 ms —

Cristian Molder Sisteme de calcul specializate

Page 23: scs01

Reset: Brown-Out

72 ms

VDD

Internal

Reset

BVDD

VDD

Internal

Reset 72 ms<72 ms

72 ms

BVDD

VDD

Internal

Reset

BVDD

Cristian Molder Sisteme de calcul specializate

Page 24: scs01

Modul Sleep

Comanda: asm{SLEEP}Wake-up from SLEEP:

ıntrerupere la pinul INT extern;ıntrerupere la modificarea starii pinilor RB;ıntrerupere la Comparatorıntrerupere la A/D;ıntrerupere la Timer1;ıntrerupere la LCD;ıntrerupere la SSP;ıntrerupere la CCP;orice reset;Watchdog Wake-up;

Consum de 2uA

Cristian Molder Sisteme de calcul specializate

Page 25: scs01

Porturi I/O

Porturile I/O sunt cele mai simple periferice ale unui microcontroler. Permit comunicarea acestuia cu exteriorul.Pentru flexibilitate, porturile I/O sunt multiplexate cu alte periferice sau funcţii.

Direcţia portului (intrare sau ieşire) este stabilită prin registrul TRIS.

Registrul PORT este un latch care conţine valoarea de ieşire a portului. La citirea portului, se determină valoareaprezentă la intrare, nu cea existentă în latch.

Portul A - multiplexat cu convertorul A/D

Portul B - conţine întreruperi externe de port

Portul C - multiplexat cu diferite periferice

Portul D şi E - uz general

Portul F şi G - multiplexat cu driverul LCD

Porturile pot conţine diode de protecţie la VDD şi VSS.

Cristian Molder Sisteme de calcul specializate

Page 26: scs01

Portul A: RA5, RA3:0

Data bus

WR PORT

WR TRIS

RD PORT

Data Latch

TRIS Latch

P

I/O pin

VSS

To Peripheral Module(s)

QD

QCK

QD

QCK

Q D

EN

N

Analoginputmode

TTL

VDD

RD TRIS

or STinputbuffer

Cristian Molder Sisteme de calcul specializate

Page 27: scs01

Portul A: RA4

Data bus

WR PORT

WR TRIS

RD PORT

Data Latch

TRIS Latch

VSS

To Peripheral Module(s)

QD

QCK

QD

QCK

Q D

EN

N

RD TRIS

SchmittTriggerinputbuffer

RA4 pin

Cristian Molder Sisteme de calcul specializate

Page 28: scs01

Portul RB

Portul RB, pinii RB3:RB0

Data Latch

RBPU(2)

P

VDD

QD

CK

QD

CK

Q D

EN

Data bus

WR Port

WR TRIS

RD TRIS

RD Port

weakpull-up

RD Port

To Peripheral Module

I/O(1)pin

TTLInputBuffer

Schmitt TriggerBuffer

TRIS Latch

Data Latch

From other

RBPU(2)

P

VDD

I/O

QD

CK

QD

CK

Q D

EN

Q D

EN

Data bus

WR Port

WR TRIS

Set RBIF

TRIS Latch

RD TRIS

RD Port

RB7:RB4 pins

weakpull-up

RD Port

Latch

TTLInputBuffer

(1)pin

STBuffer

RB7:RB6 in serial programming mode

Q3

Q1

Portul RB, pinii RB7:RB4

Cristian Molder Sisteme de calcul specializate

Page 29: scs01

Portul RC

Data Latch

TRIS Latch

RD TRIS

P

VSS

QD

QCK

QD

QCK

Q D

EN

N

VDD

0

1

RD PORT

WR PORT

WR TRIS

SchmittTrigger

Peripheral input

Data Bus

(2)Peripheral OE

PORT/PERIPHERAL (1) Select

Peripheral Data-out

RD PORT

I/O pin

Cristian Molder Sisteme de calcul specializate

Page 30: scs01

Porturile RD si RE

Data Bus

WR PORT

WR TRIS

RD PORT

Data Latch

TRIS Latch

SchmittTriggerinputbuffer

QD

QCK

QD

QCK

Q D

EN

I/O pin

RD TRIS

Cristian Molder Sisteme de calcul specializate

Page 31: scs01

Porturile RF si RG

RD PORT

SchmittTriggerinputbuffer

Q D

EN

Digital Input/

LCDSE<n>

LCD Segment Data

LCD Segment LCD Output pin

Data Bus

RD TRIS

Output Enable

VDD

Cristian Molder Sisteme de calcul specializate

Page 32: scs01

Portul GPIO

DataBus

QD

QCK

QD

QCKP

N

WRPort

TRIS ‘f’

Data

TRIS

RD Port

VDD

I/O

VSS

(1)pinWReg

Latch

Latch

Reset

Cristian Molder Sisteme de calcul specializate

Page 33: scs01

Porturi I/O: configuratia generala

Latchdirecție

date

Latchdate

de ieșire

Latchdate

de intrare

Driverde curentde ieșire

Activareieșire

3S

Write TRIS bit

CPU Data Bus

Write Data bit

Read Data bit

Multiplexareintrare analogică

Cristian Molder Sisteme de calcul specializate

Page 34: scs01

Efectul de bouncing

Cristian Molder Sisteme de calcul specializate

Page 35: scs01

Debouncing

10k

R1

D1

R2

100n

C1

VCC

K1

VOUTVK

VK

VOUT

apăsare eliberare

5V

0V

VINVIN

5V

0V

5V

0V

while (cnt<10) { // Cat timp contorul este sub 10 delay_ms(1); // Intarziere 1 ms if (GPIO.B5==0) // Daca butonul este apasat cnt++; // se incrementeaza contorul else // In caz contrar cnt=0; // Se reseteaza contorul}

Cristian Molder Sisteme de calcul specializate

Page 36: scs01

Programarea ICSP

Conector ICSP

VSS

PGC

MCLR/VPP

VDD

PGD

1

2

3

4

5

VPP

GND

VDD

PGD

PGC

Rezistenţe de separare

Microcontroler

VDDVDDCircuit imprimat

Către circuit

ICSPDAT

ICSPCLK

VSS

Cristian Molder Sisteme de calcul specializate

Page 37: scs01

Programarea ICSP

PIC

16

F8

8

1 •

2

3

4

5

6

7

8

9

18

17

16

15

14

13

12

11

10

RA1

RA0

OSC1

OSC2

VDD

RB7/PGD

RB6/PGC

RB5

RB4

RA2

RA3

RA4/T0CKI

MCLR/VPP

VSS (GND)

RB0/INT

RB1

RB2

RB3

DIP 18

PIC

16

F6

90

1 •

2

3

4

5

6

7

8

9

20

19

18

17

16

15

14

13

12

VSS (GND)

RA0/PGD

RA1/PGC

RA2/T0CKI/INT

RC0

RC1

RC2

RB4

RB5

VDD

RA5/OSC1

RA4/OSC2

RA3/MCLR/VPP

RC5

RC4

RC3

RC5

RC7

DIP 20

10 11 RB6RB7

PIC

16

F6

84

1 •

2

3

4

5

6

7

14

13

12

11

10

9

8

VSS (GND)

RA0/PGD

RA1/PGC

RA2/T0CKI/INT

RC0

RC1

RC2

VDD

RA5/OSC1

RA4/OSC2

RA3/MCLR/VPP

RC5

RC4

RC3

DIP 14

PIC

12F675

1 •

2

3

4 5

6

7

8 VSS (GND)

GPIO0/PGD

GPIO1/PGC

GPIO2

VDD

GPIO5

GPIO4

GPIO3/MCLR/VPP

DIP 8

PIC12F

Microcontrolere cu 8, 14 sau 20 pini

Microcontrolere cu 18 pini

PIC

10

F22X

1 •

2

3

4 5

6

7

8 GP3/MCLR/VPP

VSS (GND)

N/C

GP0/PGD

N/C

VDD

GP2/T0CKI/FOSC4

GP1/PGC

DIP 8

Microcontrolere cu 8 pini(seria PIC10F)

PIC

16

F8

86

DIP 28

1 •

2

3

4

5

6

7

8

9

11

12

13

14

10

RE3/MCLR/VPP

RA0

RA1

RA2

RA3

RA4/T0CKI

RA5

VSS

RA7/OSC1

RA6/OSC2

RC0/T0CKI

RC1

RC2

RC3

RB7/PGD

RB6/PGC

RB5

RB4

RB2

RB1

RB0/INT

VDD

VSS (GND)

RC7

RC6

RC5

RC4

RB3/PGM

28

27

26

25

24

23

22

21

20

18

17

16

15

19

Microcontrolere cu 28 sau 40 pini

PIC

16

F8

87

1 •

2

3

4

5

6

7

8

9

11

12

13

14

15

16

17

18

19

10

20

40

39

38

37

36

35

34

33

32

30

29

28

27

26

25

24

23

22

31

21

RE3/MCLR/VPP

RA0

RA1

RA2

RA3

RA4/T0CKI

RA5

RE0

RE1

RE2

VDD

VSS

RA7/OSC1

RA6/OSC2

RC0/T1CKI

RC1

RC2

RC3

RD0

RD1

RB7/PGD

RB6/PGC

RB5

RB4

RB3/PGM

RB2

RB1

RB0/INT

VDD

VSS (GND)

RD6

RD5

RD4

RC7

RC6

RC5

RC4

RD3

RD2

RD7

DIP 40

Cristian Molder Sisteme de calcul specializate

Page 38: scs01

PICkit2: modulul hardware

RJ-11

Molex KK®

Molex SL/C-Grid

Power

Target

Busy

Programator PICkit 2

Conector ICSP

16

16

Pin

1

2

3

4

5

6

Descriere

MCLR/VPP

VDD

VSS (GND)

PGD (ICSPDAT)

PGC (ICSPCLK)

PGM (Auxiliar)

TM

Cristian Molder Sisteme de calcul specializate

Page 39: scs01

PICkit2: interfata software

Bara de meniu

Configuraţiamicrocontrolerului

Fereastra de stare

Bara de progresTensiunea VDD

Sursa memoriei

Memoria program

Memoria de dateEEPROM

Cristian Molder Sisteme de calcul specializate

Page 40: scs01

PIC12F675

PIC

12F

675

1 •

2

3

4 5

6

7

8 VSS

GP0/AN0/CIN+/PGD

GP1/AN1/CIN-/VREF/PGC

GP2/AN2/T0CKI/INT/COUT

VDD

GP5/T1CKI/OSC2/CLKIN

GP4/AN4/T1G/OSC2/CLKOUT

GP3/MCLR/VPP

TRISIO

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

U (0) R/W (1) R/W (1) R (1) R/W (1) R/W (1) R/W (1)

- TRISIO5 TRISIO4 TRISIO3 TRISIO2 TRISIO1 TRISIO0-

U (0)

GPIO

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

U (x) R/W (x) R/W (x) R/W (x) R/W (x) R/W (x) R/W (x)

- GPIO5 GPIO4 GPIO3 GPIO2 GPIO1 GPIO0-

U (0)

WPU

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

U (0) R/W (1) R/W (1) U (0) R/W (1) R/W (1) R/W (1)

- WPU5 WPU4 - WPU2 WPU1 WPU0-

U (0)

IOC

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

U (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0)

- IOC5 IOC4 IOC3 IOC2 IOC1 IOC0-

U (0)

Cristian Molder Sisteme de calcul specializate

Page 41: scs01

PIC12F675: porturile I/O fara pull-up

Testarea porturilor I/O

PIC12F675

1

8

6

7

41 3

2

7805

100n10u

6-18 VDC 5 VDCVPP

VDD

GND

PGD

PGC

ICSP

1

5

10k

1N4148

100n

5

220

C1 C2 C3

R1

10k

R2

D1

R3

LED1

10kR4

K1

2

void main() { TRISIO.B2=0; // Pinul GP2 ca pin de iesire TRISIO.B5=1; // Pinul GP2 ca pin de intrare while (1) { // Bucla infinita GPIO.B2=GPIO.B5; // Pinul GP2 ia valoarea lui GP5 }}

Cristian Molder Sisteme de calcul specializate

Page 42: scs01

PIC12F675: porturile I/O cu pull-up

PIC12F675

1

8

6

7

41 3

2

7805

100n10u

6-18 VDC 5 VDCVPP

VDD

GND

PGD

PGC

ICSP

1

5

10k

1N4148

100n

5

220

C1 C2 C3

R1

10k

R2

D1

R3

LED1

K1

2

OPTION_REG.B7=0; // _GPPU activatWPU.B5=1; // Pinul GP2 are activat weak pull-up

Cristian Molder Sisteme de calcul specializate

Page 43: scs01

PIC12F675: porturile I/O cu ıntreruperi

void interrupt() { // Procedura de intreupere GPIO.B2=~GPIO.B2; // Modificarea valorii portului GP2 INTCON.GPIF=0; // Revenirea din intrerupere}

void main() { // Programul principal INTCON.GPIE=1; // Activarea intreruperilor portului IOC.B5=1; // Activarea intreruperii pinului GP5}

PIC12F675

1

8

6

7

41 3

2

7805

100n10u

6-18 VDC 5 VDCVPP

VDD

GND

PGD

PGC

ICSP

1

5

10k

1N4148

100n

5

220

C1 C2 C3

R1

10k

R2

D1

R3

LED1

10kR4

K1

2

Cristian Molder Sisteme de calcul specializate

Page 44: scs01

Porturile I/O: exercitii

Exercitii:

1) cu 3 biti I/O ai unui MCU controlati independent 6 LEDuri

2) de cati biti I/O este nevoie pentru a controla independent 30 de LEDuri?

Cristian Molder Sisteme de calcul specializate

Page 45: scs01

Porturile I/O: rezolvare

GPx LEDs0 1 2

0 0 00 1 Z1 0 ZZ 0 1Z 1 00 Z 11 Z 00 0 10 1 00 1 11 0 01 0 11 1 01 1 1

1 2 3 4 5 6

0 0 0 0 0 01 0 0 0 0 00 1 0 0 0 00 0 1 0 0 00 0 0 1 0 00 0 0 0 1 00 0 0 0 0 10 0 1 0 1 01 0 0 1 0 01 0 0 0 1 00 1 0 0 0 10 1 1 0 0 00 0 0 1 0 10 0 0 0 0 0

1 2 5

43

6

GP0

GP1

GP2

D = GP x (GP - 1)

Cristian Molder Sisteme de calcul specializate

Page 46: scs01

Timer0: Schema bloc

RA4/T0CKI/C2OUT

T0SE

M

UX

CLKO (= FOSC/4)

Sync2

cicluriReg. TMR0

Prescaler pe 8 biți

MUX 8-la-1

M

UX

M U X

PSA

0 1

0

1

WDTTime-out

PS2:PS0

8

PSA

M

UX

0

1 0

1

Magistrală date

Setare bit TMR0IF pe 1la Overflow

8

PSAT0CS

Prescaler

31.25 kHz

Timerul Watchdog (WDT)

Bit activare WDT

Prescalerpe 16 biți

Cristian Molder Sisteme de calcul specializate

Page 47: scs01

Timer0: Registrii de control

OPTION_REG

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R/W (1) R/W (1) R/W (1) R/W (1) R/W (1) R/W (1) R/W (1)

INTEDG T0CS T0SE PSA PS2 PS1 PS0RBPU

R/W (1)

INTCON

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R/W (1) R/W (1) R/W (1) R/W (1) R/W (1) R/W (1) R/W (1)

PEIE TMR0IE INT0IE RBIE TMR0IF INT0IF RBIFGIE

R/W (1)

PS2 PS1 PS0Timer0 WDT

0 0 01:2 1:1

0 0 11:4 1:2

0 1 01:8 1:4

0 1 11:16 1:8

1 0 01:32 1:16

1 0 11:64 1:32

1 1 01:128 1:64

1 1 11:256 1:128

PSA=0 PSA=1

Cristian Molder Sisteme de calcul specializate

Page 48: scs01

Timer0: exemplu de calcul 1

TTimer0 =4

FOSC

PS x (256 - TMR0)

TTimer0 =4

31250x 16 x (256 - 12) =

void interrupt() { // Rutina de intrerupere PORTA.B0=!PORTA.B0; // Inversare bit Ra0 TMR0=14; // Valoare presetata TMR0 INTCON.TMR0IF=0; // Resetare flag intrerupere}

void main() { OSCCON.IRCF2=0; // Ceas intern 31.25 kHz OSCCON.IRCF1=0; // (IRCF2:IRCF0=000) OSCCON.IRCF0=0; OPTION_REG.PS2=0; // Prescaler 1:16 OPTION_REG.PS1=1; // (PS2:PS1=011) OPTION_REG.PS0=1; OPTION_REG.T0CS=0; // Utilizare ceas intern Fosc/4 OPTION_REG.PSA=0; // Prescaler legat la Timer0

ANSEL=0; // Porturi digitale TRISA=0; // Portul A in mod iesire PORTA=0; // Initializare port A

INTCON.GIE=1; // Intreruperi globale active INTCON.PEIE=1; // Intreruperi periferice active INTCON.TMR0IE=1; // Intrerupere Timer0 activa}

= 0.000128 x 16 x 244 = 0.499712 s

TTimer0 =1

FOSC

PS x (256 - TMR0)

Osc intern

Osc extern

Cristian Molder Sisteme de calcul specializate

Page 49: scs01

Timer0: exemplu de calcul 2 (cu variabila contor)

char cnt=15; // Definire variabila contor

void interrupt() { // Rutina de intrerupere cnt--; if (cnt==0) { // Verificare contor PORTA.B0=!PORTA.B0; // Inversare bit Ra0 cnt=15; // Reinitializare contor } TMR0=255; // Preincarcare TMR0 INTCON.TMR0IF=0; // Resetare flag intrerupere}

void main() { ANSEL=0; // Porturi digitale TRISA=0; // Portul A in mod iesire PORTA=0; // Initializare port A cu 0

OSCCON.IRCF2=0; // Ceas intern 31.25 kHz OSCCON.IRCF1=0; // (IRCF2:IRCF0=000) OSCCON.IRCF0=0; // (4T=0.000128)

OPTION_REG.PS2=1; // Prescaler 1:256 OPTION_REG.PS1=1; // (PS2:PS1=111) OPTION_REG.PS0=1; OPTION_REG.T0CS=0; // Utilizare ceas intern Fosc/4 OPTION_REG.PSA=0; // Prescaler legat la Timer0

INTCON.GIE=1; // Intreruperi globale active INTCON.PEIE=1; // Intreruperi periferice active INTCON.TMR0IE=1; // Intrerupere Timer0 activa}

= 0.000128 x 256 x 15 = 0.49152 s

TTimer0 =4

FOSC

PS x (256 - TMR0) x CNT

Cristian Molder Sisteme de calcul specializate

Page 50: scs01

Timer1: Schema bloc

TMR1H TMR1L

T1OSCT1SYNC

TMR1CS

T1CKPS1:T1CKPS0Semnal ceas Q

TMR1ONOn/Off

Prescaler1, 2, 4, 8

Sincronizare

det

1

0

0

1

Semnal de ceas

sincronizat

2

T1OSI

T1OSO/T1CKI

Setare bit TMR1IF pe 1la Overflow

TMR1

CeasinternFOSC/4

ActivareoscilatorT1OSCEN

TMR1 = 49911

Bit 15

TMR1H = 194 TMR1L = 247

Bit 8 Bit 7 Bit 0

1 1 1 1 0 1 1 11 1 0 0 0 0 1 0

Cristian Molder Sisteme de calcul specializate

Page 51: scs01

Timer1: Registrul de control

bit 7 Unimplemented: Read as ‘0’

bit 6 T1RUN: Timer1 System Clock Status bit

1 = System clock is derived from Timer1 oscillator0 = System clock is derived from another source

bit 5-4 T1CKPS<1:0>: Timer1 Input Clock Prescale Select bits

11 =1:8 Prescale value10 =1:4 Prescale value01 =1:2 Prescale value00 =1:1 Prescale value

bit 3 T1OSCEN: Timer1 Oscillator Enable Control bit

1 = Oscillator is enabled0 = Oscillator is shut off (the oscillator inverter is turned off to eliminate power drain)

bit 2 T1SYNC: Timer1 External Clock Input Synchronization Control bit

TMR1CS = 1:1 = Do not synchronize external clock input0 = Synchronize external clock input

TMR1CS = 0:This bit is ignored. Timer1 uses the internal clock when TMR1CS = 0.

bit 1 TMR1CS: Timer1 Clock Source Select bit

1 = External clock from pin RB6/AN5(1)/PGC/T1OSO/T1CKI (on the rising edge)0 = Internal clock (FOSC/4)

Note 1: Available on PIC16F88 devices only.

bit 0 TMR1ON: Timer1 On bit

1 = Enables Timer10 = Stops Timer1

T1CON

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0)

T1RUN T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON-

U (0)

Cristian Molder Sisteme de calcul specializate

Page 52: scs01

Timer1: exemplu de calcul

TIntTimer1 =

4

FOSC

PS x (65536 - TMR1)

= 0.000004 x 8 x 15625 = 0.5 s

void interrupt() { // Rutina de intrerupere PORTA.B0=!PORTA.B0; // Inversare bit Ra0 TMR1H=194; // Preincarcare MSB TMR1 TMR1L=247; // Preincarcare LSB TMR1 PIR1.TMR1IF=0; // Resetare flag intrerupere}

void main() { ANSEL=0; // Porturi digitale TRISA=0; // Portul A in mod iesire PORTA=0; // Initializare port A

OSCCON.IRCF2=1; // Ceas intern 1 MHz OSCCON.IRCF1=0; // (IRCF2:IRCF0=100) OSCCON.IRCF0=0; TMR1H=194; // Preincarcare MSB TMR1 TMR1L=247; // Preincarcare LSB TMR1

T1CON.TMR1CS=0; // Utilizare ceas intern Fosc/4 T1CON.T1CKPS1=1; // Prescaler 1:8 T1CON.T1CKPS0=1; // (T1CKPS1:T1CKPS0=11) T1CON.TMR1ON=1; // Pornire Timer1 T1CON.B3=1; // Dezactivare sincro externa

INTCON.GIE=1; // Intreruperi globale active INTCON.PEIE=1; // Intreruperi periferice active INTCON.TMR0IE=0; // Intrerupere Timer0 inactiva

PIE1.TMR1IE=1; // Interuperere Timer1 activa}

TMR1 = 65536 - 15625 = 49911

TMR1H = 11000010 = 194

TMR1 = 1100 0010 1111 0111

TMR1L = 1111 0111 = 247

Osc intern

TextTimer1 =

1

FOSC

PS x (65536 - TMR1)

Osc extern

Cristian Molder Sisteme de calcul specializate

Page 53: scs01

Timer2: Schema bloc

Comparator

IeşireSetare bit

TMR2 reg

TMR2

Reset Prescaler

PR2 reg

2

FOSC/4

Postscaler

1:1 la 1:16

1:1, 1:4, 1:16

EQ

4

TMR2IF pe 1

T2CKPS1:0

TOUTPS3:0

Cristian Molder Sisteme de calcul specializate

Page 54: scs01

Timer2: Registrul de control

T2CON

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0) R/W (0)

TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0-

U (0)

bit 7 Unimplemented: Read as ‘0’

bit 6-3 TOUTPS<3:0>: Timer2 Output Postscale Select bits

0000 = 1:1 Postscale0001 = 1:2 Postscale0010 = 1:3 Postscale���1111 = 1:16 Postscale

bit 2 TMR2ON: Timer2 On bit

1 = Timer2 is on0 = Timer2 is off

bit 1-0 T2CKPS<1:0>: Timer2 Clock Prescale Select bits

00 = Prescaler is 101 = Prescaler is 41x = Prescaler is 16

Cristian Molder Sisteme de calcul specializate

Page 55: scs01

Timer2: exemplu de calcul

TTimer2 =4

FOSC

P Sre x PR2 x PostS

void interrupt() { // Rutina de intrerupere PORTA.B0=!PORTA.B0; // Inversare bit Ra0 PIR1.TMR2IF=0; // Resetare flag intrerupere}

void main() { ANSEL=0; // Porturi digitale TRISA=0; // Portul A in mod iesire PORTA=0; // Initializare port A

OSCCON.IRCF2=0; // Ceas intern 500 kHz OSCCON.IRCF1=1; // (IRCF2:IRCF0=011) OSCCON.IRCF0=1; PR2=243; // Preincarcare PR2

T2CON.TOUTPS3=1; // Postscaler 1:16 T2CON.TOUTPS2=1; // (TOUTPS3:0=1111) T2CON.TOUTPS1=1; T2CON.TOUTPS0=1;

T2CON.T2CKPS1=1; // Prescaler 1:16 T2CON.T2CKPS0=0; // (T2CKPS1:0=10)

T2CON.TMR2ON=1; // Activare Timer2

INTCON.GIE=1; // Intreruperi globale active INTCON.PEIE=1; // Intreruperi periferice active INTCON.TMR0IE=0; // Intrerupere Timer0 inactiva

PIE1.TMR2IE=1; // Interuperere Timer2 activa}

=4

50000016 x 244 x 16

= 0.499712 s

PR2 = 500000 / 4 / 16 / 16 / 2 = 244

Cristian Molder Sisteme de calcul specializate

Page 56: scs01

Watchdog Timer: Schema bloc

Semnal de ceas INTRCPSA

Prescaler WDT programabil pe 16 biţi

Semnal de ceas TMR0

Prescaler PS

8

PS2:0

PSA

WDT Time-out

WDTPS3:0

WDTEN (din CONFIG)

1

10

0

SWDTEN (din WDTCON)

de 31.25 kHz

la TMR0

4

2

Cristian Molder Sisteme de calcul specializate

Page 57: scs01

Watchdog Timer: Registrul de control

bit 7-5 Unimplemented: Read as ‘0’

bit 4-1 WDTPS<3:0>: Watchdog Timer Period Select bits

Bit PrescaleValue Rate

0000 = 1:320001 = 1:640010 = 1:1280011 = 1:2560100 = 1:5120101 = 1:10240110 = 1:20480111 = 1:40961000 = 1:81921001 = 1:163941010 = 1:327681011 = 1:65536

bit 0 SWDTEN: Software Enable/Disable for Watchdog Timer bit

1 = WDT is turned on0 = WDT is turned off

WDTCON

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

U (0) U (0) R/W (0) R/W (1) R/W (0) R/W (0) R/W (0)

- - WDTPS3 WDTPS2 WDTPS1 WDTPS0 SWDTEN-

U (0)

Cristian Molder Sisteme de calcul specializate

Page 58: scs01

Watchdog Timer: exemplu de calcul

void main() { char i; OSCCON.SCS1=1; // Oscilator intern OSCCON.SCS0=0; // (SCS1-SCS0=10) OSCCON.IRCF2=1; // Ceas intern 1 MHz OSCCON.IRCF1=0; // (IRCF2:IRCF0=100) OSCCON.IRCF0=0;

OPTION_REG.PSA=1; // Prescaler PS legat la WDT OPTION_REG.PS2=1; // Prescaler PS 1:128 OPTION_REG.PS1=1; // (PS2:PS1=111) OPTION_REG.PS0=1;

WDTCON.SWDTEN=1; // Activare software WDT WDTCON.WDTPS3=0; // Prescaler WDT 1024 WDTCON.WDTPS2=1; // (WDTPS3-WDTPS0=0101) WDTCON.WDTPS1=0; WDTCON.WDTPS0=1;

ANSEL=0; // Porturi digitale TRISA=0; // Portul A in mod iesire PORTA=0; // Initializare port A while(1) { // Bucla infinita for (i=0; i<3; i++) { // Blink LED 3x PORTA.B0=1; delay_ms(100); PORTA.B0=0; delay_ms(100); } asm {CLRWDT}; // Stergere prescaler WDTPS }}

TWDT =1

FOSCWDTPS x PS

WDTPS= 32 x 2WDTPS3-WDTPS0

TWDT =1

31250128 x 1024

=131072

31250 = 4.194304 s

Cristian Molder Sisteme de calcul specializate