Professional Documents
Culture Documents
THVDK-PIC TDT
THVDK-PIC TDT
MỤC LỤC
MỤC LỤC ................................................................................................................... 1
HƯỚNG DẪN .............................................................................................................. 2
HƯỚNG DẪN
MÔ TẢ MÔN HỌC
Thực hành Vi điều khiển là môn học hỗ trợ cho môn Vi điều khiển. Môn học này thực
hiện xây dựng mạch phần cứng và viết chương trình phần mềm để thực hiện một hệ
thống điều khiển.
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
2 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN 3
- B2: Trong phần Name, đặt tên cho Project, ví dụ như Bai1_1, phần Path đặt
tên vị trí lưu trữ Project, ví dụ như D:\17DOTJ01.
- B5: Nhấn Next, chọn Create Firmware …, trong phần Family chọn PIC16,
phần Controller chọn 16F877A, phần Compiler chọn CCS for PIC.
4 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
- B14: Thực hiện tương tự cho các điện trở còn lại.
- B15: Nhấn vào Terminals Mode phía bên trái và chọn GROUND.
- B16: Nối dây: di chuyển chuột vào chân 15 của 16F877A (RC0), kéo 1 đoạn sau
đó nhấn double-click.
- B17: Đặt tên dây: nhấn vào Wire Label Mode phía bên trái.
- B18: Click vào đoạn dây vừa vẽ tại RC0, nhập vào giá trị RC0.
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN 7
- B20: Thực hiện tương tự cho RC1 – RC7 và Led D2 – D8 tương ứng với tên dây
là RC1 – RC7, ta được sơ đồ phần cứng sau:
VDD
U1
13 33
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
35
RB2
2 36
RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
4 38
RA2/AN2/VREF-/CVREF RB5
5 39
RA3/AN3/VREF+ RB6/PGC
6 40
RA4/T0CKI/C1OUT RB7/PGD
7
RA5/AN4/SS/C2OUT
15 RC0
RC0/T1OSO/T1CKI
8 16 RC1
RE0/AN5/RD RC1/T1OSI/CCP2
9 17 RC2
RE1/AN6/WR RC2/CCP1
10 18 RC3
RC0
RC1
RC2
RC3
RC4
RC5
RC6
RC7
RE2/AN7/CS RC3/SCK/SCL
23 RC4
RC4/SDI/SDA
1 24 RC5
MCLR/Vpp/THV RC5/SDO
25 RC6
RC6/TX/CK
RC7/RX/DT
26 RC7 D1 D2 D3 D4 D5 D6 D7 D8
LED-YELLOW LED-YELLOW LED-YELLOWLED-YELLOWLED-YELLOWLED-YELLOWLED-YELLOWLED-YELLOW
19
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
RD4/PSP4
27 R8 R7 R6 R5 R3 R4 R2 R1
28 270 270 270 270 270 270 270 270
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
PIC16F877A
#include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=8M)
void main (void)
8 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
{
While (1)
{
Output_c(0x01);
Delay_ms(400);
Output_c(0x00);
Delay_ms(400);
}
}
- B23: Nhấn nút Run ở phía dưới để thực hiện mô phỏng.
- Chọn thư mục và đặt tên Project (nên giống như Proteus).
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN 9
- Nhấn menu Compile > Build hay F9. Nếu chương trình không lỗi, cửa sổ phía
dưới sẽ có dòng Build Successful.
- Quay trở lại Proteus, double-click vào PIC16F877A, tại mục Program File, click
vào nút Browse.
10 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
- Chọn file vừa dịch xong, có thể chọn C Debug file hay HEX file.
Bài 1.4: Sửa chương trình để Led sáng dần từ D1 – D8, thời gian delay 300ms, lặp
lại vô hạn lần.
Bài 1.5: Sửa chương trình để Led sáng dần từ D1 – D8, thời gian delay 300ms, lặp
lại 30 lần.
Bài 1.6: Sửa chương trình để Led sáng dần từ D1 – D8, thời gian delay 300ms, lặp
lại 30 lần, sau đó tắt dần từ D1 – D8, lặp lại 257 lần.
Bài 1.7: Sửa chương trình để Led sáng dần từ D1 – D8, thời gian delay 300ms, lặp
lại 30 lần, sau đó tắt dần từ D1 – D8, lặp lại 257 lần. Lặp lại toàn bộ quá trình 40 lần.
Bài 1.8: Vẽ lại sơ đồ mạch trong đó D1, D3, D5, D7 tích cực mức 1, 4 Led còn lại
tích cực mức 0. Viết lại chương trình như bài 1.7.
Bài 1.9: Vẽ lại sơ đồ mạch trong đó D1, D3, D5, D7 tích cực mức 1, 4 Led còn lại
tích cực mức 0, sơ đồ kết nối như bảng. Viết lại chương trình như bài 1.7.
D1 D2 D3 D4 D5 D6 D7 D8
RC6 RC4 RC3 RC0 RC7 RC1 RC5 RC2
#include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=8M)
void main (void)
{
output_d(0xFF);
output_b(0x03);
12 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
output_low(PIN_D3);
while (1) ;
}
VDD
U2
U1
NOT
13 33
OSC1/CLKIN RB0/INT
14 34 U3
OSC2/CLKOUT RB1
35
RB2
2 36
RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
4 38
RA2/AN2/VREF-/CVREF RB5 NOT
5 39
RA3/AN3/VREF+ RB6/PGC
6 40 U4
RA4/T0CKI/C1OUT RB7/PGD
7
RA5/AN4/SS/C2OUT
15 RC0
RC0/T1OSO/T1CKI
8 16 RC1
RE0/AN5/RD RC1/T1OSI/CCP2
9 17 RC2
RE1/AN6/WR RC2/CCP1 NOT
10 18 RC3
RE2/AN7/CS RC3/SCK/SCL
23 RC4
RC4/SDI/SDA
1 24 RC5
MCLR/Vpp/THV RC5/SDO
25 RC6 U5
RC6/TX/CK
26 RC7
RC7/RX/DT
19
RD0/PSP0
20
RD1/PSP1 NOT
21
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
RC0
RC1
RC2
RC3
RC4
RC5
RC6
RC7
PIC16F877A
D1 D2 D3 D4 D5 D6 D7 D8
LED-YELLOW LED-YELLOW LED-YELLOWLED-YELLOWLED-YELLOWLED-YELLOWLED-YELLOWLED-YELLOW
R8 R7 R6 R5 R3 R4 R2 R1
270 270 270 270 270 270 270 270
Bài 1.11: Viết chương trình hiện số từ 0 – 9 trên Led1, thời gian delay 400 ms.
Bài 1.12: Viết chương trình hiện số 12.34 trên 4Led, thời gian quét led 3 ms.
Bài 1.13: Viết chương trình hiện chữ StOP trên 4Led, thời gian quét led 3 ms.
Bài 1.14: Viết chương trình hiện chữ StAr trên 4Led trong 5s, thời gian quét led 3
ms. Sau đó hiện chữ StOP trên 4Led.
Bài 1.15: Viết chương trình hiện các Led đơn sáng dần từ D1 – D8, thời gian delay
300ms, lặp lại 8 lần đồng thời hiện số lần lặp trên Led7 đoạn 4.
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN 13
Bài 1.16: Viết chương trình hiện các Led đơn sáng dần từ D1 – D8, thời gian delay
300ms, lặp lại 30 lần đồng thời hiện số lần lặp trên Led7 đoạn 3, 4.
VDD
RD6
RD2
RD7
RD1
RD3
RD0
RD5
RD4
U1 D1A D2A D3A D4A D5A D6A D7A D8A
13 33 LED-YELLOW LED-YELLOW LED-YELLOWLED-YELLOWLED-YELLOWLED-YELLOWLED-YELLOWLED-YELLOW
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
35
RB2
2 36
RA0/AN0 RB3/PGM
3 37 RB4
RA1/AN1 RB4
4 38 RB5
RA2/AN2/VREF-/CVREF RB5
5 39
RA3/AN3/VREF+ RB6/PGC
6 40
RA4/T0CKI/C1OUT RB7/PGD
7
RA5/AN4/SS/C2OUT
15 RC0 R10 R9
RC0/T1OSO/T1CKI
8 16 RC1
RE0/AN5/RD RC1/T1OSI/CCP2 10k 10k
9 17 RC2 SW1
RE1/AN6/WR RC2/CCP1
10 18 RC3
RE2/AN7/CS RC3/SCK/SCL
23 RC4 RB4
RC4/SDI/SDA
1 24 RC5
MCLR/Vpp/THV RC5/SDO
25 RC6 SW2
RC6/TX/CK
26 RC7
RC7/RX/DT
RB5
19 RD0
RD0/PSP0
20 RD1
RD1/PSP1
21 RD2
RD2/PSP2
22 RD3
RD3/PSP3
27 RD4
RD4/PSP4
28 RD5
RC0
RC1
RC2
RC3
RC4
RC5
RC6
RC7
RD5/PSP5
29 RD6
RD6/PSP6
30 RD7
RD7/PSP7
PIC16F877A D1 D2 D3 D4 D5 D6 D7 D8
LED-YELLOW LED-YELLOW LED-YELLOWLED-YELLOWLED-YELLOWLED-YELLOWLED-YELLOWLED-YELLOW
#include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=8M)
#define D5 PIN_C4
#define D6 PIN_C5
#define SW1 PIN_B4
#define SW2 PIN_B5
void main (void)
{
while(1)
{
14 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
if(!input(SW1)) output_high(D5);
if(!input(SW2)) output_low(D5);
}
}
Bài 1.18: Viết chương trình kiểm tra SW như sau:
- Nhấn SW1: D5 tắt trong khi D6 sáng/tắt vô hạn; thời gian delay 200 ms.
- Nhấn SW2: D6 tắt trong khi D5 sáng/tắt vô hạn; thời gian delay 500 ms.
- Nhấn SW1: D5 tắt trong khi D6 sáng/tắt vô hạn; thời gian delay 200 ms.
- Nhấn SW2: D6 tắt trong khi D5 đổi trạng thái khi đã nhấn SW2 3 lần.
1.5 LCD
- Vẽ sơ đồ như hình vẽ (clock = 8M), các linh kiện cho như bảng:
VDD
LCD1
U1 LM016L
13 33
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
35
RB2
2 36
RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
4 38
RA2/AN2/VREF-/CVREF RB5
5 39
RA3/AN3/VREF+ RB6/PGC
VDD
VSS
VEE
6 40
RW
RS
D0
D1
D2
D3
D4
D5
D6
D7
RA4/T0CKI/C1OUT RB7/PGD
E
7
RA5/AN4/SS/C2OUT
15
RC0/T1OSO/T1CKI
1
2
3
4
5
6
7
8
9
10
11
12
13
14
8 16
RE0/AN5/RD RC1/T1OSI/CCP2
9 17
LD4
LD5
LD6
LD7
RE1/AN6/WR RC2/CCP1
RW
RS
EN
10 18 RC3
RE2/AN7/CS RC3/SCK/SCL
23 RC4
RC4/SDI/SDA
1 24
MCLR/Vpp/THV RC5/SDO
RC6/TX/CK
25 R2 R1
26 10k 10k
RC7/RX/DT
19 EN SW1
RD0/PSP0
20 RS RC3
RD1/PSP1
21 RW
RD2/PSP2
22
RD3/PSP3
27 LD4 SW2
RD4/PSP4
28 LD5 RC4
RD5/PSP5
29 LD6
RD6/PSP6
30 LD7
RD7/PSP7
PIC16F877A
#include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=8M)
#include <lcd.c>
void main (void)
{
lcd_init();
lcd_gotoxy(1,1);
printf(lcd_putc,"Welcome to");
delay_ms(3);
lcd_gotoxy(1,2);
printf(lcd_putc,"*****HUTECH*****");
delay_ms(3);
while(1) ;
}
Bài 1.21: Viết chương trình hiển thị chữ: “Counter:” trên dòng 1 và số đếm từ 00 –
99 trên dòng 2 từ tọa độ (x,y) = (10,2); thời gian delay để tăng số đếm là 300 ms.
- Nhấn SW1: hiển thị chữ “Xin chao cac ban!” trên dòng 01 LCD tại (x,y) = (1,1)
- Nhấn SW2: hiển thị chữ “TEN” trên dòng 02 tại (x,y) = (10,2)
Viết chương trình thực hiện: hiển thị chữ “Set value:” trên dòng 1 tại (x,y) = (5,1)
và hiển thị biến set_val (khởi động = 0) trên dòng 2 tại (x,y) = (8,2); và nếu:
Nội dung thay đổi của set_val được cập nhật tức thời trên dòng 2 LCD tại vị trí
(x,y) = (8,2).
Bài 1.24: Viết chương trình đồng hồ đếm giây: tại (1,1) hiển thị “DONG HO DEM
GIAY”, tại (4,2) hiển thị “00:00”, và khi:
Bài 1.25: Viết chương trình thực hiện: hiển thị chữ “DONG HO” trên dòng 1 tại (4,1)
và hiển thị “giờ:phút:giây” tại (6,2); thời gian bắt đầu là “00:00:00” và nếu:
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
2. Viết chương trình delay 100 ms dùng timer1, thạch anh 8 MHz và giải thích:
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
18 BÀI 2: TIMER VÀ NGẮT
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
2.2 Timer
Bài 2.1: Hình vẽ như bài 1.1, nhập đoạn chương trình:
#include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=8M)
void delay400ms()
{
Setup_timer_1(T1_INTERNAL|T1_DIV_BY_2); //1us/xung
For (int8 i = 0;i < 10;i++) // cần 400 000 xung = 10*40 000
{
Set_timer1(25536);
While (get_timer1()>25536) ;
BÀI 2: TIMER VÀ NGẮT 19
}
}
void main (void)
{
While (1)
{
Output_c(0x01);
Delay400ms();
Output_c(0x00);
Delay400ms();
}
}
Bài 2.2: Thực hiện lại bài 2.1 với delay400ms dùng timer 0 có cấu hình như sau:
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4);
#include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=8M)
#INT_TIMER1
void qled()
{
Output_d(0xff);// tắt các led
Output_b(0x91); output_low(PIN_D3); delay_ms(3);// “H”
Output_d(0xff);// tắt các led
Output_b(0x61); output_low(PIN_D2); delay_ms(3); // “E”
Output_d(0xff);// tắt các led
Output_b(0xe3); output_low(PIN_D1); delay_ms(3);// “L”
Output_d(0xff);// tắt các led
Output_b(0x31); output_low(PIN_D0); delay_ms(3);// “P”
}
void main (void)
{
enable_interrupts(GLOBAL);
20 BÀI 2: TIMER VÀ NGẮT
enable_interrupts(INT_TIMER1);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
while(1);
}
Bài 2.4: Dùng ngắt timer 0 để quét led, thời gian quét led là 2 ms. Sử dụng:
Setup_timer_0(RTCC_DIV_64|RTCC_INTERNAL)
- Viết chương trình hiển thị số tăng dần từ 000 đến 999 trên LED 7S 2, 3 và 4.
Bài 2.5: Dùng ngắt timer 1 để quét led, thời gian delay mỗi led là 3 ms. Sử dụng:
Setup_timer_1(T1_INTERNAL| T1_DIV_BY_1)
Viết chương trình led sáng dần từ D1 đến D8, thời gian delay 200 ms, lặp lại 50 lần
đồng thời hiển thị số lần trên LED1 đến LED4 theo dạng: “Ct.XX”
BÀI 3: ADC VÀ PWM 21
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
2. Đoạn chương trình sử dụng kênh 0 Analog với VREF lấy từ AN3:
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
4. Đoạn chương trình cấu hình PWM1 có tần số 1 KHz và chu kỳ bổn phận 60%:
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
22 BÀI 3: ADC VÀ PWM
5. Đoạn chương trình cấu hình PWM2 có tần số 1 KHz và chu kỳ bổn phận 40%:
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
.................................................................................................................
3.2 ADC
- Vẽ sơ đồ như hình vẽ (clock = 8M), các linh kiện cho như bảng:
R10 R9
10k 10k
SW1
RC0
VDD
SW2
RC1
U1
13 33 U2
OSC1/CLKIN RB0/INT +5V
14 34
OSC2/CLKOUT RB1
35
RB2
TEMP 2 36
RA0/AN0 RB3/PGM
SET 3 37 VREF
RA1/AN1 RB4 NOT
4 38
RA2/AN2/VREF-/CVREF RB5 U6
VREF 5 39 U3 1 TEMP
RA3/AN3/VREF+ RB6/PGC
6 40
RA4/T0CKI/C1OUT RB7/PGD RV1 RV2
7
RA5/AN4/SS/C2OUT
15 RC0
RC0/T1OSO/T1CKI 28.8
8 16 RC1
RE0/AN5/RD RC1/T1OSI/CCP2 NOT
9 17 D9 SET VREF
70%
15%
RE1/AN6/WR RC2/CCP1
10 18 D10 U4 2 TEMP
RE2/AN7/CS RC3/SCK/SCL VOUT
23
RC4/SDI/SDA
1 24
MCLR/Vpp/THV RC5/SDO
25 1k 10k
RC6/TX/CK
26 3 LM35
RC7/RX/DT NOT
19
RD0/PSP0
20
RD1/PSP1
21 U5
RD2/PSP2
22
RD3/PSP3
27
D10
RD4/PSP4
D9
28
RD5/PSP5
29
RD6/PSP6 NOT
RD7/PSP7
30 D1 D2
LED-YELLOW LED-YELLOW
PIC16F877A
#include <16F877A.h>
BÀI 3: ADC VÀ PWM 23
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=8M)
int8 LED7S[10] = {0x03, 0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
int8 LED7S1[10] = {0x02, 0x9e,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08};
int8 data_led[4] = {0xFF,0xFF,0xFF,0xFF};
int8 control_led[4] = {0xF7,0xFB,0xFD,0xFE};
int8 tram,chuc,dvi;
int16 temp;
float volt;
#INT_TIMER0
void qled()
{
for (int8 i=0;i<4;i++)
{
output_d(0xFF);
output_b(data_led[i]);
output_d(control_led[i]);
delay_ms(2);
}
}
void main (void)
{
enable_interrupts(GLOBAL);
enable_interrupts(INT_TIMER0);
Setup_timer_0(RTCC_DIV_128|RTCC_INTERNAL);
// Cau hinh ADC
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(AN0);
set_adc_channel(0);
while (1)
{
temp = read_adc();
volt = (float)(temp)*5/10.23;
temp = (int16)volt;
chuc = temp/10;
dvi = temp%10;
24 BÀI 3: ADC VÀ PWM
data_led[0] = LED7S[chuc];
data_led[1] = LED7S[dvi];
data_led[2] = 0x39;
data_led[3] = 0x63;
}
}
Bài 3.2: Giống bài 3.1 nhưng sử dụng điện áp chuẩn là Vref = 2.5V
3.3 PWM
- Vẽ sơ đồ như hình vẽ (clock = 8M), các linh kiện cho như bảng:
VDD
U1
13 33 RB7
OSC1/CLKIN RB0/INT
14 34 RB1 RB6
OSC2/CLKOUT RB1
35 RB2 RB5
RB2
2 36 RB3 RB4 R10 R9
RA0/AN0 RB3/PGM
3 37 RB4 RB3
RA1/AN1 RB4 10k 10k
4 38 RB5 RB2 SW1
RA2/AN2/VREF-/CVREF RB5
5 39 RB6 RB1
RA3/AN3/VREF+ RB6/PGC
6 40 RB7 RD1
RA4/T0CKI/C1OUT RB7/PGD
7
RA5/AN4/SS/C2OUT
15 SW2
RC0/T1OSO/T1CKI
8 16 PMW2
RE0/AN5/RD RC1/T1OSI/CCP2
9 17 PMW1 RD2
RE1/AN6/WR RC2/CCP1
10 18
RE2/AN7/CS RC3/SCK/SCL
23 RC4
RC4/SDI/SDA +12V
1 24
MCLR/Vpp/THV RC5/SDO
25
RC6/TX/CK
26
RC7/RX/DT
19
RD0/PSP0
20 RD1
RD1/PSP1
21 RD2
RD2/PSP2 U2
22 9 4
RD3/PSP3
27
RD4/PSP4
28 5
RD5/PSP5 IN1 VCC VS
29 7 2
RD6/PSP6 IN2 OUT1
30 10 +88.8
RD7/PSP7 IN3
12 3
IN4 OUT2
PIC16F877A 6
ENA
11 13
ENB OUT3
1 14
SENSA OUT4
15
SENSB GND
8 L298
+88.8
BÀI 3: ADC VÀ PWM 25
Keywords Category Sub-category Result
L298 L298
Motor MOTOR-DC
#include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=8M)
void main (void)
{
Setup_timer_2(T2_DIV_BY_1,99,1);
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
set_pwm1_duty(30);
set_pwm2_duty(90);
while (1) ;
}
Bài 3.5: Cấu hình timer 2 giống bài 3.4. Viết chương trình cho phép đặt 10 tốc độ
quay cho MG1 (dùng SW1: tăng 1 đơn vị, SW2: giảm 1 đơn vị), hiển thị tốc độ trên led
7 đoạn (0,1,2,3,4,5,6,7,8,9), trong đó tốc độ 0 là dừng động cơ.
Bài 3.6: Cấu hình timer 2 giống bài 3.4. Viết chương trình thực hiện: