bao cao 8051

51
GVHD: Thầy giáo PHẠM CÔNG CẢNH A. LỜI MỞ ĐẦU Trong những thập niên cuối thế kỷ 20, kỹ thuật điện tử đã liên tục có những tiến bộ vượt bậc, đặc biệt là trong kỹ thuật chế tạo vi mạch điện tử. Sự ra đời và phát triển nhanh chóng của kỹ thuật điện tử mà đặc trưng là kỹ thuật vi xử lý đã tạo ra một bước ngoặt quan trọng trong sự phát triển của khoa học tính toán và xử lý thông tin, nó ảnh hưởng quyết định đến con đường “tin học hoá” xã hội, tức là con đường mà thông tin đã và đang trở thành lực lượng sản xuất trực tiếp trong nền sản xuất của kỷ nguyên tới. Năm 1970, công ty Intel cho ra đời bộ vi xử lý đầu tiên, có tên gọi là Intel – 4004, nhằm đáp ứng nhu cầu cần thiết của một công ty kinh doanh là hãng truyền thông BUSICOM. Intel – 4004 là kết quả một ý tưởng quan trọng trong sự phát triển kỹ thuật vi xử lý số. Đó là một kết cấu logic mà có thể thay đổi chức năng của nó bằng chương trình ngoài chứ không phát triển theo hướng một cấu trúc chỉ thực hiện một số chức năng nhất định như trước đây. Do khả năng mềm dẻo hoá trong các thao tác của mình, Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ 1

Upload: khuong-rau

Post on 12-Feb-2015

81 views

Category:

Documents


3 download

TRANSCRIPT

GVHD: Thầy giáo PHẠM CÔNG CẢNH

A. LỜI MỞ ĐẦU

Trong những thập niên cuối thế kỷ 20, kỹ thuật điện tử đã liên tục có

những tiến bộ vượt bậc, đặc biệt là trong kỹ thuật chế tạo vi mạch điện tử.

Sự ra đời và phát triển nhanh chóng của kỹ thuật điện tử mà đặc trưng là kỹ

thuật vi xử lý đã tạo ra một bước ngoặt quan trọng trong sự phát triển của

khoa học tính toán và xử lý thông tin, nó ảnh hưởng quyết định đến con

đường “tin học hoá” xã hội, tức là con đường mà thông tin đã và đang trở

thành lực lượng sản xuất trực tiếp trong nền sản xuất của kỷ nguyên tới.

Năm 1970, công ty Intel cho ra đời bộ vi xử lý đầu tiên, có tên gọi là

Intel – 4004, nhằm đáp ứng nhu cầu cần thiết của một công ty kinh doanh là

hãng truyền thông BUSICOM. Intel – 4004 là kết quả một ý tưởng quan

trọng trong sự phát triển kỹ thuật vi xử lý số. Đó là một kết cấu logic mà có

thể thay đổi chức năng của nó bằng chương trình ngoài chứ không phát triển

theo hướng một cấu trúc chỉ thực hiện một số chức năng nhất định như trước

đây. Do khả năng mềm dẻo hoá trong các thao tác của mình, năm 1970 Intel

– 4004 đã trở thành bộ vi xử lý đầu tiên trên thị trường thế giới. Intel - 4004

là bộ vi xử lý 4 bits song song, được chế tạo theo quy trình công nghệ MOS

kênh cảm ứng loại P. Thời gian tối thiểu để thực hiện một lệnh là 10,8µs.

Năm 1972, hãng Intel cho xuất xưởng bộ vi xử lý có tên gọi là Intel – 8008.

Kiểu này vẫn được chế tạo theo công nghệ PMOS nhưng là laọi 8 bits song

song. Bộ vi xử lý này là CPU của máy tính MICRAL do Pháp chế tạo. Đến

đây, hàng loạt các hãng điện tử nổi tiếng hàng đầu của hế giới như National,

Rockwell, … đã nhanh chóng đi vào công nghệ sản xuất và chế tạo các bộ vi

xử lý.

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ1

GVHD: Thầy giáo PHẠM CÔNG CẢNH

Năm 1974, hãng Intel cho ra đời bộ vi xử lý 8080 – 8 bits song song

được chế tạo theo công nghệ NMOS với thời gian thực hiện một lệnh là 2µs,

đã đánh dấu một bước tiến lớn trên con đường làm chủ tốc độ xử lý tin của

kỹ thuật điện tử hiện đại. Các hãng khác cũng cho ra đời những bộ vi xử lý

có tín năng tương ứng: 6800 (Motorola), 8080 (Texas Intrusment), …Năm

1978, laọi 8080 được cải tiến thành loại 8085. Lúc này đã xuất hiện những

máy tính mini sử dụng các bộ vi xử lý nói trên. Theo đà đó các thông số cơ

bản của bộ vi xử lý ngày càng cải thiện: tốc độ nagỳ càng cao (các bộ vi xử

lý hiện đại của Intel đã đạt tới tốc độ 500 – 800 MHz), độ rộng kênh thông

tin ngày càng lớn (các bộ vi xử lý hiện đại của Intel có kênh dữ liệu

16/32/64 bit). Điều đó đã giúp cho bài toán thiết kế các hệ vi xử lý chuyên

dụng với tính năng rộng lớn trở nên dễ dàng hơn.

Một hệ vi xử lý được thiết kế tối thiểu bao gồm một bộ vi xử lý (đây

là khối điều khiển trung tâm), một bộ nhớ RAM, một bộ nhớ cố định ROM

và các cổng vào ra số liệu cùng những thiế bị ngoại vi cần thiết. Một hệ vi

xử lý tối đa khôngcó giới hạn về số lượng thành phần, về chức năng thực

hiện và về quy mô ứng dụng.

Ngày nay, những ứng dụng của vi điều khiển đã đi sâu vào đời sống

sinh hoạt và sản xuất của con người, là một phần tất yếu không thể thiếu

trong đời sông hiện đại. Thế kỷ 21 được xem là thế kỷ của khoa học công

nghệ, là thế kỷ mà máy móc được thiết kế và lập trình một cách tự động để

thay thế các hoạt động của con người trong sản xuất, cũng như để phục vụ

các công việc trong sinh hoạt. Trong một cuộc sống mang tính tự động hoá

cao thì các mạch vi xử lý như là một công cụ đắc lực, quan trọng , hỗ trợ cho

con người thực hiện nhu cầu ngày càng cao và càng hoàn thiện của mình.

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ2

GVHD: Thầy giáo PHẠM CÔNG CẢNH

Đang là sinh viên ngồi trên ghế nhà trường, cơ hội tiếp cận, học tập

những công nghệ tiên tiến, hiện đại chưa nhiều, nên trong quá trình tự học

và nghiên cứu, nhóm chúng em đã cố gắng tìm hiểu về bộ vi xử lý, cũng như

các ứng dụng của nó trong các hệ vi xử lý.

Với những gì nghiên cứu được, nhóm chúng em đã làm thực hành ứng

dụng thông qua việc thiết kế đồng hồ điện tử. Cấu trúc chính của đồng hồ

điện tử bao gồm bộ vi xử lý AT89S52 kết hợp với các IC giải mã 74LS138,

hiển thị bằng LED 7 thanh với nguồn cung cấp là 5V.

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ3

GVHD: Thầy giáo PHẠM CÔNG CẢNH

B. NỘI DUNG

I. Giới thiệu về họ vi xử lý 8051

1.1. Tóm tắt lịch sử họ vi xử lý 8051

Vào năm 1981, hãng Intel giới thiệu một số bộ vi điều khiển được gọi

là 8051. Bộ vi điều khiển này có 128 byte RAM, 4K byte ROM trên chíp,

hai bộ định thời, một cổng nối tiếp và 4 cổng (đều rộng 8 bit) vào ra tất cả

được đặt trên một chíp. Lúc ấy nó được coi là một “hệ thống trên chíp”. Vi

xử lý 8051 là một bộ xử lý 8 bit có nghĩa là CPU chỉ có thể làm việc với 8

bit dữ liệu tại một thời điểm. Dữ liệu lớn hơn 8 bit được chia ra thành các dữ

liệu 8 bit để cho xử lý. Vi xử lý 8051 có tất cả 4 cổng vào – ra I/O, mỗi cổng

rộng 8 bit. Mặc dù 8051 có thể có một ROM trên chíp cực đại là 64KB,

nhưng các nhà sản xuất lúc đó đã cho xuất xưởng chỉ với 4KB ROM trên

chíp.

Vi xử lý 8051 đã trở nên phổ biến sau khi Intel cho phép các nhà sản

xuất khác sản xuất và bán bất kỳ dạng biến thể nào của 8051 mà họ thích với

điều kiện họ phải để lại mã tương thích với 8051. Điều này dẫn đến sự ra đời

nhiều phiên bản của 8051 với tốc độ khác nhau và dung lượng ROM trên

chíp khác nhau được bán bởi hơn nửa các nhà sản xuất. Điều này quan trọng

là mặc dù có nhiều biến thể khác nhau của 8051 về tốc độ và dung lượng

nhớ ROM trên chíp nhưng tất cả chúng đều tương thích với 8051 ban đầu về

các lệnh. Điều này có nghĩa là nếu ta viết chương trình của mình cho một

phiên bản nào đó thì nó cũng sẽ chạy với mọi phiên bản bất kỳ khác mà

không phân biệt nó từ hãng sản xuất nào.

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ4

GVHD: Thầy giáo PHẠM CÔNG CẢNH

Hình 1. Bố trí bên trong của khối 8051

1.2. Các thành viên khác của họ 8051

a. Bộ vi điều khiển 8052:

Bộ vi điều khiển 8052 có tất cả các đặc tính chuẩn của 8051 ngoài ra nó

còn có thêm 128 byte RAM và một bộ định thời. Nó cũng có 8KB ROM trên

chíp thay vì 4KB như 8051.

b. Bộ vi điều khiển 8031:

Chíp 8031 thường được coi là 8051 không có ROM trên chíp vì nó có

0KB ROM trên chíp. Để sử dụng chíp này ta phải bổ sung ROM ngoài cho

nó. ROM ngoài phải chứa chương trình được chứa trong ROM trên chíp bị

giới hạn bởi 4KB, còn ROM ngoài chứa chương trình được gắn vào 8031 thì

có thể lớn hơn 64KB. Khi bổ sung cổng, chư vậy chỉ còn hai cổng để thao

tác. Để giải quyết vấn đề này ta có thể bổ sung cổng vào ra cho 8031.

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ5

GVHD: Thầy giáo PHẠM CÔNG CẢNH

c.Các bộ vi điều khiển 8051 từ các hãng khác nhau:

- Bộ vi điều khiển 8751:

Chíp 8751 chỉ có 4KB bộ nhớ UV-EPROM trên chíp. Sử dụng chíp này

để phát triển yêu cầu truy nhập đến một bộ đốt PROM cũng như bộ xoá UV-

EPROM để xoá nội dung của bộ nhớ UV-EPROM bên trong trước khi ta có

thể lập trình lại nó. Do một thực tế là ROM trên chíp đối với 8751 là

UV-EPROM nên cần phải mất 20 phút để xoá đi trước khi nó có thể lập

trình trở lại.

- Bộ vi điều khiển AT89C51:

Chíp 8951 có ROM trên chíp ở dạng bộ nhớ Flash. Điều này là 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 trong tương quan so với 20 phút hoặc hơn mà 8751 yêu cầu. Vì lý do

này mà AT89C51 dùng để phát triển một hệ thống dựa trên bộ vi điều khiển

yêu cầu một bộ đốt ROM mà có hổ trợ bộ nhớ Flash. Tuy nhiên lại không

yêu cầu xoá ROM.

Hình 2. Các phiên bản của 8051 từ Atmel ( Flash Rom)

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ6

GVHD: Thầy giáo PHẠM CÔNG CẢNH

II. Các thành phần của mạch đồng hồ điện tử

2.1. Vi điều khiển AT89S52

2.1.1. Tổng quan về vi điều khiển AT89S52

AT89S52 là một vi điều khiển 8 bit họ CMOS có công suất thấp, hiệu

suất cao với 8k bytes bộ nhớ Flash có thể lập trình trong hệ thống.

Cấu trúc ở dạng sơ đồ khối tổng quát:

Cấu trúc bus

Bus địa chỉ của họ vi điều khiển 8051 gồm 16 dường tín hiệu ( thường gọi

là bus địa chỉ 16 bit ). Với số lượng bít địa chỉ như trên, không gian

nhớ của chip được mở rộng tối đa 65536 địa chỉ. Bus dữ liệu của

họ vi điều khiển 8051 gồm 8 đường tín hiệu ( thường gọi là bus dữ

liệu 8 bit ) vì thế 8051 là họ vi điều khiển 8 bit. Với độ rộng của bus dữ

liệu như vậy,các chip của họ 8051 có thể xử lý các nguồn dữ liệu 8 bit trog

một chu kỳlệnh, nếu lớn hơn 8 bít thì dc chia thành nhiều dữ liệu 8 bit để xử

lý.

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ7

GVHD: Thầy giáo PHẠM CÔNG CẢNH

CPU ( Central Processing Unit )

CPU là đơn vị xử lý trung tâm, đó là bộ não của toàn bộ hệ thống vi

điện tử được tích hợp trên chip vi điều khiển. CPU ca cấu tạo

chính làmột đơn vị xử lý số học và logic ALU ( Arithmethic Logic

Unit ) là nơithực hiện tất cả các phép toán số học và phép logic cho quá

trình xử lý.

Bộ nhớ chương trình ( Program Memory )

Không gian bộ nhớ chương trình của AT89 là 64K , tuy nhiên hầu hết

các v i đ iều khiển AT89 t rên th ị t rường chỉ t ích hợp sẵn t rên

chip một lượng bộ nhớ chương trình nhất định và chiếm dải địa chỉ từ

0000h trở đi. AT89s52 có 4k bộ nhớ chương t r ình loạ i F lash t ích

hợp sẵn bên t rong chip . Đây là bộ nhớ cho phép ghi /xóa

nhiều lần . Bộ nhớ chương t r ình được dùng để chứa mã chương trình

nạp vào chip. Mỗi lệnh được mã hóa bởi một hoặc vài byte, dung lượng

của bộ nhớ chương trình phản ánh số lượng lệnh mà bộ nhớ có

thể chứa được. bộ nhớ đầu t iên của bộ nhớ chương trình là

0x0000 chính là địa chỉ RESET của 8051. Ngay sau khi reset (do

tắt/bật nguồn, do mức điện áp tại chân reset bị kéo lên 5V …), CPU

sẽ chảy đến thực hiện lệnh dặt tại địa chỉ này trước tiên, luôn luôn

là như vậy, phần còn trống trong không gian chương trình không

được d ù n g . N ế u m u ố n m ở r ộ n g b ộ n h ớ c h ư ơ n g t r ì n h t a

p h ả i d ù n g b ộ n h ớ ngoài. Khi dùng bộ nhớ ngoài thì bộ nhớ

trong của chip sẽ không được dùng nữa và nó chiếm dải địa chỉ ngay từ

0x0000.

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ8

GVHD: Thầy giáo PHẠM CÔNG CẢNH

Bộ nhớ dữ liệu ( Data Memory )

8051 có bộ nhớ dữ liệu là 64k địa chỉ, đó cũng là dung lượng bộ

nhớ dữ liệu lớn nhất trong họ 8051. Đây chính là nơi chứa các biến trung

gian trong quá trình chip hoạt động.

Đối với các chip có bộ nhớ SRAM 128 byte thì địa chỉ của các

byte SRAM này được đánh số từ 00H đến 7FH. Đối với các chip có

bộnhớ SRAM 256 byte thì địa chỉ của các byte trong SRAM được đánh

sốtừ 00H đến FFh. SRAM có địa chỉ từ 00H – 7FH là vùng RAM

thấp vàphần có địa chỉ từ 80H – FFH là vùng RAM cao.

Cổng vào/ra song song (I/O Port)

8051 có 4 cổng vào/ra song song là P0, P1, P2, P3. Tất cả các cổng này đều

là cổng vào/ra cả hai chiều 8 bit. Các bit của mỗi cổng là một chân

trên chip, như vậy mỗi cổng sẽ có 8 chân trên chip.

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ9

GVHD: Thầy giáo PHẠM CÔNG CẢNH

Cổng P0 không có điện trở treo cao bên trong, mạch lái tạo mức cao

chỉ có khi sử dụng cổng này với tính năng là bus dồn kênh địa chỉ/dữ l iệu .

như vậy với chức năng ra thông thường th ì P0 là cổng ra còn

vớichức năng vào th ì P0 là cổng vào cao t rở . Nếu muốn sử

dụng P0 làmcổng vào/ra thông thường ta phải thêm điện trở bên ngoài. Giá

trị điện trở bên ngoài thường là 4k – 10k. Các cổng P1, P2, P3 đều có

điện trở bên trong, do đó có thể dùngvới các chức năng cổng vào/ra

thông thường mà không cần thêm điện trở ngoài. Thực chất điện trở bên

ngoài các FET không phải điện trở tuyến tính thông thường nhưng

khả năng tạo dòng ra của mạch lái khi đầu ra ở mức cao ( hoặc khi là

đầu vào ) rất nhỏ, chỉ khoảng 100 micro Ampe.

Cổng vào ra nối tiếp ( Serial Port )

Cổng này thường chỉ được sử sụng khi g iao t iếp với máy t ính

hoặc giao tiếp với vi điều khiển khác. Cổng nối tiếp có hai thanh

ghi SCON, SBUF và PCON. Thanh ghi PCON không định địa chỉ bit

và có bít 7 là SMOD quy định tốc độ t ruyền của cổng nối t iếp

( tốc độ gấp đôi nếu SMOD = 1 và không gấp đôi nếu SMOD=0).

Ngắt ( Interrupt)

8051 chỉ có một số í t các nguồn ngắt hay gọi là nguyên nhân

ngắt . Mỗi ngắt có một vector ngắt riêng đó là một địa chỉ cố định nằm

trong bộ nhớ chương trình. Khi sảy ra ngắt thì CPU sẽ tự động

chuyển đến thực hiện lệnh tại địa chỉ này.

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ10

GVHD: Thầy giáo PHẠM CÔNG CẢNH

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ11

GVHD: Thầy giáo PHẠM CÔNG CẢNH

Để cho phép một ngắt ngoài th ì b i t tương ứng với ngắt đó và

b i t EA phải được đặt bằng 1. Thanh ghi IE là thanh định địa chỉ bit

nên có thể dùng các lệnh tác động bit để tác động riêng lẻ lên từng bit mà

không làm anh hưởng đến các g iá t r ị b i t khác . Cờ ngắt hoạt

động độc lập với việc cho phép ngắt, điều đó có nghĩa là cờ ngắt sẽ tự

động đặt lên bằng 1 khi có sự kiện gây ngắt sảy ra bất kể sự kiện đó

có được cho phép ngắt hay không. Do vậy, trước khi cho phép một

ngắt ta nên xóa cờ ngắt đó để đảm bảo sau khi cho phép các sự

kiện gây ngắt trong quá khứ không thể gây ngắt nữa. 8051 có hai ngắt

ngoài là INT0 và INT1. Ngắt ngoài được hiểu là ngắt được gây ra bởi

sự kiện mức logic 0 ( mức điện áp thấp gần về 0V ) hoặc sườn xuống

( sự chuyển mức điện áp từ mức cao về mức thấp ) sảy ra ở chân

ngắt tương ứng (P3.2 với ngắt ngoài 0 và P3.3 với ngắt ngoài 1) . Việc

lựa chọn kiểu ngắt được thực h iện bằng các b i t IT

(InterruptType) nằm t rong thanh ghi TCON. Đây là thanh ghi

đ iều khiển t imer nhưng 4 bit LSB ( bit 0 - 3) được dùng cho các ngắt

ngoài.

Khi ITx = 1 thì ngắt ngoài tương ứng được chọn kiểu là ngắt theo

sườn xuống, ITx = 0 thì ngắt theo mức thấp. Các bit IE là các bit cờ ngắt

ngoài chỉ có tác dụng trong trường hợp ngắt theo sườn xuống, khi

kiểu ngắt theo sườn xuống được chọn thì ngắt sẽ sảy ra duy nhất

một lần khi có sườn xuống của tín hiệu, sau đó khi tín hiệu ở mức thấp

hoặc sườn lên hay ở mức cao cũng không sảy ra ngắt cho đến khi có

sườn xuống tiếp theo. Cờ ngắt IE sẽ có khi có sườn xuống và tự

động bị xóa khi CPU bắt đầu xử lý ngắt. Nếu kiểu ngắt ở mức thấp

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ12

GVHD: Thầy giáo PHẠM CÔNG CẢNH

được chọn thì ngắt sẽ xảy ra bấ t kỳ khi nào t ín h iệu tạ i chân

ngắt ở mức thấp và cờ ngắt IE không được sử dụng. Thông thường

thì người ta chọn ngắt theo sườn xuống.

Bộ định thời/ bộ đếm (Timer/Counter)

AT89S52 có 3 bộ định thời 16 bit là Timer0, Timer1, Timer2. Giá trị đếm

max là 65536. Các bộ định thời hoạt động độc lập với nhau. Sau khi cho

phép hoạt động thì cứ có thêm một xung tại đầu vào đếm thì giá trị

của Timer tăng thêm một đơn vị . Khi tăng đến g iá t r ị max th ì

t imer tự động được đưa về giá trị min (thông thường min=0) . Sự

kiện gọi là tràn timer và có thể gây ra ngắt nếu tràn timer được cho phép (

bit ETx=1) . Việc cho Timer hoạt động hay dừng được thực

h iện bởi các b í t TR trong thanh ghi TCON ( đánh địa chỉ từng bit).

TRx = 1 thì Timer hoạt động, TRx = 0 thì Timer không hoạt động dù vẫn

có xung vào. Khi dừng đếm, g iá t r ị của t imer g iữ nguyên.

Các b i t TFx là các cờ báo t ràn của t imer , khi sự k iện t ràn

xảy ra cờ t ràn sẽ tự động được đặt bằng 1 và nếu ngắt tràn timer

được cho phép thì ngắt sẽ xảy ra. Khi CPU xử lý ngắt tràn timer cờ ngắt

TFx tương ứng sẽ tự động được xóa băng phần mềm. Giá t r ị đếm

16 bi t của t imer được lưu t rong thanh ghi THx ( byte cao) và

thanh TLx ( byte thấp ). Hai thanh ghi nàycó thể ghi đọc bất kỳ lúc nào.

Tuy nhiên nên dừng timer (TRx = 0) trước khi ghi /đọc các thanh ghi

chứa g iá t r ị đếm. các t imer có thể hoạt động theo nhiều chế độ

được quy đinh bởi các bit trong thanh TMOD. Để xác định thời gian người

ta chọn nguồn xung nhịp (clock) đưa vào đếm t rong t imer là xung

nhịp bên t rong( dành cho CPU). Nguồn xung clock này thường có

tần số ổn định, do đó từ số đếm của timer ta có thể xác định thời gian

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ13

GVHD: Thầy giáo PHẠM CÔNG CẢNH

thực. Để đếm các sự kiện bên ngoài ta chọn xung vuông để đưa vào

timer (0V/5V). Các t ín h iệu này sẽ được nối với các b i t cổng

