You are on page 1of 33

BỘ GIÁO DỤC VÀ ĐÀO TẠO

ĐẠI HỌC CÔNG NGHỆ TP.HCM

BÁO CÁO THỰC HÀNH VI


ĐIỀU KHIỂN

Họ và tên :Trương Trung Kiên

Lớp :19DOTD2

MSSV :1911255726

www.hutech.edu.vn
TRANG 1|🢖 THỰC HÀNH XỬ LÝ TÍN HIỆU SỐ

BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN

Ấn bản 2018
TRANG 1 > THỰC HÀNH XỬ LÝ TÍN HIỆU SỐ

MỤC LỤC
MỤC LỤC 1

BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN 2

BÀI 2: TIMER VÀ NGẮT 4

BÀI 3: ADC VÀ PWM 5


BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN 2

BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ


CƠ BẢN

Bài 1.3. Chương trình:#include <16F877A.h>

#include <16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M)

void main (void)

while (1)

Output_c(0x0f);delay_ms(1000);

Output_c(0x00);delay_ms(1000);

}
3 BÀI 2: TIMER VÀ NGẮT

Bài 1.4. Chương trình: #include <16F877A.h>

#include <16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M)

void main (void)

While (1)

Output_c(0x00);

Delay_ms(300);

Output_c(0x01);

Delay_ms(300);

Output_c(0x03);

Delay_ms(300);

Output_c(0x07);

Delay_ms(300);

Output_c(0x0F);

Delay_ms(300);

Output_c(0x1F);

Delay_ms(300);

Output_c(0x3F);

Delay_ms(300);

Output_c(0x7F);
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN 4

Delay_ms(300);

Output_c(0xFF);

Delay_ms(300);

Bài 1.5. Chương trình:

#include <16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M)

unsigned int16 Y;

void main (void)

{for(y=0;y<3;y++){

Output_c(0x00);

Delay_ms(300);

Output_c(0x01);

Delay_ms(300);

Output_c(0x03);

Delay_ms(300);

Output_c(0x07);

Delay_ms(300);

Output_c(0x0F);
5 BÀI 2: TIMER VÀ NGẮT

Delay_ms(300);

Output_c(0x1F);

Delay_ms(300);

Output_c(0x3F);

Delay_ms(300);

Output_c(0x7F);

Delay_ms(300);

Output_c(0xFF);

Delay_ms(300);

Bài 1.6. Chương trình:

#include <16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M)

void main (void)

{for(int16 y=0;y<30;y++)

Output_c(0x00);

Delay_ms(300);
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN 6

Output_c(0x01);

Delay_ms(300);

Output_c(0x03);

Delay_ms(300);

Output_c(0x07);

Delay_ms(300);

Output_c(0x0F);

Delay_ms(300);

Output_c(0x1F);

Delay_ms(300);

Output_c(0x3F);

Delay_ms(300);

Output_c(0x7F);

Delay_ms(300);

Output_c(0xFF);

Delay_ms(300);

for(int16 i=0;i<257;i++)

output_c(0x7f) ; delay_ms(300);

output_c(0x3f) ; delay_ms(300);

output_c(0x1f); delay_ms(300);

output_c(0x0f); delay_ms(300);

output_c(0x07); delay_ms(300);
7 BÀI 2: TIMER VÀ NGẮT

output_c(0x03); delay_ms(300);

output_c(0x01); delay_ms(300);

output_c(0x00); delay_ms(300);

}}

Bài 1.7. Chương trình:

#include <16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M)

void main (void)

For(int K=0;K<40:K++)

{for(int16 y=0;y<30;y++)

Output_c(0x00);

Delay_ms(300);

Output_c(0x01);

Delay_ms(300);

Output_c(0x03);
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN 8

Delay_ms(300);

Output_c(0x07);

Delay_ms(300);

Output_c(0x0F);

Delay_ms(300);

Output_c(0x1F);

Delay_ms(300);

Output_c(0x3F);

Delay_ms(300);

Output_c(0x7F);

Delay_ms(300);

Output_c(0xFF);

Delay_ms(300);

for(int16 i=0;i<257;i++)

output_c(0x7f) ; delay_ms(300);

output_c(0x3f) ; delay_ms(300);

output_c(0x1f); delay_ms(300);

output_c(0x0f); delay_ms(300);

output_c(0x07); delay_ms(300);

output_c(0x03); delay_ms(300);

output_c(0x01); delay_ms(300);

output_c(0x00); delay_ms(300);
9 BÀI 2: TIMER VÀ NGẮT

}}}

Bài 1.8. Sơ đồ mạch:

Chương trình:

#include <16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M)

void main (void)

For(int K=0;K<40:K++)

{for(int16 y=0;y<30;y++)

Output_c(0x00);

Delay_ms(300);

Output_c(0x01);

Delay_ms(300);

Output_c(0x03);

Delay_ms(300);

Output_c(0x07);

Delay_ms(300);
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN 10

Output_c(0x0F);

Delay_ms(300);

Output_c(0x1F);

Delay_ms(300);

Output_c(0x3F);

Delay_ms(300);

Output_c(0x7F);

Delay_ms(300);

Output_c(0xFF);

Delay_ms(300);

for(int16 i=0;i<257;i++)

output_c(0x7f) ; delay_ms(300);

output_c(0xc0) ; delay_ms(300);

output_c(0x1f); delay_ms(300);

output_c(0xf0); delay_ms(300);

output_c(0x07); delay_ms(300);

output_c(0xfc); delay_ms(300);

output_c(0x01); delay_ms(300);

output_c(0xff); delay_ms(300);

}}}
11 BÀI 2: TIMER VÀ NGẮT

Bài 1.9. Sơ đồ mạch:

Chương trình:

#include <16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M)

void main (void)

For(int K=0;K<40:K++)

{for(int16 y=0;y<30;y++)

Output_c(0x00);

Delay_ms(300);

Output_c(0x01);

Delay_ms(300);

Output_c(0x03);

Delay_ms(300);

Output_c(0x07);

Delay_ms(300);
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN 12

Output_c(0x0F);

Delay_ms(300);

Output_c(0x1F);

Delay_ms(300);

Output_c(0x3F);

Delay_ms(300);

Output_c(0x7F);

Delay_ms(300);

Output_c(0xFF);

Delay_ms(300);

} }

for(int16 i=0;i<257;i++)

output_c(0x7f) ; delay_ms(300);

output_c(0xc0) ; delay_ms(300);

output_c(0x1f); delay_ms(300);

output_c(0xf0); delay_ms(300);

output_c(0x07); delay_ms(300);

output_c(0xfc); delay_ms(300);

output_c(0x01); delay_ms(300);

output_c(0xff); delay_ms(300);

}}}

Bài 1.11. Chương trình:


13 BÀI 2: TIMER VÀ NGẮT

#include <16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M)

CONST UNSIGNED char


led[11]={0xff,0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};

void main()

for(int8 i=0; i<11; i++)

output_b(led[i]);

delay_ms(400);

output_low(PIN_D3);

Bài 1.12. Chương trình:

#include <16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M)

CONST UNSIGNED char led[4]={0x9f,0x24,0x0d,0x99};

CONST UNSIGNED char leds[4]={0x08,0x04,0x02,0x01};

void main()

while(TRUE)

for(int8 y=0; y<4; y++)

