Professional Documents
Culture Documents
Trường Đại Học Điện Lực Khoa Điều Khiển & Tự Động Hóa
Trường Đại Học Điện Lực Khoa Điều Khiển & Tự Động Hóa
ĐỒ ÁN VI XỬ LÝ
NGÀNH: TỰ ĐỘNG HÓA VÀ ĐIỀU KHIỂN THIẾT BỊ
CHUYÊN NGÀNH: TỰ ĐỘNG HÓA VÀ ĐIỀU KHIỂN THIẾT BỊ CÔNG
NGHIỆP
Đề tài: Thiết kế tín hiệu điều khiển đèn giao thông ngã tư
Giảng viên hướng dẫn: Cô Bùi Thị Duyên
Nhóm sinh viên: Nhóm 5
Sinh viên thực hiện: Hoàng Minh Hiếu 18810430046
Nguyễn Ngọc Hưng 18810430092
Phạm Việt Hùng 18810430043
Vũ Xuân Dương 18810430111
Lớp: D13TDH&DKTBCN1
HÀ NỘI,10/03/2022
MỤC LỤC
Với sự phát triển ngày càng mạnh mẽ và rộng lớn của nền khoa học kỹ thuật, các công
nghệ mới thuộc các lĩnh vực khác nhau cũng nhờ đó đã ra đời để đáp ứng những nhu cầu
của xã hội. Một trong số đó phải kể đến là kỹ thuật vi điều khiển. Hiện nay, kỹ thuật vi
điều khiển vẫn còn đang là một trong các lĩnh vực mới mẻ và đã được đưa vào giảng dạy
rộng rãi ở các trường Đại Học, Cao Đẳng trong các nước trên toàn thế giới. Tại trường
Đại Học Điện Lực, dưới sự giảng dạy và chỉ dẫn nhiệt tình của các thầy, cô đã mang lại
cho sinh viên rất nhiều những hiểu biết về Vi Điều Khiển và các ứng dụng của Vi Điều
Khiển trong đo lường và điều khiển. Trên tinh thần học đi đôi với hành, học gắn liền với
lao động, sản xuất và đời sống, nhóm sinh viên chúng em đã tìm hiểu và ứng dụng của Vi
Điều Khiển trong đồ án môn học này. Với sự hướng dẫn và chỉ dạy nhiệt tình của giảng
viên cô Bùi Thị Duyên, chúng em đã tiến hành đồ án “Nghiên cứu, thiết kế và chế tạo hệ
thống điều khiển đèn giao thông ngã tư. Chúng em đã rất cố gắng trong quá trình thực
hiện đề tài. Tuy nhiên, do thời gian không nhiều cũng như sự hạn chế về kiến thức nên
nội dung còn nhiều thiếu sót. Chúng em rất mong nhận được sự góp ý của các thầy cô và
các bạn sinh viên để báo cáo này của chúng em được hoàn thiện hơn.
Chúng em xin chân thành cảm ơn!
1
CHƯƠNG 1: PHƯƠNG ÁN THIẾT KẾ
2
CHƯƠNG 2: TỔNG QUAN VỀ HỌ VI ĐIỀU KHIỂN
3
trợ khác cần thiết như : bộ nhớ dữ liệu, bộ nhớ chương trìn , bộ chuyển đổi AID, khối
điều khiển, khối hiển thị, điều khiển máy in, hối đồng hồ và lịch là những linh kiện nằm ở
bên ngoài được nối vào bộ vi xử lí.
Mãi đến năm 1976 công ty INTEL (Interlligen-Elictronics) mới cho ra đời bộ vi điều
khiển đơn chip đầu tiên trên thế giới với tên gọi 8048. Bên cạnh bộ xử lí trung tâm 8048
còn chứa bộ nhớ dữ liệu, bộ nhớ chương trình, bộ đếm và phát thời gian các cổng vào và
ra Digital trên một chip.
Các Công ty khác cũng lần lượt cho ra đời các bộ vi điều khiển 8bit tương tự như 8048 và
hình thành họ vi điều khiển MCS-48 (Microcontroller-sustem-48).
Đến năm 1980 công ty INTEL cho ra đời thế hệ thứ hai của bộ vi điều khiển đơn chip với
tên gọi 8051. Và sau đó hàng loạt các vi điều khiển cùng loại với 8051 ra đời và hình
thành họ vi điều khiển MCS-51 .
Đến nay họ vi điều khiển 8 bit MCS51 đã có đến 250 thành viên và hầu hết các công ty
hàng dẫn hàng đầu thế giới chế tạo. Đứng đầu là công ty INTEL và rất nhiều công ty
khác như: AMD, SIEMENS, PHILIPS, DALLAS, OKI …
Ngoài ra còn có các công ty khác cũng có những họ vi điều khiển riêng như:
Họ 68HCOS của Công ty Motorola
Họ ST62 của Công ty SGS-THOMSON
Họ H8 của Công ty Hitachi
Họ pic cuả Công ty Microchip
2.3 GIỚI THIỆU VỀ VI ĐIỀU KHIỂN AT89C51
2.3.1 Mô tả
AT9C51 là một hệ vi tính 8 bit đơn chíp CMOS có hiệu suất cao,công suất nguồn tiêu thụ
thấp và có 4Kbyte bộ nhớ ROM Flash xoá được lập trình được.
Chip này được sản xuất dựa vào công nghệ bộ nhớ không mất nội dung có độ tích hợp
cao của Atmel.
Chip AT89C51 cũng tương thích với tập lệnh và các chân ra của chuẩn công nghiệp
MCS-51. Flash trên chip này cho phép bộ nhớ chương trình được lập
trình lại trên hệ thống hoặc bằng bộ lập trình bộ nhớ không mất nội dung qui ước.
Bằng cách kết hợp một CPU linh hoạt 8 bit với Flash trên một chip đơn thể, Atmel
89C51 là một hệ vi tính 8 bit đơn chip mạnh cho ta một giải pháp có hiệu quả về
4
chi phí và rất linh hoạt đối với các ứng dụng điều khiển.
5
Tần số hoạt động từ: 0Hz đến 24 MHz
3 mức khóa bộ nhớ lập trình
2 bộ Timer/counter 16 Bit
128 Byte RAM nội.
4 Port xuất /nhập I/O 8 bit.
Giao tiếp nối tiếp.
64 KB vùng nhớ mã ngoài
64 KB vùng nhớ dữ liệu ngoại.
Xử lý Boolean (hoạt động trên bit đơn).
210 vị trí nhớ có thể định vị bit.
4µs cho hoạt động nhân hoặc chia
2.3.2 Các cấu hình chân ra
Sơ đồ khối của AT89C51
6
2.3.3 Sơ lược các chân của at89c51
7
Port 2 là port có tác dụng kép. Được dùng như các đường xuất nhập hoặc byte cao của
bus địa chỉ đối với các thiết bị dùng bộ nhớ mở rộng.
Port 3: chân 10-17 (P3.0…P3.7)
Port 3 là port xuất nhập 8 bit 2 chiều có các điện trở kéo lên bên trong. Các chân của port
này có nhiều chức năng, các công dụng chuyển đổi có lien hệ với các đặc tính đặc biệt
của 8951
RST:
Ngõ vào reset. Mức cao trên chân này trong 2 chu kỳ máy trong khi bộ dao
động đang hoạt động sẽ reset AT89C51.
ALE/ PROG
Xung của ngõ ra cho phép chốt địa chỉ ALE (address latch enable) cho phép chốt byte
thấp của địa chỉ trong thời gian truy xuất bộ nhớ ngoài. Chân này cũng được dùng làm
ngõ vào xung lập trình ( PROG ) trong thời gian lập trình Flash.
Khi hoạt động bình thường, xung của ngõ ra ALE luôn luôn có tần số bằng 1/6 tần số của
mạch dao động trên chip, có thể được sử dụng cho các mục đích định thời từ bên ngoài
và tạo xung clock. Tuy nhiên cần lưu ý là một xung ALE sẽ bị bỏ qua trong mỗi chu kỳ
truy xuất bộ nhớ dữ liệu ngoài.
Khi cần, hoạt động cho phép chốt byte thấp của địa chỉ sẽ được vô hiệu hoá bằng cách set
bit 0 của thanh ghi chức năng đặc biệt có địa chỉ byte là 8EH. Khi bit này được set, ALE
chỉ tích cực tring thời gian thực thi lệnh MOVX hoặc
MOVC. Ngược lại chân này sẽ được kéo lên mức cao. Việc set bit không cho phép hoạt
động chốt byte thấp của địa chỉ sẽ không có tác dụng nếu bộ vi điều khiển đang chế độ
thực thi chương trình ngoài.
PSEN :
Chân cho phép bộ nhớ chương trình PSEN (program store enable) điều khiển truy xuất
bộ nhớ chuơng trình ngoài. Khi AT89C51 đang thực thi chương trình trong bộ nhớ
chương trình ngoài, PSEN tích cực 2 lần cho mỗi chu kỳ máy, ngoại trừ trường hợp 2 tác
động của PSEN bị bỏ qua cho mỗi truy xuất bộ nhớ dữ liệu ngoài.
EA / Vpp:
Chân cho phép truy xuất bộ nhớ ngoài EA (external access enable) phải được nối với
GND để cho phép chip vi điều khiển tìm nạp lệnh từ các vị trí nhớ của bộ nhớ chương
trình ngoài, bắt đầu từ địa chỉ 0000H cho đến FFFFH. Tuy nhiên cần lưu ý là nếu có bit
khoá 1(clock bit 1) được lập trình, EA sẽ được chốt bên trong khi reset.
8
EA nên nối với Vcc để thực thi chương trình trong chip.
Chân EA / Vpp còn nhận điện áp cho phép lập trình Vpp trong thời gian
lập trình cho Flash, điện áp này cấp cho các bộ phận có yêu cầu điện áp 12V.
XTAL 1:
Ngõ vào đến mạch khuyếch đại đảo dao động và ngõ vào đến mạch tạo xung clock bên
trong chip.
XTAL 2:
Ngõ ra từ mạch khuyết đại đảo của mạch dao động.
9
Hình 2.6 Sơ đồ chân AT89C52
AT89C52 có 8Kbyte bộ nhớ FLASH ROM bên trong để lưu chương trình, vì vậy. Vi
điều khiển có khả năng nạp xóa chương trình bằng điện lên đến 1000 lần. Dung lượng
RAM 128 byte, AT89C52 có 4 Port xuất/nhập 8 bit, có 2 bộ định thời 16 bit. Ngoài ra
AT89C52 còn có khả năng giao tiếp dữ liệu nối tiếp, có thể mở rộng không gian nhớ
chương trình và nhớ dữ liệu ngoài lên đến 64Kbyte.
AT89C52 được đóng gói theo kiểu hai hàng chân DIP gồm 40 chân cho các chức năng
khác nhau như vào.
10
Hình 2.7 Sơ đồ kết nối phần cứng AT89C52
2.5 Module thời gian thực DS1307
11
số chân Tên chân Mô tả
1,2 X1, X2 Bộ tạo dao động thạch anh được kết nối vào các chân này
3 V-Bat Chân kết nối với cực dương của nguồn pin
5,6 SCL và SDA Các chân giao tiếp I2C với CPU
12
Hình 2.10 Nguyên lí hoạt động của DS1307
IC có thể được cấp nguồn bằng nguồn 5V vào chân Vcc, khi mất điện nó sẽ tự động
chuyển sang chế độ hoạt động bằng pin, IC sẽ lấy nguồn bằng cell pin Lithium kết nối
với chân Vbat và Ground.
Các chân X1 và X2 được sử dụng để kết nối bộ dao động thạch, thường sử dụngThạch
anh 32,7KHz. Chân SQW được sử dụng để cung cấp sóng xung vuông PWM với các tần
số có thể điều khiển được trong phạm vi 1Hz, 4KHz, 8KHZ hoặc 32KHz.
Chân này cũng yêu cầu mắc một điện trở pull-up. Dữ liệu giữa CPU và IC RTC chỉ được
trao đổi thông qua giao thức I2C. Cả Đọc và ghi dữ liệu đều xảy ra thông qua giao tiếp
này. IC xuất dữ liệu thông tin chi tiết như đếm giây, phút, giờ, ngày, tháng, ngày trong
tuần và năm của RTC có giá trị lên đến 2100.
2.6 IC LM7805
LM7805 hay 7805 là IC điều chỉnh điện áp dương đầu ra 5V. Nó là IC của dòng ổn áp
dương LM78xx, được sản xuất trong gói TO-220 và các gói khác. IC này được sử dụng
rộng rãi trong các thiết bị thương mại và giáo dục. Nó cũng được sử dụng bởi nhiều
người đam mê điện tử và thợ mày mò do giá rẻ, dễ sử dụng và không cần nhiều linh kiện
13
bên ngoài. IC có nhiều tính năng tích hợp lý tưởng để sử dụng trong nhiều ứng dụng điện
tử như dòng điện đầu ra 1.5A, chức năng bảo vệ quá tải, bảo vệ quá nhiệt, dòng điện tĩnh
thấp, v.v.
14
Hình 2.12 Sơ đò chân IC LM7805
2.7 IC 74LS47
74LS47 là IC điều khiển / giải mã BCD sang 7 đoạn. Nó chấp nhận một số thập phân
được mã hóa nhị phân làm đầu vào và chuyển đổi nó thành một mẫu để điều khiển 7 đoạn
để hiển thị các chữ số từ 0 đến 9. Số thập phân được mã hóa nhị phân
IC 74LS47 chấp nhận bốn dòng dữ liệu đầu vào BCD (8421) và tạo ra phần bổ sung của
chúng bên trong. Dữ liệu được giải mã bằng bảy cổng AND / OR để điều khiển trực tiếp
LED 7 đoạn. Các đầu ra tương ứng với cấu hình cực dương chung (CA) của 7 đoạn.
15
Sơ đồ chân 74LS47
16
Hình 2.14 Sơ đồ 74LS47
Tính năng và thông số kỹ thuật 74LS47
Chức năng: Bộ giải mã, Bộ phân kên
Họ công nghệ: LS
VCC (Tối thiểu): 4,75V
VCC (Tối đa): 5,25V
Kênh: 1
Điện áp (Nom): 5V
Tần số tối đa ở điện áp bình thường: 35Mhz
tpd ở điện áp bình thường (Tối đa): 100 nsec
Cấu hình: 4: 7
Loại: Open-Collector
IOL (Tối đa): 3.2mA
IOH (Tối đa): -0.05mA
Định mức: Catalog
Phạm vi nhiệt độ hoạt động (C): 0 đến 70
17
Số bit (#): 7
Rò rỉ đầu vào kỹ thuật số (Tối đa): 5uA
ESD CDM (kV): 0,75
ESD HBM (kV): 2
18
CHƯƠNG 3 THIẾT KẾ MẠCH LẬP TRÌNH
Hình 3.1 Sơ đồ kết cấu cách bố trí các đèn tại các nút
3.2 Sơ đồ board của mạch điều khiển giao thông
19
3.3 Phần lập trình
Code đèn giao thông
20
21
Code lập trình đếm thời gian IC 1307
Sda bit p1.0
Scl bit p1.1
F_send_time bit 00h
F_send_date bit 01h
F_send bit 02h
Led equ p2.0
Seconds data 30h
Minutes data 31h
Hour data 32h
Day data 33h
Date data 34h
Month data 35h
Year data 36h
hour_val data 37h
22
Org 0000h
Ljmp main
Org 0003h ;ngat ngoai0
setb f_send_time
setb f_send_date
setb f_send
reti
Org 0030h
Main:
mov scon,#42h
mov tmod,#20h
mov a,pcon ;nhan doi toc do baud
setb acc.7
mov pcon,a
mov th1,#0ffh ;57600 11.0592mhz
setb tr1
setb it0 ;ngat ngoai 0 kich canh xuong
mov ie,#81h ;cho phep ngat ngoai0
call i2c_init
call ds1307_init
call ds1307_output
mov seconds,#31h
mov minutes,#31h
mov hour,#10h
while1:
jnb f_send,$
clr f_send
23
call send_uart_time
call send_uart_date
call __on_off_led
sjmp ___while1
Send_uart_time:
jb f_send_time,___send_time
jmp ___exit_send_time
send_time:
clr f_send_time
mov a,#'t'
call outchar
mov a,#'i'
call outchar
mov a,#'m'
call outchar
mov a,#'e'
call outchar
mov a,#' '
call outchar
call outchar
call ds1307_read_time
mov a,hour
swap a
anl a,#0fh
add a,#48
call outchar
mov a,hour
24
anl a,#0fh
add a,#48
call outchar
mov a,#':'
call outchar
mov a,minutes
swap a
anl a,#0fh
add a,#48
call outchar
mov a,minutes
anl a,#0fh
add a,#48
call outchar
mov a,#':'
call outchar
mov a,seconds
swap a
anl a,#0fh
add a,#48
call outchar
mov a,seconds
anl a,#0fh
add a,#48
call outchar
mov a,#0dh
call outchar
25
mov a,#0ah
call outchar
exit_send_time:
ret
Send_uart_date:
jb f_send_date,___send_date
jmp ___exit_send_date
send_date:
clr f_send_date
mov a,#'d'
call outchar
mov a,#'a'
call outchar
mov a,#'t'
call outchar
mov a,#'e'
call outchar
mov a,#' '
call outchar
mov a,#'t'
call outchar
mov a,#'h'
call outchar
mov a,#'u'
call outchar
mov a,#' '
call outchar
26
call ds1307_read_date
mov a,day
swap a
anl a,#0fh
add a,#48
call outchar
mov a,day
anl a,#0fh
add a,#48
call outchar
mov a,#' '
call outchar
mov a,date
swap a
anl a,#0fh
add a,#48
call outchar
mov a,date
anl a,#0fh
add a,#48
call outchar
mov a,#'/'
call outchar
mov a,month
swap a
anl a,#0fh
27
add a,#48
call outchar
mov a,month
anl a,#0fh
add a,#48
call outchar
mov a,#'/'
call outchar
mov a,year
swap a
anl a,#0fh
add a,#48
call outchar
mov a,year
anl a,#0fh
add a,#48
call outchar
mov a,#0dh
call outchar
mov a,#0ah
call outchar
exit_send_date:
ret
on_off_led:
;push 0eh
call check_time //kiem tra lai thoi gian;
mov a,_hour_val
28
mov b,#17
div ab
cjne a,#00,on //neu sau 17 thi bat
// chua toi 17h; kiem tra xem co duoi 5h hay khong:
mov a,_hour_val
mov b,#05
div ab
cjne a,#00,off
setb led
ret
On:
setb led
ret
Off:
clr led
ret
Check_time:
mov a,hour
swap a
anl a,#0fh // chi giu lai gia tri bit thap;
mov b,#10
mul ab
mov _hour_val,a
mov a,hour
anl a,#0fh
add a,_hour_val
mov _hour_val,a
29
mov p2,_hour_val // lay duoc gia tri 10;
ret
Ds1307_init:
call i2c_start
mov a,#0d0h ;dia chi ds1307
lcall i2c_write ;
;jc $-5
mov a,#00h ;dia chi thanh ghi 0
lcall i2c_write
mov a,#00h ;enable the oscillator (ch bit = 0)
lcall i2c_write
call i2c_stop
ret
Ds1307_output:
call i2c_start
mov a,#0d0h ;dia chi ds1307
call i2c_write ;
mov a,#07h ;dia chi thanh ghi 0
call i2c_write
mov a,#10h ;enable the output oscillator f=1hz
call i2c_write
call i2c_stop
ret
Ds1307_write_time:
call i2c_start
mov a,#0d0h ;dia chi ds1307
call i2c_write ;
30
mov a,#00h ;dia chi thanh ghi 0
call i2c_write
mov a,seconds ;
call i2c_write
mov a,minutes ;
call i2c_write
mov a,hour ;
call i2c_write
call i2c_stop
ret
Ds1307_write_date:
call i2c_start
mov a,#0d0h ;dia chi ds1307
call i2c_write ;
mov a,#03h ;dia chi thanh ghi 3
call i2c_write
mov a,day ;thu
call i2c_write
mov a,date ;ngay
call i2c_write
mov a,month ;thang
call i2c_write
mov a,year ;nam
call i2c_write
call i2c_stop
ret
Ds1307_read_time:
31
call i2c_start
mov a,#0d0h ;dia chi ds1307 va write
call i2c_write ;
mov a,#00h ;dia chi thanh ghi 0
call i2c_write
call i2c_restart
mov a,#0d1h ;dia chi ds1307 va read
call i2c_write
call i2c_read_ack
mov seconds,a
call i2c_read_ack
mov minutes,a
call i2c_read_nack
mov hour,a
call i2c_stop
ret
Ds1307_read_date:
call i2c_start
mov a,#0d0h ;dia chi ds1307 va write
call i2c_write ;
mov a,#03h ;dia chi thanh ghi 3
call i2c_write
call i2c_restart
mov a,#0d1h ;dia chi ds1307 va read
call i2c_write
call i2c_read_ack
mov day,a
32
call i2c_read_ack
mov date,a
call i2c_read_ack
mov month,a
call i2c_read_nack
mov year,a
call i2c_stop
ret
I2c_write:
push 07h
mov r7,#8
loop_i2c_write:
clr scl
rlc a
mov sda,c
nop
nop
setb scl
nop
nop
djnz r7,___loop_i2c_write
clr scl
nop
nop
nop
nop
setb sda ;cau hinh ngo vao sda doc ack
33
setb scl
nop
mov c,sda ;kiem tra co "c" de xac dinh loi
nop
nop
clr scl
pop 07h
ret
I2c_read_ack:
push 07h
mov r7,#8
setb sda ;cau hinh ngo vao sda
loop_i2c_read_ack:
setb scl
nop
mov c,sda
rlc a ;byte doc ve luu trong thanh ghi "a"
nop
clr scl
nop
nop
nop
djnz r7,___loop_i2c_read_ack
clr sda
nop
setb scl
nop
34
nop
nop
nop
clr scl
pop 07h
ret
I2c_read_nack:
push 07h
mov r7,#8
setb sda ;cau hinh ngo vao sda
loop_i2c_read_nack:
setb scl
nop
mov c,sda
rlc a ;byte doc ve luu trong thanh ghi "a"
nop
clr scl
nop
nop
nop
djnz r7,___loop_i2c_read_nack
setb sda
nop
setb scl
nop
nop
nop
35
nop
clr scl
pop 07h
ret
I2c_init:
setb scl
setb sda
ret
I2c_start:
setb sda
setb scl
nop ;delay 4.7us
nop ;bus free time between a stop and start condition
nop
nop
nop
clr sda
nop ;delay 4us
nop ;hold time (repeated) start condition
nop
nop
clr scl
ret
I2c_stop:
clr sda
setb scl
nop ;delay 4.7us
36
nop ;setup time for stop condition
nop
nop
nop
setb sda
ret
I2c_restart:
setb sda
setb scl
nop ;delay 4.7us
Nop ;setup time for a repeated start condition
nop
nop
nop
clr sda
nop ;delay 4us
nop ;hold time (repeated) start condition
nop
nop
clr scl
nop
nop
ret
Scl_high:
nop ;delay 4us
nop ;high period of scl clock
setb scl
37
nop
nop
ret
Scl_low:
nop ;delay 4.7us
nop ;low period of scl clock
clr scl
nop
nop
nop
ret
Outchar:
jnb ti,$
clr ti
mov sbuf,a
ret
End
3.4 Nguyên lý hoạt động điều khiển đèn giao thông
Mô đun thời gian thực DS 1307 chuẩn thức I2C để giao tiếp để đọc thời gian trên ,áy tính
để cập nhập thơi gian trong ngày
Sư dụng phương pháp chốt led và IC7447 để giải mã hiển thị led 7 thanh ngã tư sử dụng
nút bấm tang giảm để điều chỉnh thời gian đếm ngược thơi gian tại cột đen giao thông
theo công thức
Đèn đỏ = đèn vàng + đèn xanh ( đèn vàng = 3s)
38