dồn kênh thêmcác tính năng T0/T1/T2. Khi có sự thay đổi mức

xung thì timer sẽ tăng t h ê m m ộ t đ ơ n v ị c h o đ ế n l ú c t r à n . V à

l ú c n à y n g ư ờ i t a g ọ i t i m e r l à counter.

2.1.2. Sơ đồ chân

Vi xử lý AT89S52 có 40 chân thì có 32 chân dành cho các cổng P0, P1, P2

và P3 với mỗi cổng có 8 chân. Các chân còn lại được dành cho nguồn Vcc,

đất GND, các chân giao động XTAL1 và XTAL2, tái lập RST, cho phép

chốt địa chỉ ALE, truy cập được địa chỉ ngoài , cho phép cất chương trình

.

- Chân Vcc: Chân số 40 là Vcc cấp điện áp nguồn cho chíp. Nguồn điện áp

là 5V.

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ14

GVHD: Thầy giáo PHẠM CÔNG CẢNH

- Chân GND: Chân số 20 là GND, nối đất.

- Chân XTAL1 và XTAL2 : Vi xử lý AT89S52 có một bộ dao động trên

chíp nhưng nó yêu cầu có một xung đồng hồ ngoài để chạy nó. Bộ giao động

thạch anh thường xuyên nhất được nối với các chân đầu vào XTAL1 (chân

19) và XTAL2 (chân 18). Bộ giao động thạch anh được nối với thạch anh

cần có hai tụ điện giá trị 22pF. Một phía của tụ điện được nối xuống đất.

- Chân RST

Chân số 9 là chân tái lập RESET. Nó là một đầu vào và có mức tích cực cao

(bình thường ở mức thấp). Khi cấp xung cao tới chân này thì bộ vi điều

khiển sẽ tái lập và kết thúc mọi hoạt động. Khi kích hoạt tái bật nguồn sẽ

làm mất mọi giá trị trên thanh ghi.

- Chân :

Các thành viên của họ 8051 đều có ROM trên chíp lưu cất chương trình.

Trong các trường hợp như vậy thì chân được nối với Vcc. Đối với

những họ không có bộ nhớ ROM thì mã chương trình được lưu cất trên bộ

nhớ ROM ngoài và chúng được nạp cho chíp. Do vậy đối với những loại này

thì chân phải đượ nối đất để bảo rằng mã chương trình được cất ở ngoài.

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ15

GVHD: Thầy giáo PHẠM CÔNG CẢNH

Chân có nghĩa là truy cập ngoài, là chân số 31. Nó là một chân đầu vào

và phải được nối với Vcc hoặc GND.

- Chân :

Đây là chân đầu ra cho phép cất chương trình trong hệ thống. Với những

chíp chương trình được cất ở bộ nhớ ROM ngoài thì chân này được nối tới

chân OE của ROM.

- Chân ALE:

Chân này cho phép chốt địa chỉ, ALE là chân đầu ra và được tích cực cao.

- Cổng P0 :

Cổng 0 chiếm tất cả 8 chân (từ 32 đến 39). Nó có thể được dùng như cổng

đầu ra, để sử dụng các chân cổng 0 vừa làm đầu ra , vừa làm đầu vào thì mỗi

chân phải được nối tới môt điện trở kéo bên ngoài 10kΩ. Điều này là do

thực tế cổng P0 là một màng mở khác với cổng P1, P2 và P3.

- Cổng P1 :

Cổng P1 cũng chiếm tất cả 8 chân ( từ chân 1 đến 8), nó có thể được sử dụng

như đầu vào hoặc đầu ra. So với cổng P0 thì cổng này không cần đến điện

trở kéo vì nó đã có các điện trở kéo bên trong. Trong quá trình tái lập thì

công P1 được cấu hình như một cổng đầu ra. Để biến cổng P1 thành đầu vào

thì nó phải được lập trình bằng cách ghi 1 đến tất cả các bit của nó.

AT89S52 có chức năng nạp ISP qua các cổng P1.5, P1.6, P1.7.

- Cổng P2 :

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ16

GVHD: Thầy giáo PHẠM CÔNG CẢNH

Cổng P2 cũng chiếm 8 chân ( từ chân 21 đến 28), nó có thể được sử dụng

như đầu vào hoặc đầu ra giống như cổng P1, cổng P2 cũng không cần điện

trở kéo vì nó đã có các điện trở kéo bên trong. Khi tái lập, cổng P2 được cấu

hình như một cổng đầu ra. Để tạo cổng P2 như đầu vào thì nó phải được lập

trình bằng cách ghi số 1 với tất cả các chân của nó.

Trong hệ thống chíp có bộ nhớ ROM thì P2 được sử dụng như đầu ra đơn

giản. Tuy nhiên trong hệ thống chíp cần bộ nhớ ROM ngoài thì cổng P2 phải

được dùng cùng với P0 để tạo ra địa chỉ 16 bit đối với bộ nhớ ngoài. Vì các

loại chíp này có khả năng trung cập 64 KB bộ nhớ ngoài, nó cần một địa chỉ

16 bit. Trong khi P0 cung cấp 8 bit thấp từ A1 – A7. Công việc của P2 là

cung cấp các bit địa chỉ cao từ A8 – A15.

- Cổng P3 :

Cổng P3 chiếm tổng cộng 8 chân (từ chân 10 đến chân 17). Nó có thể được

sử dụng như đầu vào hoặc đầu ra. Cổng P3 cũng không cần điện trở kéo.

Mặc dù cổng P3 được cấu hình như một đầu ra khi tái lập, nhưng đây không

phải là cách nó được sử dụng phổ biến nhất. Cổng P3 có chức năng bổ sung

là cung cấp một số tín hiệu quan trọng đặc biệt chẳng hạn như ngắt.

Các bit P3.0 và P3.1 được dùng cho các tín hiệu nhận và phát dữ liệu trong

truyền thông dữ liệu nối tiếp. Các bit P3.2 và P3.3 được dùng cho các ngắt

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ17

