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

Mạch Led Trái Tim potx

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 (871.69 KB, 27 trang )

Mạch Led Trái Tim
LỜI NÓI ĐẦU
Trong những năm gần đây trên thế giới cùng với sự phát triển mạnh mẽ của
ngành công nghiệp chế tạo linh kiện bán dẫn và vi mạch tổng hợp, một hướng phát
triển mới của các vi xử lý đã hình thành đó là các vi điều khiển. Với nhiều ưu
điểm, vi điều khiển đã được sử dụng rộng rãi trên nhiều lĩnh vực khác nhau. Bằng
cách áp dụng vi đều khiển trong quá trình sản xuất và xử lý, vi điều khiển đã thực
sự thể hiện được ưu thế của mình so với các thiết bị điều khiển thông thường.
Vì những lý do trên, trong nhiều trường Đại Học, Cao Đẳng, vi xử lý thực sự
trở thành một môn học hết sức quan trọng, vi xử lý 8051 gần như là một môn học
sử dụng để trang bị cho chúng ta những kiến thức cơ bản về vi xử lý, từ đó mở
rộng ra các loại vi xử lý khác có cấu trúc phức tạp hơn như AVR, PIC, …
Sự ra đời của các bộ vi xử lí nói chung, các bộ vi điều khiển nói riêng đã tạo
ra một bước ngoặt lớn trong việc thiết kế các hệ thống xử lí thông tin, đo lường
điều khiển và truyền thông. Kết quả là đã tạo ra được những sản phẩm như máy
ảnh số, máy chơi nhạc MP3, đầu dĩa DVD,các bộ biến tần, PLC…ngày càng rẻ
hơn, nhỏ gọn hơn, thông minh hơn và tiện dụng hơn. Hơn nữa, kỹ thuật vi điều
khiển hiện nay rất phát triển, nó được ứng dụng vào rất nhiều lĩnh vực sản xuất
công nghiệp, tự động hóa, trong đời sống và còn nhiều lĩnh vực khác nữa. So với
kỹ thuật số thì kỹ thuật vi điểu khiển nhỏ gọn hơn rất nhiều do nó được tích hợp
lại và có khả năng lập trình được để điều khiển. Nên rất tiện dụng và cơ động.
Mục đích của đề tài hướng đến: tạo ra bước đầu cho sinh viên thử nghiệm
những ứng dụng của vi điều khiển trong thực tiễn để rồi từ đó tìm tòi, phát triển
nhiều ứng dụng khác trong đời sống hằng ngày cần đến.
Chương I: Tổng quan về vi đều khiển 8051
Chương II Sơ đồ mạch
Chương III: lập trình cho vi xử lý
SVTH: …………… Trang 1
Mạch Led Trái Tim
CHƯƠNG I: TỔNG QUAN VỀ VI ĐIỀU KHIỂN 8051
Vi điều khiển 8051 là một trong những vi điều khiển 8 bit thông dụng nhất


hiện nay. Bắt đầu xuất hiện vào năm 1980, trải qua gần 30 năm, hiện đã có tới
hàng trăm biến thể Tại Việt Nam, các biến thể của hãng ATMEL là AT89C51,
AT89C52, AT89S51, AT89S52…. Chương này sẽ tập trung mô tả tương đối chi
tiết cấu trúc bên trong của các biến thể nói trên (tạm gọi chung là AT89) của hãng
ATMEL
Cấu trúc của 8051 ở 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 đường tín hiệu (thường gọi là
bus địa chỉ 16 bit). Với số lượng bit địa chỉ như trên, không gian nhớ của chip
được mở rộng tối đa là 216 = 65536 địa chỉ, tương đương 64K.
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), đó là lý do tại sao nói 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 họ 8051 có thể xử lý các toán hạng 8 bit
trong một chu kỳ lệnh.
SVTH: …………… Trang 2
Mạch Led Trái Tim
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 có cấu tạo chính gồm một đơn vị xử
lý số học và lôgic ALU (Arithmethic Logic Unit) – nơi thực hiện tất cả các phép
toán số học và phép lôgic 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 byte, tuy nhiên hầu hết
các vi điều khiển AT89 trên thị trường chỉ tích hợp sẵn trê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 trong không gian
bộ nhớ chương trình. AT89C51/AT89S51 có 4K byte bộ nhớ chương trình loại
Flash tích hợp sẵn bên trong chip. Đây là bộ nhớ cho phép ghi/xóa nhiều lần bằng
điện, chính vì thế cho phép người sử dụng thay đổi chương trình nhiều lần. Số lần
ghi/xóa được thường lên tới hàng vạn lần.
Bộ nhớ chương trình của các chip họ 8051 có thể thuộc một trong các loại: ROM,

EPROM, Flash, hoặc không có bộ nhớ chương trình bên trong chip.
Bộ nhớ chương trình dùng để chứa mã của chương trình nạp vào chip. Mỗi lệnh
được mã hóa bởi 1 hay 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. Địa chỉ đầu tiên của bộ nhớ chương trình
(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ẽ nhảy đến thực hiện lệnh
đặ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 dùng để làm gì cả. Nếu muốn mở rộng bộ nhớ chương
trình, ta phải dùng bộ nhớ chương trình bên ngoài có dung lượng như ý muốn.
Tuy nhiên khi dùng bộ nhớ chương trình ngoài, bộ nhớ chương trình onchip
không dùng được nữa, bộ nhớ chương trình ngoài sẽ chiếm dải địa chỉ ngay từ địa
chỉ 0x0000.
SVTH: …………… Trang 3
Mạch Led Trái Tim
Hình ảnh về bộ nhớ chương trình
Cổng vào ra song song (I/O Port)
8051 có 4 cổng vào ra song song, có tên lần lượt là P0, P1, P2 và P3. Tất cả
các cổng này đều là cổng vào ra hai chiều 8bit. 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. Hướng dữ liệu (dùng cổng đó
làm cổng ra hay cổng vào) là độc lập giữa các cổng và giữa các chân (các bit)
trong cùng một cổng. Ví dụ, ta có thể định nghĩa cổng P0 là cổng ra, P1 là cổng
vào hoặc ngược lại một cách tùy ý, với cả 2 cổng P2 và P3 còn lại cũng vậy.
Trong cùng một cổng P0, ta cũng có thể định nghĩa chân P0.0 là cổng vào, P0.1 lại
là cổng ra tùy ý. Liên quan đến mỗi cổng vào/ra song song của 8051 chỉ có một
thanh ghi SFR ( thanh ghi chức năng đặc biệt) có tên trùng với tên của cổng. Ta có
các thanh ghi P0 dùng cho cổng P0, thanh ghi P1 dùng cho cổng P1 … Đây là các
thanh ghi đánh địa chỉ đến từng bit (bit addressable), do đó ta có thể dùng các lệnh
tác động bit đối với các bit của các thanh ghi này. Mỗi thanh ghi này gồm 8 bit
tương ứng với các chân (bit) của cổng đó. Khi một chân (bit) cổng nào đó được
dùng làm cổng vào thì trước đó bit tương ứng trong thanh ghi SFR phải được đặt ở

SVTH: …………… Trang 4
Mạch Led Trái Tim
mức 1. Nếu một chân (bit) cổng nào đó được dùng làm cổng ra thì giá trị của bit
tương ứng trong thanh ghi SFR sẽ là giá trị lôgic muốn đưa ra chân cổng đó. Nếu
muốn đưa ra mức lôgic cao (điện áp gần 5V), bit tương ứng trong thanh ghi phải
được đặt bằng 1, hiển nhiên nếu muốn đưa ra mức lôgic thấp (điện áp gần 0V) thì
bit tương ứng trong thanh ghi phải được đặt bằng 0. Như đã nói ở trên, các bit
trong thanh ghi cổng có thể được đặt bằng 1/0 mà không làm ảnh hưởng đến các
bit còn lại trong cổng đó bằng cách dùng các lệnh setb (đặt lên 1) hay clr (đặt về
0).
Cổng vào ra nối tiếp (Serial Port)
Cổng nối tiếp trong 8051 chủ yếu được dùng trong các ứng dụng có yêu cầu
truyền thông với máy tính, hoặc với một vi điều khiển khác. Liên quan đến cổng
nối tiếp chủ yếu có 2 thanh ghi: SCON và SBUF. Ngoài ra, một thanh ghi khác là
thanh ghi PCON (không đánh địa chỉ bit) có bit 7 tên là SMOD quy định tốc độ
truyền của cổng nối tiếp có gấp đôi lên (SMOD = 1) hay không (SMOD = 0). Dữ
liệu được truyền nhận nối tiếp thông qua hai chân cổng P3.0(RxD) và P3.1(TxD).
Thanh ghi SBUF là thanh ghi 8bit chứa dữ liệu truyền hoặc nhận. Về thực chất có
hai thanh ghi dữ liệu khác nhau, một dành để chứa dữ liệu truyền đi, một để chứa
dữ liệu nhận được. Cả hai thanh ghi này đều có chung một tên là SBUF, tuy nhiên
CPU hoàn toàn phân biệt được một cách dễ dàng. Khi ta muốn truyền dữ liệu đi, ta
phải ghi vào thanh ghi SBUF (ví dụ viết lệnh mov SBUF,a), còn khi muốn đọc
kiểm tra dữ liệu nhận về ta phải đọc thanh ghi SBUF (ví dụ viết lệnh mov
a,SBUF). CPU sẽ căn cứ vào việc thanh ghi SBUF nằm ở vị trí toán hạng đích
(toán hạng bên trái) hay toán hạng nguồn (toán hạng bên phải) để quyết định sẽ
truy nhập (đọc/ghi) thanh ghi SBUF nào. Người lập trình không cần phải quan tâm
xử lý vấn đề này. Thanh ghi quy định chế độ hoạt động và điều khiển cổng nối
tiếp là thanh ghi SCON (đánh địa chỉ bit).
SVTH: …………… Trang 5
Mạch Led Trái Tim

Bit SM0, SM1, SM2 quy định chế độ hoạt động của cổng nối tiếp. Thông
thường để truyền thông giữa 2 vi điều khiển hoặc giữa 1 vi điều khiển và 1 máy
tính, giá trị của bit SM2 được đặt bằng 0. Khi truyền thông theo kiểu mạng đa vi
xử lý (multiprocessor communication), SM2 được đặt bằng 1. Hai bit SM0 và
SM1 thực sự là các bit quy định chế độ hoạt động của cổng nối tiếp, chúng tạo ra 4
tổ hợp (00,01,10 và 11) ứng với 4 chế độ hoạt động mô tả trong bảng sau.
Chế độ 0: là chế độ truyền đồng bộ duy nhất. Chân RxD sẽ là tín hiệu
truyền/nhận dữ liệu, chân TxD là tín hiệu xung nhịp. Bit LSB (bit 0) của dữ liệu
được truyền đi trước tiên. Tốc độ truyền cố định và bằng 1/12 giá trị thạch anh.
Chế độ 1: là chế độ truyền dị bộ 8 bit. Dữ liệu 8 bit được đóng khung bởi một
bit Start (= 0) ở đầu và một bit Stop (=1) ở cuối trước khi được truyền đi. Tốc độ
truyền thay đổi được theo ý người lập trình.
Chế độ 2: là chế độ truyền dị bộ 9 bit. Dữ liệu 9 bit được ghép thành bởi 8bit
trong thanh ghi SBUF và bit RB8 (trường hợp nhận về) hoặc TB8 (trường hợp
truyền đi) trong thanh ghi SCON. Ngoài ra các bit Start và Stop vẫn được gắn
bình ở đầu và cuối khung truyền. Trong chế độ này, tốc độ truyền chỉ có thể chọn
được ở 1 trong 2 mức: 1/32 hoặc 1/64 giá trị của thạch anh (tùy thuộc vào giá trị
của bit SMOD trong thanh ghi PCON đã nói ở trên).
Chế độ 3: cũng là chế độ truyền dị bộ 9 bit, khác với chế độ 2 ở chỗ tốc độ
truyền có thể thay đổi được theo ý người lập trình như trong chế độ 1. Bit REN
trong thanh ghi SCON là bit cho phép nhận dữ liệu. Dữ liệu chỉ được nhận qua
cổng nối tiếp khi bit này = 1.
SVTH: …………… Trang 6
Mạch Led Trái Tim
Bit TB8 là bit dữ liệu thứ 9 trong trường hợp truyền đi 9 bit (8 bit kia trong
thanh ghi SBUF).
Bit RB8 là bit dữ liệu thứ 9 trong trường hợp nhận về 9 bit (8 bit kia trong
thanh ghi SBUF).
Bit TI là cờ ngắt truyền, báo hiệu việc truyền 1 khung dữ liệu đã hoàn tất.
Bit RI là cờ ngắt nhận, báo hiệu việc nhận 1 khung dữ liệu đã hoàn tất.

Tóm lại để sử dụng cổng nối tiếp của 8051, hãy thực hiện các bước sau:
- Chọn chế độ cho cổng nối tiếp (đồng bộ/dị bộ, 8bit/9bit…), từ đó chọn
được giá trị cho các bit trong thanh ghi SCON. Lưu ý xóa các bit TI và RI.
- Chọn tốc độ truyền mong muốn, từ đó tính ra giá trị của thanh ghi TH1.
Cho timer1 chạy ở chế độ Auto Reload 8bit (không dùng ngắt tràn timer1).
- Đặt mức ưu tiên ngắt và cho phép ngắt cổng nối tiếp nếu muốn.
- Bắt đầu quá trình truyền dữ liệu bằng một lệnh ghi dữ liệu muốn truyền vào
thanh ghi SBUF. Quá trình truyền kết thúc thì cờ TI sẽ tự động đặt lên 1.
- Khi một khung dữ liệu đã được nhận đầy đủ, cờ RI sẽ tự động đặt lên 1 và
người lập trình lúc này có thể dùng lệnh đọc thanh ghi SBUF để lấy dữ liệu nhận
được ra xử lý.
Ngắt (Interrupt)
8051 chỉ có một số lượng khá ít các nguồn ngắt (interrupt source) hoặc có thể
gọi là các 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 ngắt xảy ra, CPU sẽ tự động nhảy đến
thực hiện lệnh nằm tại địa chỉ này. Bảng tóm tắt các ngắt trong 8051 như sau:

STT Tên ngắt Mô tả Cờ ngắt
Thanh ghi
chứa cờ
Vector
ngắt
1 INTO Ngắt ngoài 0 khi
có tín hiệu tích
IE0 TCON 0x0003
SVTH: …………… Trang 7
Mạch Led Trái Tim
cực theo kiểu đã
chọn ở chân P3.2
2 Timer 0

Ngắt tràn timer 0
khi giá trị timer 0
tràn từ giá trị max
về giá trị min
TF0 TCON 0x000B
3 INT1
Ngắt ngoài 1 khi
có tín hiệu tích
cực theo kiểu đã
chọn ở chân P3.3
TF1 TCON 0x0013
4 Timer1
Ngắt tràn timer1
khi giá trị timer1
tràn từ giá trị max
về giá trị min
TF1 TCON 0x001B
5 Serial Port
Ngắt cổng nối tiếp
khi vi điều khiển
nhận hoặc truyền
xong một byte
bằng cổng nối tiếp
TI, RI SCON 0x0023
Bộ định thời/Bộ đếm (Timer/Counter)
8051 có 2 timer tên là timer0 và timer1. Các timer này đều là timer 16bit, giá
trị đếm max do đó bằng 2
16
= 65536 (đếm từ 0 đến 65535). Hai timer có nguyên lý
hoạt động hoàn toàn giống nhau và độc lập. Sau khi cho phép chạy, mỗi khi có

thêm một xung tại đầu vào đếm, giá trị của timer sẽ tự động được tăng lên 1 đơn
vị, cứ như vậy cho đến khi giá trị tăng lên vượt quá giá trị max mà thanh ghi đếm
có thể biểu diễn thì giá trị đếm lại được đưa trở về giá trị min (thông thường min =
0). Sự kiện này được hiểu là sự kiện tràn timer (overflow) và có thể gây ra ngắt
nếu ngắt tràn timer được cho phép (bit Etx trong thanh ghi IE = 1).
Việc cho timer chạy/dừng được thực hiện bởi các bit TR trong thanh ghi
TCON (đánh địa chỉ đến từng bit).
SVTH: …………… Trang 8
Mạch Led Trái Tim
Khi bit TRx = 1, timerx sẽ đếm, ngược lại khi TRx = 0, timerx sẽ không đếm
mặc dù vẫn có xung đưa vào. Khi dừng không đếm, giá trị của timer được giữ
nguyên. Các bit TFx là các cờ báo tràn timer, khi sự kiện tràn timer xảy ra, cờ sẽ
được tự động đặt lên bằng 1 và nếu ngắt tràn timer được cho phép, ngắt sẽ xảy ra.
Khi CPU xử lý ngắt tràn timerx, cờ ngắt TFx tương ứng sẽ tự động được xóa về 0.
Giá trị đếm 16bit của timerx được lưu trong hai thanh ghi THx (byte cao) và TLx
(byte thấp). Hai thanh ghi này có thể ghi/đọc được bất kỳ lúc nào. Tuy nhiên nhà
sản xuất khuyến cáo rằng nên dừng timer (cho bit TRx = 0) trước khi ghi/đọc các
thanh ghi chứa giá trị đếm. Các timer có thể hoạt động theo nhiều chế độ, được
quy định bởi các bit trong thanh ghi TMOD (không đánh địa chỉ đến từng bit).
Để xác định thời gian, người ta chọn nguồn xung nhịp (clock) đưa vào đếm
trong timer là xung nhịp bên trong (dành cho CPU). Nguồn xung nhịp này thường
rất đều đặn (có tần số ổn định), do đó từ số đếm của timer người ta có thể nhân với
chu kỳ xung nhịp để tính ra thời gian trôi qua. Timer lúc này được gọi chính xác
với cái tên “timer”, tức bộ định thời. Để đếm các sự kiện bên ngoài, người ta chọn
nguồn xung nhịp đưa vào đếm trong timer là tín hiệu từ bên ngoài (đã được chuẩn
hóa về dạng xung vuông 0V/5V). Các tín hiệu này sẽ được nối với các bit cổng có
dồn kênh thêm các tính năng T0/T1/T2. Khi có sự kiện bên ngoài gây ra thay đổi
mức xung ở đầu vào đếm, timer sẽ tự động tăng lên 1 đơn vị giống như trường hợp
đếm xung nhịp bên trong. Lúc này, timer được gọi chính xác với cái tên khác:
“counter”, tức bộ đếm (sự kiện). Nhìn vào bảng mô tả thanh ghi TMOD bên trên,

ta có thể nhận thấy có 2 bộ 4 bit giống nhau (gồm GATEx, C/Tx, Mx0 và Mx1)
dành cho 2 timer0 và 1. Ý nghĩa các bit là như nhau đối với mỗi timer.
Bit GATEx quy định việc cho phép timer đếm (run timer). Nếu GATEx = 0,
timerx sẽ đếm khi bit TRx bằng 1, dừng khi bit TRx bằng 0. Nếu GATEx = 1,
timerx sẽ chỉ đếm khi bit TRx = 1 và tín hiệu tại chân INTx = 1, dừng khi một
trong hai điều kiện trên không còn thỏa mãn. Thông thường người ta dùng timer
với GATE = 0, chỉ dùng timer với GATE = 1 trong trường hợp muốn đo độ rộng
xung vì lúc đó timer sẽ chỉ đếm thời gian khi xung đưa vào chân INTx ở mức cao.
SVTH: …………… Trang 9
Mạch Led Trái Tim
Bit C/Tx quy định nguồn clock đưa vào đếm trong timer. Nếu C/Tx = 0,
timer sẽ được cấu hình là bộ định thời, nếu C/Tx = 1, timer sẽ được cấu hình là bộ
đếm sự kiện. Hai bit còn lại (Mx0 và Mx1) tạo ra 4 tổ hợp các giá trị (00,01,10 và
11) ứng với 4 chế độ hoạt động khác nhau của timerx. Trong 4 chế độ đó thường
chỉ dùng chế độ timer/counter 16bit (Mx1 = 0, Mx0 = 1) và chế độ Auto Reload
8bit timer/counter (Mx1 = 1, Mx0 = 0).
Trong chế độ timer/counter 16bit, giá trị đếm (chứa trong hai thanh ghi THx
và TLx) tự động được tăng lên 1 đơn vị mỗi lần nhận được thêm một xung nhịp.
Khi giá trị đếm tăng vượt quá giá trị max = 65535 thì sẽ tràn về 0, cờ ngắt TFx
được tự động đặt = 1. Chế độ này được dùng trong các ứng dụng đếm thời gian và
đếm sự kiện.
Trong chế độ Auto Reload 8bit, giá trị đếm sẽ chỉ được chứa trong thanh ghi
TLx, còn giá trị của thanh ghi THx bằng một số n (từ 0 đến 255) do người lập
trình đưa vào. Khi có thêm 1 xung nhịp, giá trị đếm trong TLx đương nhiên cũng
tăng lên 1 đơn vị như bình thường. Tuy nhiên trong trường hợp này, giá trị đếm
lớn nhất là 255 chứ không phải 65535 như trường hợp trên vì timer/counter chỉ
còn 8bit. Do vậy sự kiện tràn lúc này xảy ra nhanh hơn, chỉ cần vượt quá 255 là
giá trị đếm sẽ tràn. Cờ ngắt TFx vẫn được tự động đặt = 1 như trong trường hợp
tràn 16bit. Điểm khác biệt là thay vì tràn về 0, giá trị THx sẽ được tự động nạp lại
(Auto Reload) vào thanh ghi TLx, do đó timer/counter sau khi tràn sẽ có giá trị

bằng n (giá trị chứa trong THx) và sẽ đếm từ giá trị n trở đi. Chế độ này được
dùng trong việc tạo Baud rate cho truyền thông qua cổng nối tiếp.
Sơ đồ chân của 8051
SVTH: …………… Trang 10
Mạch Led Trái Tim
Chức năng của port 0
- Kí hiệu P0, gồm 8 chân đa hợp I/O, địa chỉ thấp và dữ liệu, từ chân 39 đến 32
- Khi không sử dụng bộ nhớ ngoài, P0 sử dụng như các I/O
- Khi sử dụng bộ nhớ ngoài, P0 thay thế 8 chân địa chỉ thấp và dữ liệu để giao
tiếp với IC nhớ.
Chức năng của port 1
SVTH: …………… Trang 11
Mạch Led Trái Tim
- Kí hiệu P1, gồm 8 chân I/O từ 1 đến 8
- Port 1 chỉ có chức năng dung làm các đường điều khiển xuất nhập IO
Chức năng của port 2
- Kí hiệu P2, gồm 8 chân đa hợp I/O và địa chỉ cao, từ chân 21 đến 28
- Khi không sử dụng bộ nhớ ngoài, P2 sử dụng như các I/O
- Khi sử dụng bộ nhớ ngoài, P2 thay thế 8 chân địa chỉ cao để giao tiếp với IC
nhớ.
Chức năng của port 3
- Kí hiệu P3, gồm 8 chân đa hợp I/O và các tín hiệu khác, từ chân 10 đến 18
- Port 3 còn dùng phục vụ các chức năng đặc biệt của CPU:
• RxD: chân nhận dữ liệu nối tiếp bất đồng bộ (UART: The Universal
Asynchronous Receiver/ Transmitter )
•TxD: chân truyền dữ liệu nối tiếp bất đồng bộ
•INT0: chân cung cấp tín hiệu ngắt ngoài 0 (external interrupt), tác động
thấp
•INT1: chân cung cấp tín hiệu ngắt ngoài 1 ), tác động thấp
•T0: chân cung cấp xung cho bộ counter 0

•T1: chân cung cấp xung cho bộ counter 1
•WR: chân cung cấp tín hiệu điều khiển ghi bộ nhớ ngoài, tác động thấp
SVTH: …………… Trang 12
Mạch Led Trái Tim
•RD: chân cung cấp tín hiệu điều khiển đọc bộ nhớ dữ liệu ngoài, tác động
thấp
1.1.2.2 Các nhóm chân khác
Nhóm chân nguồn
- VCC: chân 40, điện áp cung cấp 5VDC
- GND: chân 20
Chân RESET: chân 9, tác động cao (trong thời gian tối thiểu 2 chu kì máy) cho
phép khởi động lại hệ thống.
Nhóm chân dao động: gồm chân 18 và chân 19, cho phép ghép nối thạch anh vào
mạch dao động bên trong vi điều khiển
Chân chọn bộ nhớ chương trình: chân 31 (EA/VPP)
- Chân 31 nối mass: sử dụng bộ nhớ chương trình bên ngoài vi điều khiển
- Chân 31 nối VCC: sử dụng bộ nhớ chương trình (4Kb) bên trong vi điều
khiển
Các chân khác:
- Chân PSEN (program store enable), chân 29: chân cung cấp tín hiệu điều
khiển đọc vùng nhớ chương trình bên ngoài
SVTH: …………… Trang 13
Mạch Led Trái Tim
PSEN ở mức thấp trong thời gian 89C51 lấy lệnh. Các mã lệnh của chương
trình được đọc từ Eprom qua bus dữ liệu, được chốt vào thanh ghi lệnh bên trong
89C51 để giải mã lệnh. Khi 89C51 thi hành chương trình trong EPROM nội PSEN
ở mức logic 1.
- Chân ALE (address latch enable), chân 30: Khi 89C51 truy xuất bộ nhớ
bên ngoài, Port 0 có chức năng là bus địa chỉ và dữ liệu (AD7 – AD0) do đó phải
tách các đường dữ liệu và địa chỉ. Tín hiệu ra ALE ở chân thứ 30 dùng làm tín

hiệu điều khiển để giải đa hợp các đường địa chỉ và dữ liệu khi kết nối chúng với
IC chốt.
Tín hiệu ở chân ALE là một xung trong khoảng thời gian port 0 đóng vai trò
là địa chỉ thấp nên chốt địa chỉ hoàn toàn tự động.
-EA\ (External Access): Tín hiệu vào EA\ ở chân 31 thường được mắc lên
mức 1 hoặc mức 0. Nếu ở mức 1 thì vi điều khiển thi hành chương trình từ bộ nhớ
nội. Nếu ở mức 0 thì vi điều khiển thi hành chương trình từ bộ nhớ ngoại.
Các ngõ vào bộ dao động Xtal1, Xtal2: Bộ tạo dao động được tích hợp bên
trong 89C51. Khi sử dụng 89C51, người ta chỉ cần nối thêm tụ thạch anh và các
tụ. Tần số tụ thạch anh thường là 12 Mh – 24 Mh.
1.1.3 Cấu trúc bên trong của IC AT89C51
SVTH: …………… Trang 14
Mạch Led Trái Tim
Cấu trúc bên trong 89C51 bao gồm ROM và RAM. RAM bao gồm nhiều
thành phần: phần lưu trữ đa dụng, phần lưu trữ địa chỉ hóa từng bit, các bank
thanh ghi và các thanh ghi chức năng đặc biệt.
89C51 có bộ nhớ theo cấu trúc Harvard: có những vùng nhớ riêng biệt cho
chương trình và dữ liệu. Chương trình và dữ liệu có thể chứa bên trong 89C51
nhưng 89C51 vẫn có thể kết nối với 64 k byte bộ nhớ chương trình và 64 k byte bộ
nhớ dữ liệu mở rộng.
SVTH: …………… Trang 15
Mạch Led Trái Tim
Ram bên trong 89C51 được phân chia như sau:
• Các bank thanh ghi có địa chỉ từ 00H đến 1FH.
• Ram địa chỉ hóa từng bit có địa chỉ từ 20H đến 2FH.
• Ram đa dụng từ 30H đến 7FH.
• Các thanh ghi chức năng đặc biệt từ 80H đến FFH.
1.1.3.1 RAM đa dụng
Vùng nhớ Ram đa dụng gồm có 80 byte địa chỉ từ 30H – 7FH .Vùng nhớ
bank thanh ghi 32 byte từ 00H – 1FH cũng có thể dung làm vùng nhớ Ram đa