{
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN 14

output_b(led[y]);

delay_ms(3);

output_d(leds[y]);

Bài 1.13. Chương trình:

#include <16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M)

CONST UNSIGNED char led[4]={0x49,0xe1,0x03,0x31};

CONST UNSIGNED char leds[4]={0x08,0x04,0x02,0x01};

void main()

while(TRUE)

for(int8 y=0; y<4; y++)

output_b(led[y]);

delay_ms(3);

output_d(leds[y]);

Bài 1.14. Chương trình:

#include <16F877A.h>
15 BÀI 2: TIMER VÀ NGẮT

#FUSES NOWDT, HS, NOPUT, PROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8000000)

int8 star[4] = {0x49, 0xe1, 0x11, 0x73};

int8 stop[4]={0x49, 0xe1,0x03,0x31};

int8 dc[4] = {0xf7, 0xfb, 0xfd, 0xfe};

void quet_led()

for (int8 i = 0; i<4; i++)

output_d(0xff);

output_b(star[i]);

output_d(dc[i]);

delay_ms(3);

void main()

for (int16 k=0; k<416;k++)

quet_led();

while (1)
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN 16

for (int8 i = 0; i<4; i++)

output_d(0xff);

output_b(stop[i]);

output_d(dc[i]);

delay_ms(3);

Bài 1.15. Chương trình:

#include <16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M)

CONST UNSIGNED char led[11]={0x01};

void main()

for(int8 i=0; i<8; i++)

{
17 BÀI 2: TIMER VÀ NGẮT

output_b(led[i]);

output_low(PIN_D0);

output_c(0x01) ; delay_ms(300);

output_c(0x00);

output_c(0x02) ; delay_ms(300);

output_c(0x00);

output_c(0x04) ; delay_ms(300);

output_c(0x00);

output_c(0x04) ; delay_ms(300);

output_c(0x00);

output_c(0x08) ; delay_ms(300);

output_c(0x00);

output_c(0x10) ; delay_ms(300);

output_c(0x00);

output_c(0x20) ; delay_ms(300);

output_c(0x00);

output_c(0x40) ; delay_ms(300);

output_c(0x00);

output_c(0x80) ; delay_ms(300);

output_c(0x00);

Bài 1.16. Chương trình:

#include <16F877A.h>
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN 18

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M)

void main (void)

{ // 0 1 2 3 4 5 6 7 8 9

unsigned int8 maled[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};

unsigned int8 led[]={0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};

for (int dem=1; dem <=30; dem++)

int chuc = dem/10;

int dvi = dem - chuc*10;

for (int i = 0; i<=8; i++)

output_c(led[i]);

for (int j=0; j<=100; j++)

output_d(0xff);

output_b(maled[chuc]);

output_d(0xfd);

delay_ms(2);

output_d(0xff);

output_b(maled[dvi]);

output_d(0xfe);
19 BÀI 2: TIMER VÀ NGẮT

delay_ms(2);

Bài 1.18. Chương trình:

#include <16F877A.h>

#FUSES NOWDT, HS, NOPUT, PROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8000000)

#define D5 PIN_C4

#define D6 PIN_C5

#define SW1 PIN_B4

#define SW2 PIN_B5

void main()

while (1)

if(!input(SW1))

while (1)

output_high(D6);

delay_ms(200);

output_low(D6);

delay_ms(200);

if(!input(SW2)) break;

}
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN 20

if(!input(SW2))

while (1)

output_high(D5);

delay_ms(500);

output_low(D5);

delay_ms(500);

if(!input(SW1)) break;

}}}

Bài 1.19. Chương trình:

#include <16F877A.h>

#FUSES NOWDT, HS, NOPUT, PROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8000000)

#define D5 PIN_C4

#define D6 PIN_C5

#define SW1 PIN_B4

#define SW2 PIN_B5


21 BÀI 2: TIMER VÀ NGẮT

int8 x;

void main()

x=0;

while(1)