GVHD: Thầy giáo PHẠM CÔNG CẢNH

ngoài. Các bit P3.4 và P3.5 được dùng cho các bộ định thêm 0 và 1. Các bit

P3.6 và P3.7 được cấp cho tín hiệu ghi và đọc các bộ nhớ ngoài được nói tới

trong các chíp không có bộ nhớ ROM trên chíp.

2.2. IC 74LS138

Đây là bộ giải mã 3 bit thành 8 đường loại vi mạch hay mạch có 3 ngõ

vào và 8 ngõ ra, còn được gọi là mạch giải mã nhị phân sang octal (binary

to octal decoder) , với ngõ ra tích cực ở mức 1, 74LS138 có công dụng dịch

bit logic 0 từ trên xuống và từ dưới lên theo mã BCD. Nó hay được dùng để

hỗ trợ quét.

- Bảng chân trị:

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ18

GVHD: Thầy giáo PHẠM CÔNG CẢNH

- Sơ đồ nguyên lý

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ19

GVHD: Thầy giáo PHẠM CÔNG CẢNH

G1: là chân điều khiển đuợc dùng làm đường vào của dữ liệu (luôn ở mức

1). G2A, G2B: là hai tín hiệu điều khiển có chức năng cho phép dữ liệu

thông hay không thông ( cho phép thông khi G2A, G2B đồng thời ở mức

tích cực thấp tức là mức 0)Các chỉ số từ 0, 1, 2, 3 …, 7 của các kênh ra

tương ứng với tổ hợp các bít nhị phân ở lối vào điều khiển chọn kênh A, B,

C.

2.3. LED 7 thanh

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ20

GVHD: Thầy giáo PHẠM CÔNG CẢNH

2.3.1. Sơ đồ các chân hiển thị

2.3.2. Quy tắc giao tiếp với LED 7 thanh

III. Nguyên lý làm việc của mạch đồng hồ điện tử

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ21

GVHD: Thầy giáo PHẠM CÔNG CẢNH

Sơ đồ khối

Mạch gồm 5 khối chính:

- Khối nguồn

- Khối định thời

- Khối hiển thị

- Khối điều khiển

- Bàn phím

3.1. Khối nguồn

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ22

GVHD: Thầy giáo PHẠM CÔNG CẢNH

- J1: jack nguồn

- BR1: diode cầu, để chỉnh lưu điện áp đầu vào

- U1: 7805 – IC ổn áp với điện áp ra 5VDC, điện áp vào từ 6-35VDC

- C1: tụ lọc đầu vào U1

- C2, C3: tụ lọc đầu ra U1

- D1: đèn báo nguồn

- R31: điện trở hạn dòng cho D1

3.2. Khối định thời

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ23

GVHD: Thầy giáo PHẠM CÔNG CẢNH

- U3: DS1307 – IC đồng hồ thời gian thực lưu các giá trị thời gian (ngày,

tháng, năm, giờ, phút, giây), có giá trị đến năm 2100. DS1307 sử dụng giao

tiếp I2C (2 chân SCL và SDA).

- Thạch anh 32.768kHz để tạo dao động cho DS1307 hoạt động chính xác.

- Pin 3V cấp nguồn dự phòng.

- Chân SQW dùng để xuất xung vuông với tần số 1Hz, 4kHz, 8kHz, và

32kHz.

3.3. Khối hiển thị

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ24

GVHD: Thầy giáo PHẠM CÔNG CẢNH

- U3, U4: 74138 – IC chọn kênh, để chọn đầu ra tương ứng nhằm điều

khiển nguồn cho led 7 đoạn, mục đích dùng để quét led, với đầu vào

được điều khiển bởi 8051.

- Q1..Q14: transistor A1015, dùng để cấp nguồn cho led, được điều

khiển bới 74138

- R3,R5,R7,..,R29: điện trở hạn dòng

- R2,R4,R6,..,R28: điện trở hồi tiếp

- Led 7 đoạn: là led anode chung, anode được chọn bởi 74138, các chân

đầu vào tương ứng được điều khiển bởi 8051 để hiển thị số

3.4. Khối điều khiển

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ25

GVHD: Thầy giáo PHẠM CÔNG CẢNH

- U2: AT89S52 – là 1 vi điều khiển 8 bit họ 8051. Các chân P1.0, P1.1,

P1.2 để điều khiển các led hiển thị giờ, P1.4, P1.5, P1.6 điều khiển các

led hiển thị ngày. P3.0, P3.1 giao tiếp với DS1307. P3.2 nhận ngắt từ

bàn phím. P3.3nhận xung vuông từ DS1307. Port P2 để quét ma trận

phím. Port P0 hiển thị số cho các led.

- Thạch anh 12Mhz cùng C4, C5 tạo thành bộ tạo dao động cho 89S52

- R1, C6, nút Reset: tạo thành mạch reset cho 89S52

- D2: báo xung từ DS1307, với R32 hạn dòng

- RP1, RP2: trở treo

3.5. Bàn phím

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ26

GVHD: Thầy giáo PHẠM CÔNG CẢNH

Sử dụng dạng ma trận 4x4 phím

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ27

GVHD: Thầy giáo PHẠM CÔNG CẢNH

- Num0..Num9: các số tương ứng

- Change/Set: thay đổi thời gian và lưu thời gian sửa đổi

- Left: sang trái 1 chữ số

- Right: sang phải 1 chữ số

- RST: đưa thời gian về giá trị hiện tại (thoát trạng thái sửa đổi)

- On/Off Time: tắt hiển thị thời gian

- On/Off Date: tắt hiển thị ngày tháng

- C7..C22: tụ lọc nhiễu, kết hợp với U7 chống nảy cho bàn phím

- U6: 7408 – IC logic 4 cổng AND, để xác định 1 phím được bấm.

Chân này được đưa về ngắt INT0 của 8051.

- U7: 7414 – IC logic NOT với đầu vào Schmitt Ttrigger

IV. Chương trình chạy

Chương trình chạy được viết bằng ngôn ngữ lập trình C được đưa vào

