Tải bản đầy đủ (.doc) (5 trang)

BÀI TẬP LẬP TRÌNH CHO DSPIC

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (80.16 KB, 5 trang )

Bài tập: Sử dụng DSPIC đo tốc độ động cơ có số xung bằng 26 và mô phỏng trên
Proteus.
1. Sơ đồ mô phỏng
PWM3H/RE5
1
PWM4L/RE6
2
PWM4H/RE7
3
T2CK/RC1
4
T4CK/RC3
5
SCK2/CN8/RG6
6
SDI2/CN9/RG7
7
SDO2/CN10/RG8
8
MCLR
9
SS2/CN11/RG9
10
VSS
11
VDD
12
FLTA/INT1/RE8
13
FLTB/INT2/RE9
14


AN5/QEB/CN7/RB5
15
AN4/QEA/CN6/RB4
16
AN3/INDX/CN5/RB3
17
AN2/SS1/CN4/RB2
18
PGC/EMUC/AN1/CN3/RB1
19
PGD/EMUD/AN0/CN2/RB0
20
AN6/OCFA/RB6
21
AN7/RB7
22
VREF-/RA9
23
VREF+/RA10
24
AVDD
25
AVSS
26
AN8/RB8
27
AN9/RB9
28
AN10/RB10
29

AN11/RB11
30
VSS
31
VDD
32
AN12/RB12
33
AN13/RB13
34
AN14/RB14
35
AN15/CN12/RB15
36
CN20/RD14
37
CN21/RD15
38
CN17/RF4
39
CN18/RF5
40
U1TX/RF3
41
U1RX/RF2
42
EMUD3/SDO1/RF8
43
SDI1/RF7
44

EMUC3/SCK1/INT0/RF6
45
SDA/RG3
46
SCL/RG2
47
VDD
48
OSC1/CLKI
49
OSC2/CLKO/RC15
50
VSS
51
INT3/RA14
52
INT4/RA15
53
IC1/RD8
54
IC2/RD9
55
IC3/RD10
56
IC4/RD11
57
EMUC2/OC1/RD0
58
EMUD1/SOSCI/CN1/RC13
59

EMUC1/SOSCO/T1CK/CN0/RC14
60
EMUD2/OC2/RD1
61
OC3/RD2
62
OC4/RD3
63
RD12
64
CN19/RD13
65
CN13/RD4
66
CN14/RD5
67
CN15/RD6
68
CN16/UPDN/RD7
69
VSS
70
VDD
71
C1RX/RF0
72
C1TX/RF1
73
RG1
74

RG0
75
PWM1L/RE0
76
PWM1H/RE1
77
PWM2L/RE2
78
PWM2H/RE3
79
PWM3L/RE4
80
U?
DSPIC30F5016T-20E/PT
VCC
GND
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
RB8
RB9
RB10
RB11
RB12
RB13

RB14
RB15
RD0
RD1
RD2
RD3
RD4
RD5
RD6
RD7
RD8
RD9
RD10
RD11
RD12
RD13
RD14
RD15
RE0
RE1
RE2
RE3
RE4
RE5
RE6
RE7
RE8
RE9
X1
20MHz

C1
33
C2
33
GND
OSC1
OSC2
OSC1
OSC2
RC1
RC2
RC3
RC4
RG0
RG1
RG2
RG3
RG4
RG5
RG6
RG7
RF0
RF1
RF2
RF3
RF4
RF5
RF6
RF7
RF8

21
RST
SW
C?
100pF
R_RST
1k
VCC
GND
R_LED
1k
LED?
LED
VCC
GND
RA0
RA1
RA2
RA3
1
2
3
4
5
6
PROG
JP6 PIN
RST
RST
VCC

GND
RB0
RB1
e
1
2
3
d
4
g
5
6
b
7
a
8
f
9
10
h
11
c
12
LED7x4
Q1
A1015
Q2
A1015
Q3
A1015

Q4
A1015
RL1
330
RL2
330
RL3
330
RL4
330
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
RL5
330RL6
330RL7
330RL8
330
RD0
RD1
RD2
RD3
1
2
3

4
ENCODER
JP4
GND
VCC
RE8
1
2
PO
JP2
CP1
100pF
CP2
100pF
CP3
1000uF
CP4
1000uF/16V
IN
1
GND
2
OUT
3
ICPO
LM7805
VCC
GND
2. Chương trình
#include "p30fxxxx.h"

#include <libpic30.h>
#define Fcy 4000000
unsigned int dem=0,enco = 25;
unsigned int temp=0,td,count;
_FOSC(CSW_FSCM_OFF & HS); //
_FWDT(WDT_OFF); //Turn off the Watch-Dog Timer.
_FBORPOR(MCLR_EN & PWRT_OFF); //Enable MCLR reset pin and turn off the
#define LED1 PORTDbits.TRISD0
#define LED2 PORTDbits.TRISD1
#define LED3 PORTDbits.TRISD2
#define LED4 PORTDbits.TRISD3
unsigned int LED_CODE[10] =
{0x00C0,0xF9,0x00A4,0x00B0,0x0099,0x0092,0x0082,0x00F8,0x0080,0x0090};
void delay_ms()// ham tre mot khoang thoi gian
{
int i,j;
for(i=0;i<500;i++)
for(j=0;j<800;j++);
}
void quet_led(unsigned int num)
{
unsigned char a,b,c,d;
a = num/1000;
b = (num - a*1000)/100;
c = (num - a*1000 - b*100)/10;
d = num%10;

LED1 = 1;
PORTB = LED_CODE[a];
delay_ms(1);

LED1 = 0;
PORTB = 0xFF;
LED2 = 1;
PORTB = LED_CODE[b];
delay_ms(1);
LED2 = 0;
PORTB = 0xFF;

LED3 = 1;
PORTB = LED_CODE[c];
delay_ms(1);
LED3 = 0;
PORTB = 0xFF;
LED4 = 1;
PORTB = LED_CODE[d];
delay_ms(1);
LED4 = 0;
PORTB = 0xFF;
}
void main()
{
TRISA = 0xFFFF;
TRISD = 0x0000;
TRISB = 0x0000;
/* ensure Timer 1 is in reset state */
T1CON = 0;
/* reset Timer 1 interrupt flag */
IFS1bits.T1IF = 0;

/* enable Timer 1 interrupt */

IEC1bits.T1IE = 1;

/* set Timer 1 period register */
PR1 = 3125;
/* select external timer clock */
T1CONbits.TCS = 0;
// chon bo chia tan bao nhieu tai day
T1CONbits.TCKPS1 = 0;
T1CONbits.TCKPS0=1;
/* enable Timer 1 and start the count */
T1CONbits.TON = 1;
PORTD = 0xffff;
INTCON2 = 0x0002; /*Setup INT1 pins to interupt */
IFS1bits.INT1IF = 0; /*Reset INT1 interrupt flag */
IEC1bits.INT1IE = 1; /*Enable INT1 Interrupt Service Routine */
while(1)
{
quet_led(td);
delay_ms(200);
}
}
void __attribute__((__interrupt__)) _INT1Interrupt(void)
{
count++;
IFS1bits.INT1IF = 0; //Clear the INT1 interrupt flag or else
//the CPU will keep vectoring back to the ISR
}
void __attribute__((__interrupt__)) _T1Interrupt(void)
{


temp = count*120 ;
td = temp/enco;
count=0;
PR1 =3125;
IFS1bits.T1IF = 0;
}

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×