Professional Documents
Culture Documents
Mạch Đếm Sản Phẩm Giao Tiếp Với Máy Tính
Mạch Đếm Sản Phẩm Giao Tiếp Với Máy Tính
TP.HCM ,1/2005 __ ỉ
Luận văn tốt nghiệp
HOIh «ICH
MỤC LỤC
Trang
— »01— *c«—
I. ĐẶT VẤN Đ Ề ........................................................... 1
— NOI—
III. PHƯƠNG ÁN THIẾT K Ế ...................................... 2
1. Dùng IC rời..................................................................... 2
— >01— K«—
V . HƯỚNG PHÁT TRIỂN CỦA ĐE T À I.................... 3
ì 3. Khởi đông và truy xuất các thanh ghi cổng nối tiếp ..........................30 I
ệ 4. Tốc độ baud port nối tiếp....................................................................... 30 I
1 1.4. HOẠT ĐỘNG NGAT ...............................................................................32 1
I 1. Tổ chức ngắt ................................................ 32 ệ
I 2. Xử lý ngắt ............................................................................................ 33 ị
Ị 3. Các ngắt của 89C51 .............................................................................34 ị
ị 1.5. TÓM TẮT TẬP LỆNH ........................................................................... 35 ị
I 1. Các kiểu định địa chỉ ...........................................................................33 ệ
I 2. Các loại lệnh.......................................................................................... 39 ệ
: CHƯƠNG I I : G IA O T I Ế P V Ớ I M Á Y T ÍN H 45 ị
I P H Ầ N IIIĩT H IÊ T K Ê V À T H I C Ô N G M Ạ C H ị
ĩ CHƯƠNG I : T H IẾ T K Ế PH Ầ N CỨNG 48 ị
Ị l I I .l . Sơ Đ ồ K H Ố I........................................................................................... 48 ị
I III.2. Sơ Đ ồ NGUYÊN L Ý ............................................................................ 49 I
* III.3. TÍNH TOÁN THIẾT K Ế ......................................................................50 Ị
- * / h - # * - - # * - - * * - - * * - - * * - HO- -» S i'-* * - - * * -
„ _ , ^ v. 55 f
f
'
6. Chương trình đếm kênh 4 ..........................................................................59 ị
'* * ■
P h ần I:
DẪN NHẬP
L B Ấ T VẤN Đ Ề :
Ngày nay với sự phát triển của công nghiệp vi điện tử, kỹ thuật số các hệ
thống điều khiển dần dần được tự động hóa. Với những kỹ thuật tiên tiên như
vi xử lí vi mạch sô"... được ứng dụng vào lĩnh vực điều khiên, thì các hệ thông
điều khiển cơ khí thô sơ, với toe độ xử lí chậm chạp ít chính xác được thay thế
bằng các hệ thống điều khiển tự động với các lệnh chương trình đã được thiết
lập trước.
Trong quá trình sản xuất ở các nhà máy, xí nghiệp hiện nay, việc đếm các
sản phẩm làm ra là một yêu cầu hết sức cần thiết và quan trọng. Vì phải biết
được số sản phẩm làm ra chúng ta mới có thể đóng gói sản phẩm và dê dàng
quản lý số sản phẩm làm ra một cách tự động và nhanh chóng.
Để đếm được số lượng sản phẩm thì có nhiều phương án thiết kế, qua quá
trình nghiên cứu qua quan sát thực tế, em quyết định chọn phương án thiết kế
“mạch đếm sản phẩm dùng vi điều khiển 89C51 giao tiếp vổi máy tính” để
dễ dàng quản lý số lượng sản phẩm và điều khiển từ máy tính. Và để mở rộng
hơn cho việc đem sản phẩm, em thiết kế mạch đếm gồm có bốn bộ đếm ( có
thể mở rộng hơn nữa ) hoạt động cùng lúc và có thể được kiểm soát, điều khiển
trực tiếp từ máy tính hoặc từ phần cứng.
Tóm lại, quá trình nghiên cứu thực hiện đề tài là một cơ hội đê chung
em tự kiểm tra lại những kiến thức đã được học ở trường, đồng thời phát
huy tính sáng tạo, khả năng giải quyết một vấn đề theo yêu cầu đặt ra. Và
đây cũng là dịp để chúng em tự khẳng định mình trưổc khi ra trường đê
tham gia vào các hoạt động sản xuất của xã hội.
III. PHƯƠNO ẨN T H IẾ T K Ế :
Qua quá trình tìm hiểu, nghiên cứu em thây có các phương án sau la phu
hợp và có thể được ứng dụng vào thực tê.
1. Mach đếm sản phẩm dùng IC rời;
❖ Ưu điểm:
□ Cho phép tăng hiệu suất lao động
□ Đảm bảo độ chính xác cao
□ Tần số đáp ứng của mạch nhanh, cho phép đêm với tần số cao
□ Khoảng cách đặt phần phát và phần thu xa nhau cho phép đếm
những sản phẩm lớn.
□ Tổn hao công suất bé, mạch có thể sử dụng pin hoặc accu
❖ Khuvết điểm:
□ Mạch đếm sản phẩm dùng IC rời không linh hoạt, kho co the thay
đổi và nâng cao các tính năng của mạch.
□ Với sự phát triển mạnh của nghành kỹ thuật số đặc biệt là cho ra đời
các họ vi xử lí và vi điều khiển rất đa chức năng do đó việc dùng kỹ thuật vi xử
lí kỹ thuật vi điều khiển đã giải quyết những bế tắc và kinh tế hơn mà phương
pháp dùng IC rời kết nối lại không thực hiện được.
2. Mach đếm sản phẩm dùng vi điều khiển;
Ngoài những ưu điểm như đã liệt kê trong phương pháp dùng IC rời thì
mạch đếm sản phẩm dùng kỹ thuật vi điều khiển còn có những ưu điểm sau:
□ Mạch có thể thay đổi số đếm một cách linh hoạt bằng việc thay đổi
phần mềm, trong khi đó phần cứng không cần thay đổi mà mạch dùng IC rời
không thể thực hiện được mà nếu có thể thực hiện được thì cũng cứng nhắc mà
người công nhân cũng khó tiếp cận, dễ nhầm.
V. HƯỚNG PH Á T T R IỂ N CỦA Đ E T Ả Ĩ;
Từ đề tài này ta có thể phát triển thêm các tính năng sau:
□ Có thể mở rộng bộ số bộ đếm nhiều hơn bằng cách dùng thêm các
IC giải mã để sử dụng tối ưu các port của vi điều khiển.
□ Có thể điều khiển băng chuyền một cách linh hoạt hơn như : điêu
khiển cho băng chuyên dừng lại đê rót san pham, đong nap ...
P h án I I : L Ý THUYẾT
C hươns I : 9
GIỚI THIỆU VỀ VI ĐlỀU KHIẾN 89C51
1.1 ■TÓM TẮ T PHẨN CỨNG:
1. Mô tá :
AT89C51 là một hệ vi tính 8 bit đơn chip CMOS có hiệu xuất cao, công
xuất nguồn tiêu thụ thấp và có 4K byte 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 các 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ớ khong mat
nội dung qui ước. Bằng cách kết hợp một CPU linh hoạt 8 bit VƠI Flash tren
một chip đơn thể, Atmel 89C51 là một hệ vi tính 8 bit đơn chip mạnh cho hi
một giải pháp có hiệu quả về chi phí và rât linh hoạt VƠI cac ưng dụng đieu
khiển.
AT89C51 có các đặc trưng chuẩn sau:
- 4KB Flash.
- 128 byte RAM.
- 32 đường xuất nhập.
- Hai bộ định thời / đếm 16 bit.
- Một cấu trúc ngắt ưu tiên và 5 nguyên nhân ngắt.
- Một port nối tiếp song song cổng.
- Mạch dao động và tạo xung clock trên chip.
Ngoài ra, AT89C51 được thiết kế với logic tĩnh cho hoạt động có tần số
giảm xuống 0 và hỗ trợ hai chế độ tiêt kiệm năng lượng được lựa chọn băng
phần mềm.
Chế độ nghỉ dừng CPU trong vẫn cho phép RAM, các bộ định thời / đếm,
port nối tiếp và hệ thống ngắt tiếp tục hoạt động.
Chế độ nguồn giảm duy trì nội dung của RAM nhưng không cho mạch
dao động cung cấp xung clock nhằm vô hiệu hoá các hoạt động khác của chip
cho đến khi có reset tiếp theo.
2. Sơ đổ khối:
Sơ đồ khối của AT89C51 được biểu diễn như hình 2.1.1
PO.O - P0.7
3. Sơ đổ chân:
Vcc
PO.O (ADO)
PO 1 (AD1)
P0.2 (AD2)
PO 3 (AD3)
P0.4 (AD4)
PO.5 (AD5)
PO.6 (AD6)
PO.7 (AD7)
EA / Vpp
ALE/PROG
PSEN
P2.7 (A15)
(TO) P3.4 P2.6 (A14)
XXI) P3.5 P2.5 (A I3)
(WR) P3 6 P2.4 (A12)
(RD) P3 7 P2.3 (A ll)
XTAL2 P2.2 (AIO)
XTAL1 P2.1(A9)
GND P2.0 (A8)
Port 0 còn được câu hình làm bus địa chỉ ( byte thấp ) và bus dữ liệu đa
hợp trong khi truy xuất bộ nhớ dữ liệu ngoài và bộ nhớ chương trình ngoài.
Trong chế độ đa hợp này, port 0 có các điện trở kéo lên bên trong.
Port 0 cũng nhận các byte mã trong khi lập trình cho Flash và truy xuât
các byte mã trong khi kiểm tra chương trình. Các điện trở kéo lên bên ngoài
được cần đến trong khi kiểm tra chương trình.
• Port 1:
Port 1 là port xuất nhập 8 bit hai chiều có các điện trở kéo lên bên trong.
Các bộ đệm xuất của port 1 có thể hút và cấp dòng với 4 ngõ vào TTL. Khi các
logic 1 được ghi lên các chân của port 1, các chân này được kéo lến mức cao
bởi các điện trở kéo lên bên trong và có thể được dử dụng như là các ngõ vào.
Khi làm nhiệm vụ port nhập, các chân của port 1 đang được kéo xuông mức
thấp do tác động bên ngoài sẽ cấp dòng cho các điện trở kéo lến bên trong.
Port 1 cũng nhận byte địa chỉ thấp trong thời gian lập trình cho Flash và
kiểm tra chương trình.
• Port 2:
Port 2 là port xuất nhập 8 bit hai chiều có các điện trở kéo lên bên trong.
Các bộ đệm xuất của port 1 có thể hút và câp dòng với 4 ngõ vào TTL. Khi các
logic 1 được ghi lên các chân của port 2, các chân này được kéo lên mức cao
bởi các điện trở kéo lên bên trong và có thể được dử dụng như là các ngõ vào.
Khi làm nhiệm vụ port nhập, các chân của port 1 đang được kéo xuông mức
thấp do tác động bên ngoài sẽ cấp dòng cho các điện trở kéo lên bên trong.
Port 2 tạo ra byte cao của bus địa chỉ trong thời gian tìm nạp lệnh từ bộ
nhớ chương trình ngoài và trong thời gian truy xuât dữ liệu sử dụng các địa chi
16 bit ( MOVX @DPTR ) trong ứng dụng này, port 2 sử dụng các điện trở kéo
lên trong khi phát các bit 1. Trong thời gian truy xuất bộ nhớ dữ kiệu ngoài sư
dụng các địa chỉ 8 bit ( MOVX @ R i ), port 2 phát các nội dung cua thanh ghi
chức năng đặc biệt P2.
Port 2 cũng nhận các bit địa chỉ cao và vài tín hiệu điêu khiên trong thời
gian lập trình cho Flash và kiểm tra chương trình.
• Port 3:
Port 3 là port xuất nhập 8 bit hai chiều có các điện trở kéo lên bên trong.
Các bộ đệm xuất của port 3 có thể hút và câp dòng với 4 ngõ vào TTL. Khi các
logic 1 được ghi lên các chân của port 3, các chân này được kéo lên mức cao
bởi các điện trở kéo lên bên trong và có thể được dử dụng như là các ngõ vào.
Port 3 cũng nhận một vài tín hiệu điều khiển cho việc lập trình Flash và
kiểm tra chương trình.
• Chân cho phép bộ nhổ chương trình 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ớ chương trình ngoài. Khi AT89C51 đang thực thị 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 lần truy
xuất bộ nhớ dữ liệu ngoài.
• Chân cho phép chốt địa c h ỉ: ALE/PROG
Xung của ngõ ra cho phép chốt địa chi 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 làm ngõ vào xung lập trinh ( PROG ) trong thời gian lập trình
cho Flash.
Khi hoạt động bình thường, xung của ngõ ra luôn có tần số bằng 1/6 tần
số mạch dao động trên chip, có thể 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 se bị bo qua
trong mỗi một 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 sét bit 0 của thanh ghi của thanh ghi chức năng đặc biệt có địa
chỉ là 8EH. Khi bit này được set, ALE chỉ tích cực trong thời gian thực thi lệnh
văn tết
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.
• Chân truy xuất ngoài EA/Vpp:
Chân cho phép bộ nhớ ngoài ẼÃ ( 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 nhien
cần lưu ý là nếu bit khoá 1 ( clock bit 1 ) được lập trình, EA sẽ được chốt bên
trong khi reset.
• Chân RESET (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.
• Chân XTAL1:
Ngõ vào đến mạch khuếch đại đảo của mạch dao động va ngo vao đen
mạch tạo xung clock bên trong chip.
• Chân XTAL2:
Ngõ ra từ mạch khuếch đại đảo của mạch dao động.
5. TỔ chức bô nhđ:
Bộ nhớ nội trong chip bao gồm ROM và RAM. RAM trên chip bao gom
vùng RAM đa chức nang, vùng RAM với từng bit được định địa chỉ ( gọi tắt là
vùng RAM định địa chỉ b i t ), các dãy thanh ghi và các thanh ghi chức năng đặc
biệt SFR ( special function register).
Hai đặc tính đáng lưu ý là: 7
— Các thanh ghi và các port xuất / nhập được định địa chi theo kieu
ánh xạ bộ nhớ.
- Vùng stack thường trú trong RAM trên chip ( RAM n ộ i) thay vì ở
trong RAM ngoài như đối với các bộ vi xử lý.
Hình 2.1.3 cho ta chi tiết của bộ nhớ dữ liệu trên chip. Ta thây răng
không gian nhớ nội này được chia thành : các dãy thanh ghi ( 00H 4- 1FH ),
vùng RAM định địa chỉ bit ( 20H -ỉ- 2FH ), vùng RAM đa mục đích ( 30H 4-
7FH ) và các thanh ghi chức năng đặc biệt ( 80H 4- FFH ).
7F FF
F0 F7 F6 F5 F4 F3 F2 F1 F0 B
RAM đa dụng
EO E7 E6 E5 E4 E3 E2 E1 EO ACC
DO D7 D6 D5 D4 D3 D2 DI DO PSW
B8 BC BB BA B9 B8 IP
30
2F 7F 7E 7D 7C 7B 7A 79 78
BO B7 Ịb 6 ỈB5 B4 B3 B2 Ịb I Ịb O P.3
2E 77 76 75 74 73 72 71 70
2D 6F 6E 6D 6C 6B 6A 69 68
A8 AF AC AB AA A9 A8 IE
2C 67 66 65 64 63 62 61 60
2B 5F 5E 5D 5C 5B 5A 59 58
AO A7 ỈA6 ỊA5 A4 A3 A2 a i Ịa O P2
2A 57 56 55 54 53 52 51 50
29 4F 4E 4D 4C 4B 4A 49 48
99 không đước địa chỉ hoá bit SBUF
28 47 46 45 44 43 42 41 40
98 9F 9E 9D 9C 9B 9A 99 98 SCON
27 3F 3E 3D 3C 3B 3A 39 38
26 37 36 35 34 33 32 31 30
90 97 |96 Ị95 94 93 92 91 90 P1
25 2F 2E 2D 2C 2B 2A 29 28
24 27 26 25 24 23 22 21 20
8D không được địa chỉ hoá bit THI
23 1F 1E 1D 1C 1B 1A 19 18
8C không đươc địa chỉ hoá bit THO
22 17 16 15 14 13 12 11 10
8B không đươc địa chỉ hoá bit TL1
21 0F OE OD o c OB OA 09 08
8A khống đước địa chỉ hoá bit TLO
20 07 06 05 04 03 02 01 00
89 không được địa chỉ hoá bit TMOD
1F Dãy 3
89 88 TCON
00
<
8B
u
00
00
Q
00
18 88 8F
87 chông được địa chỉ hoầ bit PCON
17 Dãy 2
10
83 không đươc địa chỉ hoá bit DPH
0F Dãy 1
82 không đươc địa chỉ hoá bit DPL
08
81 không được địa chỉ hoá bit SP
07 Dãy thanh ghi 0
00 (mặc định cho RO -R7) 88 87 86 85 84 83 82 81 80 PO
nhớ có thể được sử dụng tương tự (mặc dù các vị trí nhớ này đã có mục đích
khác).
Luận văn tết nghiệp
Bất kỳ vị trí nhớ nào trong vùng RAM đa mục đích đều có thể được truy
xuất tự do bằng cách sử dụng các kiểu định địa chỉ trực tiếp hoặc gián tiếp.
5.2 Vùng RAM đinh đia chỉ b it:
89C51 chứa 210 vị trí bit được định địa chỉ trong đó 128 bit chứa trong
các byte ở địa chỉ từ 20H đến 2FH {16 byte X 8 bit = 128 } và phần còn lại chứa
trong các thanh ghi chức năng đặc biệt.
Ý tưởng truy xuất từng bit bằng phần mềm là các đặc tính mạnh của hầu
hết các bộ vi điều khiển. Các bit có thể được set, xóa, AND, OR, v.v... với một
lệnh đơn. Đa số các bộ vi xử lý đòi hỏi một chuổi lệnh đọc - sửa - ghi để nhận
được cùng một kết quả. Ngoài ra các port xuất / nhập cũng có thể định địa chỉ
từng bit.
89C51 có 128 vị trí bit được định địa chỉ và có nhiều mục đích ở các byte
có địa chỉ từ 29H đến 2FH. Các địa chỉ này được truy xuất như là các byte hay
các bit tuỳ vào lệnh cụ thể.
5.3 Các dãy thanh ghi :
32 vị trí thấp nhất của bộ nhớ nội được dành cho các dãy thanh ghi. Bộ
lệnh của 89C51 hổ trợ 8 thanh ghi từ RO đến R7 thuộc dãy 0 ( bank 0 ). Đây là
dãy mặc định sau khi reset hệ thông, các thanh ghi này có các địa chỉ từ 00H
đến 07H.
Các lệnh sử dụng các thanh ghi từ RO đến R7 là các lệnh ngắn và thực
hiện nhanh hơn so với các lệnh có chức năng tương ứng dùng kiểu địa chỉ trực
tiếp. Các dữ liệu được dùng thường xuyên nên chứa ở một dãy thanh ghi tích
cực.
Do có 4 dãy thanh ghi nên tại một thời điểm chỉ có một dãy thanh ghi
được truy xuất bởi các thanh ghi RO đến R7. Để thay đổi dãy thanh ghi tích cực
ta phải thay đổi các bit chọn dãy trong từ trạng thái chương trình PSW.
Chú ý: không phải tất cả 128 địa chỉ từ 80H đến FFH đều được định nghĩa
mà chỉ có 21 đ8ịa chỉ được định nghĩa. N ,
Ngoại trừ thanh ghi A có thể được truy xuất ngầm như đã nói, đa sô các
thanh ghi có chức năng đặc biệt SFR có thể địa chỉ hóa từng bit hoặc byte.
❖ Cờ nhứ:
Cờ nhớ CY ( caưy flag ) có 2 công dụng. Công dụng truyền thống trong
các phép toán số học là được set bằng 1 nếu có số nhớ từ phép cộng bit 7 hoặc
có sô" mượn mang đến bit 7.
Cờ nhớ CY còn là thanh chứa logic được dùng như một thanh ghi 1 bit đối
với các lệnh logic thao tác trên các bit.
❖ Cờ nhứ phu :
Khi cộng những giá trị BCD (Binary Code Decimal), cờ nhớ phụ AC
(auxiliary carry flag ) được set nếu kết quả 4 bit thấp nằm trong phạm vi điều
khiển 0AH+ 0FH. Ngược lại AC = 0.
❖ CỜO:
Đây là cờ có nhiều mục đích dành cho các ứng dụng của người lập trình.
❖ Cờ chẵn lẻ:
Bit chấn lẻ p tự động được set bằng 1 hay xoá bằng 0 ở môi chu kỳ máy
để thiết lập kiểm tra chẩn cho thanh chứa A. s ố các bit 1 trong thanh chưa
cộng với bit p luôn luôn là sô chan.
Bit chẩn lẻ được sử dụng nhiều để kết hợp với các chương trình xuât /
nhập nối tiếp trước khi truyền dữ liệu hoặc để kiểm tra chẵn lẻ sau khi nhận dữ
liệu.
6.2 .Thanh ghi B :
Thanh ghi B ở địa chỉ F0H được dùng chung với thanh chứa A trong các
phép toán nhân, chia. Lệnh MƯL AB nhân hai số 8 bit không dấu chứa trong A
và B rồi chứa kết quả 16 bit trong A (byte cao) và B (byte thấp). Lệnh DIV AB
vào cặp thanh ghi B:A ( thanh chứa A cấct byte thấp, thanh ghi B cất byte cao).
Lệnh chia DIV AB chia A bởi B, thương số cất trong thanh chứa A và dư
cất trong thanh ghi B.
Thanh ghi B có thể được dùng như một thanh ghi đệm trung gian đa mục
đích. Nó là những bit định vị thông qua những địa chỉ từ F0H+F7H.
Con trỏ stack ( stack pointer ) là một thanh ghi 8 bit ở địa chỉ 81H. Nó
chứa địa chỉ của dữ liệu hiện đang ở đỉnh của stack. Các lệnh trên stack bao
gồm các lệnh cất dữ liệu vào stack (PUSH) và lấy dữ liệu ra khỏi stack ( POP ).
Lệnh cât dữ liệu vào stack sẽ làm tăng SP trước khi ghi dữ liệu và lệnh laỵ ra
khỏi stack sẽ làm giảm SP. Stack của 8031/8951 được giữ trong RAM nội và
giới hạn các địa chỉ có thể truy xuất bằng địa chỉ gián tiếp, chúng là 128 byte
đầu của AT89C51.
Đe khởi động SP với stack bắt đầu tại địa chỉ 60H, các lệnh sau đây được
dùng:
MOV S P , #5F
Với lệnh trên thì stack của AT89C51 chỉ có 32 byte vì địa chỉ cao nhất
của RAM trên chip là 7FH. Sở dĩ giá trị 5FH được nạp vào SP vì SP tăng lên
60H trước khi cất byte dữ liệu.
Khi Reset AT89C51, SP sẽ mang giá trị mặc định là 07H và dữ liệu đầu
tiên sẽ được cất vào ô nhớ stack có địa chỉ 08H. Nếu phần mềm ứng dụng
không khởi động SP một giá trị mới thì dãy thanh ghil có thể cả 2 và 3 sẽ
không dùng được vì vùng RAM này đã được dùng làm stack. Stack được truy
xuất trực tiếp bằng các lệnh PUSH và POP để lưu trữ tạm thời và lấy lại dữ
liệu hoặc truy xuất ngầm bằng lệnh gọi chương trình con ( ACALL, LCALL)
và các lệnh trở về ( RET, R E T I) để lưu trữ giá trị của bộ đếm chương trình khi
bắt đầu thực hiện chương trình con và lấy lại khi kêt thúc chương trình con.
Các Port của 89C51 bao gồm Port 0 ở địa chỉ 80H, Port 1 ở địa chỉ 90H,
Port 2 ở địa chỉ AOH, và Port 3 ở địa chỉ BOH. 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.
Bit Ký hiệu Mô tả
7 SMOD Bit tăng gấp đôi tốc độ Baud, ở bit này khi set lam
nối tiếp.
0 IDL Chế độ nghỉ; thiết lập để tích cực chế độ nghỉ, chỉ ra
Khi dùng bộ nhớ ngoài, Port 0 không còn chức năng I/O nữa. Nó được kết
hợp giữa b u s á ịa chỉ (AO - A7) và bus dữ liệu (DO - D7) vđi tín hiệu ALE đế
chot byte cùa bus địa chỉ khi bắt đầu mỗi chu kỳ bộ nhđ. Port 2 được cho là
byte cao của bus địa chỉ.
7.1 -Trnv xuất hô nhở chương trình n goài:
Bộ nhớ chương trình bên ngoài là bộ nhớ chỉ đọc, được cho phép bởi tín
hiệu PSEN. Khi có 1 EPROM ngoài được sử dụng, cả hai port 0 và port 2 đêu
không còn là các port xuất / nhập. Sự kết nối phần cứng với bộ nhớ ngoai
EPROM được trình bày như hình 2.1.4.
Một chu kỳ máy của 89C51 có 12 chu kỳ dao động. Nếu bộ dao động trên
chip có tần số 12MHz, một chu kỳ máy dài lps. trong một chu kỳ máy điển
hình ALE có 2 xung và 2 byte của tập lệnh được đọc từ bộ nhớ chương trình (
nếu lệnh chỉ có một byte, byte thứ hai được loại bỏ ).
Luận văn tết nghiệp
rort z.u A8
r ort / . 1 A9
OF
RD
w
WR
PSEN -----NC cs
Sự giải mã địa chỉ là một yêu cầu tất yếu để chọn EPROM, RAM, 8279,
... Sự giải mã địa chỉ đối với AT89C51 để chọn các vùng nhớ ngoài như các vi
điều khiển. Nếu các con EPROM hoặc RAM 8K được dùng thì các bus địa chỉ
phải được giải mã để chọn các IC nhớ nằm trong phạm vi giới hạn 8K:
OOOOH-f-lFFFH, 2000H-Ỉ-3FFFH,... Một cách cụ thể, IC giải mã 74HC138 được
dùng với những ngõ ra của nó được nôl với những ngõ vào chọn Chip c s (
Chip S e le ct) trên những IC nhớ EPROM, R A M ,...
8. H oat đông re se t:
AT89C51 được reset bằng cách giữ chân RST ở mức cao tối thiểu 2 chu
kỳ máy và sau đó chuyển xuống mức thấp để AT89C51 bắt đầu làm việc. RST
có thể kích bằng tay bằng một phím nhấn thường hở hoặc được tác động khi
cấp nguồn bằng cách dùng một mạch RC . Sơ đồ mạch reset như hình 2.1.6.
Trạng thái của tất cả các thanh ghi trong AT89C51 sau khi reset hệ thống
được tóm tắt như như bảng 2.1.3
Bảng 2.1.3 : Giá trị của các thanh ghi sau khi reset hệ thông
+5V
Ọ
Bảng 2.1.4 : Các thanh ghi chức năng đặc biệt của bộ định thời
MI MO Chế độ Mô tả
0 0 0 Chế độ định thời 13 bit
0 1 1 Chế độ định thời 16 bit
1 0 2 Chế độ tự động nạp lại 8 bit
1 1 3 Chế độ định thời chia xẻ
Bộ định thời 0: TLO là một bộ định thời 8 bit
được điều khiển bởi các bit chọn chế độ của
bộ định thời 0. THO tương tự TLO chỉ khác là
được điều khiển bởi các bit chọn chế độ của
bộ định thời 1
Bộ định thời 1: dừng, không hoạt động.
Bỉt Tên
r p A
Bộ Mô tả
định thời
Thanh ghi TCON chứa các bit điều khiển và trạng thái của bộ định thời 0
và bộ định thời 1 ( xem bảng 2.1.7 ). Bôn bit cao trong TCON ( TCON.4 -
TCON.7 ) được dùng để điều khiển các bộ định thời hoạt động hoặc ngưng
(TRO, TRI ) hặoc để báo các bộ định thời tràn ( TF0, TF1 ).
Bốn bit thấp của TCON ( TCON.O - TCON.3 ) không dùng để điều các
bộ định thời, chúng được dùng để phát hiện và khởi động các ngắt ngoài.
TCON.7 TF1 8FH Cờ tràn của bộ định thời l,được set bởi
phần cứng khi có tràn, được xoá bởi phần
mềm, hoặc phần cứng khi bộ vi xử lý trỏ
đến phuc vu ngắt.
Bit điều khiển hoạt động của bộ định thời 1.
Bit này được set hoặc xoá bởi phần mềm để
TCON.6 TRI 8EH
điều khiển bộ định thời hoạt động hoặc
ngưng hoat động.
TCON.4 TRO 8CH Bit điều khiển hoạt động của bộ định thời 0
TCON.2 IT1 8AH Cờ ngắt bên ngoài 1( kích khởi cạnh hoặc
mức ). Cờ này đựơc set hoặc xoá bởi phần
mềm khi xảy ra cạnh âm ( xuống ) hoặc
mức thấp tại chân ngắt ngoài.
Timer
clock Mode 0 Over flag
Mode 2
Timer
clock
mới. Byte cao của bộ định thời THx được ghép cascade với 5 bit thấp của bộ
định thời TLx để tạo thành một bộ định thời 13 bit. Ba bit cao của TLx không
sử dụng.
3.2 .Chế đô đinh thời 16 bit ( chế đô 1 )i
Mode 1 là mode Timer 16 bit, tương tự như mode 0 ngoại trừ Timer này
hoạt động như một Timer đầy đủ 16 bit, xung clock được dùng với sự kết hợp
các thanh ghi cao và thấp (TLx, THx). Khi xung clock được nhận vào, bộ đếm
Timer tăng lên 0000H, 0001H, 0002H ,..., và một sự tràn sẽ xuất hiện khi có sự
chuyển trên bộ đếm Timer từ FFFH sang 0000H và sẽ set cờ tràn Timer, sau
đó Timer đếm tiếp.
- Cờ tràn là bit TFx trong thanh ghi TCON mà nó sẽ được đọc hoặc ghi
bởi phần mềm.
- Bit có trọng s ố lớn nhất (MSB) của giá trị trong thanh ghi Timer là bit
7 của THx và bit có trọng số thấp nhất (LSB) là bit 0 của TLx. Bit LSB đổi
trạng thái ở tần số clock vào được chia 216 = 65.536.
- Các thanh ghi Timer TLx và Thx có thể được đọc hoặc ghi tại bất kỳ
thời điểm nào bởi phần mềm.
3.3 .Chế đô tư đống nap lai ( chế đô 2):
Mode 2 là mode tự động nạp 8 bit, byte thấp TLx của Timer hoạt động
như một Timer 8 bit trong khi byte cao THx của Timer giữ giá trị Reload. Khi
bộ đếm tràn từ FFH sang 00H, không chỉ cờ tràn được set mà giá trị trong THx
cũng được nạp vào TLx : Bộ đếm được tiếp tục từ giá trị này lên đến sự chuyển
trạng thái từ FFH sang 00H kế tiếp và cứ thế tiếp tục. Mode này thì phù hợp
bởi vì các sự tràn xuất hiện cụ thể mà mỗi lúc nghỉ thanh ghi TMOD và THx
được khỡi động.
3.4 .Chế đô đinh thời chia xẻ (chế đô 3):
Mode 3 là mode Timer tách ra và là sự khác biệt cho mỗi Timer.
- Timer 0 ở mode 3 được chia là 2 timer 8 bit. TLO và THO hoạt động
như những Timer riêng lẻ với sự tràn sẽ set các bit TLO và TF1 tương ứng.
- Timer 1 bị dừng lại ở mode 3, nhưng có thể được khởi động bởi việc
ngắt nó vào một trong các mode khác. Chỉ có nhược điểm là cờ tràn TF1 của
Timer 1 không bị ảnh hưởng bởi các sự tràn của Timer 1 bởi vì TF1 được nối
với THO.
- Mode 3 cung cấp 1 Timer ngoại 8 bit là Timer thứ ba của AT89C51.
Khi vào Timer 0 ở mode 3, Timer có thể hoạt động hoặc tắt bởi sự ngắt nó ra
ngoài và vào trong mode của chính nó hoặc có thể được dùng bởi Port nối tiếp
như là một máy phát tốc độ Baud, hoặc nó có thể dùng trong hướng nào đó mà
không sử dụng Interrupt.
3.5 .Nguồn xung clock đỉnh thời:
Có hai nguồn xung clock có thể đếm giờ là sự định giờ bên trong và sự đêm
sự kiện bên ngoài. Bit C/T trong TMOD cho phép chọn 1 trong 2 khi Timer
được khởi động.
sự chuyển đổi từ 1 sang 0, nên tần sô" bên ngoài lớn nhất là 500KHz nếu dao
động thạch anh 12 MHz.
3.7 Khỏtì đông, dừng và điều khiến các bô đinh thời:
Bit TRx trong thanh ghi có bit định vị TCON được điều khiển bởi phần
mềm để bắt đầu hoặc kết thúc các Timer. Để bắt đầu các Timer ta set bit TRx
và để kết thúc Timer ta Clear TRx. Ví dụ Timer 0 được bắt đầu bởi lệnh SETB
TRO và được kết thúc bởi lệnh CLR TRO (bit Gate= 0). Bit TRx bị xóa sau sự
reset hệ thống, do đó các Timer bị cấm bằng sự mặc định.
- Thêm phương pháp nữa để điều khiển các Timer là dùng bit GATE
trong thanh ghi TMOD và ngõ nhập bên ngoài INTx. Điều này được dùng để
đo các độ rộng xung. Giả sử xung đưa vào chân INTO ta khởi động Timer 0 cho
mode 1 là mode Timer 16 bit với TL0/TH0 = 0000H, GATE = 1, TRO = 1.
Như vậy khi INTO = 1 thì Timer “được mở cổng” và ghi giờ với tốc độ của tần
sô" 1MHz. Khi INTO xuống thấp thì Timer “đóng cổng” và khoảng thời gian
của xung tính bằng ỊIS là sự đếm được trong thanh ghi TLO/THO.
INTO (P3.2)
3.8 .Khỏi đông và truy xuất các thanh ghi đỉnh thời:
Các Timer được khởi động 1 lần ở đầu chương trình để đặt mode hoạt
động cho chúng. Sau đó trong chương trình các Timer được bắt đầu, được xóa,
các thanh ghi Timer được đọc và cập nhật... theo yêu cầu của từng ứng dụng
cụ thể.
Mode Timer TMOD là thanh ghi đầu tiên được khởi gán, bởi vì đặt mode
hoạt động cho các Timer. Ví dụ khởi động cho Timer 1 hoạt động ở mode 1
(mode Timer 16bit) và được ghi giờ bằng dao động trên Chip ta dùng lệnh :
MOV TMOD, # 00001000B. Trong lệnh này M l = 0, MO = 1 để vào mode 1
và C/T = 0, GATE = 0 để cho phép ghi giờ bên trong đồng thời xóa các bit
mode của Timer 0. Sau lệnh trên Timer vẫn chưa đếm giờ, nó chỉ bắt đâu đem
giờ khi set bit điều khiển chạy TRI của nó.
Nếu ta không khởi gán giá trị đầu cho các thanh ghi TLx/THx thì Timer
sẽ bắt đầu đếm từ OOOOHlên và khi tràn từ FFFFH sang 0000H nó sẽ bắt đầu
tràn TFx rồi tiếp tục đếm từ 0000H lên tiêp . . . .
Nếu ta khởi gán giá trị đầu cho TLx/THx, thì Timer sẽ bắt đâu đem từ giá
trị khởi gán đó lên nhưng khi tràn từ FFFFH sang 0000H lại đêm từ 0000H lên.
Chú ý rằng cờ tràn TFx tự động được set bởi phần cứng sau mỗi sự tràn và
sẽ được xóa bởi phần mềm. Chính vì vậy ta có thể lập trình chờ sau môi lân
tràn ta sẽ xóa cờ TFx và quay vòng lặp khởi gán cho TLx/THx để Timer luôn
luôn bắt đầu đếm từ giá trị khởi gán lên theo ý ta mong muốn.
Đặc biệt những sự khởi gán nhỏ hơn 256 ps, ta sẽ gọi mode Timer tự
động nạp 8 bit của mode 2. Sau khi khởi gán giá trị đâu vào THx, khi set bit
TRx thì Timer sẽ bắt đầu đếm giá trị khởi gán và khi tràn từ FFH sang 00H
trong TLx, cờ TFx tự động được set đồng thời giá trị khởi gán mà ta khởi gán
cho Thx được nạp tự động vào TLx và Timer lại được đêm từ giá trị khởi gán
này lên. Nói cách khác, sau mỗi tràn ta không cần khởi gán lại cho các thanh
ghi Timer mà chúng vẫn đếm được lại từ giá trị ban đầu.
1. Giđi thiêu:
8051/8031 có một port nối tiếp trong chip có thể hoạt động ở nhiều chế
độ khác trên một dãy tần số rộng. Chức năng chủ yêu của một port nốỉ tiếp là
thực hiện chuyển đổi song song sang nối tiếp với dữ liệu xuât và chuyên đôi
nối tiếp sang song song với dữ liệu nhập.
Truy xuất phần cứng đến port nối tiếp qua các chân TXD và RXD. Các
chân này có các chức năng khác với hai bit của port 3. P3 ở chân 11 (TXD) và
P3.0 ở chân 10 (RXD).
Port nôi tiếp cho hoạt động song công (full duplex : thu và phát đông thời)
và đệm lúc thu (receiver buffering) cho phép một ký tự sẽ được thu và được
giữ trong khi ký tự thứ hai được nhận. Nếu CPU đọc ký tự thứ nhất trước khi ký
tự thứ hai được thu đầy đủ thì dữ liệu sẽ không bị mất.
Hai thanh ghi chức năng đặc biệt cho phép phần mềm truy xuất đến port
nối tiếp là : SBUF và SCON. Bộ đếm port nối tiếp (SBUF) ở đại chỉ 99H thật
sử là hai bộ đếm. Viết vào SBUF để truy xuất dữ liệu thu được. Đây là hai
thanh ghi riêng biệt thanh ghi chỉ ghi để phát và thanh ghi để thu.
Chê" độ hoạt động của port nôi tiếp được đặt bằng cách ghi vào thanh ghi
chê" độ port nôi tiếp (SCON) ở địa chỉ 98H. Sau đây các bảng tóm tắt thanh ghi
SCON và các chê" độ của port nối tiếp :
SCON.5 SM3 9DH Bit 2 của chế độ port nối tiếp . Cho
phép truyền thông xử lý trong các chế
độ 2 và 3, RI sẽ không bị tác động nếu
bit thứ 9 thu được là 0
SCON.4 REN 9CH Cho phép bộ thu phải được đặt lên 1 để
thu các ký tự
SCON.3 TB8 9BH Bit 8 phát, bit thứ 9 được phát trong
chế độ 2 v à-3, được đặt và xóa bằng
phần mềm.
MOV s CON,#0101001OB
Khởi động port nối tiếp cho chế độ 1 (SM0/SM1=0/1), cho phép bộ thu
(REN=1) và đặt cờ ngắt phát (TP=1) để chỉ bộ phát sẩn sàng hoạt động.
SETB REN
Sẽ đặt REN lên 1, hoặc lệnh :
MOV SCON,#xxxlxxxxB
Sẽ đặt REN 1 và đặc hoặc xóa đi các bit khác trên SCON khi cần (các X
c. Chế độ 1 và 3.
Hình 2.1.11: Các nguồn tạo xung nhịp cho port nối tiếp.
Mặc nhiên, sau khi reset hệ thống, tốc độ baud chê độ là 2 tân sô bọ dao
động chia cho 64. Tốc độ baud cũng ảnh hưởng bởi 1 bit trong thanh ghi điều
khiển nguồn cung cấp (PCON). Bit 7 của PCON là bit SMOD. Đặt bit sMOD
lên một làm gấp đôi tốc độ baud trong chế độ 1, 2 và 3. Trong chê độ 2, tôc đọ
baud có thể bị gấp đôi từ giá trị mặc nhiên của 1/64 tần số dao động
(SMOD=0) đến 1/32 tần số dao động (SM OD=l)
Vì PCON không được định địa chỉ theo bit, nên để đặt bit SMOD lên 1
cần phải theo các lệnh sau:
MOV A,PCON lấy giá trị hiện thời của PCON
Ngắt ( interupt) là sự xảy ra của một điều kiện - một sự kiện - làm cho
chương trình hiện hành bị tạm ngưng 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 vai trò quan trọng trong việc thiết kế và thực
hiện các ứng dụng của bộ vi điều khiển. Các ngắt cho phép hệ thống đáp ứng
một sự kiện theo cách không đồng bộ và xử lý sự kiện trong khi một chưong
trình khác đang thực thi. Một hệ thống điều khiển bởi ngắt cho ta ảo tưởng
đang làm nhiều công việc đồng thời.
CPU dĩ nhiên không thể thực thi nhiều hơn một lệnh ở một thời điểm
nhưng CPU có thể ngưng tạm thời việc thực thi một chương trình để thực thi
một chương trình khác rồi sau đó quay trở về thực thi tiêp chương trình đang bị
tạm ngưng.
2. X ử lv ngắt;
Khi có một ngắt xuất hiện và được CPU nhận, chương trình chính bị ngăt.
Các thao tác xảy ra như sau:
_ Hoàn tất việc thực thi hiện hành.
- Bộ đếm chương trình PC được cất vào stack.
_ Trạng thái của ngắt hiện hành được lưu giữ lại.
- Các ngắt được chận lại ở mức ngắt.
_ Bộ đếm chương trình PC được nạp địa chỉ vector của trình phục vụ
ngắt ISR.
- ISR được thực thi.
ISR được thực thi để đáp ứng công việc của ngắt. Việc thực thi ISR kết
thúc khi gặp lệnh RETI ( trở về từ một trình phục vụ ngắt). Lệnh này lấy lại giá
trị cũ của bộ đếm chương trình PC từ stack và phục hồi trạng thái của ngắt cũ.
Việc thực thi chương ưình chính được tiếp tục ở nơi bị tạm ngưng.
❖ VécTơ Ngắt
Khi ngắt được chấp nhận giá trị được đưa vào PC (ProgRAM Counter) gọi
là vector ngắt (Inteưupt Vector)
set cờ báo tràn lên 1. Các cờ Timer TFx không bị xoá bằng phần mềm. Khi cho
phép ngắt, TFx tự động bị xóa bằng phần cứng khi chuyển đến ngắt.
3 .3 . Ngắt ngoài:
Các ngắt ngoài xẩy ra khi có một mức thấp hoặc cạnh xuông trên chân
INTO hoặc INT1 của vi điều khiển. Đây là chức năng chuyển đổi của các bit
Port 3.(Port 3.2 và Port 3.3).
Các cờ tạo ngắt này là các bit IEO vá IE1 trong TCON. Khi quyền điều
khiển đã chuyển đến ISR, cờ tạo ra ngắt chỉ được xóa nếu ngắt được tích cực
bằng cạnh xuống. Nếu ngắt được tích cực theo mức, thì nguồn yêu cầu ngắt
bên ngoài sẽ điều khiển mức của cờ thay cho phần cứng.
Sự lựa chọn ngắt tích cực mức thấp hay tích cực cạnh xuống được lập trình
qua các bit ITO và IT1 trong TCON. Nếu IT1 = 0, ngắt ngoài 1 được tác động
bằng múc thấp ở chân IT1. Nếu IT1 = 1 ngắt ngoài 1 sẽ được tác đọng bang
cạnh xuống, trong chê độ này, nếu các mâu liên tiêp tren chan INT1 chi mưc
cao trong một chu kỳ và chỉ mức thấp trong chu kỳ kế, cờ yêu cầu ngắt IE1
trong TCON được đặt lên 1, rồi bit IÉ yêu cầu ngắt.
Nếu ngắt ngoài được tác động bằng cạnh xuông thi nguon ben ngoai phai
giữ chân tác động ở mức cao tối thiểu một chu kỳ và giữ nó ở mức thấp thêm
một chu kỳ nữa để đảm bảo phát hiện được cạnh xuông. Nêu ngăt ngoai được
tác động theo mức thì nguồn bên ngoài phải giữ tín hiệu yêu câu tác động cho
đến khi ngắt được yêu cầu được thật sự tạo ra và không tác động yêu cầu ngắt
trước khi ISR được hoàn tấ t. Nếu không một ngắt khác sẽ được lặp lại.
1.5. TỎM TẮ T TẲ P LÊ N H :
Có 4 dãy thanh ghi “làm việc” nhưng ở một thời điểm chỉ có một dãy
thanh ghi tích cực. Các dãy thanh chiếm 32 byte đầu tiên của RAM dữ liệu trên
chip ( địa chỉ từ 00H đến 1FH ) và ta dùng các bit 4 và 3 của từ trạng thái
chương trình PSW để chỉ ra dãy thanh ghi tích cực. Một reset bằng phần cứng
cho phép dãy 0 tích cực còn các dãy khác được chhọn bằng cách sửa đôi các bit
4 và 3 của PSW sao cho phù hợp.
Tất cả các Port I/O, các thanh ghi chức năng đặc biệt, thanh ghi điều
khiển hoặc thanh ghi trạng thái bao giờ cũng được quy định các địa chỉ trong
khoảng 128-Ỉ-255 (80-FFH). Khi byte địa chỉ trực tiếp nằm trong giới hạn này
(ứng với bit 7 = 1 ) thì thanh ghi chức năng đặc biệt được truy xuất. Ví dụ Port 0
và Port 1 được quy định địa chỉ trực tiếp là 80H và 90H, PO, P1 là dạng thức
rút gọn thuật nhớ của Port, thì sự biến thiên cho phép thay thế và hiểu dạng
thức rút gọn thuật nhớ của chúng. Chẳn hạn lệnh:
MOV P I, A <= sự biên dịch sẽ xác định địa chỉ trực tiếp của Port 1 là
90H đặt vào hai byte của lệnh (byte 1 của port 0).
Những nơi nhảy đến thường được chỉ rõ bởi các nhãn và trình biên dịch
xác định Offset Relative cho phù hợp.
Sự định vị tương đối đem lại thuận lợi cho việc cung cấp mã vị trí độc
lập, nhưng bất lợi là chỉ nhảy ngắn trong phạm vi -128-Ỉ-127 byte.
ưu điểm của sự định dài là vùng nhớ mã 64K có thể được dùng hết,
nhược điểm là các lệnh đó dài 3 byte và vị trí lệ thuộc. Sự phụ thuộc vào vị trí
sẽ bất lợi bởi chương trình không thể thực thi tại địa chỉ khác.
Các bảng của lệnh nhảy hoặc các bảng tra được tạo nên một cách dê
dàng bằng cách dùng địa chỉ phụ lục.
2. C á c loai lênh :
Các lệnh của AT89C51 được chia thành 5 nhóm:
- Nhóm lệnh số học.
- Nhóm lệnh logic.
- Nhóm lệnh di chuyển dữ liệu.
- Nhóm lệnh xử lý bit.
- Nhóm lệnh rẽ nhánh.
Các chị tiết thiết lâp lênh:
Rn: Thanh ghi RO đến R7 của bank thanh ghi được chọn.
DATA: 8 bit địa chỉ vùng dữ liệu bên trong. Nó có thể là vùng RAM dữ
liệu trong ( 0 - 127 ) hoặc các thanh ghi chức năng đặc biệt.
@ R i: 8 bit vùng RAM dữ liệu trong ( 0 - 125 ) được đánh giá địa chỉ gián
tiếp qua thanh ghi RO hoặc R I .
#data: hằng 8 bit chứa trong câu lệnh.
#d atal 6 : Hằng 16 bit chứa trong câu lệnh.
Addrló: 16 bit địa chỉ đích được dùng trong lệnh LCALL và LJMP.
A d d rll: 16 bit địa chỉ đích được dùng trong lệnh LCALL và AJMP.
Rel: Byte offset 8 bit có dấu được dùng trong lệnh SJMP và những lệnh
nhảy có điều kiện.
B it : Bit được định địa chỉ trực tiếp trong RAM dữ liệu nội hoặc các
thanh ghi chức năng đặc biệt.
DIV AB (1,4): chia nội dung thanh ghi A cho nội dung thanh ghi B.
Ví dụ
SETB p. 1.7 set bit 7 port 1
Bit carry trong PSW được sử dụng như singlG-bit accumulator.
Ví dụ
CLR c
CLR CY ; xóa caưy
Test bỉt
Các lệnh test bit thường là các lệnh rẽ nhánh chương trình. Chúng kiem
tra trạng thái các bit để nhảy đên chương trình tương ứng nêu thoa điêu kiẹn.
AJMP CASE3
Chương trình và con neắt
Có hai lệnh CALL khác nhau: ACALL và LCALL dùng định vị tuyệt
đối và xa. Giống như lệnh JMP, lệnh CALL đưôc trình biên dịch của Intel dùng
khi người lập trình không quan tâm đến địa chỉ được biên dịch. Lệnh này đây
thanh ghi PC vào stack và nạp PC với giá trị được chỉ ra trong lệnh. Lưu ý PC
sẽ được trả lại giá trị địa chỉ sau lệnh CALL khi nó châm dứt chương trinh con.
Các lệnh LJMP và ACALL đều có những hạn chế giống như LJMP và
AJMP được mô tả ở trên.
Chương trình con kết thúc bằng lệnh RET, nó sẽ trả điều khiển lại cho
chương trình chính. Không có gì bí ẩn khi RET trả điều khiển lại cho chương
trình chính, nó chỉ đơn giản lấy 2 bytes cuối cùng của stack và đặt chúng vào
thanh ghi PC.
Lệnh RETI dùng để quay trở về chương trình chính từ trong chương
trình phục vụ ngắt. Sự khác nhau giữa RET và RETI chỉ là RETI ký hiệu cho
ngắt điều khiển hệ thông.
Lênh nhảy có điều kiên
8951 cung cấp một sei lệnh nhảy có điều kiện. Tât cả những lệnh nay
đều xác định địa chỉ đích bằng định vị tương đối. Giới hạn khoảng cách nhảy từ
-1 2 8 đến +127 bytes kể từ sau lệnh nhảy có điều kiện. Tuy nhiên người lập
trình cũng có thể định một địa chỉ bằng nhhãn hoặc một số 16 bit.
Không có bit zero trong thanh ghi PSW. JZ và JNZ test nội dung thanh
ghi ACC cho điều khiển nhảy.
Lệnh DJNZ (nhảy nếu khác 0) được dùng để điều khiển vòng lặp. Đê
vòng lập thi hành N lần, nạp biến đếm với N và đặt DJNZ ở cuối vòng lặp để
bắt đầu vòng lặp. Ví dụ vòng lặp sau thi hành 10 lân:
MOV R0,#10 ;
LOOPP: (bắt đầu vòng lặp)
Trang 44
Luận văn tết nghiệp
Chương I I :
%■
- ( o o o o o o o o o o o o o ) n _ f o o o o o ') _
u \ o o o o o o o o o o o o / u o \ o o o ò / 0
14 25 6 9
Loại 25 chân Loại 25 chân
H ình 2.2.1: Sự bô' trí chân của phích cắm chuẩn RS232
Việc truyền dữ liệu xảy ra trên hai đường dẫn qua chân cắm ra TxD.
Máy tính gởi dữ liệu của nó đến các thiết bị khác. Trong khi đó dữ liệu mà
máy tính nhận được dẫn đến chân RxD. Các tín hiệu khác đóng vai trò như tín
hiệu hỗ trợ khi thay đổi thông tin và vì thế không phải mọi ứng dụng đều dùng
đến.
Mức tín hiệu trên chân ra RxD tùy thuộc vào đường dân TxD và thông
tin thường nằm trong khoảng - 12V + +12V các bit dữ liệu được đảo ngược lại.
Mức điện áp ở mức cao nằm trong khoảng - 3V + - 12V và mức thấp nằm
trong khoảng từ +3V đến +12V. trạng htái tĩnh trên đường dẫn có mức điện áp
- 12V.
Bằng tốc độ Baud ta thiết lập tốc độ truyền dữ liệu các giá trị thông
thường là 300, 600, 1200, 2400, 4800,19200 baud. Ký hiệu baud là số lượng bit
truyền trong ls.
Bảng 2.2.1: Chức năng các chân của cổng COM chuẩn RS232
Phích cắm COM có tổng cộng 8 đường dẫn, chưa kể đến đường nối đất.
Trên thực tế có hai loại phích cắm, một loại 9 chân và một loại 25 chân. Cả hai
loại này đều có chung một đặc điểm.
Vì tín hiệu cổng COM thường ở mức +12V, -12V nên không tương thích
với điện áp TTL nên để giao tiếp KIT Vi điều khiển 8051 với máy tính qua
cổng COM ta phải qua một vi mạch biến đổi điện áp cho phù hợp với mức
TTL, ta chọn vi mạch MAX232 để thực hiện việc tương thích điện áp.
Vi mạch MAX232 có hai bộ đệm và hai bộ phận. Đường điều khiển lối
vào CTS điều khiển việc xuất dữ liệu ở cổng nối tiêp khi cần thiêt, được nÔỊ
VỚI chân 9 của MAX232. còn chân RST ( chân 10 của MAX232 ) nôi với
đường dẫn bắt tay để điều khiển quá trình nhận. Thường thì các đường dân bat
tay được nối với cổng nối tiếp qua cầu nối, để khi không dùng đến nữa có thế
hở mạch các cầu này. Cách truyền dữ liệu đơn giản nhất là chỉ dùng 3 đường
dẫn TxD RxD và mass. Sơ đồ chân của MAX232 được biểu diễn trong hình
2.2.3
j3 Vcc
1 ] gnd
a Ticur
u filK
u Blcui
3ĨỊ TtH
Ì]T2h
D FSour
Phần III:
in U)
5
o
o 5 CN w CO
»
Luận văn tốt nghiệp
0 U T 1 |= 1 14 □ ỎUT
V 1+ C 2 13 □ v 4_
V i- c 3 12 □ v 4+
v +c 4 11 □ V.
v 2+c 5 1 0 □ V3+
v 2_ c 6 9 □ v 3-
OUT 2 c 7 8 □ OUT
V.' // 6 = 300Q
ILE D 10.10 - 3
Chọn R6=270 Q.
Tương tự chọn R3=270Q "') V ị Ị
51
Luận văn tết nghiệp
\ í.*
Chọn R 5 = 100Q
T
Ị
V cc—VrE 5 -0 ,2
= _ c c --------- C Ẹ . = ----------= 4 8 m A
R5 100
Chọn Q2SC1815 có p = 100
, Ic 48.10-3
•lo = — = - = 0,48mA
p 100
■p, v„ - VRF 3,8 - 0,7
=>R 4 = — — — = — , = 6,5KQ
IB 0,48.10“3
=> Chọn R 4 = 4,7KQ 7'
Tính R l ,R1,VR
Khi led thu nhận ánh sáng hồng ngoại thì có trở kháng rất nhỏ khoảng
vài trăm Ohm. Và khi không nhận ánh sáng thì có giá trị khoảng vài chục
KiloOhm.
Do đó để OPAMP nhận được mức điện áp đủ để so sánh giữa hai trường
hợp ta chọn : R! = 10KQ, R2= 100Q, VR = 10KQ.
rc.- ¡1 ,-
2 . Khỏi hiển thi:
Để hiển thị ta có thể dùng led 7 đoạn, màn hình LCD, ma trận led ... để
đơn giản trong mạch này dùng phương pháp hiển thị bằng led 7 đoạn và dùng
phương pháp quét led.
a. Sơ đồ nguyên lv:
vậy tại mỗi một thời điểm chỉ có một led sáng nhưng do tần sô" quét led cao
nên mắt ta nhìn thấy tất cả các led đềụ^rấng và hiển thị dữ liệu yêu cầu.
Với phương pháp này thì mạchviêpthiết kế và thi công rất đơn giản và ít
tôn kém nhưng mạch chỉ cho phép hiên thị tốt với các mạch có sô" led hiển thị ít
và đơn giản. Đốì với các mạch có sô" led hiển thị nhiều và yêu cầu cao hơn ta
phải dùng phương pháp chốt, các IC chốt như: 4511, 74373, 74573...
c. Tính toán;
Điện trở R! để phân cực.
Chọn ILED = lOmA Q
=> Ic = 7x10 = 70mA
Chọn Q2SA1015 có p = 100
VCC
I» = ^ = — = 0,7mA ọ
100
R1 Q6
5 -0 ,7
=> R, = = 6,1KQ Q2SA1015
0,7.10"3
R
£
=> Chọn Ri = 4,7KQ
D1
R 2 là điệrj4 ĩở hạn dòng cho LED.
LED
Chọn R 2 = 330Q R2
R
SERVO
=>Chọn R 28 = 1KQ
=> Ici = I b2 + Ic 2 =0,23.103 + 0,115 = 1 15,23mA
^ R 27 —1KQ 1
=> Chọn R 26 = 10KQ
R 25 là điện trở hạn dòng cho LED , chọn ILED = lOmA, VLED = 2V
rY ____________
Chương trình đếm kênh 2
ìT
------N
< d ^ P 1.2 = 0 ? J ^ > ------------
\Y____________
Chương trình đếm kênh 3
<-------------------------------
r
ĩ 1|U35| Ị B P Ị B 3 I Ị U U Ị á u / ự i i o *8
đ ậ i i f ô u ỊỌỊ UVA U p t l J
Í9 J J dan ovịS uivtịd urn imp tỊơỗpự
£ q u ẹ ỉ i i ç p ỊB 3 IỊ U U Ị 3 u p . n i o ox
Truyền Data
•4--------------------------
Nhận Data
4--------------------------
▼
N
Reset
1
2 •H i * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
9
3 ;GHI CHU: cho chop khi cai dat
.île * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
4
0020 5 kenh EQU 20H
0021 6 traml EQU 21H
0022 7 chucl EQU 22H
0023 8 donvil EQU 23H
9
0024 10 tram2 EQU 24H
0025 11 chuc2 EQU 25H
0026 12 donvi2 EQU 26H
13
0027 14 tram3 EQU 27H
0028 15 chuc3 EQU 28H
0029 16 donvi 3 EQU 29H
*
17
002A 18 tram4 EQU2AH
002B 19 chuc4 EQU 2BH
002C 20 donvi4 EQU 2CH
21
002D 22 tram EQU2DH
002E 23 chuc EQU 2EH
002F 24 donvi EQU 2FH
25
0030 26 cdtraml EQU 30H
0031 27 cdchucl EQU31H
0032 28 cddonvil EQU 32H
29
0033 30 cdtram2 EQƯ 33H
0034 31 cdchuc2 EQU 34H
0035 32 cddonvi2 EQU 35H
33
0036 34 cdtram3 EQU 36H
106
008E 7D00 107 mov R5,#0
0090 753001 108 mov dem,#l
232
019A 7D01 233 mov R 5,#l
019C 120404 234 call delay 10ms
019F 7D00 235 mov R5,#0
01A1 12040D 236 call delay5ms
01A4 80C4 237 sjmp caidat
238
239 luu gia tri cai dat
240
01A6 120404 241 save: call delay 10ms
01A9 E520 242 mov A,kenh
01AB B4010B 243 cjne A,#l,save2
01AE 852D30 244 mov cdtraml,tram
01B1 852E31 245 mov cdchucl,chuc
01B4 852F32 246 mov cddonvil,donvi
01B7 8025 247 sjmp exit
01B9 B4020B 248 save2: cjne A,#2,save3
01BC 852D33 249 mov cdtram2,tram
01BF 852E34 250 mov cdchuc2,chuc
01C2 852F35 251 mov cddonvi2,donvi
01C5 8017 252 sjmp exit
01C7 B4030B 253 save3: cjne A,#3,save4
01CA 852D36 254 mov cdtram3,tram
01CD 852E37 255 mov cdchuc3,chuc
OIDO 852F38 256 mov cddonvi3,donvi
01D3 8009 257 sjmp exit
01D5 852D39 258 save4: mov cdtram4,tram
01D8 852E3A 259 mov cdchuc4,chuc
01DB 852F3B 260 mov cddonvi4,donvi
01DE 22 261 exit: ret
262
263 s i*** ** *** ** *** ** *** ** *** ** *** ** *** ** *** ** **
264 chuông trinh quet led dung pp ngat timer
2 6 5 '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
280
01FE B40214 281 n otl: cjne A,#2,not2 ; //xuat led tram
386
.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
387 ?
388 ;chuong trinh so sanh kenh 1
.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
389 5
02C1 390 sskenhl:
02C1 E523 391 mov A,donvil
453 ; inc RO
454 ; cjne R0,#3DH,skip
565 .H i * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
5
566 ;chuong trinh delay 5ms
567 .S H * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
5
040D 7E64 568 delay5ms: mov R6,#100
040F 7FFA 569 N: mov R7,#250
0411 DFFE 570 DJNZ R7,$
0413 DEFA 571 djnz R6,N
0 4 1E 589 putchar:
0 4 IE 3099FD 590 jnb TI,$
596 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
0433 999282F8
0437 8090
605 END
96
Liiận văn tố t nghiệp
Chươns I I I :
CHƯƠNG TRÌNH GIAO T IE P VỚI MÁY TÍNH
Chương trình này dùng để tạo một giao diện trên máy tính để hiện thị sô"
liệu của mạch đếm và gởi tính hiệu điều khiển đến phần cứng.
Giao diện của chương trình như hình
X / Chọn
Nhập sô" sản Sô" sản Sô" sản phẩm kênh cần
phẩm cài đăt đang đếm đươc cài đăt điều khiển
V-_______ ___ V ___
Hình 3.3.1: Giao diện chương trình giao tiếp
End Sub
End Sub
Qua thời gian nghiên cứu và tiến hành thi công mạch, cuối cùng mạch
đã hoàn thành và chạy tốt, sau đây là kêt quả thực hiện :
Mạch thu phát lúc đầu hoạt động không tốt do mất IV điện áp trên led
nên LM324 không cho đúng điện áp ngõ ra nên transistor không dẫn bảo hòa,
dẫn đến mức điện áp ra không rõ ràng làm cho vi điều khiển không nhận biết
được. Nhưng qua quá trình tìm hiểu và chỉnh sửa thì mạch đã hoạt động tốt.
Mạch điều khiển động cơ chưa điều khiển động cơ tốt. Để mạch hoạt
động tốt ta phải dùng nguồn nuôi 12V
Mạch giao tiếp máy tính cơ bản đã thực hiện tốt các chức năng nhưng ở
số liệu cài đặt trên kênh đêm 1 vẫn chưa chạy ổn định và chính xác và em vân
đang tiến hành điều chỉnh, sửa chữa để mạch hoàn thiện hơn.
Tuy mạch vẫn còn một số điểm cần khắc phục nhưng cơ bản thì mạch
đã đáp ứng được các nhiệm vụ được đề ra. Và nếu có thêm thời gian mạch sẽ
được hoàn chỉnh hơn.
K Ế T LUẬN
Qua gần 15 tuần nghiên cứu và thực thi đề tài, với sự giúp đỡ tận tình
của thầy Phạm Hùng Kim Khánh và bạn bè, cuối cùng đề tài của em đã cơ bản
hoàn thành các nhiệm vụ được đề ra là:
■
/ Thiết kế và thi công mạch đếm sản phẩm đa kênh.
v' Giao tiếp 89C51 với PC
■
/ Điều khiển từ máy tính.
•/ Hiển thị giá trị đếm và cài đặt trên PC.
Mặc dù rất cố gắng nhưng do thời gian và trình độ chuyên môn có hạn
nên mạch được thiết kế vẫn còn nhiều điều chưa tối ưu. Nêu có thêm thời gian
và kinh phí mạch sẽ được mở rộng hơn và hoàn thiện các tính năng hơn.
Dưa trên đề tài đang nghiên cứu ta có thể phát triển đề tài như
sau:
■
S Có thể tăng số lượng kênh đêm.
V Tăng số lượng sản phẩm đếm.
•/ Tăng khoảng cách cảm biến.
•/ Điều khiển băng chuyền đa dạng hơn như cho dừng băng chuyên
để đóng thùng,...