dụng. Mọi địa chỉ trong vùng Ram đa dụng đều có thể truy xuất tự do dùng kiểu
địa chỉ trực tiếp hoặc gián tiếp. Bộ nhớ ngan xếp của vi điều khiển dùng bộ nhớ
Ram nội nên dung lượng bộ nhớ ngăn xếp nhỏ trong khi đó các bộ vi xử lý bên
ngoài làm bộ nhớ ngăn xếp nên dung lượng tùy ý mở rộng.
1.1.3.2 RAM địa chỉ hóa từng bit
89C51 chứa 210 bit được địa chỉ hóa từng bit, trong đó 128 bit chứa ở các
byte có địa chỉ từ 20H đến 2FH, các bit còn lại chứa trong nhóm thanh ghi chức
năng đặc biệt.
Ý tưởng truy xuất từng bit bằng phần mềm là một đặc tính mạnh của vi điều
khiển nói chung. Các bit có thể được đặt, xóa, and, or,… với 1 lệnh đơn. Ngoài ra
các port cũng có thể truy xuất được từng bít làm đơn giản phần mềm xuất nhập
từng bit.
1.1.3.3 Các Bank thanh ghi
Bộ lệnh 89C51 hỗ trợ 8 thanh ghi có tên là R0 đến R7 và theo mặc định (sau
khi reset hệ thống), các thanh ghi nàyở các địa chỉ 00H đến 07H.
Đây là lệnh 1 byte dùng địa chỉ thanh ghi. Tuy nhiên có thể thi hành bằng
lệnh 2 byte dùng địa chỉ trực tiếp nằm trong byte thứ 2: MOV A, 05H.
SVTH: …………… Trang 16
Mạch Led Trái Tim
Lệnh dùng các thanh ghi R0 đến R7 thì sẽ ngắn hơn và nhanh hơn nhiều so
với lệnh tương ứng dùng địa chỉ trực tiếp.
Bank thanh ghi tích cực bằng cách thay đổi các bit trong từ trạng thái chương
trình (PSW). Giả sủ thanh ghi thứ 3 đang được truy xuất, lệnh sau đây sẽ di
chuyển nội dung của thanh ghi A vào ô nhớ ram có địa chỉ 18H:
MOV R0, A.
1.1.3.4 Các thanh ghi có chức năng đặc biệt
89C51 có 21 thanh ghi chức năng đặc biệt (SFR: Special Funtion Register) ở
vùng trên của RAM nội từ địa chỉ 80H đến FFH.
Chú ý rằng tất cả 128 địa chỉ từ 80H đến FFH không được định nghĩa, chỉ có
21 thanh ghi chức năng đặc biệt được định nghĩa sẵn các địa chỉ.

