Mục lục
Trang
Lời mở đầu 2
Lời cảm ơn 4
Nhận xét của giáo viên hướng dẫn 6
Nhận xét của giáo viên phản biện 8
Chương I: CƠ SỞ LÝ THUYẾT 10
1. Họ Vi điều khiển 8051 và IC 89V51RB2/RC2/RD2 10
1.1 Giới thiệu khái quát họ vi điều khiển MSC – 51 10
1.2. Vi điều khiển 89V51RB2/RC2/RD2 10
1.3. Ngôn ngữ lập trình hợp ngữ 8051 42
2.Điện trở 48
2.1.Khái nệm 48
2.2.Cách đọc điện trở 48
3. Tụ điện 49
3.1.Khái niệm 49
3.2.Phân loại 49
4.Điot53
4.1.Khái niệm 53
4.1 .Thể loại đai ốt 54
5.Tranzitor 55
6.Led 7 đoạn 57
7.IC.7805:IC ổn áp 5v 58
Chương II:Thiết kế hệ thống mạch 60
1.Thiết kế phần cứng 60
1.1. Sơ đồ nguyên lý 60
1.2. Chức năng từng khối 60
2. Lưu đồ giải thuật và chương trình cho vi điều khiển 61
2.1 Lưu đồ giải thuật 62
2.2 Chương trình cho vi điều khiển 65
3. Nguyên lý hoạt động 68
4. Quá trình thi công 69
Chương III: Kết luận 69
1 Các vấn đề đã làm được 69
2 Kết quả đạt được 69
3 Nhược điểm 70
4 Khắc phục và hướng phát triển của đề tài 70
Tài liệu tham khảo 70
Lời mở đầu
Hiện nay, máy vi tính đã và đang được sử dụng rộng rãi và phổ biến
trong xã hội cũng như trong công nghiệp. Với lợi thế là tốc độ xử lý
nhanh, có thể xử lý hàng tỷ phép tính trong một giây, nó đã và đang
mang đến những thay đổi to lớn trong khoa học và công nghệ cũng
như trong đời sống hàng ngày. Từ việc giúp soạn thảo văn bản, tính
toán các bảng biểu, chơi game… đến việc dùng để điều khiển các dây
chuyển công nghiệp hiện đại. Ngày nay, các thiết bị máy móc ngày
càng trở nên thông minh, tự động hóa cao, các công việc được thực
hiện với hiệu quả cao… thì máy tính trở thành bộ phận không thể
thiếu.
Đối với sinh viên chuyên ngành điện tử, đây là một lĩnh vực mới, hứa
hẹn và mở ra nhiều triển vọng. Để góp phần tạo nền tảng ban đầu cho
việc học tập, tìm hiểu về ứng dụng máy tính trong điều khiển, chúng
tôi xin đề nghị thực hiện đề tài: “Mạch báo giờ dùng trong môn chơi
cờ tốc độ”.
Trong quá trình thực hiện đề tài này, mặc dù chúng tôi đã rất cố gắng,
xong chắc chắn không tránh khỏi những thiếu sót. Rất mong nhận sự
góp ý, phê bình và chỉ dẫn của quí thầy cô và bạn đọc.
Sinh viên thực hiện
Nguyễn Bá Nghĩa
Đỗ Xuân Linh
Lời cảm ơn
Cuốn đồ án này được hoàn thành tốt đẹp theo đúng thời gian quy
định của nhà trường cũng như của khoa.Việc đạt được kết quả như
trên không chỉ là sự nỗ lực của chúng tôi mà còn sự giúp đỡ, chỉ bảo
của thầy hướng dẫn, của quý thầy cô và các bạn sinh viên.
Em xin chân thành cám ơn:
– Trường Đại học Công nghiệp Thành phố Hồ Chí Minh, đặc biệt là
Khoa điện tử đã tạo điều kiện thuận lợi cho chúng tôi thực hiện và
hoàn thành đồ án này
– Sự giúp đỡ và chỉ bảo tân tình của Thầy hướng dẫn Nguyễn Văn
Cường trong quá trình làm đồ án.
– Các bạn sinh viên của lớp NCDTB1,… đã giúp đỡ chúng tôi rất
nhiều mặt: như phương tiện, tài liệu than khảo, ý kiến …
Nhận xét của giáo viên hướng dẫn
Sinh viên thực hiện : Nguyễn Bá Nghĩa
Đỗ Xuân Linh
Lớp : NCDT1B
Giáo viên hướng dẫn : Nguyễn Văn Cường
TÊN ĐỀ TÀI :
MẠCH BÁO GIỜ DÙNG TRONG MÔN CHƠI CỜ TỐC ĐỘ
Nhận xét của giáo viên phản biện
Sinh viên thực hiện : Nguyễn Bá Nghĩa
Đỗ Xuân Linh
Lớp : NCDT1B
Giáo viên hướng dẫn : Nguyễn Văn Cường
TÊN ĐỀ TÀI :
MẠCH BÁO GIỜ DÙNG TRONG MÔN CHƠI CỜ TỐC ĐỘ
Chương I
CƠ SỞ LÝ THUYẾT
1. Họ Vi điều khiển 8051 và IC 89V51RB2/RC2/RD2
1.1 Giới thiệu khái quát họ vi điều khiển MSC – 51
MCS – 51 là một họ vi điều khiển do Intel phát triển và sản xuất. Một
số nhà sản xuất được phép cung cấp các IC tương thích với các sản
phẩm MCS – 51 của Intel là Siemens, Advanced Micro Devices, Fujitsu,
Philips, Atmel… Vi mạch tổng quát của họ MSC – 51 là chip 8051
Chip 8051 có một số đặt trưng cơ bản sau:
– Bộ nhớ chương trình bên trong: 4KB (ROM)
– Bộ nhớ dữ liệu bên trong: 128 byte (RAM)
–Bộ nhớ chương trình bên ngoài: 64KB (ROM)
– Bộ nhớ dữ liệu bên ngoài: 64KB (RAM)
– 4 port xuất nhập (I/O port) 8 bit
– 2 bộ định thời 16 bit.
– Mạch giao tiếp nối tiếp.
– Bộ xử lý bit (thao tác trên các bit riêng lẻ)
– 210 vị trí nhớ được định địa chỉ, mỗi vị trí 1 bit.
– Nhân / chia trong 4µs
Ngoài ra, tùy theo số hiệu sản xuất mà chúng có những khác biệt về
bộ nhớ và bộ định thời/bộ đếm như trong bảng so sánh dưới đây:
Số hiệu sản
xuất
Bộ nhớ chương trình
trên chip
Bộ nhớ dữ liệu
trên chip
Số bộ định thời
(bộ đếm)
8031
8051
8751
8951
0KB
4KB PROM
4KB UV – EPROM
4KB FLASH ROM
128 byte
128 byte
128 byte
128 byte
2
2
2
2
8032
8052
8752
8952
0KB
8KB PROM
8KB UV – EPROM
8KB FLASH ROM
256 byte
256 byte
256 byte
256 byte
3
3
3
3
1.2. Vi điều khiển 89V51RB2/RC2/RD2
1.2.1 Khái quát chung
89V51RB2/RC2/RD2 là vi điều khiển 80C51 có 64kB Flash và 1024bytes
(1kB) bộ nhớ dữ liệu RAM.
Tính năng đặc biệt của 89V51RB2/RC2/RD2 là ở chế độ hoạt động mode X2.
Người thiết kế có thể qui ước chạy ứng dụng của mình ở chế độ 12 chu kỳ
xung nhịp trên 1 chu kỳ máy hoặc chọn chế độ X2 với 6 chu kỳ xung nhịp
trên 1 chu kỳ máy.
Bộ nhớ chương trình Flash cho phép lập trình ISP hoặc/và song song. Chế
độ lập trình song song được đưa ra để thích ứng với tốc độ cao, giảm thời
gian và giá thành.
Bộ nhớ chương trình 89V51RB2/RC2/RD2 có tính năng IAP (In-Application
Programmable), cho phép cấu hình lại bộ nhớ Flash trong khi chạy ứng
dụng.
Các tính năng:
– CPU 80C51
– Hoạt động ở 5VDC trong tầm tần số dao động đến 40MHz.
– 16/32/64 kB bộ nhớ chương trình trên chip với tính năng ISP (In-System
Programming) và IAP (In-Application Programming)
– Sử dụng chế độ 12 chu kì xung nhịp (mặc định) hoặc 6 chu kỳ xung nhịp
được chọn bằng phần mềm hoặc ISP
– SPI (Serial Peripheral Interface) và tăng cường
UART
– 5 PCA (Programmable Counter Array) với chức
năng PWM / capture/ compare 16bits.
– 4 Port I/O (xuất nhập) 8 bit. 3 Port có dòng lớn
(16mA trên mỗi chân)
– 3 Timers/Couters 16 bit
– Watchdog Timer có thể lập trình được
– 8 nguồn ngắt với 4 mức độ ưu tiên.
– 2 thanh ghi DPTR
– Chế độ IEM mức thấp
– Thích hợp mức Logic của TTL và CMOS
– Phát hiện nguồn yếu
– Chế độ nguồn yếu
– Chế độ nguồn yếu
Hình1.1 – Sơ đồ khối của CPU 80C51
Hình 1.2 – Sơ đồ khối của 89V51RB2/RC2/RD2
Hình 1.3 – Sơ đồ chân của
89V51RB2/RC2/RD2 như sau:
1.2.2 Chức năng của các chân
– Port 0: (P0.0 đến P0.7) có số chân từ 39 đến 32, Port xuất / nhập.
Port 0 là một port xuất/nhập song hướng cực máng hở 8 bit. Nếu
được sử dụng như là một ngõ xuất thì mỗi chân có thể kéo 8 ngõ vào
TTL. Khi mức 1 được viết vào các chân của port 0, các chân này có
thể được dùng như là các ngõ nhập tổng trở cao.
Port 0 có thể được định cấu hình để hợp kênh giữa bus địa chỉ và bus
dữ liệu (phần byte thấp) khi truy cập đến bộ nhớ dữ liệu và bộ nhớ
chương trình ngoài. Ở chế độ này, P0 có các điện trở pullup bên
trong.
Port 0 cũng nhận các byte code (byte mã chương trình) khi lập trình
Flash, và xuất ra các byte code khi kiểm tra chương trình. Cần có các
điện trở pullup bên ngoài khi thực hiện việc kiểm tra chương trình.
– Port 1: (P1.0 đến P1.7) có số chân từ 1 đến 8, Port xuất / nhập.
Port 1 là một port xuất/nhập song hướng 8 bit có các điện trở pullup
bên trong. Các bộ đệm ngõ ra của port 1 có thể kéo hoặc cung cấp 4
ngõ nhập TTL. Khi mức 1 được viết vào các chân của port 1, chúng
được kéo lên cao bởi các điện trở pullup nội và có thể được dùng
như là các ngõ nhập. Nếu đóng vai trò là các ngõ nhập, các chân của
port 1 (được kéo xuống thấp qua các điện trở bên ngoài) sẽ cấp dòng
IIL do các điện trở pullup bên trong. P1.5, P1.6, P1.7 có dòng điều
khiển ra cao 16mA.
Port 1 cũng đóng vai trò là ngõ vào của địa chỉ byte thấp ở chế độ lập
trình cho ROM và kiểm tra.
– P1.0 – T2 (Chân xuất / nhập): Ngõ vào đếm của Timer/ Counter 2 hoặc ngõ ra
xung (Clock out) từ Timer/ Counter 2.
– P1.1 – T2EX (Chân nhập): Điều khiển hướng và khởi động timer/ Counter 2 ở
chế độ Capture/reload.
– P1.2 – ECI (Chân nhập): Ngõ vào xung nhịp. Tín hiệu này là nguồn xung nhịp
ngoài cho chức năng PCA.
– P1.3 – CEX0 (Chân xuất / nhập): Ngõ xuất nhập (I/O) bên ngoài của
Capture/compare cho PCA Module 0.
– P1.4 (Chân xuất / nhập):
+ : Chọn cổng phụ vào cho SPI.
+ CEX1: Ngõ xuất nhập (I/O) bên ngoài của Capture/compare cho PCA Module 1.
– P1.5 (Chân xuất / nhập):
+ MOSI: Ngõ ra chính, ngõ vào phụ cho SPI.
+ CEX2: Ngõ xuất nhập (I/O) bên ngoài của Capture/compare cho PCA Module 2.
– P1.6 (Chân xuất / nhập):
+ MISO: Ngõ vào chính, ngõ ra phụ cho SPI.
+ CEX3: Ngõ xuất nhập (I/O) bên ngoài của Capture/compare cho PCA Module 3.
– P1.7 (Chân xuất / nhập):
+ SCK: Ngõ ra chính, ngõ vào phụ cho SPI.
+ CEX4: Ngõ xuất nhập (I/O) bên ngoài của Capture/compare cho PCA Module 4.
– Port 2 (P2.0 đến P2.7) có số chân từ 21 đến 28, Port xuất / nhập.
Port 2 la một port xuất/nhập song hướng 8 bit có các điện trở pullup bên trong.
Các bộ đệm ngõ ra của port 2 có thể kéo hoặc cung cấp 4 ngõ vào TTL. Khi các
mức 1 được viết vào các chân của port 2 thì chúng được kéo lên cao bởi các
điện trở pullup nội và có thể được dùng
như các ngõ vào. Khi được dùng như các ngõ vào, các chân của port
2 (được kéo xuống qua các điện trở bên ngoài) sẽ cấp dòng IIL do có
các điện trở pullup bên trong.
Port 2 là địa chỉ byte cao của khi đọc từ bộ nhớ chương trình ngoài và
khi truy cập bộ nhớ dữ liệu ngoài dùng các địa chỉ 16 bit (MOVX
@DPTR). Ở chế độ này, nó dùng các điện trở pullup nội "mạnh" khi
phát ra các mức 1.
Port 2 cũng nhận các bit cao của địa chỉ và một vài tín hiệu điều khiển
khi lập trình và kiểm tra bộ nhớ ROM.
– Port 3 (P3.0 đến P3.7) có số chân từ 10 đến 17, Port xuất / nhập
Port 3 là một port xuất-nhập song hướng 8 bit có điện trở pullup nội
bên trong. Các bộ đệm ngõ ra của port 3 có thể kéo hoặc cung cấp 4
ngõ vào TTL. Khi các mức 1 được viết vào các chân của port 3 thì
chúng được kéo lên cao bởi các điện trở pullup nội và có thể được
dùng như các ngõ vào. Khi được dùng như các ngõ vào, các chân của
port 3 (được kéo xuống qua các điện trở bên ngoài) sẽ cấp dòng IIL do
có các điện trở pullup bên trong.
Port 3 cũng nhận một số tín hiệu điều khiển và một phần bit địa chỉ
cao trong quá trình lập trình và kiểm tra.
– P3.0 – RXD (Chân nhập): Ngõ vào của Port nối tiếp.
– P3.1 – TXD (Chân xuất): Ngõ ra của Port nối tiếp.
– P3.2 – (Chân nhập): Ngõ vào ngắt ngoài 0.
– P3.3 – (Chân nhập): Ngõ vào ngắt ngoài 1.
– P3.4 – T0 (Chân nhập): Ngõ vào đếm của Timer/Counter 0.
– P3.5 – T1 (Chân nhập): Ngõ vào đếm của Timer/Counter 1.
– P3.6 – (Chân xuất): Điều khiển ghi vào bộ nhớ dữ liệu ngoài.
– P3.7 – (Chân xuất): Điều khiển đọc từ bộ nhớ dữ liệu ngoài.
– (Program Store Enable): Chân 29, chân xuất / nhập.
Khi sử dụng bộ nhớ chương trình trong chip, không hoạt
động (mức cao). Khi sử dụng bộ nhớ chương trình ngoài,
được tích cực 2 lần trong mỗi chu kì máy, ngoại trừ sự khích
hoạt được bỏ qua trong khi kết nối bộ nhớ chương trình ngoài
. Sự thay đổi cưỡng bức mức cao sang thấp trên trong khi
ngõ vào RST đang ở mức cao trong hơn 10 chu kì máy sẽ đưa
vi điều khiển vào chế độ lập trình host từ bên ngoài.
– RST (Reset): Chân 9, chân nhập.
Trong khi bộ dao động đang chạy, vi điều khiển sẽ được Reset
khi đặt mức cao vào chân này trong 2 chu kỳ máy. Nếu chân
được điều khiển bằng cách chuyển tiếp mức cao sang thấp
trong khi chân RST giữ ở mức cao thì Vi điều khiển sẽ vào chế
độ host từ bên ngoài, còn không thì Vi điều khiển sẽ vào chế
độ hoạt động bình thường.
– (External Access Enable): Chân 31, chân nhập
Chân phải được kết nối với điện áp VSS khi cho phép vi điều khiển truy cập mã từ
bộ nhớ chương trình bên ngoài. phải được đưa lên điện áp VDD khi thực thi
chương trình bên trong. Tuy nhiên, khóa bảo vệ level 4 sẽ vô hiệu hóa , chương
trình thực thi chỉ chương thực hiện từ bộ nhớ chương trình bên trong. Chân có thể
chịu đựng điện áp đến 12V.
– (Address Latch Enable): Chân 30, chân xuất / nhập.
ALE là tín hiệu ngõ ra để chốt byte thấp của địa chỉ trong khi truy cập bộ nhớ ngoài.
Chân này cũng là ngõ nhập xung lập trình () khi lập trình Flash.
Khi hoạt động bình thường, ALE được phát với một tỷ lệ không đổi là 1/6 tần số bộ
dao động và có thể được dùng cho các mụch đích timing và clocking bên ngoài.
Một xung ALE sẽ bị bỏ qua mỗi khi truy cập bộ nhớ dữ liệu ngoài. Tuy nhiên, nếu
AO được đưa lên mức 1 sẽ vô hiệu hóa chân .
– XTAL1 và XTAL2: chân 18 và 19
XTAL1 và XTAL2 là hai ngõ vào và ra của một bộ khuếch đại dao động nghịch được
cấu hình để dùng như một bộ dao động trên chip.
– VDD và VSS: Chân nguồn và chân Gound của Vi điều khiển.
1.2.3 Tổ chức bộ nhớ
89V51RB2/RC2/RD2 có bộ nhớ theo cấu trúc Harvard: có những vùng bộ nhớ riêng
biệt cho chương trình và dữ liệu. Như đã nói ở trên, cả chương trình và dữ liệu có
thể ở bên trong, dù vậy chúng có thể được mở rộng bằng các thành phần ngoài lên
đến tối đa 64 Kbytes bộ nhớ chương trình và 64 Kbytes bộ nhớ dữ liệu.
1.2.3.1 Bộ nhớ chương trình
89V51RB2/RC2/RD2 gồm có 2 khối bộ nhớ chương trình bên trong. Block 0 có
16/32/64 kB và được phân chia thành 128/256/512 sectors, mỗi sector gồm có 128
Bytes. Block 1 bao gồm chương trình IAP/ISP và có thể cho phép nó trở thành 8kB
đầu tiên trong bộ nhớ user code. Block 0 này được kích hoạt bằng cách kết hợp
Software Reset Bit (SWR) tại FCF.1 và Bank Select Bit (BSEL) tại FCF.0 (địa chỉ RAM
B1H).
Quá trình tuần tự sau khi nguồn được bật, chương trình boot sẽ tự
động thực thi và cố gắng lấy tín hiệu autobaud từ máy chủ. Nếu
không có quá trình này xảy ra trong vòng 400ms và bit cờ SoftICE
không được bật, chương trình boot sẽ tự động vào đoạn chương
trình user code.
1.2.3.2 Bộ nhớ dữ liệu
P89V51RB2/RC2/RD2 có 1 kB bộ nhớ RAM được chia thành 3 phần:
–128 Byte thấp (00H to 7FH) là địa chỉ truy xuất trực tiếp và gián tiếp.
Được chia làm 3 vùng: RAM đa chức năng, RAM định địa chỉ từng bit
và các dãy thanh ghi.
+ Vùng RAM đa chức năng: gồm có 80 Byte RAM. Địa chỉ truy xuất từ
30H đến 7FH. Mọi địa chỉ trên vùng RAM đa chức năng đều có thể
truy xuất theo kiểu trực tiếp hoặc gián tiếp.
+ Vùng RAM định địa chỉ bit: gồm 128 bit được định địa chỉ. Địa chỉ
truy xuất từ 20H đến 2FH. Kiểu truy xuất dữ liệu là trực tiếp, hoặc
gián tiếp hoặc theo từng bit. Vùng RAM này cho phép xử lý từng bit
dữ liệu riêng lẻ mà không ảnh hưởng đến các bit khác trong Byte.
+ Các dãy thanh ghi: gồm 4 dãy thanh ghi, mỗi thanh ghi chứa 8
thanh ghi. Địa chỉ truy xuất từ 00H đến 1FH. Kiểu truy xuất dữ liệu là
trực tiếp, gián tiếp và thanh ghi. Vùng này cho phép truy xuất dữ liệu
nhanh, lệnh truy xuất đơn giản và ngắn gọn. Ở chế độ mặc định thì
dãy thanh ghi tích cực là dãy thanh ghi 0. Có thể thay đổi dãy tích
cực bằng cách thay đổi các bit chọn dãy thanh ghi RS1 và RS0 trong
thanh ghi PSW. Nếu chương trình chỉ sử dụng dãy thanh ghi 0 thì ta
có thể sử dụng vùng nhớ từ 08H đến 1FH cho các mục đích khác.
Nhưng nếu trong chương trình có sử dụng các dãy thanh ghi khác
thì phải cẩn thận khi sử dụng vùng nhớ này làm vùng nhớ dữ liệu.
này làm vùng nhớ dữ liệu.
Hình 1.4 – Tổ chức bộ nhớ
Thanh ghi Dãy 0 Dãy 1 Dãy 2 Dãy 3
R0 00H 08H 10H 18H
R1 01H 09H 11H 19H
R2 02H 0AH 12H 1AH
R3 03H 0BH 13H 1BH
R4 04H 0CH 14H 1CH
R5 05H 0DH 15H 1DH
R6 06H 0EH 16H 1EH
R7 07H 0FH 17H 1FH
– Thanh ghi chức năng đặc biệt (special function registers) là địa chỉ chỉ truy cập trực tiếp,
có địa chỉ từ 80H đến FFH (địa chỉ các thanh ghi được trình bày trong phụ lục)
– 768 Byte RAM mở rộng (000H to 2FFH) là địa chỉ truy cập gián tiếp bằng cách dùng lệnh
MOVX và xóa bằng bit EXTRAM. Vùng RAM này sử dụng giống như 1 vùng RAM ngoài.
Chúng ta có thể kết hợp với RAM ngoài theo 2 trường hợp bằng cách sử dụng bit EXTRAM
trong thanh ghi AUXR.
1.2.4 Một số thanh ghi cơ bản
1.2.4.1 Thanh ghi A
E0H
E7H E6H E5H E4H E3H E2H E1H E0H
Chứa dữ liệu của các phép toán mà vi điều khiển xử lý.
1.2.4.2 Thanh ghi B
F0H
F7H F6H F5H F4H F3H F2H F1H F0H
Sử dụng kết hợp với thanh ghi A trong phép nhân và chia hai số 8 bit
– Phép nhân 2 số 8 bit không dấu, kết quả là số 16 bit. 8 bit cao chứa trong thanh
ghi B, 8 bit thấp chứa trong thanh ghi A.
– Phép chia 2 số 8 bit không dấu, kết quả là thương số và số dư. Thương số chứa
trong thanh ghi A, số dư chứa trong thanh ghi B.
1.2.4.3 Thanh ghi AUXR
1.2.4.4 Thanh ghi AUXR1
DPS (Data pointer select):
– Mức 0: DPTR0 được
chọn.
– Mức 1: DPTR1 được
chọn.
Hình 1.5 – Sử dụng thanh ghi DPTR
1.2.4.5 Thanh ghi PSW (program status word)
D0H
D7H D6H D5H D4H D3H D2H D1H D0H
CY AC F0 RS1 RS0 OV F1 P
– Cờ CY (Carry flag): Cờ nhớ, báo có nhớ hoặc mượn từ bit 7. CY = 0 nếu không có
nhớ từ bit 7 hoặc mượn tại bit 7. CY = 1 nếu có nhớ từ bit 7 hoặc mượn từ bit 7.
– Cờ AC (Auxiliary Carry Flag): cờ nhớ phụ, báo có nhớ hoặc mượn tại bit 3. AC =
0 nếu không có nhớ từ bit 3 hoặc mượn tại bit 3. CY = 1 nếu có nhớ từ bit 3hoặc mượn
từ bit 3.
– RS0, RS1 (Register Select): Bit chọn dãy thanh ghi, cho phép xác định dãy thanh
ghi tích cực.