AT89S52 thông qua bộ nạp.

/***************** CLOCK ********************** Microcontroller : 89S52 Created Date : 13/01/2011 Modified Date : 16/01/2011 Compiler : MikroC Coded by : Michu**********************************************/

/* Declare I2C interface */sbit Soft_I2C_Scl at P3_0_bit;sbit Soft_I2C_Sda at P3_1_bit;

sbit CON1 at P3_6_bit;sbit CON2 at P3_7_bit;

/* Declare matrix keyboard */sbit Row1 at P2_3_bit;

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ28

GVHD: Thầy giáo PHẠM CÔNG CẢNH

sbit Row2 at P2_2_bit;sbit Row3 at P2_1_bit;sbit Row4 at P2_0_bit;sbit Col1 at P2_4_bit;sbit Col2 at P2_5_bit;sbit Col3 at P2_6_bit;sbit Col4 at P2_7_bit;

/* Declaration for RTC DS1307 */#define DS1307_ID 0xD0 // ID of DS1307#define SECOND_ADD 0x00 // Second Register address#define MINUTE_ADD 0x01 // Minute Register address#define HOUR_ADD 0x02 // Hour Register address#define DAY_ADD 0x03 // Day Register address#define DATE_ADD 0x04 // Date Register address#define MONTH_ADD 0x05 // Month Register address#define YEAR_ADD 0x06 // Year Register address#define CONTROL_ADD 0x07 // Control Register address#define YearOffset 2000 // Current year offset

/* Declare vars */unsigned char sec,min,hour,date,mon,count,sel;unsigned int year;unsigned char HIGH,LOW;unsigned char num[10]=0x11,0xD7,0x32,0x92,0xD4,0x98,0x18,0xD3,0x10,0x90; // Number array for 7-SEG LEDunsigned char numd[10]=0x01,0xC7,0x22,0x82,0xC4,0x88,0x08,0xC3,0x0,0x80; // Number array for 7-SEG LED with dotunsigned char dis[14]=0x0,0x4,0x2,0x6,0x1,0x5,0x70,0x30,0x50,0x10,0x60,0x20,0x40,0x0;bit pressed,released,changing,num0,num1,num2,num3,num4,num5,num6,num7,num8,num9,change,left,right,offtime,offdate,offt,offd,exit;const int timer=-1300;

/* Initalize main program */void init()

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ29

GVHD: Thầy giáo PHẠM CÔNG CẢNH

Soft_I2C_Init(); // Init I2C interface TMOD=0x01; // Set TIMER0 in 16bit timer mode EA_bit=1; // Enable interrupt TF0_bit=0; // Clear timer0 flag ET0_bit=1; // Enable timer0 interrupt HIGH=timer>>8; LOW=timer; TH0=HIGH; // Set High Byte for timer0 TL0=LOW; // Set Low Byte for timer0 P2=0xF0; pressed=released=offt=offd=sel=0;

/* DS1307 Reading function */unsigned char DS1307_read(unsigned char addr) unsigned char buf; Soft_I2C_Start(); Soft_I2C_Write(DS1307_ID); Soft_I2C_Write(addr); Soft_I2C_Start(); Soft_I2C_Write(DS1307_ID+1); buf=Soft_I2C_Read(0); Soft_I2C_Stop(); buf = ((((buf & 0xF0)>>4)*10)+ (buf & 0x0F)); // convert BCD from DS1307 to HEX return buf;

/* DS1307 Writing function */void DS1307_write(unsigned char addr, unsigned char dat) dat = (((dat/10)<<4)|(dat%10)); // convert DEC to BCD for DS1307 Soft_I2C_Start(); Soft_I2C_Write(DS1307_ID); Soft_I2C_Write(addr); Soft_I2C_Write(dat); Soft_I2C_Stop();

/* DS1307 Control Register Writing function */void DS1307_writecon(unsigned char dat)

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ30

GVHD: Thầy giáo PHẠM CÔNG CẢNH

Soft_I2C_Start(); Soft_I2C_Write(DS1307_ID); Soft_I2C_Write(CONTROL_ADD); Soft_I2C_Write(dat); Soft_I2C_Stop();

/* Display function */void display() P0=0xFF; if((count<6)&&(!offt)) CON1=1; CON2=0; P1=dis[count]; if((count==0)&&(sel!=1)) P0=num[hour/10]; else if((count==1)&&(sel!=2)) P0=numd[hour%10]; else if((count==2)&&(sel!=3)) P0=num[min/10]; else if((count==3)&&(sel!=4)) P0=numd[min%10]; else if((count==4)&&(sel!=5)) P0=num[sec/10]; else if((count==5)&&(sel!=6)) P0=num[sec%10]; else if((count>5)&&(!offd)) CON1=0; CON2=1; P1=dis[count]; if((count==6)&&(sel!=7)) P0=num[date/10]; else if((count==7)&&(sel!=8)) P0=numd[date%10]; else if((count==8)&&(sel!=9)) P0=num[mon/10]; else if((count==9)&&(sel!=10)) P0=numd[mon%10]; else if((count==10)&&(sel!=11)) P0=num[year/1000]; else if((count==11)&&(sel!=12)) P0=num[(year%1000)/100]; else if((count==12)&&(sel!=13)) P0=num[(year%100)/10]; else if((count==13)&&(sel!=14)) P0=num[year%10];

/* Timer0 Interrupt */void disp() org IVT_ADDR_ET0 TR0_bit=0; TF0_bit=0;

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ31

GVHD: Thầy giáo PHẠM CÔNG CẢNH

TH0=HIGH; TL0=LOW; TR0_bit=1; if(count<13) count++; else count=0; display();

