You are on page 1of 81

D cuong ung dung lp trinh C cho vi diu khin 8051

Bai 1: Ngn ngu C Trinh dich Keil C


I. Ngn ngu C cho vi diu khin
1, Gioi thiu ngn ngu C
Trong k thut lp trinh vi diu khin noi chung, ngn ngu lp trinh duoc su dung
thuong chia lam 2 loai: Ngn ngu bc thp va Ngn ngu bc cao.
Ngn ngu bc cao la cac ngn ngu gn voi ngn ngu con nguoi hon, do do vic lp
trinh bng cac ngn ngu nay tro nn d dang va don gian hon. Co th k dn mt s ngn
ngu lp trinh bc cao nhu C, Basic, Pascal. trong do C la ngn
ngu thng dung hon ca trong k thut vi diu khin. V ban cht, su dung cac ngn ngu nay
thay cho ngn ngu bc thp la giam tai cho lp trinh vin trong vic nghin cuu cac tp lnh
va xy dung cac cu truc giai thut. Chuong trinh vit bng ngn ngu bc cao cung s duoc
mt phn mm trn may tinh goi la trinh bin dich (Compiler) chuyn sang dang hop ngu
truoc khi chuyn sang m may.
Khi su dung ngn ngu C nguoi lp trinh khng cn hiu su sc v cu truc cua b vi
diu khin. Co nghia la voi mt nguoi chua quen voi mt vi diu khin cho truoc s xy
dung duoc chuong trinh mt cach nhanh chong hon, do khng phai mt thoi gian tim hiu
kin truc cua vi diu khin do. Va vic su dung lai cac chuong trinh d xy dung truoc do
cung d dang hon, co th su dung toan b hoc sua chua mt phn.

2. Ngn ngu C

2.1 Kiu du liu

2.1.1 Kiu du liu trong C

Kiu S Byte Khoang gia tri
Char 1 -128 +127
Unsigned char 1 0 255
Int 2 -32768 - +32767
Unsigned int 2 0 - 65535
Long 4 -2147483648 - +2147483647
Unsigned long 4 0 4294697295
Float 4

* Khai bao bin:
- Cu phap: Kiuduliu Vungnho Tnbin at Diachi;
Vi du:
Unsigned char data x;
- Khi khai bao bin co th gan lun cho bin gia tri ban du.
Vi du:
Thay vi: unsigned char x;
x = 0;
Ta chi cn: unsigned char x 0;
- Co th khai bao nhiu bin cung mt kiu mt luc.
Vi du: unsigned int x,y,z,t;
- Chi dinh vung nho: tu khoa 'Vungnho cho phep nguoi dung co th chi ra vung nho su
dung d luu tru cac bin su dung trong chuong trinh. Cac vung nho co th su dung la:
CODE, DATA, DATAB, IDATA, PDATA, XDTA. Khi khng khai bao vung nho trinh
dich Keil C s mc dinh do la vung nho DATA.

Vung nho Y nghia
CODE B nho m ngun chuong trinh
DATA B nho du liu gm 128 Byte thp cua RAM trong vi diu khin
BDATA B nho du liu co th dinh dia chi bit, nm trong vung nho DATA
IDATA B nho du liu gm 128 Byte cao cua RAM trong vi diu khin chi co o mt
s dong vi diu khin sau nay
PDATA B nho du liu ngoai gm 256 Byte, duoc truy cp boi dia chi dt trn P0
XDATA B nho du liu ngoai co dung luong co th ln dn 64 KB, duoc truy cp boi
dia chi dt trn P0 va P2

* Dinh nghia lai kiu
- Cu phap: typedeI Kiuduliu Tnbin;
- Tenbin sau nay s duoc su dung nhu mt kiu du liu moi va co th dung d khai bao
cac bin khac
Vi du: typedeI int m5|5|;
Dung tn m5 khai bao hai bin tn a va b co kiu du liu la mang 1 chiu 5 phn tu:
m5 a,b;
2.1.2 Kiu du liu trong Keil C