Các thanh ghi port xuất nhập:
Các port của 89C51 bao gồm port 0 ở địa chỉ 80H, port 1 ở địa chỉ 90H, port 2 ở
địa chỉ A0H, và port3 ở địa chỉ B0H. tất cả các port này đều có thể truy xuất từng
bit nên rất thuận tiện trong khả năng giao tiếp.
Các thanh ghi timer:
SVTH: …………… Trang 17
Mạch Led Trái Tim
89C51 có chứa 2 bộ định thời/ đếm 16 bit được dùng để:
• Định khoảng thời gian.
• Đếm sự kiện.
• Tạo tốc độ baud cho port nối tiếp trong 89C51.
Trong các ứng dụng định khoảng thời gian, người ta lập trình timer ở những
khoảng đều đặn và đặt cờ tràn timer. Cờ được dùng để đồng bộ hóa chương trình
để thực hiện một tác động như kiểm tra trạng thái của các ngõ vào hoặc gửi sự
kiện ra các ngõra. Các ứng dụng khác có thể sử dụng việc tạo xung nhịp đều đặn
của timer để đo thời gian trôi qua giữa hai sự kiện (ví dụ đo độ rộng xung ).
Khởi động và truy xuất thanh ghi timer: Thông thường các thanh ghi được
khởi động một lần đầu ở chương trình để đặt ở chế độ làm việc đúng. Sau đó,
trong thân chương trình, các thanh ghi timer được cho chạy, dừng, các bit được
kiểm tra và xóa, các thanh ghi timer được đọc và cập nhật…. theo đòi hỏi các ứng
dụng.
Các thanh ghi port nối tiếp:
89C51 chứa một port nối tiếp dành cho việc trao đổi thông tin với các thiết bị
nối tiếp như máy tính, modem hoặc giao tiếp nối tiếp với các IC khác. Một thanh
ghi gọi là bộ đệm dữ liệu nối tiếp (SBUF) ở địa chỉ 99H sẽ giữ cả 2 dữ liệu truyền
và dữ liệu nhận. Khi truyền dữ liệu thì ghi lên SBUF, khi nhận dữ liệu thì đọc
SBUF. Các mode vận hành khác nhau được lập trình qua thanh ghi điều khiển port
nối tiếp SCON ở địa chỉ 98H.
Các thanh ghi ngắt:
Một ngắt là sự xảy ra một điều kiện, một sự kiện mà nó gây ra treo tạm thời

