Tải bản đầy đủ (.doc) (20 trang)

Báo cáo đồ án môn vi điều khiển đo tần số

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (193.79 KB, 20 trang )

8051 VÀ PHIÊN BẢN CỦA NÓ:
a: 8051 :
Năm 1981 Intel giới thiệu bộ vi điều khiển 8051. Bộ vi điểu khiển này có 128 byte
RAM, 4 kbyte ROM, hai bộ định thời , một cổng nối tiếp, bốn cổng vào/ra song song
( độ rộng 8 bit ) tất cả được đặt trên 1 chip. 8051 là bộ xử lý 8 bit, tức là CPU chỉ có
thể làm việc với 8 bit dữ liệu tại 1 thời điếm. Dữ liệu lớn hơn 8 bit được chia thành
các dữ liệu 8 bit để xử lý.
b: Các đặc tính của họ 8051
Đặc tính 8051 8052 8031
ROM trên chip 4 kbyte 8 kbyte 0 kbyte
RAM 128 kbyte 256 kbyte 128 kbyte
Bộ định thời 2 3 2
Chân vào ra 32 32 31
Cổng nối tiếp 1 1 1
Nguồn ngắt 6 6 1
c : Phiên bản AT 8951 từ Atmel Corporation:
AT8951 là phiên bản 8051 có ROM trên chip ở dạng bộ nhớ Flash. Phiên bản này lý
tưởng đối với những phát triển nhanh vì bộ nhớ Flash có thể được xoá trong vài giây.
Hãng Atmel đã cho ra đời một phiên bản của AT 89C51 có thể lập trình qua cổng
truyền thông COM của máy tính IBM PC.
Một số phiên bản cua Atmel:
Ký hiệu ROM RAM ChânI/O Timer Ngắt Vcc Đóng vỏ
AT89C51 4kbyte 128kbyte 32 2 6 5V 40chân, 2hàng
AT89C52 8kbyte 128kbyte 32 3 8 5V 40chân, 2hàng
AT89S52 la bộ vi điều khiển thông dụng, giá rẻ có khá nhiều chức năng hay , đăc
biệt là có tích hợp sẵn bộ nạp ISP trên chip giúp người sử dụng có thể dễ dàng thực
hiện các bài thí nghiệm với chi phí thấp.
Bộ VDK At89S52 gồm các khối chức năng chính :
-CPU( centralprocessing unit)
-Bộ nhớ chương trình( ROM) gồm 8kbyte Flash
-Bộ nhớ dữ liệu ( RAM) gồm 256 byte.


-Bộ UART ( Universal Asnchronous Receiver/ Transmitter),AT89S52 có thể giao
tiếp với cổng nối tiếp của máy tính thông qua bộ UART.
-3 bộ Timer/Counter 16 bit thực hiện các chức năng định thời và đếm sự kiện.
-WDT ( wait dog timer) :dùng để phục hồi hoạt động của CPU khi nó bị treo bởi một
nguyên nhân nào đó.
-Khối điều khiển ngắt với hai nguồn ngắt ngoài và 4 nguồn ngắt trong.
-Bộ lập trình (ghi chương trình lên Flash ROM cho phép người sử dụng có thể nạp
các chương trình cho chip mà không cần các bộ nạp chuyên dụng.
-Bộ chia tần số với hệ số là 12.
-4Cổng xuất nhập với 32 chân.
SƠ ĐỒ CHÂN CỦA 89C52/89S52:
U 1
A T 8 9 C 5 2
9
1 8
1 9
2 9
3 0
3 1
1
2
3
4
5
6
7
8
2 1
2 2
2 3

2 4
2 5
2 6
2 7
2 8
1 0
1 1
1 2
1 3
1 4
1 5
1 6
1 7
3 9
3 8
3 7
3 6
3 5
3 4
3 3
3 2
R S T
X T A L 2
X T A L 1
P S E N
A L E / P R O G
E A / V P P
P 1 . 0 / T 2
P 1 . 1 / T 2 - E X
P 1 . 2

P 1 . 3
P 1 . 4
P 1 . 5
P 1 . 6
P 1 . 7
P 2 . 0 / A 8
P 2 . 1 / A 9
P 2 . 2 / A 1 0
P 2 . 3 / A 1 1
P 2 . 4 / A 1 2
P 2 . 5 / A 1 3
P 2 . 6 / A 1 4
P 2 . 7 / A 1 5
P 3 . 0 / R X D
P 3 . 1 / T X D
P 3 . 2 / I N T 0
P 3 . 3 / I N T 1
P 3 . 4 / T 0
P 3 . 5 / T 1
P 3 . 6 / W R
P 3 . 7 / R D
P 0 . 0 / A D 0
P 0 . 1 / A D 1
P 0 . 2 / A D 2
P 0 . 3 / A D 3
P 0 . 4 / A D 4
P 0 . 5 / A D 5
P 0 . 6 / A D 6
P 0 . 7 / A D 7
Sơ đồ chân /chức năng các chân của AT89S52:

Tất cả các port đều có chức năng xuất nhập ,Gồm 8 chân, ngoài ra chúng còn có chức
năng riêng như:
*port0 ( p0.0-p0.7):
Port0 còn là bus đa hợp dữ liệu và địa chỉ.
*Port1 ( P1.0-1.7):
Ba chân P1.5, P1.6,P1.7 được dùng đẻ nạp ROM theo tiêu chuẩn ISP; hai chân P1.0
và P1.1 được dùng cho bộ timer 2
*Port 2 ( P2.0-2.7):
Nó còn là byte cao của bus địa chỉ khi sử dụng bộ nhớ ngoài.
*Port3( P3.0-3.7):
Chức năng riêng như sau:
Bit Tên Chức năng
P3.0 RXD Dữ liệu nhận cho Port nối tiếp
P3.1 TXD Dữ liệuểtuyền cho Port nối tiếp
P3.2 INT0 Ngắt ngoài 0
P3.3 INT1 Ngắt bên ngoài 1
P3.4 T0 Ngõ vào của Timer1/counter 0
P3.5 T1 Ngõ vào của Timer1/counter 1
P3.6 /WR Xung ghi bộ nhớ dữ liệu ngoài
P3.7 /RD Xung đọc bộ nhớ dữ liệu ngoài
*RST ( reset ):
Ngõ vào reset trên chân 9 là ngõ reset của 8501. Khi tín hiệu này được đua lên mức
cao , các thanh ghi trong bộ vi điều khiển được tải những giá trị thích hợp để khởi
động hệ thống.
*XTAL1,XTAL2:
AT89S52 có 1 bộ dao động trên chip , nó thường được nối với bộ dao động thạch
anh có tần số 12MHz.
*Vcc,GND:
AT89S52 dùng nguồn 1 chiều có dải điện áp từ 4V đến 5,5V được cấp qua chân 40
và 20.

TỔ CHÚC BỘ NHỚ:
BỘ nhớ chương trình:
AT89S52 có 8kbyte Flash ROM trên chip, tín hiệu điều khiển đọc ROM là tind
hiệu /PSEN.
Bộ nhớ dữ liệu :
AT89S52 có 256kbyte RAM nội :
-Các bank thanh ghi có địa chỉ từ 00H đến 1FH.
-RAM địa chỉ hoá từng bit có địa chỉ từ 20H đến 2FH.
-RAM đa dụng từ 30H đến FFH.
-Các thanh ghi chức năng đặc biệt từ 80H đến FFH.
MẠCH TẠO DAO ĐỘNG VÀ RESET:
*Mach tạo dao động:
AT89S52 có 1 bộ chia tần số bên trong chip bộ này sẽ cấp xung clock cho các khối
trên chip từ nguồn dao động bên ngoài qua 2 chân XTAL1,XTAL2
Mach RESET:
Có 4 cách để reset AT89S52 lần lượt là :
+Reset khi cấp nguồn
+Reset bởi WDT
+Reset bằng phần mềm
+Rsset bằng mạch ngoài qua chân RST
Trong một hệ thống gồm nhiều vi mạch khả trình thì mạch reset tích hợp cả hai cách
RESET khi bật nguồn và bởi mạch ngoài thường dược sử dụng:
MẠCH TẠO XUNG SỬ DỤNG LM555:
Khi ta thay đổi biến trở thi xung clock tu chan 3 tao ra xung vuông cung thay đổi
theo ( tần số thay đổi) cung cấp vao chân 14( T0) của vi điều khiển.
MAX232 và cổng COM:
Như ta đã biết ,bộ vi điều khiển AT89S52 có khả năng giao tiếp với thế giới bên
ngoài thông qua cổng nối tiếp. Vấn đề trở ngai duy nhất khi giao tiếp với máy tính là
mức logic ở bộ vi điều khiển và cổng COM của máy tính khác nhau, cụ thể như sau;
Đối tượng

Mức logic Mức điện áp tương ứng
Cổng COM (mức232C)
1
0
-12V đến -3V
+3V đến +12V
Vi điều khiển ( mức TTL)
1
0
+5V
0V
Khắc phục vấn đề này người ta sử dụng vi mạch MAX232 để chuyển đổi mức điện
áp giữa 2 chuẩn. Vi mạch này có chứa hai bộ chuyển đổi mức logic từ TTl sang
RS232 và ngược lại , tức là:
Vì tín hiệu cổng COM thường ở mức +12V, -12V nên không tương thích với điện áp
TTL nên để giao tiếp Vi điều khiển 8051 với máy tính qua cổng COM ta phải qua
một vi mạch biến đổi điện áp cho phù hợp với mức TTL, ta chọn vi mạch MAX232
để thực hiện việc tương thích điện áp.
Hình sau la vd về mạch giao tiếp giữa vdk với máy tính qua cổng RS232C sử dụng vi
mạch đổi mức MAX232.
V C C _ C I R C L E
V C C _ C I R C L E
C 7
C 5
C A P
C 6
C 8
U 1
8 0 5 2
3 1

1 9
1 8
9
1 2
1 3
1 4
1 5
1
2
3
4
5
6
7
8
3 9
3 8
3 7
3 6
3 5
3 4
3 3
3 2
2 1
2 2
2 3
2 4
2 5
2 6
2 7

2 8
1 7
1 6
2 9
3 0
1 1
1 0
4 02 0
E A / V P
X 1
X 2
R E S E T
I N T 0
I N T 1
T 0
T 1
P 1 . 0 / T 2
P 1 . 1 / T 2 X
P 1 . 2
P 1 . 3
P 1 . 4
P 1 . 5
P 1 . 6
P 1 . 7
P 0 . 0
P 0 . 1
P 0 . 2
P 0 . 3
P 0 . 4
P 0 . 5

P 0 . 6
P 0 . 7
P 2 . 0
P 2 . 1
P 2 . 2
P 2 . 3
P 2 . 4
P 2 . 5
P 2 . 6
P 2 . 7
R D
W R
P S E N
A L E / P
T X D
R X D
V C CV S S
Y 1
P 1
C O N N E C T O R D B 9
5
9
4
8
3
7
2
6
1
U 2

M A X 2 3 2
1
3
4
5
2
6
1 2
9
1 1
1 0
1 3
8
1 4
7
1 5
1 6
C 1 +
C 1 -
C 2 +
C 2 -
V +
V -
R 1 O U T
R 2 O U T
T 1 I N
T 2 I N
R 1 I N
R 2 I N
T 1 O U T

T 2 O U T
G N D
V C C
Cổng nối tiếp RS232 là một giao diện phổ biến rộng rãi nhất. Người ta còn gọi
cổng này là cổng COM1, còn cổng COM2 để tự do cho các ứng dụng khác.
Việc truyền dữ liệu qua cổng COM được tiến hành theo cách nối tiếp. Nghĩa là các
bit dữ liệu được truyền đi nối tiếp nhau trên một đường dẫn.
Cổng COM không phải là một hệ thống bus nó cho phép dễ dàng tạo ra liên kết dưới
hình thức điểm với điểm giữa hai máy cần trao đổi thông tin với nhau, một thành
viên thứ ba không thể tham gia vào cuộc trao đổi thông tin này.
* Các chân và đường dẫn được mô tả như sau:
Chân Ký hiệu Ý nghĩa
1 DCD Tín hiệu phát hiện mang dữ liệu
2 RcD Nhận dữ liệu
3 TxD truyền dữ iệu
4 DTR Dữ liệu đầu cuối sẵn sàng
5 GND Nối đất
6 DSR Dữ liệu sẵn sàng được gửi
7 RTS Tín hiệu yêu cầu gửi
8 CTS Tín hiệu yêu cầu xoá để gửi tiếp
9 RI Ring indicatior
Trên thực tế có hai loại phích cắm, một loại 9 chân và một loại 25 chân.
Việc truyền dữ liệu xảy ra ở trên hai đường dẫn. Qua chân cắm ra TXD máy tính gởi
dữ liệu của nó đến Vi điều khiển. Trong khi đó các dữ liệu mà máy tính nhận được,
lại được dẫn đến chân RXD các tín hiệu khác đóng vai trò như là tín hiệu hổ trợ khi
trao đổi thông tin, và vì thế không phải trong mọi trường hợp ứng dụng đều dùng hết.
Điện áp quy định với mưc logic 1 nẳm trong khoảng từ -3V đến -12V ; mức logic 0
là +3V đến +12V.
-Tốc độ truyền dữ liệu đươc quy định chuẩn gồm các tốc độ sau; 300, 600, 1200,
2400, 4800, 9600,19200, 28800, và 56600 baud.

-Độ dài cực đại của cáp kết nối là 15m(trong trường hợp không có các bộ đệm bộ
lặp)
-Trên máy tính có the có 4 cổng nối tiếp. Nhưng thường chỉ có 2 cổng gọi là cổng
Com1 và Com2.
Địa chỉ của các cổng nối tiếp như sau:
-Cổng Com1: địa chỉ cơ bản 3F8H
-Cổng Com2: địa chỉ cơ bản 2F8H.
Ở máy tính PC thường có một bộ phát/nhận không đồng bộ vạn năng (gọi tắt là
-UART: Universal Asnchronous Receiver/ Transmitter) để điều khiển sự trao đổi
thông tin giữa máy tính và các thiết bị ngoại vi.
Hình ảnh của MAX232:
CÁC THANH GHI CỦA CỔNG NỐI TIẾP:
-Có hai thanh ghi chức năng đặc biệt cho phép phần mềm truy xuất đến cổng nối tiếp
là SBUF và SCON.
*SCON: thanh ghi điều khiển cổng nối tiếp
chứa các bit điều khiển và trang thái. Các bit điều khiển đặt chế độ hoạt động cho
cổng nối tiếp, các bit trạng thái báo cáo kết thúc phát hoặc thu 1 ký tự.
*SBUF:thanh ghi đệm truyền nhận ở cổng nối tiếp
chức nang đệm các ký tự khi chúng nhận về từ cổng nối tiếp hoặc được truyền từ
cổng nối tiếp.
CÁC THANH GHI CỦA BỘ ĐỊNH THỜI:
*Thanh ghi của timer 0,1:
-TMOD: Thanh ghi chế độ định thời ,chứa hai nhóm bốn bit dùng để đặt chế độ làm
việc cho Timer0và1
-TCON: Thanh ghi điều khiển Timer,chứa các bit trạng thái và các bit điều khiển cho
Timer0và1.
*Thanh ghi của timer 2:
-T2CON : chứa các bit điều khiển cho Timer2
-T2MOD:chúa 2 bit DCEN vàT2OE cho phép Timer2 hoạt động nhu1 bộ đếm lùi
hoặc để tạo xung.

Thanh ghi TH2 và TL2 , RCAP2L, RCAP2H:chứa giá trị đếm của timer2.
NGUỒN XUNG CLOCK:
-Nguồn xung clock cấp cho các bộ định thời có thể lấy từ ngoài qua các chân T0,
T1, T2 lần lượt cho các bộ Timer0, Timer1, Timer2 hoặc lấy từ bộ chia tần
trên chip với tần số là 1/12 tần số của bộ dao động thạch anh tuỳ vào bit C/#T.
đối với bài này chúng ta lấy nguồn xung từ con LM555cung cấp vào chân T0.
TỔ CHỨC NGẮT Ở AT89S52:
AT89S52 có 6 nguồn ngắt :
-Ngắt ngoài từ chân #INT0
-Ngắt ngoài từ chân #INT1
-Ngắt do bộ Timer 0
-Ngắt do bộ Timer 1
-Ngắt do bộ Timer 2
-Ngắt do Port nối tiếp
Các nguồn ngắt này được xoá khi reset và được đặt riêng bằng phần mềm bởi các bit
trong các thanh ghi cho phép ngắt (IE), thanh ghi ưu tiên ngắt (IP)
CHƯƠNG TRÌNH CHÍNH:
#include<stdio.h>
//#include<reg52.h>
#include<at89x52.h>
//#include<math.h>
char x;
int d,daitan,i;
float f,n;
unsigned char M[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
unsigned char nghin,tram,chuc,donvi;
void ngoaidaitan(void)
{
while(!TI); //doi co bao truyen cho phep truyen
SBUF=0x4E; // truyen ki tu N

TI=0;
while(!TI);
SBUF=0x67;
TI=0;
while(!TI);
SBUF=0x6F;
TI=0;
while(!TI);
SBUF=0x61;
TI=0;
while(!TI);
SBUF=0x69;
TI=0;
while(!TI);
SBUF=0x20;
TI=0;
while(!TI);
SBUF=0x44;
TI=0;
while(!TI);
SBUF=0x61;
TI=0;
while(!TI);
SBUF=0x69;
TI=0;
while(!TI);
SBUF=0x20;
TI=0;
while(!TI);
SBUF=0x54;

TI=0;
while(!TI);
SBUF=0x61;
TI=0;
while(!TI);
SBUF=0x6E;
TI=0;
while(!TI);
SBUF=0x0D;
TI=0;
}
void xuatkhz(void)
{
nghin = f/1000;
tram = (f-nghin*1000)/100;
chuc = (f-nghin*1000-tram*100)/10;
donvi = f-nghin*1000-tram*100-chuc*10;
while(!TI);
SBUF=0x44;
TI=0;
while(!TI);
SBUF=0x61;
TI=0;
while(!TI);
SBUF=0x69;
TI=0;
while(!TI);
SBUF=0x20;
TI=0;
while(!TI);

SBUF=0x54;
TI=0;
while(!TI);
SBUF=0x61;
TI=0;
while(!TI);
SBUF=0x6E;
TI=0;
while(!TI);
SBUF=0x20;
TI=0;
while(!TI);
SBUF=0x31;
TI=0;
while(!TI);
SBUF=0x20;
TI=0;
while(!TI);
SBUF=45;
TI=0;
while(!TI);
SBUF=0x20;
TI=0;
while(!TI);
SBUF=0x31;
TI=0;
while(!TI);
SBUF=0x30;
TI=0;
while(!TI);

SBUF=0x20;
TI=0;
while(!TI);
SBUF=0x4B;
TI=0;
while(!TI);
SBUF=0x68;
TI=0;
while(!TI);
SBUF=0x7A;
TI=0;
while(!TI); //doi co bao truyen cho phep truyen
SBUF=0x20; // truyen ki tu Space
TI=0;
while(!TI); //doi co bao truyen cho phep truyen
SBUF=0x3a; // truyen Ki tu - hai cham
TI=0;
while(!TI);
SBUF=0x20;
TI=0;
while(!TI);
SBUF=M[nghin];
TI=0;

while(!TI);
SBUF=M[tram];
TI=0;

while(!TI);
SBUF=M[chuc];

TI=0;
while(!TI);
SBUF=M[donvi];
TI=0;
while(!TI);
SBUF=0x20;
TI=0;
while(!TI);
SBUF=0x48;
TI=0;
while(!TI);
SBUF=0x7A;
TI=0;
while(!TI);
SBUF=0x0D;
TI=0;
}
void xuathz1(void)
{
nghin = f/1000;
tram = (f-nghin*1000)/100;
chuc = (f-nghin*1000-tram*100)/10;
donvi = f-nghin*1000-tram*100-chuc*10;
while(!TI);
SBUF=0x44;
TI=0;
while(!TI);
SBUF=0x61;
TI=0;
while(!TI);

SBUF=0x69;
TI=0;
while(!TI);
SBUF=0x20;
TI=0;
while(!TI);
SBUF=0x54;
TI=0;
while(!TI);
SBUF=0x61;
TI=0;
while(!TI);
SBUF=0x6E;
TI=0;
while(!TI);
SBUF=0x20;
TI=0;
while(!TI);
SBUF=0x31;
TI=0;
while(!TI);
SBUF=0x30;
TI=0;
while(!TI);
SBUF=0x30;
TI=0;
while(!TI);
SBUF=0x20;
TI=0;
while(!TI);

SBUF=45;
TI=0;
while(!TI);
SBUF=0x20;
TI=0;
while(!TI);
SBUF=0x31;
TI=0;
while(!TI);
SBUF=0x30;
TI=0;
while(!TI);
SBUF=0x30;
TI=0;
while(!TI);
SBUF=0x30;
TI=0;
while(!TI);
SBUF=0x20;
TI=0;
while(!TI);
SBUF=0x68;
TI=0;
while(!TI);
SBUF=0x7A;
TI=0;
while(!TI); //doi co bao truyen cho phep truyen
SBUF=0x20; // truyen ki tu Space
TI=0;
while(!TI); //doi co bao truyen cho phep truyen

SBUF=0x3a; // truyen Ki tu - hai cham
TI=0;
while(!TI);
SBUF=0x20;
TI=0;
while(!TI);
SBUF=M[nghin];
TI=0;

while(!TI);
SBUF=M[tram];
TI=0;
while(!TI);
SBUF=M[chuc];
TI=0;
while(!TI);
SBUF=M[donvi];
TI=0;
while(!TI);
SBUF=0x20;
TI=0;
while(!TI);
SBUF=0x48;
TI=0;
while(!TI);
SBUF=0x7A;
TI=0;
while(!TI);
SBUF=0x0D;
TI=0;

}
void xuathz2(void)
{
nghin = f/1000;
tram = (f-nghin*1000)/100;
chuc = (f-nghin*1000-tram*100)/10;
donvi = f-nghin*1000-tram*100-chuc*10;
while(!TI);
SBUF=0x44;
TI=0;
while(!TI);
SBUF=0x61;
TI=0;
while(!TI);
SBUF=0x69;
TI=0;
while(!TI);
SBUF=0x20;
TI=0;
while(!TI);
SBUF=0x54;
TI=0;
while(!TI);
SBUF=0x61;
TI=0;
while(!TI);
SBUF=0x6E;
TI=0;
while(!TI);
SBUF=0x20;

TI=0;
while(!TI);
SBUF=0x31;
TI=0;
while(!TI);
SBUF=0x30;
TI=0;
while(!TI);
SBUF=0x20;
TI=0;
while(!TI);
SBUF=45;
TI=0;
while(!TI);
SBUF=0x20;
TI=0;
while(!TI);
SBUF=0x31;
TI=0;
while(!TI);
SBUF=0x30;
TI=0;
while(!TI);
SBUF=0x30;
TI=0;
while(!TI);
SBUF=0x20;
TI=0;
while(!TI);
SBUF=0x68;

TI=0;
while(!TI);
SBUF=0x7A;
TI=0;
while(!TI); //doi co bao truyen cho phep truyen
SBUF=0x20; // truyen ki tu Space
TI=0;
while(!TI); //doi co bao truyen cho phep truyen
SBUF=0x3a; // truyen Ki tu - hai cham
TI=0;
while(!TI);
SBUF=0x20;
TI=0;
while(!TI);
SBUF=M[nghin];
TI=0;

while(!TI);
SBUF=M[tram];
TI=0;
while(!TI);
SBUF=M[chuc];
TI=0;
while(!TI);
SBUF=M[donvi];
TI=0;
while(!TI);
SBUF=0x20;
TI=0;
while(!TI);

SBUF=0x48;
TI=0;
while(!TI);
SBUF=0x7A;
TI=0;
while(!TI);
SBUF=0x0D;
TI=0;
}
void thuattoan(void)
{
d=1;
RCAP2H = TH2 = -5000/256;
RCAP2L = TL2 = -5000%256;
TH0 = TL0 = 0;
TR2 = TR0 = 1;
while(d<daitan);
TR2 = TR0 = 0;
n = (TH0*256+TL0);
}
void main(void) //Chuong trinh chinh
{
TMOD = 0x25;
T2MOD = 0x03;
IE = 0xA0;
SCON=0x52; // REN =1 DE CHO PHEP TRUYEN DU LIEU
TH1=TL1=-3; // tao toc do baud la 9600
TR1=1;
while(1)
{

daitan=20;
thuattoan();
f=n*1000/100;
if (f>10000)
{
ngoaidaitan();
}
else if (1000<f&&f<=10000)
{
xuatkhz();
}
else if (f<=10000)
{
daitan=200;
thuattoan();
f=n;
if (100<f&&f<=1000)
{
xuathz1();
}
else if (f<=100)
{
daitan=400;
thuattoan();
f=n/2;
if (f<10)
{
ngoaidaitan();
}
else

{
xuathz2();
}
}
}
}
}
void ngatT2(void) interrupt 5 //Ngat timer 1
{
d++;
TF2 = 0;
TR2=1;
}
Vì hiển thị lên máy tính thì ta sử dụng phần mềm Hyper terminal
-Từ start->programs>Acessories>Communications>chọn Hyper terminal

×