Kiu S bit
Bit 1
Sbit 1
Sfr 8
Sfr16 16
- bit : dung d khai bao cac bin co gia tri 0 hoc mt hay cac bin logic trn vung
RAM cua vi diu khin. Khi khai bao bin kiu bit trinh dic Keil C s mc dinh vung nho
su dung la BDATA.
` - sbit, sIr, sIr16: dung d dinh nghia cac cho cac thanh ghi chuc nng hoc cac cng
trn vi diu khin dung d truy nhp cac doan du liu 1 bit, 8 bit, 16 bit
2.1.3 Mang
Mang la mt tp hop nhiu phn tu cung mt kiu gia tri va chung mt tn. Cac phn
tu cua mang phn bit voi nhau boi chi s hay s thu tu cua phn tu trong dy phn tu. Mi
phn tu co vai tro nhu mt bin va luu tru duoc mt gia tri dc lp voi cac phn tu khac cua
mang.
Mang co th la mang mt chiu hoc mang nhiu chiu
Khai bao:
- Cu phap: Tnkiu Vungnho Tnmang|sphntumang|;
Khi bo trng s phn tu mang ta s co mang co s phn tu bt ki.
Vi du:
Unsigned int data a[5],b[2] [3];
Voi khai bao trn ta s co: mang a la mang mt chiu 5 phn tu. Mang b la mang hai
chiu, tng s phn tu la 6.
Chi s cua mang bt du tu s 0. Mang co bao nhiu chiu phai cung cp dy du by
nhiu chi s
Vi du: phn tu mang b|0| |1| la dung
Khi vit b|0| la sai
2.1.4. Con tro
Khi ta khai bao mt bin, bin do s duoc cp phat mt khoang nho bao gm mt s
byte nht dinh dung d luu tru gia tri. Dia chi du tin cua khoang nho do chinh la dia chi
cua bin duoc khai bao.
Con tro la mt bin dung d chua dia chi ma khng chua gia tri, hay gia tri cua con
tro chinh la dia chi khoang nho ma no tro toi.
Voi cac vung nho cu th con tro toi vung nho do chim dung luong phu thuc vao
d lon cua vung nho do. Con tro tng quat khi khng xac dinh truoc vung nho s co dung
luong lon nht vi vy tt nht nn su dung con tro cu th.
Loai con tro Kich thuoc
Con tro tng quat 3 byte
Con tro XDATA 2 byte
Con tro CODE 2 byte
Con tro DATA 1 byte
Con tro IDATA 1 byte
Con tro PDATA 1 byte

Khai bao bin con tro:
- Cu phap: KiuDuliu Vungnho *Tnbin;
- Vi du:
int *int_ptr;
long data *long_ptr;
- khi khng chi r vung nho con tro s duoc coi la con tro tng quat.
2.1.5 Kiu du liu cu truc
Kiu du liu cu truc la mt tp hop cac bin, cac mang va ca cac kiu cu truc khac
duoc biu thi boi mt tn duy nht. kiu du liu cu truc dung d luu tru cac gia tri, thng
tin co lin quan dn nhau.
Dinh nghia va khai bao bin cu truc:
- Dinh nghia: typedeI struct
Khai bao cac bin thanh phn;
} Tnkiucutruc;
- Khai bao: Tnkiucutruc Vungnho Tnbin;
Vi du: typedeI struct
char day;
char month;
int year;
} Date_type;
Date_type date,date_arr[5];
2.2 Phep toan
Phep gan ki hiu: '.
- Cu phap: Bin1 Bin2;
Trong do Bin2 co th la gia tri xac dinh cung co th la bin.
2.2.1 Phep toan s hoc
Phep toan y nghia Vi du
+ Phep cng X=a+b
- Phep tru X=a-b
* Phep nhn X=a*b
/ Phep chia ly phn
nguyn
X=a/b
(a9, b2 X4)
% Phep chia ly phn du a%b
(a=9, b=2 X1)

2.2.2 Phep toan Logic

AND: &&
OR: ||
NOT: !

2.2.3 Cac phep toan so sanh:










2.2.4 Phep toan thao tac Bit
Phep toan Y nghia Vi du
& Phep va (AND) Bit_1 & Bit_2
| Phep hoc (OR) Bit_1 | Bit_2
! Phep dao (NOT) !Bit_1
^ Phep hoc loai tru (XOR) Bit_1 ^ Bit_2
<< Dich trai a<<3
>> Dich phai a>>4
~ Ly bu theo bit ~a
Phep
toan
y nghia Vi du
> So sanh lon hon a>b
4~5 cac gia tri
0
>= So sanh lon hon hoc bng a>=b
6~2 cac gia
tri 1
< So sanh nho hon a<b
67 cac gia tri
1
<= So sanh nho hon hoc bng a<=b
85 cac gia
tri 0
== So sanh bng nhau

a==b
66 cac gia
tri 1
!= So sanh khac nhau a!=b
9!9 cac gia tri
0

2.2.5 Phep toan kt hop
Phep toan Vi du
+= a+=5 <=> a=a+5
-= a-=5 <=> a=a-5
*= a*=5 <=> a=a*5
/= a/=5 <=> a=a/5
%= a%=5 <=> a=a%5

2.3 Cu truc chuong trinh C
2.3.1 Cu truc chuong trinh
* Cu truc
1. Khai bao chi thi tin xu ly
2. Khai bao cac bin toan cuc
3. Khai bao nguyn mu cac ham
4. Xy dung cac ham va chuong trinh chinh
* Vi du:
#include<regx51.h>
#include<string.h>
#define Led1 P1_0

Unsigned char code Led_arr[3];
Unsigned char data dem;
Unsigned int xdata X;

Void delay(unsigned int n);
bit kiemtra(unsigned int a);

void delay(unsigned int n)
{
Khai bao bin cuc b;
M chuong trinh tr;
}
Khai bao chi thi tin xu ly
Khai bao bin toan cuc
Khai bao nguyn mu ham
Void main()
{
Khai bao bin cu b;
M chuong trinh chinh;
}
Bit kiemtra(unsigned int a)
{
Khai bao bin cuc b;
M chuong trinh kim tra bin a;
}
Chu y: Ham khng khai bao nguyn mu phai duoc xy dung truoc ham co loi goi
ham do. O vi du trn do ham 'bit kiemtra(unsigned int a) d duoc khai bao nguyn mu
ham o trn nn co th xy dung ham o bt ki vi tri nao trong chuong trinh.

2.3.2 Chi thi tin xu ly
Cac chi thi tin su ly khng phai la cac lnh cua ngn ngu C ma la cac lnh giup cho
vic soan thao chuong trinh ngun C truoc khi bin dich. Khi dich mt chuong trinh C thi
khng phai chinh ban chuong trinh ngun ma ta soan thao duoc dich. Truoc khi dich, cac
lnh tin xu ly s chinh ly ban gc, sau do ban chinh ly nay s duoc dich. Co ba cach chinh
ly duoc dung la:
Phep thay th #deIine
Phep chen tp #include
Phep lua chon bin dich #iIdeI
Cac chi thi tin xu ly giup ta vit chuong trinh ngn gon hon va t chuc bin dich,
g ri chuong trinh linh hoat, hiu qua hon.
* Chi thi #deIine
Chi thi #deIine cho phep tao cac macro thay th don gian
- Cu phap: #deIine Tnthayth dykitu
Mt Tnthayth co th duoc dinh nghia lai nhiu ln, nhung truoc khi dinh nghia
lai phai giai phong dinh nghia bng chi thi:
#undeI Tnthayth
- Vi du: #define N 100
* Chi thi #include
Xy dung cac ham va chuong
trinh chinh
Chi thi #include bao cho trinh bin dich nhn ni dung cua tp khac va chen vao tp
chuong trinh ngun ma ta soan thao.
- Cu phap:
Cach 1: #includetntp~
Cach 2: #include'tntp
- Vi du:
Cach 1: #includeregx51.h>
O cach nay tp regx51.h s duoc tim trong thu muc INC d chen vao chuong
trinh ngun.
Cach 2: #include'regx51.h
O cach nay tp regx51.h s duoc tim trong thu muc chua chuong trinh ngun
nu khng co moi tim trong thu muc INC
Khi mun chen tp ngoai thu vin hoc ngoai thu muc chua chuong trinh ngun thi
tntp s bao gm ca duong dn thu muc chua tp.

* Chi thi #iIdeI
Chi thi #iIdeI nay thuong dung d bin dich cac tp thu vin.
- Cu phap:
Cach 1: #iIdeI tenmacro
Doan chuong trinh
#endif
Cach 2: #iIdeI tenmacro
Doan chuong trinh 1
#else
Doan chuong trinh 2
#endif
O cach 1 nu tnmacro d duoc dinh nghia 'Doan chuong trinh s duoc dich
nguoc lai 'Doan chuong trinh s bi bo qua.

* Chi thi #iIndeI
Chi thi #iIndeI nay thuong dung d bin dich cac tp thu vin.
- Cu phap:
Cach 1: #iIndeI tenmacro
Doan chuong trinh
#endif
Cach 2: #iIndeI tenmacro
Doan chuong trinh 1
#else
Doan chuong trinh 2
#endif
O cach 1 nu tnmacro chua duoc dinh nghia 'Doan chuong trinh s duoc dich
nguoc lai 'Doan chuong trinh s bi bo qua.

2.3.3 Chu thich trong chuong trinh
Vic vit chu thich trong trinh nhm muc dich giai thich y nghia cua cu lnh, doan
chuong trinh hoc ham hoat dng nhu th nao va lam gi. Vit chu thich s giup cho nguoi
doc co th hiu duoc chuong trinh d dang va nhanh chong hon, sua li don gian hon hoc
giup cho ta xem lai chuong trinh cu ma ta d lam tro ln nhanh hon.
Chu thich trong chuong trinh s khng anh huong dn chuong trinh ma ta soan thao
vi trinh dich s bo qua tt ca loi chu thich khi bin dich chuong trinh sang m may.
Loi giai thich duoc dt sau du '// nu chu thich chi vit trn mt dong hoc trong
cp du '\* va '*\.
3 Cac lnh co ban trong C
Cu lnh r nhanh iI:
- Cu truc: iI(dieu_kien)
{
// Doan chuong trinh
}

Giai thich: nu dieukien dung thi xu li cac cu lnh bn trong con sai thi nhay qua.
- Cu truc: iI(dieukien)
{
// Doan chuong trinh 1
}
else
{
// Doan chuong trinh 2
}
Giai thich: nu dieukien dung thi xu li 'Doan chuong trinh 1 bn trong con sai thi
x u l y 'Doan chuong trinh 1

Cu lnh lua chon:
Cu truc: switch(bien)
{
case giatri1: //cac cu lnh break;}
case giatri2: //cac cu lnh break;}
case giatri3: //cac cu lnh break;}
.................
case giatrin: //cac cu lnh break;}
}
Giai thich: tuy vao bin co giatri1 thi thuc hin cac cu lnh tuong ung ri sau do
thoat khoi cu truc nho cu lnh break.
Bin co giatri2 thi thuc hin cu lnh tuong ung ri thoat.
.........
Bin co giatrin thi thuc hin cac cu lnh tuong ung ri thoat.
Vong lp xac dinh:
Cu truc: Ior(nm;nl;n)
{
// cac cu lnh xu li
}
Giai thich:
m,l la gia tri(m~l), con n la bin.
thuc hin lp cac cu lnh (l-m) ln.
Vong lp khng xac dinh while:
Cu truc: while(dieukien)
{
// cac cu lnh
}
Gia thich: thuc hin lp cac cu lnh khi diu kin dung nu diu kin sai thi thoat
khoi vong lp.
Vong lp khng xac dinh do while:
Cu truc: do
{
// cac cu lnh
} while(dieu_kien);
Gia thich: thuc hin lp cac cu lnh sau do kim tra diu kin nu dung, nu sai thi
thoat khoi vong lp.

II. Trinh bin dich Keil C (compiler)
hi o cho ojec

D tao 1 project moi chon project New project nhu sau:


Hp thoai create new project hin ra nhu sau:

Danh tn va chuyn dn thu muc ban luu project.ban nn tao mi mt thu muc cho 1
project. ri chon save.
Hp thoai sau hin ra:



Trong nay co 1 loat cac hng din tu san xut 8051. ban lp trinh cho con nao thi chon con
dy, kich chut vao du d mo rng cac con IC cua cac hang. o dy ta lp trinh cho
AT89C51 cua hang ATMEN nn ta chon nhu trn.
Khi chon chip thi ngay lp tuc 1 bang hin ra 1 s tinh nng cua chip cac ban co th nhin
thy: 8051 based Iully static 24Mhz .. nhp OK, cho cu tra loi NO khi duoc hoi 'copy
standard 8051 startup code to project and addfile to project vi nu chon YES chi lam cho
Iile lp trinh cua ban thm nng.










D tao mt Iile code cac ban cho filenew hoc n ctrlN. nhu sau:


Cua s text1 hin ra. Tip theo ban chon File save As hoc CtrlS, d luu File mc du
chua co gi nhu sau:

Duoc cua s sau:

Cac ban nhp tn vao text box Iile name.chu y tn gi cung duoc nhung khng duoc thiu
dui mo rng .C, va nhn SAVE.
Trong bn trai man hinh, cua s PROJECT WORKSPACE, cac ban mo rng cai target 1
ra nhu sau:

Nhp chut phai nn SOURCE GROUP, chon Add Iile to Group 'Source Group 1 hp
thoai hin ra chon Iile .C ma cac ban vua SAVE ri nhn Add 1ln ri nhn Close. nu ban
nhn Add 2 ln no s thong bao la Iile d add ban chi vic OK ri nhn Close. Duoc nhu
sau:

By gio trong hinh nhin thy trong Source Group 1 co Iile VIDU.C. cac ban nhp chut
phai vao vung soan thao Iile VIDU.C d thm Iile thu vin. Chon Insert
'#includeREGX51.H~.


Phn cui cung cua cng vic khoi tao la cac ban vit loi giai thich cho du an cua minh.
phn nay rt cn thit vi no d nguoi khac hiu minh lam gi trong project nay va khi minh
cn su dung lai code doc lai con bit no la cai gi.







on ho chng nh
Cac ban vit thu 1 chuong trinh lam vi du. khi vit xong mi dong lnh nn giai thich dong
lnh do lam gi. Vi du:












in dch m chng nh
Sau khi soan thao xong nhn CtrlS d nho. Nho xong cac ban bin dich chuong trinh
bng cach n phim F7 hoc chon Build target la biu tuong ngay trn cua s Workspace,
nhu trn hinh:











D bin dich chuong trinh thanh Iile HEX cac ban chon: ojecopion fo age
nhu hinh v:













Trong hp thoai hin ra, hy check vao Creat HEX File nhu chi dn:
chon the tap target nhp lai tn s thach anh la 12Mhz.

D m phong cac ban chon Debuga/sop debug session hoc n CtrlF5, hoc nhn
vao Icon chu D mau do trong cai kinh lup trn thanh cng cu.

D hin thi cac cng, cac thanh ghi cac ban chon trong peripherals.

Cac ban thy 1 cua s nho Parallel Port xut hin do la cai d m phong cho 1 cng cua
AT89C51. du tick tuong duong chn o muc cao (5V), khng tick chn o muc thp
0V.trong menu peripherals con co cac ngoai vi khac nhu timer, interrupt, serial.







D chay chuong trinh cac ban n chut phai vao man hinh soan thao, ri n F11.mi lan n
s chay 1 lnh.khi debug nu cac ban cho ham delay lu qua 1000 ln lp cac ban nhn
ctrlF11 d bo qua ham.
hoc n F10 d chay tung dong lnh
Bai 2: Diu khin Led don, Led 7 thanh va nut nhn

I. Hin thi Led don
i on:Ghep noi LED don voi chan P1.0 cua vi diu khin, vit chuong trinh diu
khin LED nhap nhav voi thoi gian tr la 1s.


+ Luu d thut toan cua bai LED nhay:


START
Khoi tao h thng
Sang Led
Tr 1S
Tt Led
Tr 1S
Chuong trinh diu khin:
*/==================Bo tien xu li===================*/
#include<AT89x51.h> // Dinh kem file thu vien
#define bat 1 // Dinh nghia gia tri bat den Led
#define tat 0 // Dinh nghia gia tri tat den Led
/*==================khai bao bien==================*/
sbit Led = P1^0; // Khai bao bien Led kieu bit chan P1.0

/* Khai bao ham*/
/*------------------------------ham tre -------------------------------------*/
void delay(long time)
{
while(time--);
}
/*--------------------------------ham chinh--------------------------------*/
void main(void)
{
while(1)
{
Led = bat; // bat Led
delay(25000); // tre 1s
Led = tat; // tat Led
delay(25000); //tre 1s
}
}

II. Phi hop Led va nut nhn
1. Phi hop Led don va nut nhn
i on: Mot den Led duoc noi voi chan P1.0 cua vi diu khin. Mot cong tc
START noi voi chan P3.0 va cong tc STOP noi voi chan P3.1 cua vi diu khin. hv
vit chuong trinh diu khin d khi bat cong tc START thi Led sang, khi bat cong tc
STOP thi Led tt.

Luu d thut giai cua bai toan:


Chuong trinh diu khin:
*/==================Bo tien xu li===================*/
#include<AT89x51.h> // Dinh kem file thu vien
Start
Led = tat
Start = 0
Stop = 0
Led = tat
Led = bat
#define bat 1 // Dinh nghia gia tri bat den Led
#define tat 0 // Dinh nghia gia tri tat den Led
/*==================khai bao bien==================*/
sbit Led = P1^0; // Khai bao bien Led kieu bit chan P1.0
sbit STOP = P3^0; // cong tac STOP de tat Led
sbit START = P3^1; // cong tac START de bat Led
/*=================== ham chinh==================*/
void main(void)
{
Led = tat; //ban dau tat Led
while(1){
if((START==0)&&(STOP==1)) {
Led = bat;
}
if((START==1)&&(STOP==0)){
Led = tat;
}
}
}













2. Phi hop Led 7 thanh va nut nhn
Cac s
hin
thi
P1.0
g
P1.1
f
P1.2
e
P1.3
d
P1.4
c
P1.5
b
P1.6
a

dp
s nap hex
mov P1,#
0 1 0 0 0 0 0 0 1 81
1 1 1 1 1 0 0 1 1 cf
2 0 1 0 0 1 0 0 1 92
3 0 1 1 0 0 0 0 1 86
4 0 0 1 1 0 0 1 1 cc
5 0 0 1 0 0 1 0 1 a4
6 0 0 0 0 0 1 0 1 a0
7 1 1 1 1 0 0 0 1 8f
8 0 0 0 0 0 0 0 1 80
9 0 0 1 0 0 0 0 1 84

i on
Mot Nut bam duoc noi voi chan P3.4, hv lap trinh diu khin dm so lan an
phim tu 0 dn 9 va hin thi trn Led 7 thanh.

Luu d thut giai:


Chuong trinh diu khin:
/*==================Bo tien xu li===================*/
#include<AT89x51.h> // Dinh kem file thu vien
/*=================Khai bao bien toan cuc=============*/
sfr dataP = 0x90; // du lieu la P1
// ma 7 thanh tu 0 den 9 la
// 0x81h,0xcfh,0x92h,0x86h,0xcch,0xa4,0xa0h,0x8fh,0x80h,0x84h.

sbit ctac = P3^4;
unsigned char dem=0;
/*====================Khai bao ham==================*/
/*----------------------------ham delay========================*/
void delay(long time)
START
Dem=0;
ctac==0?
dem++;
dem<=10?
dem=0;
hin thi ra Led 7 thanh
{
while(time--);
}
/*----------------------chuong trinh con kiem tra co phim nhan-------------*/
void phim_an(void)
{
if(ctac==0) //co phim nhan
{
delay(500); //chong rung phim
while(ctac==0); //Cho nha phim
delay(500); // chong rung phim
dem++; //tang bien dem
if(dem==10) dem=0;
}
}
/*----------------hien thi so lan an phim------------------------------------------*/
void solan_an(void)
{
switch(dem)
{
case 0: {dataP=0x81;break;}
case 1: {dataP=0xcf;break;}
case 2: {dataP=0x92;break;}
case 3: {dataP=0x86;break;}
case 4: {dataP=0xcc;break;}
case 5: {dataP=0xa4;break;}
case 6: {dataP=0xa0;break;}
case 7: {dataP=0x8f;break;}
case 8: {dataP=0x80;break;}
case 9: {dataP=0x84;break;}
};
}
/*-------------------------chuong trinh chinh-------------------------------------------*/
void main(void)
{
dataP = 0x81; // ban dau la so 0
while(1){
phim_an();
solan_an();
}
}
Bai 3 Hin thi LCD, Giao tip ban phim Hex, Hin thi ma trn Led
I. LCD
hp ni vi iu khin vi D x
- Bang m ta so d chn cua LCD 16x2:
Chn Ky hiu I/O M ta
1 V
ss
- Mass
2 V
cc
- Duong ngun 5v
3 V
EE
- Cp ngun diu khin tuong phan
4 RS I RS0 chon thanh ghi lnh
RS1 chon thanh ghi du liu
5 R/W I R/W1 doc du liu, R/W1 ghi
6 E I/O Cho phep
7 DB0 I/O Bit du liu
8 DB1 I/O Nt
9 DB2 I/O Nt
10 DB3 I/O Nt
11 DB4 I/O Nt
12 DB5 I/O Nt
13 DB6 I/O Nt
14 DB7 I/O Nt
Chn 15 va 16 la A va K. No duoc ni voi 2 chn cua 1 con Led dung d sang
LCD trong bong ti chung ta khng su dung.
- So d ghep ni LCD voi vi diu khin:

guyn l ho ng ca CD.
- Chn V
CC
, V
ss
, va V
EE
: cac chn V
CC
va V
SS
cap duong ngun 5v va mass tuong
ung. Chn V
EE
duoc dung d diu khin d tuong phan.
- Chn chon thanh ghi RS(Register Select): co 2 thanh ghi trong LCD chn RS duoc
dung d chon thanh ghi. nu RS0 thi thanh ghi m lnh duoc chon d cho phep nguoi
dung gui 1 lnh ln chng han nhu xoa man hinh, dua con tro v du dong. Nu RS1
thi thanh ghi du liu duoc chon cho phep nguoi dung gui du liu cn hin thi ln LCD.
- Chn doc/ghi (R/W): du vao doc/ghi cho phep nguoi dung doc thng tin tu LCD
khi R/W1 hoc ghi thng tin ln LCD.
- Chn cho phep E(Enable): chn cho phep duoc su dung boi LCD d cht du liu
cua no. Khi du liu duoc cp dn chn du liu thi 1 xung muc cao xung thp phai duoc
ap dn chn nay d LCD cht du liu trn cac chn du liu. Xung nay co d rng ti
thiu 450ns.
- Chn DB0-DB7: dy la duong du liu 8 bit, duoc dung d gui thng tin ln LCD
hoc doc ni dung cac thanh ghi trong LCD. D hin thi cac chu cai va cac con s,
chung ta gui m ASCII cua cac chu cai tu A dn Z , a dn z va cac chu s tu 0 dn 9 dn
cac chn nay khi bt RS1.
- Bang m lnh cua LCD:
M (HEX) Lnh dn thanh ghi cua LCD
01 Xoa man hinh hin thi
02 Tro v du dong
04 Giam con tro(dich con tro sang trai )
06 Tng con tro(dich con tro sang phai)
05 Dich hin thi sang phai
07 Dich hin thi sang trai
08 Tt con tro, tt hin thi
0a Tt hin thi, bt con tro
0c Bt hin thi, tt con tro
0e Bt hin thi, nhp nhay con tro
0f Tt con tro, nhp nhay con tro
10 Dich vi tri con tro sang trai
14 Dich vi tri con tro sang phai
18 Dich toan b hin thi sang trai
1c Dich toan b hin thi sang phai
80 Ep con tro v du dong thu nht
0c0 Ep con tro v du dong thu 2
38 Hai dong va ma tn 5x7.












hn luyn p
Hv vit chuong trinh hin thi trn LCD.
Dong 1 ch 'JIETNAM` bng cach hin thi tung ki tu
Dong 2 ch "JI DIEU KHIEN"bng cach hin thi ca ch. Joi so do mach
cho duoi dav.

Chuong trinh.
/*=========bo tien xu li===============*/
#include<AT89x51.h>
#include<string.h>
/*===========khai bao bien toan cuc============*/
sfr LCDdata = 0xA0; // cong P2, 8 bit du lieu.
sbit BF = 0xA7; // co ban, bit DB7.
sbit RS = P3^0; // chon thanh ghi
sbit RW = P3^1; // doc/ghi
sbit EN = P3^2; //cho phep chot du lieu
/*===========cac chuong trinh con cua LCD==========*/
/*--------------kiem tra su san sang cua LCD------------------------*/
void wait(void)
{
RS=0; //chon thanh ghi lenh
RW1; //doc tu LCD
LCDdata=0xff; //gia tri 0xff
while(BF) //kiem tra co ban
{
EN0; //dua xung cao xuong thap de chot.
EN=1; //dua chan cho phep len cao
}
}
/*------------------------thiet lap lenh cho LCD--------------------------*/
void LCDcontrol(unsigned char x)
{
RS=0;//chon thanh ghi lenh
RW=0;//ghi len LCD.
LCDdata=x ;// gia tri x
EN=1;//cho phep muc cao
EN=0;//xung cao xuong thap
wait();//doi LCD san sang.
}
/*------------------------------Khoi tao LCD-------------------------*/
void LCDinit(void)
{
LCDcontrol(0x38);//2 dong va ma tran 5x7
LCDcontrol(0x0e);//bat man hinh, bat con tro
LCDcontrol(0x01);//xoa man hinh
}
/*-------------------------thiet lap du lieu cho LCD-----------------*/
void LCDwrite(unsigned char c)
{
RS=1;//ghi du lieu
RW=0;//ghi du lieu len LCD
LCDdata=c;//gia tri C
EN=1;//cho phep muc cao
EN=0;//xung cao xuong thap
wait();//cho
}
void LCDwrites(unsigned char *s)
{
unsigned char data lens,count;
lens=strlen(s);
for(count=0;count<lens;count++){
LCDwrite(*(s+count));
}
}
/*=====================chuong trinh tre================*/
void delay(long time)
{
while(time--);
}
/*========================ham chinh==================*/
void main(void)
{
LCDinit(); // khoi tao LCD
LCDcontrol(0x82);// dua con tro den vi tri thu 4 dong 1
LCDwrite(V);
LCDwrite(I);
LCDwrite(E);
LCDwrite(T);
LCDwrite( );
LCDwrite(N);
LCDwrite(A);
LCDwrite(M);
LCDcontrol(0xC0);
LCDwrites("VI DIEU KHIEN");
while(1); //vong lap vo han
}
II. Giao tip ban phim Hex (ma trn phim 4x4)
1. Thut toan doc ban phim











2. Chuong trinh
Hv vit chuong trinh doc ma tran phim va hin thi so thu tu phim trn LCD.




Chuong trinh.
Ct
i
= 0 (i=1-4)
Begin
Hang
i
= 0
(i =1-4)
Tra lai kt qua phim d
nhn
Dung
Sai
/*=========bo tien xu li===============*/
#include<AT89x51.h>
#include<string.h>

#define H1 P1_0
#define H2 P1_1
#define H3 P1_2
#define H4 P1_3
/*===========khai bao bien toan cuc============*/
sfr LCDdata = 0xA0; // cong P2, 8 bit du lieu.
sbit BF = 0xA7; // co ban, bit DB7.
sbit RS = P3^0; // chon thanh ghi
sbit RW = P3^1; // doc/ghi
sbit EN = P3^2; //cho phep chot du lieu
#include"LCD.h"// Thu vien LCD tu xay dung
/*-------- ham doc phim nhan tu ma tran phim 4x4---------------*/
unsigned char Phim(void)
{
unsigned char phimnhan, dem, chot;
phimnhan=0;
chot=128;
dem=4;
while(dem--){
P1=~chot;
if(!H1){
delay(500);
phimnhan=dem+1;
delay(500);
}else if(!H2){
delay(500);
phimnhan=dem+5;
delay(500);
}else if(!H3){
delay(500);
phimnhan=dem+9;
delay(500);
}else if(!H4){
delay(500);
phimnhan=dem+13;
delay(500);
}
chot>>=1;
}
return phimnhan;
}
void viewphim(unsigned char phimnhan)
{
if(phimnhan<10){
LCDwrite(phimnhan+48);
}else{
LCDwrite(phimnhan/10+48);
LCDwrite(phimnhan%10+48);
}
}
void main(void)
{
unsigned char phimnhan=0;
LCDinit();
LCDwrites("Hay Nhan Phim");
LCDcontrol(0xC0);
while(1){
phimnhan=Phim();
if(phimnhan){
LCDcontrol(0x01);
LCDwrites("Hay Nhan Phim");
LCDcontrol(0xC0);
viewphim(phimnhan);
}
}
}

III. Hin thi ma trn Led
1. Thut toan
2. Xy dung chuong trinh
Bai toan: Vit chuong trinh hin thi ma trn LED bng phuong phap quet ct hin
thi dong chu "LAP TRINH VI DIEU KHIEN BANG NGON NGU C", voi dong chu chay
tu trai sang phai.

Chuong trinh:
// Khai bao chi thi tien xu ly
#include<AT89x51.h>

// Dinh nghia cac cong va cac chan dieu khien
#define CLOCK P3_2
#define DATA P3_3
#define CLEAR P3_4
#define Pxanh P1
#define Pdo P2

// Dinh nghia cac hang so
#define Nhanh 10
#define Trungbinh 25
#define Cham 50
#define Cuccham 75
#define Sieucham 150
#define Mxanh 1
#define Mdo 2
#define Mcam 3
// Khai bao mang chu hien thi
unsigned char code Mcode[256]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,255,1,1,1,1,/* L */
0,63,72,136,72,63,/* A */
0,255,144,144,144,96,/* P */
0,
0,128,128,255,128,128,/* T */
0,255,144,144,144,111,/* R */
0,129,129,255,129,129,/* I */
0,255,96,24,6,255,/* N */
0,255,16,16,16,255,/* H */
0,
0,252,2,3,2,252,/* V */
0,129,129,255,129,129,/* I */
0,
0,255,129,129,129,126,/* D */
0,129,129,255,129,129,/* I */
0,255,145,145,145,129,/* E */
0,254,1,1,1,254,/* U */
0,
0,255,24,36,66,129,/* K */
0,255,16,16,16,255,/* H */
0,129,129,255,129,129,/* I */
0,255,145,145,145,129,/* E */
0,255,96,24,6,255,/* N */
0,
0,255,145,145,145,110,/* B */
0,63,72,136,72,63,/* A */
0,255,96,24,6,255,/* N */
0,126,129,129,137,78,/* G */
0,
0,255,96,24,6,255,/* N */
0,126,129,129,137,78,/* G */
0,126,129,129,129,126,/* O */
0,255,96,24,6,255,/* N */
0,
0,255,96,24,6,255,/* N */
0,126,129,129,137,78,/* G */
0,254,1,1,1,254,/* U */
0,
0,126,129,129,129,70,/* C */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};

// Khai bao bien toan cuc
unsigned char data Start,End,Tocdolap,i,j,k;
unsigned char data Mdata1[32],Mdata2[32],Mau;
unsigned char data Dk1,Dk2,Dk3,Dk4,Dk5;

// Khai bao nguyen mau cac ham
void delay(unsigned long time);
unsigned char Mu2(unsigned char somu);

void Do(unsigned char chiso);
void Xanh(unsigned char chiso);
void Cam(unsigned char chiso);
void Dobyte(unsigned char chiso);
void Xanhbyte(unsigned char chiso);
void Cambyte(unsigned char chiso);

void Chaychudo(void);
void Chaychuxanh(void);
void Chaychucam(void);
void Chaychu(void);

void Taomangnhapnhay(void);
void Nhapnhayxanh(void);
void Nhapnhaycam(void);
void Nhapnhaydo(void);

void Taomanglen(void);
void Lxanh(void);
void Ldo(void);
void Lcam(void);
void Len(void);
/******************Ma nguon cac ham*************************/
// Ham tao tre
void delay(unsigned long time)
{
while(time--);
}
// Khoi ham hien thi chu chay tu trai sang phai
void Xanh(unsigned char chiso)
{
CLOCK=1;
DATA=0;
CLOCK=0;
Pxanh=Mcode[chiso];
delay(12);
Pxanh=0;
}

void Do(unsigned char chiso)
{
CLOCK=1;
DATA=0;
CLOCK=0;
Pdo=Mcode[chiso];
delay(12);
Pdo=0;
}

void Cam(unsigned char chiso)
{
CLOCK=1;
DATA=0;
CLOCK=0;
Pxanh=Mcode[chiso];
Pdo=Pxanh;
delay(12);
Pdo=0;
Pxanh=0;
}

void Chaychucam(void)
{
for(i=Start+1;i<Dk1;i++)
{
Tocdolap=Nhanh;
while(Tocdolap--)
{
DATA=1;
Dk2=i+32;
for(j=i;j<Dk2;j++)Cam(j);
}
}
}
void Chaychuxanh(void)
{
for(i=Start+1;i<Dk1;i++)
{
Tocdolap=Nhanh;
while(Tocdolap--)
{
DATA=1;
Dk2=i+32;
for(j=i;j<Dk2;j++)Xanh(j);
}
}
}
void Chaychudo(void)
{
for(i=Start+1;i<Dk1;i++)
{
Tocdolap=Nhanh;
while(Tocdolap--)
{
DATA=1;
Dk2=i+32;
for(j=i;j<Dk2;j++)Do(j);
}
}
}

void Chaychu(void)
{
Dk1=End-31;
if(Mau==Mxanh)Chaychuxanh();
else if(Mau==Mdo)Chaychudo();
else Chaychucam();

}

// Khoi ham hien thi chu nhap nhay tai cho
void Cambyte(unsigned char chiso)
{
CLOCK=1;
DATA=0;
CLOCK=0;
Pxanh=Mdata2[chiso];
Pdo=Pxanh;
delay(12);
Pdo=0;
Pxanh=0;
}

void Dobyte(unsigned char chiso)
{
CLOCK=1;
DATA=0;
CLOCK=0;
Pdo=Mdata2[chiso];
delay(12);
Pdo=0;
}

void Xanhbyte(unsigned char chiso)
{
CLOCK=1;
DATA=0;
CLOCK=0;
Pxanh=Mdata2[chiso];
delay(12);
Pxanh=0;
}

void Nhapnhaydo(void)
{
while(Tocdolap--){
DATA=1;
for(k=0;k<32;k++)Dobyte(k);
}
}
void Nhapnhayxanh(void)
{
while(Tocdolap--){
DATA=1;
for(k=0;k<32;k++)Xanhbyte(k);
}
}
void Nhapnhaycam(void)
{
while(Tocdolap--){
DATA=1;
for(k=0;k<32;k++)Cambyte(k);
}
}

void Taomangnhapnhay(void)
{
for(i=0;i<32;i++)
Mdata2[i]=0;

Dk4=End-Start;
Dk5=(32-Dk4)/2;
Dk4=32-Dk5;
for(i=Dk5;i<Dk4;i++)
Mdata2[i]=Mcode[Start+i-Dk5];
}

void Nhapnhay(void)
{
unsigned char demnhay;
demnhay=10;
Taomangnhapnhay();
while(demnhay--)
{
Tocdolap=Nhanh;
if(Mau==Mxanh)Nhapnhayxanh();
else if(Mau==Mdo)Nhapnhaydo();
else Nhapnhaycam();
CLEAR=0;
delay(1250);
CLEAR=1;
}
}
// Khoi ham hien thi chu di tu duoi len
unsigned char Mu2(unsigned char somu)
{
if(!somu) return 1;
else return 2*Mu2(somu-1);
}

void Taomanglen(void)
{
for(i=0;i<32;i++)
Mdata2[i]=0;

Dk4=End-Start;
Dk5=(32-Dk4)/2;
Dk4=32-Dk5;
for(i=Dk5;i<Dk4;i++)
Mdata1[i]=Mcode[Start+i-Dk5];
i=8;
}
void Lcam(void)
{
unsigned char data dem;
Tocdolap=Trungbinh;
while(Tocdolap--)
{
DATA=1;
for(dem=0;dem<32;dem++)
{
CLOCK=1;
DATA=0;
CLOCK=0;
Pxanh=Mdata2[dem];
Pdo=Pxanh;
delay(12);
Pxanh=0;
Pdo=0;
}
}
}
void Ldo(void)
{
unsigned char data dem;
Tocdolap=Trungbinh;
while(Tocdolap--)
{
DATA=1;
for(dem=0;dem<32;dem++)
{
CLOCK=1;
DATA=0;
CLOCK=0;
Pdo=Mdata2[dem];
delay(12);
Pdo=0;
}
}
}

void Lxanh(void)
{
unsigned char data dem;
Tocdolap=Trungbinh;
while(Tocdolap--)
{
DATA=1;
for(dem=0;dem<32;dem++)
{
CLOCK=1;
DATA=0;
CLOCK=0;
Pxanh=Mdata2[dem];
delay(12);
Pxanh=0;
}
}
}

void Len(void)
{
Taomanglen();
while(i--)
{
for(j=Dk5;j<Dk4;j++)
Mdata2[j]= Mdata1[j]/Mu2(i);
if(Mau==Mxanh)Lxanh();
else if(Mau==Mdo)Ldo();
else Lcam();
}

for(i=0;i<7;i++)
{
for(j=Dk5;j<Dk4;j++)
Mdata2[j]= Mdata2[j]*2;
if(Mau==Mxanh)Lxanh();
else if(Mau==Mdo)Ldo();
else Lcam();
}
}
/*Ham chinh*/
void main(void)
{
TMOD=0x01;
Pxanh=0;
Pdo=0;
P3=16;

while(1)
{
Start=0;End=194;Mau=3;
Chaychu();

Start=0;End=17;Mau=1;
Len();
Start=19;End=48;Mau=1;
Len();
Start=50;End=61;Mau=1;
Len();
Start=63;End=87;Mau=1;
Len();
Start=89;End=118;Mau=1;
Len();
Start=120;End=143;Mau=1;
Len();
Start=145;End=168;Mau=1;
Len();
Start=170;End=187;Mau=1;
Len();
Start=189;End=194;Mau=1;
Len();

Start=0;End=17;Mau=2;
Nhapnhay();
Start=19;End=48;Mau=2;
Nhapnhay();
Start=50;End=61;Mau=2;
Nhapnhay();
Start=63;End=87;Mau=2;
Nhapnhay();
Start=89;End=118;Mau=2;
Nhapnhay();
Start=120;End=143;Mau=2;
Nhapnhay();
Start=145;End=168;Mau=2;
Nhapnhay();
Start=170;End=187;Mau=2;
Nhapnhay();
Start=189;End=194;Mau=2;
Nhapnhay();
}

}
Bai 5: Giao tip ADC - Xu ly ngt
I. Giao tip ADC

Chuong trinh:
#include<regx51.h>
#include<string.h>

/*===========khai bao bien toan cuc============*/
sfr LCDdata = 0xA0; // cong P2, 8 bit du lieu.
sbit BF = 0xA7; // co ban, bit DB7.
sbit RS = 0xb0; // chon thanh ghi
sbit RW = 0xb1; // doc/ghi
sbit EN = 0xb2; //cho phep chot du lieu
#include"Lcd.h"// Thu vien LCD tu xay dung
#define RD P3_3
#define WR P3_4
#define INTR P3_5
/*-------- Ham tre ---------------*/
void delay(long time)
{
while(time--);
}
/*-------- ham doc phim nhan tu ma tran phim 4x4---------------*/

void view(unsigned char val)
{
unsigned char var;
if(val<10){
LCDwrite(val+48);
}else if(val<100){
LCDwrite(val/10+48);
LCDwrite(val%10+48);
}else{
var=val/10;
LCDwrite(var/10+48);
LCDwrite(var%10+48);
LCDwrite(val%10+48);
}
}
void main(void)
{
unsigned char ADCval=0;
RD=0;
LCDinit();
LCDcontrol(0x83);
LCDwrites("ADC0804");
while(1){
WR=1;
WR=0;
while(!INTR);
ADCval=P1;
LCDcontrol(0x01);
LCDcontrol(0x83);
LCDwrites("ADC0804");
LCDcontrol(0xC0);
view(ADCval);
delay(5000);
}
}
II. Lp trinh xu ly ngt
g ime/coune
c ch o ca ime v cch nh on gi np vo ime
a ch
- o ch d 1 do la b dinh thoi 16 bit, do do cac gia tri trong khoang tu 0000 dn
FFFF co th su dung d nap cho TH va TL cua b dinh thoi.
- Sau khi TH, TL duoc nap gia tri ban du 16 bit thi b dinh thoi phai duoc khoi
dng voi lnh TR0 1 voi timer0 va TR1 1 voi timer1, khi nay b dinh thoi bt du
dm tng theo xung clock tu gia tri ban du cho toi gia tri dinh la FFFF. Khi do b dinh
thoi s quay vong tu FFFF v 0000 va bt co bao tran TF0 voi timer0 va TF1 voi
timer1(ban du TFx0) khi do cn phai co thao tac d xoa co d ln sau con bit duoc
khi nao b dm tran.
- khi b dm tran thi TH va Tl cua b dinh thoi s mang gia tri 0 do do phai co
thao tac nap lai gia tri ban du cho chung va xoa co TF d b dm duoc lp lai.
- Nhu vy khoang thoi gian ma b dinh thoi tao tr chinh la khoangre thoi gian
no dm tng tu gia tri ban du duoc nap cho toi gia tri dinh FFFF.
- tinh toan gia tri nap vao thanh ghi chua cua b dinh thoi tu thoi gian mun tao
tr(t): goi N 65536 t/chu ki may. Sau khi chuyn sang m HEX duoc 1 s co 4 chu
s co dang: x1x2y1y2. khi do gia tri nap cho thanh ghi chua nhu sau: TH x1x2, TL
y1y2.
Vi du: mun tao tr 500us thi:
Gia su chu ki may la 1us: co N 65536 500/1 65036. chuyn sang m HEX la
FE0C, tu do: TH 0xFE, TL 0x0C.
- cac buoc lp trinh cho b dinh thoi d tao tr o ch d 1:
B1: chon ch d 1 cho b dinh thoi cn dung, tu do xac dinh gia tri nap
cho thanh ghi TMOD.
B2: tinh toan gia tri ban du cn nap cho TH va TL tu thoi gian tr mong
mun.
B3: khoi dng b dinh thoi.
B4: kim tra trang thai bt cua co TF.
B5:dung b dinh thoi.
B6: xoa co TF cho vong lp k tip.
B7: quay tro v B2 d nap lai gia tri cho TH va TL.
b h
- O ch d nay b dinh thoi la 8 bit, do vy chi cho phep cac gia tri tu 00 dn FF
duoc nap vao thanh ghi TH cua b dinh thoi. sau khi nap gia tri 8 bit thi vi diu khin s
sao ni dung cua TH sang TL va b dinh thoi duoc khoi dng bng lnh TRx1.
- Sau khi duoc khoi dng thi b dinh thoi bt du dm tng trong thanh ghi TL tu
gia tri ban du dn gia tri dinh FF. va khi quay vong tu FF v 00 thi co TFx duoc bt ln
1, khi nay thanh ghi TL mang gia tri 0 nhung TL s ngay lp tuc duoc tu dng nap lai
voi gia tri ban du duoc luu trong thanh ghi TH.
- nhu vy trong ch d nay mi khi b dm tran thi thanh ghi chua s duoc vi
diu khin nap lai gia tri ban du, do do ch d nay duoc goi la ch d tu dng nap lai.
- tinh gia tri nap vao thanh ghi chua cua b dinh thoi tu thoi gian tr (t):
Goi N 256 t/chu ki may. Sau khi chuyn sang m HEX duoc 1 s, ta nap s
nay vao thanh ghi TH va ca TL(nap vao TL gia tri dm ln 1 va nap vao TH cho nhung
ln sau d khi b dm tran thi phn cung cua vi diu khin s tu dng sao TH sang TL).
Vi du: tao tr 50usthi la:
Gia su chu ki may la 1us: co N 256 50/1 205, chuyn sang m HEX : 0CE
Tu do: TH 0xCE va TL 0xCE.
- cac buoc lp trinh cho b dinh thoi d tao tr o ch d 2.
B1: nap gia tri cho thanh ghi thit lp ch d TMOD voi timer mun su
dung.
B2: nap vao TH gia tri dem ban du.
B3: khoi dng b dinh thoi.
+ B4: kim tra co bao tran TFx.
B5: xoa co tran TFx, quay v B4.
* luu y: 2 ch d khac cua b dinh thoi la ch d 0(ch d b dinh thoi 13 bit, b
dinh thoi/b dm 8 bit, dinh ty l truoc 5 bit ) va ch d 3(ch d b dinh thoi chia tach)
o day khng gioi thiu.
g ca b nh hi
- nguyn tc su dung b dinh thoi o ch d ngt:
khai bao ngt cua b dinh thoi mun su dung
ngun gy ngt.
chuong trinh chinh va chuong trinh phuc vu ngt.
- voi ngt dinh thoi vic khai bao ngun ngt bao gm vic khai bao ngt toan cuc la
EA 1 va khai bao ngt cho tung b dinh thoi mun dung ET0 1(timer0) va ET1
1(timer1)
- Ngun bao ngt dinh thoi(voi ca 2 ch d) du la khi b dm tran(khi co TFx 1),
khi co TFx 1 thi vi diu khin kt thuc cng vic hin tai o chuong trinh chinh va
chuyn vao chuong trinh phuc vu ngt cn cu theo dia chi cua chuong trinh phuc vu
ngt.khi thuc hin xong chuong trinh phuc vu ngt vi diu khin quay tro v chuong
trinh tai noi bi gian doan khi truoc.
- Tom lai ngt dinh thoi la vic ta su dung b dinh thoi tao tr mt khoang thoi gian
duoc tinh toan truoc, sau khoang thoi gian nay 1 cng vic ta mong mun s duoc thuc
hin o chuong trinh phuc vu ngt. cng vic do co th coi la dc lp voi cng vic o
chuong trinh chinh
- cac cng vic lp trinh su dung ngt dinh thoi :
tinh toan thoi gian tr mong mun va cng vic mun thuc hin sau khoang
thoi gian do.
khai bao ngt dinh thoi trong chuong trinh chinh (EA1, ETX1).
lua chon b dinh thoi va ch d cua no trong thanh ghi TMOD
khoi dng b dinh thoi.
Xy dung chuong trinh chinh va cac chuong trinh con cn thit.
xy dung chuong trinh phuc vu ngt thuc hin 1 cng vic mong mun (xac
dinh r dia chi ngt theo thu tu ngt trong bang vector ngt)
- Chu y: trong chuong trinh phuc vu ngt cac ban phai xoa co bao tran TFx va nap
lai gia tri cho b dinh thoi voi ch d 1 con ch d 2 thi khng cn.
bi on
su dung bo dinh thoi voi ngt cua no tao mot xung vuong voi tan so
1kHZ doi xung (50 muc 1 va 50 muc 0 ) trn chan P1.0.
Bai giai.
- ta co : I 1kHZ T 1/1000s 1000us T
ON
= T
OFF
T/2 500us. Nhu vy
chu ki xung la di xung nn hai phn nay b dm dm ging nhau(tao tr khoang thoi
gian bng nhau). nua chu ki du b dm tao tr 500us cho muc 0, sau khi b dm dm
dn gia tri dinh cua thanh ghi chua la FFFF thi co bao TFx 1 gy ngt, vi diu khin
phai chuyn vao chuong trinh phuc vu ngt va s lt trang thai xung ra. Trong nua chu
ki con lai cung nhu vy va cu nhu th.
- Do thoi gian tr la 500us do do ta chon ch d 16 bit, su dung kt qua tu vi du trn
d nap gia tri ban du cho TH va TL.
- Chuong trinh diu khin:
/*================khai bao thu vien===============*/
#include<AT89x51.h>

/*=============khai bao bien=====================*/
sbit xung = P1^0;
/*==============khai bao ham ==================*/
/*--------------------------chuong trinh phuc vu ngat timer0 tao xung--------------------*/
void timer0_int(void) interrupt 1
{
TF0=0; // xoa co bao tran timer0
xung = !xung; // tao muc 1 ra chan P1.0
TH0 = 0xfe; // (65536-500)hex 0Ie0c (thach anh 12MHz)
TL0 = 0x0c;
}
/*=============chuong trinh chinh=============*/
void main(void)
{
EA = 1; // cho phep ngat toan cuc
ET0 = 1; // cho phep ngat T0
TMOD = 0x01; // timer0 che do 1
xung = 0; //gia tri ban dau cua xung muon tao
TH0 = 0xfe; // (65536-500)hex 0Ie0c (thach anh 12MHz)
TL0 = 0x0c;
TR0 = 1; // khoi dong timer
while(1) PCON|=1; //khong lam gi ca de doi ngat.
}
su dung bo dinh thoi voi ngt cua tao dong ho so hin thi ln LCD.


+ hng nh
/*================khai bao thu vien===============*/

#include<regx51.h>
#include<string.h>

#define LCDdata P2
sbit RS=P3^0;
sbit RW=P3^1;
sbit EN=P3^2;
sbit BF=LCDdata^7;
#include"lcd.h"
/*=============khai bao bien=====================*/
unsigned char data Time[8];
unsigned char data i;

/*==============khai bao ham ==================*/
void T10ms(void) interrupt 1 using 0
{
TR0=0;
TH0=0xD8;
TL0=0xEF;
TR0=1;
if(Time[0]==9){
Time[0]=0;
if(Time[1]==9){
Time[1]=0;
if(Time[2]==9){
Time[2]=0;
if(Time[3]==5){
Time[3]=0;
if(Time[4]==9){
Time[4]=0;
if(Time[5]==5){
Time[5]=0;
if(Time[6]==9&&Time[7]<2){
Time[6]=0;
Time[7]++;
}else if(Time[6]==3&&Time[7]==2){
Time[6]=0;
Time[7]=0;
}else Time[6]++;
}else Time[5]++;
}else Time[4]++;
}else Time[3]++;
}else Time[2]++;
}else Time[1]++;
}else Time[0]++;
LCDwrite(Time[7]+48);LCDwrite(Time[6]+48);LCDwrite(':');
LCDwrite(Time[5]+48);LCDwrite(Time[4]+48);LCDwrite(':');
LCDwrite(Time[3]+48);LCDwrite(Time[2]+48);LCDwrite(':');
LCDwrite(Time[1]+48);LCDwrite(Time[0]+48);
LCDcontrol(0xC0);
}
/*==============Chuong trinh chinh ==================*/
void main()
{
TMOD|=1;
EA=1;
ET0=1;
TH0=0xD8;
TL0=0xEF;
for(i=0;i<8;i++)Time[i]=0;
LCDinit();
LCDwrites("Dong ho so");
LCDcontrol(0xC0);
TR0=1;
while(1)PCON|=1;
}

p nh vi cc ng ngoi ca vi iu khin
hi nim
- b vi diu khin 8051co hai ngt ngoai la INT0 va INT1 voi 2 chn tac dng du
vao tuong ung la P3.2 va P3.3.
- Ngt ngoai la ngt cua vi diu khin ma tac dng ngt o dy chinh la cac tac dng
bn ngoai cua vi diu khin tac dng vao vi diu khin thong qua cac chn ngt duoi
dang mt tin hiu din ap dang xung.
- tac dng ngt ngoai co hai dang la tac dng theo dang muc va dang suon.
kich hoat theo muc: o ch d nay cac chn INT0 va INT1 binh thuong o muc
cao ging nhu cac chn khac cua vi diu khin, khi co tin hiu muc thp cp toi thi tin
hiu nay kich hoat ngt. luu y la truoc khi thuc hin lnh cui cung cua chuong trinh
phuc vu ngt thi muc thp tai cac chn ngt phai duoc chuyn ln muc cao, nu khng
s lai gy ra mt ngt ngay lp tuc.
Kich hoat theo suon: binh thuong cac chn ngt cua vi diu khin o muc cao,
khi co tin hiu tac dng vao chung co dang suon xung thi s tac dng ngt.
- D su dung ch d ngt nay thi phai tac dng vao thanh ghi TCON cu th la
TCON.11 hoc IT01 thi cho phep ngt ngoai 0 kich hoat suon, con TCON.21 hoc
IT11 thi cho phep ngt ngoai 1 kich hoat suon.
cch lp nh
- D lp trinh cho ngt cua vi diu khin ta phai thuc su hiu ban cht cua ngt va
qua trinh thuc hin ngt cua vi diu khin din ra.
- mu vit ham ngt nhu sau:
Void name(void)interrupt x(x la s thu tu ngt ngoai x 0 hoc 2)
{
//chuong trinh phuc vu ngt
}
- Trong chuong trinh chinh ta phai co thao tac thit lp vic cho phep cac ngt duoc
su dung.
bi on
su dung ngt ngoai cua vi diu khin voi nhim vu la. binh thuong vi diu khin
bat mot Led don tai chan P1.0 va khi co ngt ngoai thi tt Led o P1.0 va bat Led o chan
P1.1 sau 1s thi bat lai Led P1.0 va tt Led P1.1.

Bai giai.
/*==================Bo tien xu li===================*/
#include<AT89x51.h> // Dinh kem file thu vien
#define bat 1 // Dinh nghia gia tri bat den Led
#define tat 0 // Dinh nghia gia tri tat den Led
/*==================khai bao bien==================*/
sbit Led1 = P1^0; // Khai bao bi?n Led ki?u bit chan P1.0
sbit Led2 = P1^1; // Khai bao bi?n Led ki?u bit chan P1.0
/* Khai bao ham*/
/*------------------------------ham tre -------------------------------------*/
void delay(long time)
{
while(time--);
}
void INT_0(void) interrupt 0 // chuong trinh phuc vu ngat
{
Led1=tat;
Led2=bat;
delay(25000);
Led1=bat;
Led2=tat;
}
/*--------------------------------ham chinh--------------------------------*/
void main(void)
{
EA=1; // cho phep ngat toan cuc
EX0=1; // cho phep ngat ngoai 0
IT0=1; //ngat kich phat suon
Led1=bat;
Led2=tat;
while(1);
}
Bai 6: Diu khin dng co DC, dng co Servo, dng co buoc
1. Dng co DC
2. Dng co Servo
3. Dng co buoc (Step motor)
Diu khin dng co buoc voi tc d tng dn tu 5 dn 100 v/p, mi ln chuyn tc
d tng 5v/p thoi gian chuyn 1s, hin thi tc d trn LCD.

Chuong trinh:
#include<regx51.h>
#include<string.h>

#define LCDdata P2
sbit RS=P3^0;
sbit RW=P3^1;
sbit EN=P3^2;
sbit BF=LCDdata^7;
#include"lcd.h"

unsigned char data Bytecao1,Bytethap1;
unsigned char data Buoc,Nbuoc;
unsigned char data Mbuoc[4]={144,192,96,48};

void viewspeed(unsigned char speed);
void Xuly(unsigned char Nspeed);


void Dkdongco(void) interrupt 1 using 0
{
TR0=0;
TH0=Bytecao1;
TL0=Bytethap1;
TR0=1;
P1=Mbuoc[Buoc];
Buoc++;
if(Buoc==4)Buoc=0;
}

void Xuly(unsigned char speed)
{
unsigned int data Chuki1,Chuki2;
unsigned int data tam1,tam2;
TR0=0;
viewspeed(speed);
Nbuoc=200;
tam2=10000/Nbuoc;
tam1=6000/speed;
Chuki1=tam1*tam2;
Chuki2=65535-Chuki1;
Bytecao1=Chuki2/256;
Bytethap1=Chuki2%256;
TR0=1;
}

void delay(unsigned long time)
{
while(time--);
}
void viewspeed(unsigned char speed)
{
unsigned char data a1,a2;
LCDcontrol(0xc0);
a1=speed%10;
speed=speed/10;
a2=speed%10;
speed=speed/10;
LCDwrite(speed+48);
LCDwrite(a2+48);
LCDwrite(a1+48);
LCDwrites("(vong/phut)");
}

void main()
{
unsigned char data i;
TMOD=17;
EA=1;
LCDinit();
ET0=1;
LCDcontrol(0x80);
LCDwrites("CT DK DC buoc" );
LCDcontrol(0xc0);
LCDwrites("V:5-100(v/p)");
delay(100000);
while(1){
Buoc=2;
for(i=5;i<101;i=i+5){
LCDcontrol(0x01);
LCDcontrol(0x80);
LCDwrites("CT DK DC buoc" );
Xuly(i);
delay(500000);
}
}
}
Bai 7: Giao tip Vi diu khin voi May tinh
I. Cng truyn thng ni tip

1. Thanh ghi SCON SBUF
II. Xy dung chuong trinh
1. Chuong trinh VB
Giao din

Thut toan
Chuong trinh:

Option Explicit
Dim Mau As Byte
Private Sub cbcolor_Click()
If (cbcolor.Text = "Mau do") Then
Mau = 1
txtchu.ForeColor = &HFF&
lbHienthi.ForeColor = &HFF&
ElseIf (cbcolor.Text = "Mau xanh") Then
Mau = 2
txtchu.ForeColor = vbGreen
lbHienthi.ForeColor = &HFF00&
ElseIf (cbcolor.Text = "Mau cam") Then
Mau = 3
txtchu.ForeColor = &H80FF&
lbHienthi.ForeColor = &H80FF&
End If
End Sub

Private Sub cbcolor_GotFocus()
SendKeys "%{DOWN}"
End Sub