thời chương trình chính trong khi điều kiện đó được phục vụ bởi một chương
trình khác.
Các ngắt đóng một vai trò quan trọng trong thiết kế và cài đặt các ứng dụng vi
điều khiển. Chúng cho phép hệ thống đáp ứng bất đồng bộ với một sự kiện và giải
quyết sự kiện đó trong khi một chương trình khác đang thực thi.
SVTH: …………… Trang 18
Mạch Led Trái Tim
89C51 có cấu trúc 5 nguồn ngắt, 2 mức ưu tiên. Các ngắt bị cấm sau khi reset
hệ thống và sẽ được cho phép bằng việc ghi thanh ghi cho phép ngắt (IE) ở địa chỉ
A8H, cả 2 thanh ghi được địa chỉ hóa từng bit.
Tổ chức ngắt của 89C51: Có 5 nguồn ngắt ở 89C51: 2 ngắt ngoài, 2 ngắt từ
timer và 1 ngắt port nối tiếp. Tất cả các ngắt theo mặc nhiên đều bị cấm sau khi
reset hệ thống và được cho phép từng cái một bằng phần mềm.
Khi có hai hoặc nhiều ngắt đồng thời, hoặc một ngắt xảy ra khi một ngắt khác
đang được phục vụ, có cả hai sự tuần tự hỏi vòng và sơ đồ ưu tiên hai mức dùng
để xác định việc thực hiện các ngắt. Việc hỏi vòng tuần tự thì cố định nhưng ưu
tiên ngắt thì có thể lập trình được.
SVTH: …………… Trang 19
Mạch Led Trái Tim
Thanh ghi điều khiển công suất:
Thanh ghi điều khiển công suất (PCON) ở địa chỉ 87H chứa các bit điều khiển.
CHƯƠNG II: SƠ ĐỒ MẠCH
1 Tổng quan và tính toán cho LED phát quang
1.1 Hoạt động và phân cực cho LED
LED phát quang được phát sáng khi chúng ta cấp nguồn cho nó thì nó sẽ phát
sáng. Có rất nhiều LED phát quang với mầu sắc, kích thước chủng loại khác nhau.
Và được ứng dụng trong thắp sáng, trang trí
SVTH: …………… Trang 20
Mạch Led Trái Tim