/* 4x4 Matrix Keyboard Scan Function */void scankey() if(!pressed) if(!Col1) pressed=1; while(pressed) P2=0x0F; if((!Row1)&&Row2&&Row3&&Row4) num7=1; break; else if((!Row2)&&Row1&&Row3&&Row4) num4=1; break; else if((!Row3)&&Row2&&Row1&&Row4) num1=1; break; else if((!Row4)&&Row2&&Row3&&Row1) change=1; break; else if(!Col2) pressed=1; while(pressed) P2=0x0F; if((!Row1)&&Row2&&Row3&&Row4) num8=1; break; else if((!Row2)&&Row1&&Row3&&Row4) num5=1; break; else if((!Row3)&&Row2&&Row1&&Row4) num2=1; break; else if((!Row4)&&Row2&&Row3&&Row1) num0=1; break; else if(!Col3) pressed=1; while(pressed) P2=0x0F; if((!Row1)&&Row2&&Row3&&Row4) num9=1; break; else if((!Row2)&&Row1&&Row3&&Row4) num6=1; break; else if((!Row3)&&Row2&&Row1&&Row4) num3=1; break; else if((!Row4)&&Row2&&Row3&&Row1) left=1; break;

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ32

GVHD: Thầy giáo PHẠM CÔNG CẢNH

else if(!Col4) pressed=1; while(pressed) P2=0x0F; if((!Row1)&&Row2&&Row3&&Row4) offtime=1; break; else if((!Row2)&&Row1&&Row3&&Row4) offdate=1; break; else if((!Row3)&&Row2&&Row1&&Row4) exit=1; break; else if((!Row4)&&Row2&&Row3&&Row1) right=1; break; P2=0xF0;

/* Time Changing Execution */void update(unsigned char val) if(sel==1) hour=val*10+(hour%10); if(sel==2) hour=(hour-(hour%10))+val; if(sel==3) min=val*10+(min%10); if(sel==4) min=(min-min%10)+val; if(sel==5) sec=val*10+(sec%10); if(sel==6) sec=(sec-sec%10)+val; if(sel==7) date=val*10+(date%10); if(sel==8) date=(date-date%10)+val; if(sel==9) mon=val*10+(mon%10); if(sel==10) mon=(mon-mon%10)+val; if(sel==11) year=val*1000+(year%1000); if(sel==12) year=year-(year%1000)+(val*100)+(year%100); if(sel==13) year=year-(year%100)+(val*10)+(year%10); if(sel==14) year=year-(year%10)+val; if((sec>59)&&(sel==7)) sec=0; if((min>59)&&(sel==5)) min=0; if((hour>23)&&(sel==3)) hour=0; if((year>9999)&&(sel==1)) year=0; if((mon>12)&&(sel==11)) mon=1; if(( ((mon<8)&&(mon%2)&&(date>31)) || ((mon<8)&&(!(mon%2))&&(date>30)) || ((mon>7)&&(mon%2)&&(date>30)) || ((mon<7)&&(!(mon%2))&&(date>31)) ) && (sel==9)) date=1;

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ33

GVHD: Thầy giáo PHẠM CÔNG CẢNH

/* Main Program */void main() init(); // Call init function TR0_bit=1; // Start timer0 while(1) if(!changing) year=DS1307_read(YEAR_ADD)+YearOffset; mon=DS1307_read(MONTH_ADD); date=DS1307_read(DATE_ADD); hour=DS1307_read(HOUR_ADD); min=DS1307_read(MINUTE_ADD); sec=DS1307_read(SECOND_ADD); if(P2!=0xF0) scankey(); if(pressed) if(P2==0xF0) released=1; pressed=0; if(released) released=0; if(!changing) if(change) changing=sel=1; change=offt=offd=0; else if(offtime) offtime=0; offt=~offt; else if(offdate) offdate=0; offd=~offd; else if(left) left=0; sel--; if(!sel) sel=14; else if(right) right=0; sel++; if(sel>14) sel=1; else if(exit) exit=changing=sel=0; else if(change) change=changing=sel=0;

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ34

GVHD: Thầy giáo PHẠM CÔNG CẢNH

DS1307_write(YEAR_ADD,year-YearOffset); DS1307_write(MONTH_ADD,mon); DS1307_write(DATE_ADD,date); DS1307_write(HOUR_ADD,hour); DS1307_write(MINUTE_ADD,min); DS1307_write(SECOND_ADD,sec); else if(num0) num0=0; update(0); sel++; else if(num1) num1=0; update(1); sel++; else if(num2) num2=0; update(2); sel++; else if(num3) num3=0; update(3); sel++; else if(num4) num4=0; update(4); sel++; else if(num5) num5=0; update(5); sel++; else if(num6) num6=0; update(6); sel++; else if(num7) num7=0; update(7); sel++; else if(num8) num8=0; update(8); sel++; else if(num9) num9=0; update(9); sel++;

C. KẾT LUẬN

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ35

GVHD: Thầy giáo PHẠM CÔNG CẢNH

Trên đây là toàn bộ nguyên lý hoạt động và sơ đồ cấu tạo của chiếc

đồng hồ điện tử. Tuy nhiên do thời gian và năng lực còn hạn chế nên nhóm

làm báo cáo chưa thể tìm hiểu được hết về các chức năng của từng linh kiện

trong mạch. Mong thầy thông cảm.

Qua việc thiết kế mạch đồng hồ này, nhóm cũng đã học tập được thêm

về khả năng lập trình, sử dụng vi điểu khiển và các phần mềm liên quan …

đặc biệt là tăng khả năng làm việc theo nhóm, từ đó tạo tiền đề cho việc giải

quyết các vấn đề phức tạp hơn sau này.

Nhóm chúng em xin chân thành cảm ơn thầy giáo Phạm Công Cảnh đã

hướng dẫn và giúp đỡ chúng em hoàn thành bài báo cáo này.

Tài liệu tham khảo

- Họ vi điều khiển 8051 - Tống Văn On, Hoàng Đức Hải.

- Cấu trúc lập trình và họ vi điều khiển 8051 - Nguyễn Tăng Cường , Phan

Quốc Thắng

- www.datasheetcatalog.com

Nhóm 2 CNTT4_K2 MẠCH ĐỒNG HỒ ĐIỆN TỬ36