MỤC LỤC
I
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 ............................................................................................. 35
BÀI 3: ADC VÀ PWM .................................................................................................. 40
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
Bài 1.3. Chương trình:
#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);
}
}
Bài 1.4. Chương trình:
#include <16F877A.h>
#fuses hs
#use delay(clock=20m)
void main()
{
set_tris_c(0x00);
set_tris_d(0x00);
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
int s;
unsigned int8 a;
a=0x00;
{
while (true)
{
for (s=0;s<8;s++)
{
a=(a<<1)+0x01;
output_c(a);
delay_ms(300);
}
delay_ms(300);
a=0x00;
output_c(a);
}
}
}
Bài 1.5. Chương trình:
#include <16F877A.h>
#fuses hs,,put,noprotect,nolvp,nowdt
#use delay(clock=20m)
void main()
{
set_tris_c(0x00);
set_tris_d(0x00);
int s,i;
3
4
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
unsigned int8 a;
a=0x00;
{
for (i=0;i<30;i++)
{
for (s=0;s<8;s++)
{
a=(a<<1)+0x01;
output_c(a);
delay_ms(300);
}
a=0x00;
output_c(a);
}
}
}
Bài 1.6. Chương trình:
#include <16F877A.h>
#fuses hs,,put,noprotect,nolvp,nowdt
#use delay(clock=20m)
void main()
{
set_tris_c(0x00);
set_tris_d(0x00);
int s,i;
unsigned int8 a;
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
a=0x00;
{
for (i=0;i<1;i++)
{
for (s=0;s<8;s++)
{
a=(a<<1)+0x01;
output_c(a);
delay_ms(300);
}
a=0x00;
output_c(a);
}
int s,i,n;
unsigned int8 a,y;
for (n=0;n<1;n++)
{
a=(a<<1)+0x01;
y=0xFF;
output_c(y);
delay_ms(300);
for(i=0;i<8;i++)
{
y= (y<<1);
output_c(y);
delay_ms(300);
5
6
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
}
{
a=0x00;
output_c(a);}
}
}
}
Bài 1.7. Chương trình:
#include <16F877A.h>
#fuses hs,,put,noprotect,nolvp,nowdt
#use delay(clock=20m)
void main()
{
set_tris_c(0x00);
set_tris_d(0x00);
int s,i,m;
unsigned int8 a;
a=0x00;
{
for( m=0;m<40;m++)
{
for (i=0;i<30;i++)
{
for (s=0;s<8;s++)
{
a=(a<<1)+0x01;
output_c(a);
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
delay_ms(300);
}
a=0x00;
output_c(a);
}
int s,i,n;
unsigned int8 a,y;
for (n=0;n<257;n++)
{
a=(a<<1)+0x01;
y=0xFF;
output_c(y);
delay_ms(300);
for(i=0;i<8;i++)
{
y= (y<<1);
output_c(y);
delay_ms(300);
}
{
a=0x00;
output_c(a);}
}
}
}
}
Bài 1.8. Sơ đồ mạch:
7
8
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
Chương trình:
#include <16F877A.h>
#fuses hs,,put,noprotect,nolvp,nowdt
#use delay(clock=20m)
void main()
{
set_tris_c(0x00);
set_tris_d(0x00);
int s,i,m;
unsigned int8 a;
a=0x00;
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
{
for( m=0;m<40;m++)
{
for (i=0;i<30;i++)
{
for (s=0;s<8;s++)
{
a=(a<<1)+0x01;
output_c(a);
delay_ms(300);
}
a=0x00;
output_c(a);
}
int s,i,n;
unsigned int8 a,y;
for (n=0;n<257;n++)
{
a=(a<<1)+0x01;
y=0xFF;
output_c(y);
delay_ms(300);
for(i=0;i<8;i++)
{
y= (y<<1);
output_c(y);
9
10
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
delay_ms(300);
}
{
a=0x00;
output_c(a);}
}
}
}
}
Bài 1.9. Sơ đồ mạch:
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
Chương trình:
#include <16F877A.h>
#fuses hs,,put,noprotect,nolvp,nowdt
#use delay(clock=20m)
void main()
{
set_tris_c(0x00);
set_tris_d(0x00);
int s,i,m;
unsigned int8 a;
a=0x00;
{
for( m=0;m<40;m++)
{
for (i=0;i<30;i++)
{
for (s=0;s<8;s++)
{
a=(a<<1)+0x01;
output_c(a);
delay_ms(300);
}
a=0x00;
output_c(a);
}
int s,i,n;
11
12
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
unsigned int8 a,y;
for (n=0;n<257;n++)
{
a=(a<<1)+0x01;
y=0xFF;
output_c(y);
delay_ms(300);
for(i=0;i<8;i++)
{
y= (y<<1);
output_c(y);
delay_ms(300);
}
{
a=0x00;
output_c(a);}
}
}
}
}
Bài 1.11. Chương trình:
#include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,
NOLVP
#use delay(clock=8M)
int chuc,donvi; //2 bien toan cuc
int dem;// dem:130
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
CONST
13
unsigned
char
led7s[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
CONSTunsigned
char
={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(4);
output_d(0xff);//tat
output_b(led7s[donvi]);
output_d(0xfb);
delay_ms(4);
}
void delay_400ms()
{ for(int k=0;k<9;k++)
{hienthi();
}
}
void sangdan()
{
Output_c(0x01);
Delay_400ms();
densangdan[9]
14
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
Output_c(0x03);
Delay_400ms();
Output_c(0x07);
Delay_400ms();
Output_c(0xF);
Delay_400ms();
Output_c(0x1F);
Delay_400ms();
Output_c(0x3F);
Delay_400ms();
Output_c(0x7F);
Delay_400ms();
Output_c(0xFF);
Delay_400ms();
Output_c(0x00);
Delay_400ms();
}
void main ()
{
dem=1;
for(int i =0;i<9;i++)
{
sangdan();
if(dem < 30)
{dem=dem+1;}
if(dem==31)
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
15
{dem=1;}
}
}
Bài 1.12. Chương trình:
#include <16f877A.h >
# FUSES NOWDT, HS, NOPUT, PROTECT, NODEBUG, NOBROWNOUT,
NOLVP
# use delay (clock=8M)
Unsigned char led7s [4] = {0x9F,0x24,0xD,0x99};
Unsigned char chandk [4] = {0xf7,0xfb,0xfd,0xfe};
Void main ()
{While (1)
{For (int8 i=0; i<4; i++) {output_d (0xff); output_b (led7s [i]); output_d
(chandk [i]); delay_ms(3);}}}
Bài 1.13. Chương trình:
#include <16F877A.h>
#FUSES NOWDT, HS, NOPUT, PROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=8000000)
CONST unsigned char LEDstar[4] = {0x49,0xe1,0x11,0xf5};
CONST unsigned char LEDstop[4] = {0x49,0xe1,0x03,0x31};
CONST unsigned char dk[4] = {0xf7, 0xfb, 0xfd,0xfe};
void stop ()
{ for (int j = 0; j < 4; j++)
{
output_d(0xff);
16
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
output_b(LEDstop[j]);
output_d(dk[j]);
delay_ms(3);
}
}
Void main (void)
{ output_d(0xff);
While (1)
{
for ( int16 h =0 ; h<416 ; h++ )
{ stop();
}
}
}
Bài 1.14. Chương trình:
#include <16F877A.h>
#FUSES NOWDT, HS, NOPUT, PROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=8000000)
CONST unsigned char LEDstar[4] = {0x49,0xe1,0x11,0xf5};
CONST unsigned char LEDstop[4] = {0x49,0xe1,0x03,0x31};
CONST unsigned char dk[4] = {0xf7, 0xfb, 0xfd,0xfe};
void star ()
{ for (int8 i = 0; i < 4; i++)
{
output_d(0xff);
output_b(LEDstar[i]);
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
output_d(dk[i]);
delay_ms(3);
}
}
void stop ()
{ for (int j = 0; j < 4; j++)
{
output_d(0xff);
output_b(LEDstop[j]);
output_d(dk[j]);
delay_ms(3);
}
}
Void main (void)
{ output_d(0xff);
While (1)
{
for (int16 k=0 ; k<416; k++ )
{ star ();
}
for ( int16 h =0 ; h<416 ; h++ )
{ stop();
}
}
}
Bài 1.15. Chương trình:
17
18
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
#include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,
NOLVP
#use delay(clock=8M)
CONST
unsigned
char
LED[10]
={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
CONST
unsigned
char
={0x01,0x03,0x07,0xf,0x1f,0x3f,0x7f,0xff,0x00};
void sangdan()
{
Output_c(0x01);
Delay_ms(300);
Output_c(0x03);
Delay_ms(300);
Output_c(0x07);
Delay_ms(300);
Output_c(0xF);
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);
densangdan[9]
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
19
Output_c(0x00);
Delay_ms(300);
}
void main ()
{
for(int i =0;i<9;i++)
{output_b(LED[i+1]);
output_d(0xf7);//mo led 4
sangdan();
//delay_ms(100);
}
}
Bài 1.16. Chương trình:
#include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,
NOLVP
#use delay(clock=8M)
int chuc,donvi; //2 bien toan cuc
int dem;// dem:130
CONST
unsigned
char
led7s[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
CONST
unsigned
char
={0x01,0x03,0x07,0xf,0x1f,0x3f,0x7f,0xff,0x00};
void hienthi()
{
chuc=dem/10;
densangdan[9]
20
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
donvi=dem%10;
output_d(0xff);
output_b(led7s[chuc]);
output_d(0xf7);
delay_ms(3);
output_d(0xff);//tat
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);
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
21
Delay_100ms();
Output_c(0x3F);
Delay_100ms();
Output_c(0x7F);
Delay_100ms();
Output_c(0xFF);
Delay_100ms();
Output_c(0x00);
Delay_100ms();
}
void main ()
{
dem=1;
for(int i =0;i<30;i++)
{
sangdan();
if(dem < 30)
{dem=dem+1;}
if(dem==31)
{dem=1;}
}
}
Bài 1.18. Chương trình:
include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,
NOLVP
22
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
#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)
{
if(!input(SW1))
{output_low(D5);
while(1)
{output_toggle(D6);
for(int i=0;i<20;i++)
{if(!input(SW2))
{break;}
delay_ms(10);}
if(!input(SW2))
{break;}
}
}
if(!input(SW2))
{output_low(D6);
while(1)
{
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
23
output_toggle(D5);
for(int j=0;j<20;j++)
{if(!input(SW1))
{break;}
delay_ms(25);}
If(!input(SW1))
{break;}
}
}
}
}
Bài 1.19. Chương trình:
#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
int dem;
void main (void)
{
dem=0;
while(1)
{
24
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
if(!input(SW1))
{
output_low(D5);
while(1)
{
output_toggle(D6);
for(int i=0;i<20;i++)
{
if(!input(SW2))
{break;}
delay_ms(10);
}
if(!input(SW2))
{break;}
}
}
if(!input(SW2))
{
dem= dem+1;
delay_ms(200);// chong doi phim
if(dem==3)
{
dem=0;
output_low(D6);
while(1)
{
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
25
output_toggle(D5);
for(int j=0;j<20;j++)
{
if(!input(SW1))
{break;}
delay_ms(10);
}
If(!input(SW1))
{break;}
}
}
}
}
}
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);