Private Sub cmdCode_Click()
MsgBox Code(txtchu)
End Sub

Private Sub cmdExit_Click()
If MSComm1.PortOpen Then
MSComm1.PortOpen = False
End If
End

End Sub
Function Code(s As String) As String
Dim i As Integer
s = Replace(s, " ", "")
For i = 1 To Len(s)
Code = Code & " " & Asc(Mid(s, i, 1))
Next

End Function
Private Sub OpenPort()
Dim s As String
MSComm1.Settings = "57600,N,8,1"
MSComm1.CommPort = 1
MSComm1.PortOpen = True
MSComm1.InputLen = 0
s = MSComm1.Input
MsgBox "Port did open"
End Sub
Private Sub cmdOpenport_Click()
If MSComm1.PortOpen Then
MSComm1.PortOpen = False
End If
OpenPort

End Sub

Private Sub cmdSend_Click()

Dim s As String

If MSComm1.PortOpen = False Then
MsgBox "Port did not open"
OpenPort
End If

If MSComm1.PortOpen Then
txtchu.Text = UCase(txtchu.Text)
s = Chr(Mau) & Chr(Len(txtchu.Text)) & txtchu.Text & Chr(255)
Do While (MSComm1.OutBufferCount > 0)
Loop
MSComm1.Output = s
End If

End Sub

Private Sub cmdStop_Click()
MSComm1.Output = Chr(250)
MsgBox "Port Stoped"
End Sub

Private Sub Form_Load()

txtchu.ForeColor = vbRed
txtchu.Text = "DO AN GHEP NOI"
Mau = 1

End Sub

Private Sub Form_Resize()
If (Me.WindowState = 1) Then
Me.Height = 4000
Me.Width = 7230
End If
End Sub

Private Sub txtchu_GotFocus()
txtchu.SelStart = 0
txtchu.SelLength = Len(txtchu)
End Sub

2. Chuong trinh vi diu khin
Thut toan
Chuong trinh:
/************Khai bao tien xy ly***************/
#include<regx51.h>
/*********Dinh nghia hang so mau**********/
#define Mdo 1
#define Mxanh 2
#define Mcam 3
/*****Khai bao mang ki tu gom chu so va chu cai****/
unsigned char code Mchar[36][7]={
48,0,126,129,129,129,126,/*0*/
49,0,0,33,65,255,1,/*1*/
50,0,99,135,137,145,97,/* 2 */
51,0,66,129,145,145,110,/* 3 */
52,0,24,40,72,255,8,/* 4 */
53,0,226,145,145,145,142,/* 5 */
54,0,118,137,137,137,70,/* 6 */
55,0,128,135,136,144,224,/* 7 */
56,0,110,145,145,145,110,/* 8 */
57,0,102,145,145,145,110,/* 9 */
65,0,63,72,136,72,63,/* A */
66,0,255,145,145,145,110,/* B */
67,0,126,129,129,129,70,/* C */
68,0,255,129,129,129,126,/* D */
69,0,255,145,145,145,129,/* E */
70,0,255,144,144,144,128,/* F */
71,0,126,129,129,137,78,/* G */
72,0,255,16,16,16,255,/* H */
73,0,129,129,255,129,129,/* I */
74,0,2,129,130,252,128,/* J */
75,0,255,24,36,66,129,/* K */
76,0,255,1,1,1,1,/* L */
77,0,255,64,32,64,255,/* M */
78,0,255,96,24,6,255,/* N */
79,0,126,129,129,129,126,/* O */
80,0,255,144,144,144,96,/* P */
81,0,126,129,133,130,125,/* Q */
82,0,255,144,144,144,111,/* R */
83,0,98,144,144,144,78,/* S */
84,0,128,128,255,128,128,/* T */
85,0,254,1,1,1,254,/* U */
86,0,252,2,3,2,252,/* V */
87,0,255,12,3,12,255,/* W */
88,0,199,40,16,40,199,/* X */
89,0,224,16,15,16,224,/* Y */
90,0,131,133,153,161,193/* Z */
};
/*******Dinh nghia cac chan va cac cong dieu khien*****/
sfr Pxanh=0x90;
sfr Pdo=0xA0;

sbit Clear=P3^4;
sbit Data=P3^3;
sbit Clock=P3^2;
/**************Khai bao bien toan cuc*************/
unsigned char data Ktnhan,nhanmau,j,i,Maxc,Count,nLap;
unsigned char data Mau,Chay,tam,dem;
unsigned char data MC[76],MQ[32];
/**********Khoi ham chuong trinh**********/
// Ham ngat noi tiep
void Ngatnoitiep(void) interrupt 4 using 0
{
if(RI){
RI=0;
tam=SBUF;
if(tam==250){
Chay=1;i=j=77;dem=8;
Count=0;
Clear=0;
}else{
if(nhanmau){
Mau=tam;
Chay=1;i=j=77;dem=8;
Count=nhanmau=0;
P1=P2=0;
Clear=0;
}else if(tam==255){
Clear=1;
Chay=0;
Ktnhan=nhanmau=1;
}else{
if(Ktnhan){
Maxc=tam;
Ktnhan=0;
}else if(Count<76&&Count<Maxc){
MC[Count]=tam;
Count++;
}
}
}
}
}
void Khoitao(void)
{
PCON|=128;
EA=1;
ES=1;
SM0=0;
SM1=1;
Ktnhan=nhanmau=1;
Chay=1;
P0=P1=P2=0;
P3_0=1;
nLap=1;
}
// Ham tao tre
void delay(void)
{
unsigned char data i;
i=10;
while(i--);
}
// Ham hien thi mau cam
void Cam(void)
{
while(nLap--)
{
Data=1;
for(j=0;j<32;j++){
Clock=1;
Data=0;
Clock=0;
Pdo=Pxanh=MQ[j];
delay();
Pxanh=Pdo=0;
}
}

}
// Ham hien thi mau xanh
void Xanh(void)
{
while(nLap--)
{
Data=1;
for(j=0;j<32;j++){
Clock=1;
Data=0;
Clock=0;
Pxanh=MQ[j];
delay();
Pxanh=0;
}
}

}
// Ham hien thi mau do
void Do(void)
{
while(nLap--)
{
Data=1;
for(j=0;j<32;j++){
Clock=1;
Data=0;
Clock=0;
Pdo=MQ[j];
delay();
Pdo=0;
}
}
}
// Ham thay doi mang hien thi
void change(void)
{
MQ[0]=MQ[1];MQ[1]=MQ[2];MQ[2]=MQ[3];MQ[3]=MQ[4];
MQ[4]=MQ[5];MQ[5]=MQ[6];MQ[6]=MQ[7];MQ[7]=MQ[8];
MQ[8]=MQ[9];MQ[9]=MQ[10];MQ[10]=MQ[11];MQ[11]=MQ[12];
MQ[12]=MQ[13];MQ[13]=MQ[14];MQ[14]=MQ[15];MQ[15]=MQ[16];
MQ[16]=MQ[17];MQ[17]=MQ[18];MQ[18]=MQ[19];MQ[19]=MQ[20];
MQ[20]=MQ[21];MQ[21]=MQ[22];MQ[22]=MQ[23];MQ[23]=MQ[24];
MQ[24]=MQ[25];MQ[25]=MQ[26];MQ[26]=MQ[27];MQ[27]=MQ[28];
MQ[28]=MQ[29];MQ[29]=MQ[30];MQ[30]=MQ[31];
}
// Ham tim vitri ki tu hien thi trong bang chu cai va chu so
unsigned char Chiso(unsigned char chr)
{
unsigned char data End,Start,Mid,Mctam;
if(chr==Mchar[0][0]){
return 0;
}else if(chr==Mchar[35][0]){
return 35;
}else{
End=35;
Start=0;
while(1){
Mid=(End+Start)/2;
Mctam=Mchar[Mid][0];
if(chr==Mctam){
return Mid;
}else if(chr<Mctam){
End=Mid;
}else{
Start=Mid;
}
}
}
}
void Chaychu(void)
{
unsigned char vitri;

for(j=0;j<32;j++){
MQ[j]=0;
}
for(i=0;i<Count;i++)
{
if(MC[i]==32){
change();
MQ[31]=0;
if(Mau==Mxanh)Xanh();
else if(Mau==Mdo)Do();
else Cam();
change();
MQ[31]=0;
if(Mau==Mxanh)Xanh();
else if(Mau==Mdo)Do();
else Cam();
}else{
vitri=Chiso(MC[i]);
for(dem=1;dem<7;dem++){
change();
MQ[31]=Mchar[vitri][dem];
if(Mau==Mxanh)Xanh();
else if(Mau==Mdo)Do();
else Cam();
}
}
}
if(!Chay){
for(i=0;i<32;i++){
change();
MQ[31]=0;
if(Mau==Mxanh)Xanh();
else if(Mau==Mdo)Do();
else Cam();
}
}
}
// Chuong trinh chinh
void main()
{
Khoitao();
REN=1;
while(1){
while(Chay);
Chaychu();
}
}

You might also like