Professional Documents
Culture Documents
Báo Cáo Thực Hành Vi Điều Khiển
Báo Cáo Thực Hành Vi Điều Khiển
Báo Cáo Thực Hành Vi Điều Khiển
Họ và tên :
Lớp : 19DOTD3
MSSV :
www.hutech.edu.vn
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN
Ấn bản 2018
MỤC LỤC I
MỤC LỤC
MỤC LỤC..................................................................................................................1
#use delay(clock=8M)
{ set_tris_c(0x00);
while(true)
{output_c(0xff);delay_ms(1000);
output_c(0x00);delay_ms(1000);
Bài 1.4.
#use delay(clock=8M)
void main()
{set_tris_c(0xff);
while(true)
{LED_1(1);DELAY_ms(300);LED_1(0);
LED_2(1);DELAY_ms(300);LED_2(0);
LED_3(1);DELAY_ms(300);LED_3(0);
LED_4(1);DELAY_ms(300);LED_4(0);
LED_5(1);DELAY_ms(300);LED_5(0);
LED_6(1);DELAY_ms(300);LED_6(0);
LED_7(1);DELAY_ms(300);LED_7(0);
LED_8(1);DELAY_ms(300);LED_8(0);
#include<16F877A.h>
#use delay(clock=8M)
void main()
4 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
{for(int8 i=0;i<30;i++)
{while (true)
{led_1(1);delay_ms(300);led_1(0);
led_2(1);delay_ms(300);led_2(0);
led_3(1);delay_ms(300);led_3(0);
led_4(1);delay_ms(300);led_4(0);
led_5(1);delay_ms(300);led_5(0);
led_6(1);delay_ms(300);led_6(0);
led_7(1);delay_ms(300);led_7(0);
led_8(1);delay_ms(300);led_8(0);
#include<16F877A.h>
#use delay(clock=8M)
void main()
{for(int8 i=0;i<30;i++)
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
5
{while (true)
{led_1(1);delay_ms(300);led_1(0);
led_2(1);delay_ms(300);led_2(0);
led_3(1);delay_ms(300);led_3(0);
led_4(1);delay_ms(300);led_4(0);
led_5(1);delay_ms(300);led_5(0);
led_6(1);delay_ms(300);led_6(0);
led_7(1);delay_ms(300);led_7(0);
led_8(1);delay_ms(300);led_8(0);
for(int16 j=0;j<257;j++)
output_b(0xff);delay_ms(300);
output_b(0xfc);delay_ms(300);
#include <16F877A.h>
#use delay(clock=8M)
for(int16 k=0;k<40;k++)
for(int i=0;i<30;i++)
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);delay_ms(300);
output_c(0xff);delay_ms(300);
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
7
for(int16j=0<j<257;j++)
output_c(0xff);delay_ms(300);
output_c(0xfc);delay_ms(300);
Chương trình
#include <16F877A.h>
#use delay(clock=8M)
While (1)
Output_c(0x01);
Delay_ms(400);
Output_c(0x00);
Delay_ms(400);
Chương trình:
#include <16F877A.h>
#use delay(clock=8M)
While (1)
Output_c(0x01);
Delay_ms(400);
Output_c(0x00);
Delay_ms(400);
#use delay(clock=8M)
10 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
int8 dem;
dem=0;
output_d(0xF7);
while (dem<11)
while(1);
Bài 1.12.
Chương trình:
#include <16F877A.h>
#use delay(clock=8M)
while(1)
output_d(0xff);output_b(0x9f);output_low(pin_d3);delay_ms(3);
output_d(0xff);output_b(0x24);output_low(pin_d2);delay_ms(3);
output_d(0xff);output_b(0x0d);output_low(pin_d1);delay_ms(3);
output_d(0xff);output_b(0x99);output_low(pin_d0);delay_ms(3);
}
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
11
#include <16F877A.h>
#use delay(clock=8M)
while(1)
output_d(0xff);output_b(0x49);output_low(pin_d3);delay_ms(3);
output_d(0xff);output_b(0xe1);output_low(pin_d2);delay_ms(3);
output_d(0xff);output_b(0x03);output_low(pin_d1);delay_ms(3);
output_d(0xff);output_b(0x31);output_low(pin_d0);delay_ms(3);
#include <16f877A.h>
#use delay(clock=8M)
LED[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
densangdan[9]={0x01,0x03,0x07,0xf,0x1f,0x3f,0x7f,0xff,0x00};
int8 i=0;
int8 a=0;
while(1)
12 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
output_d(0xff);
for(a=0;a<9;a++)
for(i=0;i<9;i++)
{output_c(densangdan[i]);
delay_ms(100);
output_b(LED[a+1]);
output_low(pin_D0);
delay_ms(100);
}}}
#include <16f877A.h>
#use delay(clock=8M)
LED[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
densangdan[9]={0x01,0x03,0x07,0xf,0x1f,0x3f,0x7f,0xff,0x00};
int8 i=0;
int8 a=0;
while(1)
output_d(0xff);
for(a=0;a<9;a++)
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
13
for(i=0;i<9;i++)
{output_c(densangdan[i]);
delay_ms(100);
output_b(LED[a+1]);
output_low(pin_D0);
delay_ms(100);
}}}
#include <16F877A.h>
#use delay(clock=8M)
led7s[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
densangdan[9] ={0x01,0x03,0x07,0xf,0x1f,0x3f,0x7f,0xff,0x00};
void hienthi()
chuc=dem/10;
donvi=dem%10;
output_d(0xff);
output_b(led7s[chuc]);
output_d(0xf7);
delay_ms(3);
output_d(0xff);//tat
14 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
output_b(led7s[donvi]);
output_d(0xfb);
delay_ms(3);
void delay_100ms()
{ for(int k=0;k<17;k++)
{hienthi();
void sangdan()
Output_c(0x01);
Delay_100ms();
Output_c(0x03);
Delay_100ms();
Output_c(0x07);
Delay_100ms();
Output_c(0xF);
Delay_100ms();
Output_c(0x1F);
Delay_100ms();
Output_c(0x3F);
Delay_100ms();
Output_c(0x7F);
Delay_100ms();
Output_c(0xFF);
Delay_100ms();
Output_c(0x00);
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
15
Delay_100ms();
void main ()
dem=1;
for(int i =0;i<30;i++)
sangdan();
{dem=dem+1;}
if(dem==31)
{dem=1;}
#include <16F877A.h>
#use delay(clock=8M)
#define D5 PIN_C4
#define D6 PIN_C5
{while(TRUE)
if(!input(SW1)) {output_low(D5);
while(1)
if(!input(SW2)) {output_low(D6);
while (1)
#include <16F877A.h>
#use delay(clock=8M)
#define D5 PIN_C4
#define D6 PIN_C5
void main()
while(TRUE)
if(!input(SW1))
output_low(D5);
while(1){
output_toggle(D6);
delay_ms(200);
if (!input(SW2)) break;
if(!input(SW2))
output_low(D6);
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
17
while(1)
output_toggle(D5);
delay_ms(500);
if (!input(SW1)) break;
#include <16F877A.h>
#use delay(clock=8M)
#include <lcd.c>
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,"%u",sodem);
18 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
delay_ms(300);
sodem++;
if(sodem==100)break;
}//endmain
#include <16F877A.h>
#use delay(clock=8M)
#include <lcd.c>
{lcd_init();
while (1)
if(!input(SW1))
{lcd_gotoxy(1,1);
if(!input(SW2))
{lcd_gotoxy(10,2);
}}
#include <16F877A.h>
#use delay(clock=8M)
#include <lcd.c>
void main ()
lcd_init();
set_tris_d(0x00);
output_d(0x00);
int set_val;
set_val=0;
while(1)
lcd_gotoxy(5,1);
printf(lcd_putc,"Set value:");
delay_ms(3);
lcd_gotoxy(8,2);
printf(lcd_putc,"%03u",set_Val);
delay_ms(3);
if((!input(SW1))&&(set_val<200))
delay_ms(200);
Set_val=set_val+5;
lcd_gotoxy(8,2);
printf(lcd_putc,"%03u",set_val);
delay_ms(3);
if((!input(SW2))&&(set_val>0))
20 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
delay_ms(200);
Set_val=set_val-1;
lcd_gotoxy(8,2);
printf(lcd_putc,"%03u",set_val);
delay_ms(3);
#include <16F877A.h>
#use delay(clock=8M)
#include <lcd.c>
void main ()
int giay,phantramgiay;
lcd_init();
set_tris_d(0x00);
output_d(0x00);
int16 dem;
while(1)
lcd_gotoxy(1,1);
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
21
delay_ms(3);
if(!input(SW1))
lcd_gotoxy(4,2);
printf(lcd_putc,"%2u:%2u",giay,phantramgiay);
delay_ms(3);
while(1)
phantramgiay = phantramgiay+1;
delay_ms(3);
if(phantramgiay==100)
giay=giay+1;
Phantramgiay=0;
if(!input(SW2))
break;
lcd_gotoxy(4,2);
printf(lcd_putc,"%2u:%2u",giay,phantramgiay);
delay_ms(3);
while(!input(SW2))
if(!input(SW2))
dem=dem+1;
22 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
delay_ms(10);
if(dem==500)
giay=0;
dem=0;
lcd_gotoxy(4,2);
printf(lcd_putc,"%2u:%2u",giay,phantramgiay);
delay_ms(3);
#include <16F877A.h>
#use delay(clock=8M)
#include <lcd.c>
int gio,phut,giay;
int flag;
void main ()
int giay,phantramgiay;
lcd_init();
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
23
set_tris_d(0x00);
output_d(0x00);
int16 dem;
gio=0;
phut=0;
giay=0;
flag=1;
while(1)
lcd_gotoxy(4,1);
printf(lcd_putc,"DONG HO");
delay_ms(3);
while(flag==1)
lcd_gotoxy(6,2);
printf(lcd_putc,"%2u:%2u:%2u",gio,phut,giay);
delay_ms(1000);
giay=giay+1;
if(giay==60)
phut=phut+1;
giay=0;
if(phut==60)
gio=gio+1;
phut=0;
}
24 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
if(gio==24)
gio=0;
phut=0;
giay=0;
if(!input(SW1)||!input(SW2))
flag=0;
break;
while(!input(SW1))
delay_ms(200);
gio=gio+1;
if(gio==24)
gio=0;
lcd_gotoxy(6,2);
printf(lcd_putc,"%2u:%2u:%2u",gio,phut,giay);
delay_ms(1);
while(!input(SW2))
delay_ms(200);
phut=phut+1;
if(phut==60)
phut=0;
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
25
lcd_gotoxy(6,2);
printf(lcd_putc,"%2u:%2u:%2u",gio,phut,giay);
delay_ms(1);
flag=1;
}
BÀI 2: TIMER VÀ NGẮT
#include <16F877A.h>
#use delay(clock=8M)
void delay400ms()
int8 i;
Setup_timer_0(T1_INTERNAL|T1_DIV_BY_2); //1us/xung
For ( i = 0;i < 1000;i++) // c?n 400 000 xung = 10*40 000
Set_timer0(56);
While (get_timer0()>56) ;
While (1)
Output_c(0x01);
Delay400ms();
Output_c(0x00);
Delay400ms();
}
Bài 2.4. Tính thời gian ngắt:
#use delay(clock=8M)
int16 dem;
int tram,chuc,donvi;
void delay_100ms()
int8 i;
Setup_timer_1(T1_INTERNAL|T1_DIV_BY_2);
set_timer1(25536);
while(get_timer1()>25536);
#INT_TIMER0
void qled()
set_timer0(193);
Output_d(0xff);
Output_d(0xff);
Output_d(0xff);
enable_interrupts(GLOBAL);
enable_interrupts(INT_TIMER0);
setup_timer_0(RTCC_DIV_64|RTCC_INTERNAL);
set_timer0(193);
dem=0;
while(1)
tram=dem/100;
chuc=(dem%100)/10;
donvi=dem%10;
dem=dem+1;
if(dem==1000)
{dem=0;}
delay_100ms();
#use delay(clock=8M)
int16 dem;
int tram,chuc,donvi;
CONST unsigned char
led7s[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
void delay_100ms()
int16 i;
setup_timer_0(RTCC_DIV_64|RTCC_INTERNAL);
for( i=0;i<10000;i++)
set_timer0(6);
while(get_timer0()>6);
void sang()
int j;
for( j=0;j<8;j++)
output_c(sangdan[j]);
delay_100ms();
#INT_TIMER1
void qled()
set_timer1(59536);
Output_d(0xff);
Output_d(0xff);
Output_b(0xe0); output_low(PIN_D2); delay_ms(3); //t
Output_d(0xff);
Output_d(0xff);
void main(void)
enable_interrupts(GLOBAL);
enable_interrupts(INT_TIMER1);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
set_timer1(59536);
dem=1;
int k;
for( k=0;k<30;k++)
output_d(0xff);
output_b(0x63);output_low(PIN_D3);delay_ms(3);//c
output_d(0xff);
output_b(0xe0);output_low(PIN_D2);delay_ms(3);//t
chuc=(dem%100)/10;
donvi=dem%10;
dem=dem+1;
if(dem==30)
{dem=0;}
sang();
}
BÀI 3: ADC VÀ PWM
#include <16F877A.h>
#device adc=10
#use delay(clock=8M)
int8 tram,chuc,dvi;
int16 temp;
float volt;
#INT_TIMER0
void qled()
int8 i;
for (i=0;i<4;i++)
output_d(0xFF);
output_b(data_led[i]);
output_d(control_led[i]);
delay_ms(2);
enable_interrupts(GLOBAL);
enable_interrupts(INT_TIMER0);
Setup_timer_0(RTCC_DIV_128|RTCC_INTERNAL);
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(AN0_AN1_VSS_VREF);
set_adc_channel(0);
while (1)
temp = read_adc();
volt = (float)(temp)*2.5/10.23;
temp = (int16)volt;
chuc = temp/10;
dvi = temp%10;
data_led[0] = LED7S[chuc];
data_led[1] = LED7S[dvi];
data_led[2] = 0x39;
data_led[3] = 0x63;
#include <16F877A.h>
#device adc=10
#use delay(clock=8M)
int8 tram,chuc,dvi;
int16 temp;
float volt;
#INT_TIMER0
void qled()
int8 i ;
for ( i=0;i<4;i++)
output_d(0xFF);
output_b(data_led[i]);
output_d(control_led[i]);
delay_ms(2);
enable_interrupts(GLOBAL);
enable_interrupts(INT_TIMER0);
Setup_timer_0(RTCC_DIV_128|RTCC_INTERNAL);
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(AN0);
set_adc_channel(0);
while (1)
temp = read_adc();
BÀI 3: ADC VÀ PWM
35
volt = (float)(temp)*5/10.23;
temp = (int16)volt;
chuc = temp/10;
dvi = temp%10;
data_led[0] = LED7S[chuc];
data_led[1] = LED7S[dvi];
data_led[2] = 0x39;
data_led[3] = 0x63;
IF ( TEMP <=20 )
{output_low(PIN_C2);
output_low(PIN_C3);}
{output_high(PIN_C2);
output_low(PIN_C3);}
IF ( TEMP >30 )
{output_low(PIN_C2);
output_high(PIN_C3);}
if (temp>35 )
{output_toggle(PIN_C2);
delay_ms(100);
output_toggle(PIN_C3);
delay_ms(100);}
#include <16F877A.h>
#define D5 PIN_C4
#define D6 PIN_C5
void main()
while(TRUE)
if(!input(SW1))
output_low(D5);
while(1){
output_toggle(D6);
delay_ms(200);
if (!input(SW2)) break;
if(!input(SW2))
output_low(D6);
while(1){
output_toggle(D5);
delay_ms(500);
if (!input(SW1)) break;
}
BÀI 3: ADC VÀ PWM
37