Bản chất của LED chính là một diode có khả năng phát sáng khi phân cực thuận.
Khi Led sáng thi điện áp rơi trên LED có giá trị nhỏ nhất là 0.7V và lớn nhất gần
2V tùy từng loại LED. Tùy vào từng loại LED mà có giá trị dòng qua LED khác
nhau để LED sáng bình thường. Thông thường thì nguồn cấp cho LED 3V thì
chúng ta không cần điện trở hạn dòng nhưng đối với nhiều mạch người ta không
thể dùng thêm một nguồn nữa nên người ta dùng nguồn cho LED chung với nguồn
điều khiển (5V) và lắp thêm con điện trở nối tiếp cho LED. Mục đích là để hạn
dòng cho LED không cho dòng qua LED lớn hơn giá trị định mức. Nếu mà quá
dòng thì LED sẽ cháy.
1.2 Cách tính toán điện trở hạn dòng cho LED
Nếu chúng ta sử dụng nguồn 3V thì không cần phải điện trở mà có thể lắp trực
tiếp được nhưng nếu mà cho nguồn lớn hơn 3V thì cần phải có thêm một con điện
SVTH: …………… Trang 21
Mạch Led Trái Tim
trở hạn dòng cho LED

Chúng ta áp dụng lý thuyết mạch điện vào tính toán điện trở này như sau:
R = (Vcc - Uled)/Iled
với Uled là điện áp rơi trên LED phát quang. Nằm trong 0.7 ~ 2V tùy từng loại
LED
Iled là dòng điện định mức qua LED.
Dựa vào công thức đó chúng ta sẽ tính được giá trị điện trở cho vào cho từng loại
LED.
1.3 Điều khiển LED với 8051
LED phát quang chúng ta chỉ cần phân cực thuận là nó sẽ sáng.Trong 8501 chỉ
điều khiển được mức 1 (5V) và mức 0 (0V) nên do đó LED khi mắc vào chân của
8501 sẽ được điều khiển tắt hoặc mở tùy thuộc vào trạng thái của chân 8501 được
điều khiển như thế nào? Có hai cách mắc LED và chân 8051
+ Mắc ở chế độ xả dòng
SVTH: …………… Trang 22

Mạch Led Trái Tim

Với mắc ở chế độ này thì LED sẽ sáng rất tối vì công suất của chân 8501 rất yếu.
Không đủ cấp dòng cho LED sáng với chế độ định mức. Nên phương pháp này sẽ
làm LED sáng tối nên không hiểu quả. Chân 8501 ở mức 1 thì LED sáng và mức 0
thì tắt
SVTH: …………… Trang 23
Mạch Led Trái Tim
+ Mắc ở chế độ hút dòng

Mắc kiểu này thì LED sáng hết công suất. Đây là phương pháp ghép trực tiếp
nhưng vi xử lý nó chỉ chịu được một giá trị dòng nhất định qua nó. Nếu mà quá
nhiều LED ghép nối thế này thì tất cả dòng sẽ qua vi xử lý gây ra quá dòng trên vi
xử lý gây nên cháy chíp và chíp nóng không hoạt động được lâu. Phương pháp này
chỉ mang tính lắp ít LED và điều khiển không đồng thời. Giải pháp là gắn thêm
một transitor đệm. Đối với mắc kiểu này thì mức 1 thì LED tắt và mức 0 thì LED
tắt.
Điều khiển LED đơn này cũng rất là đơn giản. Nó dựa vào cách ghép nối với vi xử
lý và đưa mức cần thiết ra chân vi xử lý thì LED sẽ sáng và tắt theo ý muốn của
chúng ta.
2 Mạch trái tim với 32 LED ghép nối với 8051
2.1 Mô phỏng bằng proteus
SVTH: …………… Trang 24
Mạch Led Trái Tim
2.2 Mô phỏng mạch trên Layout
SVTH: …………… Trang 25

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×