{ output_c(0x00);

if(!input(SW1))

{output_low(D5);

while(1)

{ output_toggle(D6);

delay_ms(200);

if(!input(SW2))

x=x+1;

if(x>3)

{output_low(D6);

while(1)

{ output_toggle(D5);

delay_ms(20);

if(!input(SW1))

{ x=0;

output_low(D5);

break;}

}
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN 22

Bài 1.21. Chương trình:

#include <16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M)

#include <lcd.c>

void main ()

int8 sodem;

lcd_init();

set_tris_d(0x00);

output_d(0x00);

sodem=0;

lcd_gotoxy(1,1);

printf(lcd_putc,"Counter:");

while(true)

lcd_gotoxy(10,2);

printf(lcd_putc,"%02u",sodem);

delay_ms(300);

sodem++;

if(sodem == 100)

break;

}
23 BÀI 2: TIMER VÀ NGẮT

Bài 1.22. Chương trình:

#include <16F877A.h>

#FUSES NOWDT, HS, NOPUT, PROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8000000)

#include <lcd.c>

#define SW1 PIN_C3

#define SW2 PIN_C4

void main()

lcd_init();

set_tris_d(0x00);

output_d(0x00);

while(TRUE)

if(!input(SW1))

{lcd_gotoxy(1,1);

printf(lcd_putc,"Xin chao cac ban!");

if(!input(SW2))

{lcd_gotoxy(10,2);

printf(lcd_putc,"HUTECH");

}
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN 24

Bài 1.23. Chương trình:

#include <16F877A.h>

#FUSES NOWDT, HS, NOPUT, PROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8000000)

#include <lcd.c>

#define sw1 Pin_C3

#define sw2 Pin_C4

int8 set_val=0;

void main()

lcd_init();

set_tris_d(0x00);

output_d(0x00);

lcd_gotoxy(5,1);

printf(lcd_putc,"set_value");

while(TRUE)

delay_ms(200);

if(!input(sw1))

if(set_val <200)

{set_val=set_val+5;

lcd_gotoxy(8,2);

printf(lcd_putc,"%u",set_val);
25 BÀI 2: TIMER VÀ NGẮT

if(!input(sw2))

if(set_val >0)

{set_val=set_val-1;

lcd_gotoxy(8,2);

printf(lcd_putc,"%u",set_val);

Bài 1.24. Chương trình:

#include <16F877A.h>

#FUSES NOWDT, HS, NOPUT, PROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8000000)

#include <lcd.c>

#define sw1 pin_C3

#define sw2 pin_C4

int8 a,giay,phantramgiay;

void main()

{ phantramgiay = 0;

giay = 0;

lcd_init();
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN 26

set_tris_d(0x00);

output_d(0x00);

lcd_gotoxy(1,1);

printf(lcd_putc,"DONG HO DEM GIAY");

while(1)

if(!input(sw1))

a = 0;

if(!input(sw2))

a = 1;

if(a==0)

{ delay_ms(10);

phantramgiay++;

if( phantramgiay==100)

{ giay++;

phantramgiay=0;

lcd_gotoxy(4,2);

printf(lcd_putc,"%02d:%02d",giay,phantramgiay);

if(!input(sw2))

a=1;

delay_ms(5000);
27 BÀI 2: TIMER VÀ NGẮT

if (!input(sw2))

{ a=1;

phantramgiay=0;

giay=0;

lcd_gotoxy(4,2);

printf(lcd_putc,"%02d:%02d",giay,phantramgiay);

Bài 1.25. Chương trình:

#include <16F877A.h>

#FUSES NOWDT, HS, NOPUT, PROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8000000)

#include <lcd.c>

#define sw1 pin_C3

#define sw2 pin_C4

int8 gio,phut,giay;

void main()

{ lcd_init();

set_tris_d(0x00);

output_d(0x00);

while(true)
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN 28

{for( gio=0;gio<24;gio++)

{ for( phut=0;phut<60;phut++)

{ for(giay=0; giay<60;giay++)

{ lcd_gotoxy(4,1);

printf(lcd_putc,"DONG HO");

lcd_gotoxy(6,2);

printf(lcd_putc,"%02d:%02d:%02d",gio,phut,giay);

delay_ms(1000);

if(!input(sw1))

{gio++;}

if(!input(sw2))

{phut++;}

giay=0;

phut=0;

gio=0;

}
29 BÀI 2: TIMER VÀ NGẮT

BÀI 2: TIMER VÀ NGẮT

Bài 2.2. Chương trình:

Bài 2.4. Tính thời gian ngắt:

Setup_timer_0(RTCC_DIV_64|RTCC_INTERNAL)f_osc=8MHz

• f=f_osc/4=8/4=2MHz

• T=1/f=0,5us

• RTCC_DIV_64=64*0,5=32us

32us <-> 1 xung

8192us <-> 256 xung

Vậy thời gian ngắt là 8192us

Bài 2.5. Tính thời gian ngắt:

Setup_timer_1(T1_INTERNAL| T1_DIV_BY_1)f_osc=8MHz

• f=f_osc/4=8/4=2MHz

• T=1/f=0,5us

• T1_DIV_BY_1=1*0,5=0,5us

0,5us <-> 1 xung

32769us <-> 65536 xung

Vậy thời gian ngắt là 32769us

Chương trình:
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN 30
31 BÀI 2: TIMER VÀ NGẮT

BÀI 3: ADC VÀ PWM

Bài 3.2. Chương trình:

Bài 3.3. Chương trình:

Bài 3.5. Chương trình:

Bài 3.6. Chương trình:

You might also like