LỜI GIỚI THIỆU 5
Chương 1. Giới thiệu tổng quan. 6
1.1. Giới thiệu chung. 6
1.2. Giới thiệu đề tài. 6
Chương 2. Tổng quan về giao tiếp máy tính và vi mạch 89C51. 7
2.1. Tổng quan về giao tiếp máy tính. 7
2.1.1. Phần cứng. 7
2.1.2. Phần mềm. 9
2.2. Vi mạch 89C51. 14
2.2.1. Cấu trúc vi mạch 89C51 và chức năng của các chân. 15
2.2.2. Cấu trúc bus. 19
2.2.3. Bộ nhớ chương trình – Bộ nhớ ROM. 20
2.2.4. Bộ nhớ dữ liệu-Bộ nhớ RAM. 20
2.2.5. Các thanh ghi chức năng đặc biệt (SFR). 22
2.2.6. Bộ nhớ ngoài (external memory). 29
2.2.7. Hoạt động RESET. 33
2.2.8. Họat động định thời. 34
2.2.9. Họat động ngắt. 39
2.2.10. Họat động port nối tiếp. 43
2.3. Sơ lược về bộ nhớ. 53
2.3.1. Khái niệm. 53
2.3.2. Phân loại bộ nhớ: một số bộ nhớ thông dụng. 53
2.4. Giới thiệu chương trình Asambler. 54
Chương 3. Thiết kế modun quang báo. 60
3.1. Các IC được dùng trong mạch. 60
3.2. Sơ đồ khối và Hoạt động các khối. 65
3.2.1. Mater: 65
3.2.2. Slave: 65
102 trang |
Chia sẻ: NguyễnHương | Lượt xem: 1018 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Đề tài Thiết kế mạch quang báo giao tiếp máy tính, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ngắt do bộ định thời. Cờ gây ra ngắt ở port nối tiếp không được xóa bởi phần cứng khi CPU trỏ tới trình phục vụ ngắt. Còn các ngắt do bộ định thời, cờ tạo ra ngắt được xóa bởi phần cứng khi CPU trở tới trình phục vụ ngắt.
Các ngắt ngoài.
Ngắt ngoài xảy ra khi có mức thấp hoặc cạnh âm trên chân INT0 (P3.2) hoặc INT1 (P3.3) của 89C51.
Việc chọn các ngắt loại tác động cạnh hay tác động mức được lập trình thông qua các bit IT0 và IT1 của thanh ghi TCON. Thí dụ IT1=0, ngắt ngoài 1 được kích khởi bởi việc phát hiện mức thấp ở chân INT1, nếu IT1=1, ngắt ngoài 1 được kích khởi cạnh.
Các chân ngắt ngoài được lấy mẫu một lần ở mỗi chu kỳ máy, và phải duy trì tối thiểu 12 chu kỳ dao động để đảm bảo yêu cầu. Nếu ngắt ngoài thuộc loại tác động cạnh, nguyên nhân ngắt phải được duy trì tại chân yêu cầu ở mức cao tối thiểu một chu kỳ sau đó ở mức thấp tối thiểu một chu kỳ nửa. IE0 và IE1 tự động được xóa khi CPU trỏ tới trình phục vụ ngắt tương ứng.
Nếu ngắt ngoài thuộc loại tác động mức, nguyên nhân ngắt phải được duy trì trạng thái tích cực cho đến khi ngắt theo yêu cầu thực sự được tạo ra. Sau đó ở trạng thái thụ động trước khi trình phục ngắt được thực thi xong hoặc trước khi có một ngắt khác được tạo ra.
Họat động port nối tiếp.
89C51 có port nối tiếp trong chip có thể họat động ở nhiều chế độ trên một dãy tần số rộng. Chức năng chủ yếu là chuyển đổi từ dữ liệu song song sang nối tiếp đối với dữ liệu xuất và chuyển đổi từ nới tiếp sang song song đối với dữ liệu nhập.
Port nối tiếp hoạt động song công (full duplex) nghĩa là có khả năng thu và phát đồng thời và đệm thu cho phép một ký tự sẽ được thu và giữ trong khi ký tự thứ 2 nhận được. Khi CPU đọc ký tự thứ 1 trước khi ký tự thứ 2 được nhận đầy đủ thì dữ liệu sẽ không bị mất.
Hai thanh ghi chức năng đặc biệt SBUF và SCON để truy xuất port nối tiếp. Bộ đệm port nối tiếp SBUF có địa chỉ byte là 99H. việc ghi lên SBUF sẽ nạp dữ liệu để phát và việc đọc SBUF sẽ truy xuất dữ liệu nhận được. Thanh ghi điều khiển port nối tiếp SCON có địa chỉ là 98H, chứa các bit trạng thái và bit điều khiển. Các bit điều khiển sẽ thiết lập chế độ hoạt động cho port nối tiếp còn các bit trạng thái chỉ ra sự kết thúc việc thu hoặc phát một ký tự. Các bit trạng thái được kiểm tra bởi phần mềm hoặc được lập trình để tạo ra ngắt.
Thanh ghi điều khiển.
Chế độ họat động của port nối tiếp được thiết lập bằng cách ghi từ điều khiển lên thanh ghi chọn chế độ SCON.
Các chế độ họat động.
Port nối tiếp có 4 chế độ họat động, các chế độ được chọn nhờ vào hai bit SM0 và SM1 trong thanh ghi SCON.
Bit
Ký hiệu
Địa chỉ
Mô tả
SCON.7
SM0
9FH
Bit 0 chọn chế độ của port nối tiếp.
SCON.6
SM1
9EH
Bit 1 chọn chế độ của port nối tiếp.
SCON.5
SM2
9DH
Bit 2 chọn chế độ của port nối tiếp. Bit này cho phép truyền thông đa xử lý ở các chế độ 2 và 3; bit RI sẽ không được tích cực nếu bit thứ 9 nhận được là 0.
SCON.4
REN
9CH
Cho phép thu. Bit này phải được set để nhận các ký tự.
SCON.3
TB8
9BH
Bit phat 8.Bit thứ 9 được phát ở các chế độ 2 va 3; được set và xóa bởi phần mềm.
SCON.2
RB8
9AH
Bit thu 8; bit thứ 9 nhận được.
SCON.1
TI
99H
Cờ ngắt phát. Cờ này được set ngay khi kết thúc việc phát một ký tự; được xóa bởi phần mềm.
SCON.0
RI
98H
Cờ ngắt thu. Cờ này được set ngay sau khi kết thúc việc thu một ký tự; được xóa bởi phần mềm.
Bảng 2.13: Thanh ghi SCON
Các chế độ được mô tả như sau:
SM0
SM1
Chế độ
Mô tả
Tốc độ baud
0
0
0
Thanh ghi dịch
Cố định (tần số dao động /12 )
0
1
1
UART 8 bit
Thay đổi ( thiết lập bởi bộ định thời )
1
0
2
UART 9 bit
Cố định (tần số dao động /12 hoặc /64 )
1
1
3
UART 9 bit
Thay đổi ( thiết lập bởi bộ định thời )
Bảng 2.14: Các chế độ của port nối tiếp.
Thanh ghi dịch 8 bit (chế độ 0).
Chế độ 0 được chọn bằng cách ghi giá trị 0 vào các bit SM0 và SM1 trong thanh ghi SCON. Đưa port nối tiếp vào chế độ thanh ghi dịch 8 bit . Dữ liệu nối tiếp được thu và phát thông qua chân RxD, chân TxD xuất xung clock dịch bit. Tốc độ baud cố định bằng 1/12 tần số của mạch dao động trên chip. Chân RxD được sử dụng cho cả thu và phát dữ liệu còn chân RxD được dùng làm chân xuất xung clock dịch bit.
Việc phát dữ liệu được khởi động bằng một lệnh ghi dữ liệu vào SBUF. Dữ liệu được dịch ra ngoài qua chân RxD (P3.0) với các xung clock dịch bit được gởi ra trên chân TxD (P3.1). Mỗi một bit hợp lệ được truyền đi trên đường RxD trong một chu kỳ máy.
Trong mỗi chu kỳ máy, xung clock dịch bit đổi thành mức thấp ở S3P1 và trở lại mức cao ở S6P1.(hình 2.16)
Việc thu dữ liệu được khởi động khi bit cho phép thu REN ở logic 1 và cờ ngắt thu RI ở mức logic 0. Qui tắt tổng quát là ta phải set bit REN bằng 1 ở thời điểm bắt đầu chương trình để khởi động port nối tiếp và sau đó xóa bit RI để bắt đầu công việc thu dữ liệu.
Khi bit RI được xóa, các xung clock dịch bit được xuất ra trên chân TxD, ta bắt đầu chu kỳ máy tiếp theo và dữ liệu được dịch vào chân RxD bởi xung clock.(hình 2.15)
Dữ liệu xuất
RxD
Xung clock
dịch bit
ALE
một chu kỳ máy
D0 D1 D2 D3 D4 D5 D6 D7
Hình 2.15: Giản đồ thời gian thu dữ liệu ở chế độ 0
Data out RxD
P1 P2
P1 P2
P1 P2
P1 P2
P1 P2
P1 P2
S1
S2
S3
S4
S5
S6
D0 D1 D2 D3 D4 D5 D6 D7
Xung clock dịch bit
ALE
ALE
Xung clock
Dữ liệu
xuất
Phóng đại
Hình 2.16: Giản đồ thời gian phát dữ liệu ở chế độ 0
Một ứng dụng khả thi của chế độ 0 (chế độ thanh ghi dịch bit) là mở rộng thêm các ngõ ra cho 89C51. Một vi mạch thanh ghi dịch nối tiếp song song có thể được nối với các chân TxD và RxD của 89C51 để cung cấp thêm 8 đường xuất (xem hình 2.2.8) các thanh ghi dịch bit khác có thể ghép cascade với thanh ghi dịch bit đầu tiên để mở rộng thêm nữa.
TxD (P3.1)
RxD (P3.0)
CLOCK
Data
Thanh ghi dịch bit
8051
8 ngõ ra mở rộng
Hình 2.17: Chế độ thanh ghi dịch của port nối tiếp
UART 8 bit có tốc độ baud thay đổi (chế độ 1):
Trong chế độ 1 port nối tiếp của 89C51 họat động như một bộ thu phát không đồng bộ (Universal asynchrouos receiver transmitter). UART là một bộ thu phát dữ liệu nối tiếp với mỗi ký tự dữ liệu được ứng trước bởi một bit start (logic 0) và đứng sau bởi một bit stop (logic 1). Đôi khi có một bit chẵn lẻ được chèn giữa bit dữ liệu sau cùng và bit stop. Hoạt động chủ yếu của UART là biến đổi dữ liệu phát từ song song sang nối tiếp và biến đổi dữ liệu từ nối tiếp thành song song.
Như vậy ở chế độ 1 ta có 10 bit thu được trên chân RxD và 10 bit được phát đi trên chân TxD cho mỗi ký tự. Khi hoạt động thu, bit stop đưa dến bit RB8 của SCON. Với 89C51, tốc dộ baud được thiết lập bởi tốc độ tràn của bộ định thời 1.
Việc cấp xung clock dịch bit và đồng bộ các thanh ghi dịch bit của port nối tiếp ở chế độ 1, 2 và 3 được thiết lập bởi bộ đếm 16, ngõ ra của bộ đếm là xung clock tốc độ baud. Ngõ vào của bộ đếm được chọn bằng phần mềm.(hình 2.18)
Việc phát được khởi động bằng cách ghi vào SBUF nhưng nó chưa bắt đầu cho đến lần tràn kế của bộ đếm 16. Dữ liệu xuất ra trên đường TxD bắt đầu bằng bit start, tiếp theo là 8 bit dữ liệu rồi đến bit stop. Cờ ngắt TI được set bằng 1 ngay khi bit stop xuất hiện trên TxD (xem hình 2.19):
Xung clock tốc độ buad
Thanh ghi dịch của port nối tiếp
÷ 12
16 x tốc độ baud
Hình 2.18: Cấp xung clock cho port nối tiếp
D0 D1 D2 D3 D4 D5 D6 D7
tốc độ baud
1
Start bit
Stop bit
ngắt phát
TxD
TI
(SCON.1)
Hình 2.19: Set cờ TI của port nối tiếp
Việc nhận được khởi động khi chuyển trạng thái từ 1 xuống 0 trên RxD (bắt đầu bit start). Bộ đếm 16 ngay lập tức được xóa để gán các số đếm cho dòng bit đến chân RxD.
UART 9 bit có tốc độ baud cố định (chế độ 2):
Khi SM1=1 và SM0=0, port nối tiếp họat động chế độ 2, chế độ này có tốc độ baud cố định. 11 bit được thu hoặc phát cho việc thu phát một ký tự dữ liệu: bit start, 8 bit dữ liệu, bit stop. Khi phát bit thứ 9 là bit bất kì được đặt vào bit TB8 trong thanh ghi SCON (có thể là bit chẵn lẻ). khi thu bit thứ 9 hận được sẽ đặt váo RB8. Tốc độ baud ở chế độ 2 bằng 1/32 hoặc 1/64 tần số của mạch dao động trên chip.
UART 9 bit có tốc độ baud thay đổi (chế độ 3):
Chế độ 3,UART 9 bit thay đổi tương tự như chế độ 2 ngoại trừ tốc độ baud được lập trình và cung cấp bởi bộ định thời.
Khởi động và truy xuất các thanh ghi.
Cho phép thu(Recive enable): bit cho phép thu REN trong thanh ghi SCO phải được set bằng 1 bởi phần mềm để cho phép nhận ký tự. Điều này thường được thực hiện ở đầu chương trình khi port nối tiếp, bộ timer, được khởi động. Ta có thể dùng 2 cách sau:
SETB REN
hoặc MOV SCON,#xxx1xxxxB
Bit dữ liệu thứ 9: được phát ở chế độ 2 và 3 phải được nạp cho bit TB8 bằng phần mềm. Bit dữ liệu thứ 9 phải được đặt vào bit RB8 của SCON. Phần mềm có thể yêu cầu hoặc không yêu cầu bit này, tùy vào đặc tính của thiết bị nối tiếp.
Thêm vào bit chẵn lẻ:bit P trong từng trạng thái chương trình PSW được SET hoặc CLR ở mỗi chu kỳ máy để thiết lập kiểm tra chẵn cho 8 bit chứa trong thanh chứa A.
Thí dụ việc truyền thông yêu cầu 8 bit dữ liệu cộng với một bit kiểm tra chẵn, các lệnh sau được dùng để phát đi 8 bit trong thanh chứa với bit kiểm tra chẵn được đưa vào bit thứ 9:
MOV C,P ;đưa bit kiểm tra chẵn vào TB8
MOV TB8,C ;bit này trở thành bit thứ 9
MOV SBUF,A ;di chuyển 8 bit dữ liệu từ ACC đến SBUF
Nếu kiểm tra lẻ thì:
MOV C,P ;đưa bit kiểm tra chẵn vào TB8
CPL C
MOV TB8,C ;bit này trở thành bit thứ 9
MOV SBUF,A ;di chuyển 8 bit dữ liệu từ ACC đến SBUF
Việc dùng bit chẵn lẻ không bị giới hạn trong chế độ 2 và 3. Trong chế độ 1, 8 bit dữ liệu phát đi bao gồm 7 bit dữ liệu và 1 bit chẵn lẻ. Để phát đi một mã ASCII 7 bit cùng với bit kiểm tra chẵn, ta có thể sử dụng các lệnh sau:
CLR ACC.7 ;xóa bit MSB
MOV C,P ;sao chép bit P vào C
MOV ACC.7,C ;đặt bit kiểm tra vào bit MSB
MOV SBUF,A ;phát ký tự
Cờ ngắt: cờ ngắt thu RI và cờ ngắt phát TI đóng vai trò quan trọng trong việc truyền dữ liệu nối tiếp, cả hai bit điều được set bằng 1 và được xóa bằng phầnh mềm.
Nếu muốn nhận một ký tự từ thiết bị nối với port nối tiếp ta có thể dùng các lệnh sau:
NHAN: JNB RI,NHAN ;kiểm tra RI cho đến khi bằng 1
CLR RI ;xóa RI
MOV A,SBUF ;đọc ký tự
Cờ TI set bằng 1 khi kết thúc việc phát một ký tự và chỉ ra rằng bộ nhớ đệm rỗng. Các lệnh sau phát một ký tự chứa trong thanh chứa:
PHAT: JNB TI,NHAN ;kiểm tra TI cho đến khi bằng 1
CLR TI ;xóa TI
MOV SBUF,A ;phát ký tự
Truyền thông đa xử lý:
Các chế độ 2 và 3 là các chế độ dự phòng cho việc truỵền thông đa xử lý. Trong các chế độ náy 9 bit dữ liệu được thu và bit thứ 9 được đưa đến RB8. Port có thể được lập trình sao cho khi bit stop được nhận, ngắt do port nối tiếp được tích cực chỉ khi RB8=1. đặc trưng này có được bằng cách set bit SM2 trong thanh ghi SCON bằng 1. Ứng dụng cho mạng sử dụng nhiều 89C51 theo mô hình chủ/tớ (master/slave):
Master 89C51
TxD
P0 P1 P2 P3
89C51 Slave #1
RxD
32 đường I/O
P0 P1 P2 P3
89C51 Slave #2
RxD
32 đường I/O
Hình 2.20 : Truyền thông đa xử lý.
Khi bộ xử lý muốn phát một khối dữ liệu đến bộ xử lý con riêng lẻ, trước tiên nó gởi ra một byte để địa chỉ để nhận diện bộ xử lý con mong muốn. Byte địa chỉ được phân biệt với byte dữ liệu ở bit thứ 9: bit thứ 9 bằng 1 trong byte địa chỉ và bằng 0 trong byte dữ liệu. Tuy nhiên byte địa chỉ sẽ ngắt toàn bộ xử lý con, do đó có thể khảo sát byte đã thu để kiểm tra có dạng định địa chỉ. Bộ xử lý con đã được định địa chỉ sẽ xóa bit MS2 của nó và chuẩn bị thu các byte dữ liệu theo sau đó. Những bộ xử lý con không được định địa chỉ có các bit SM2 của nó được set bằng 1 và thực thi các công việc riêng của chúng.
SM2 không ảnh hưởng đến chế độ 0, và trong chế độ 1 bit này có thể đựơc dùng để kiểm tra sự hợp lệ của bit stop. Ở chế 1 thu nếu SM2=1 ngắt thu sẽ không được tích cực trừ khi bit stop thu được là hợp lệ.
Tốc độ baud của port nối tiếp.
Tốc độ baud sẽ cố định trong các chế độ 0 và 2. trong chế độ 0 tốc độ baud luôn bằng tần số của mạch dao động trong chip chia cho 12. Thông thường nguời ta sử dụng một thạch anh bên ngoài chip.
÷ 12
Bộ dao động trong chip
Bộ dao động trong chip
Tràn bộ định thời 1
Xung clock tốc độ baud
Xung clock tốc độ baud
Xung clock tốc độ baud
÷ 32
÷ 64
SMOD=0
SMOD=1
÷ 32
÷ 16
SMOD=0
SMOD=1
(a) Mode 0
(b) Mode 2
(c) Mode 1, 3
Hình 2.21: Nguồn xung clock cho port nối tiếp.
(a)chế độ 0, (b) chế độ 2, (c) chế độ 1, 3
Sau khi hệ thống reset, tốc độ baud của chế độ 2 bằng tần số của mạch dao động chia cho 64. Tốc độ baud cũng bị ảnh hưởng bởi một bit trong thanh ghi điều khiển nguồn PCON. Bit 7 của PCON là bit SMOD và việc set bit này bằng 1 sẽ làm tăng tốc độ baud của các chế độ 1, 2 và 3 lên gấp đôi. Ở chế độ 2, tốc độ baud có thể được nhân hai từ giá trị mặc định là 1/64 tần số của mạch dao động ( SMOD=0) trở thành 1/32 tần số dao động của mạch (SMOD=1).
Các tốc độ baud của 89C51 ở chế độ 1 và 3 được xác định bởi tốc độ tràn của bộ định thời 1. Vì bộ định thời hoạt động ở tần số tương đối cao, ta cần chia tốc độ tràn cho 32 (hoặc 16 nếu SMOD=1) trước khi cung cấp cho port nối tiếp.
Tốc độ baud
Tần số
thạch anh
SMOD
Giá trị nạp
cho TH1
Tốc độ baud
thực tế
Sai số
9600
12.000MHz
1
-7 (F9H)
8923
7%
2400
12.000MHz
0
-13 (F3H)
2404
0.16%
1200
12.000MHz
0
-26 (E6H)
1202
0.16%
19200
11.059MHz
0
-3 (FDH)
19200
0
9600
11.059MHz
0
-6 (FAH)
9600
0
2400
11.059MHz
0
-12 (F4H)
2400
0
1200
11.059MHz
0
-24 (E8H)
1200
0
Bảng 2.15: Tóm tắt tốc độ baud.
Sơ lược về bộ nhớ.
Khái niệm.
Bộ nhớ (memory): là thiết bị nhớ có thể ghi và chứa thông tin. ROM, RAM, cache, đĩa cứng, đĩa mềm, CDđều có thể gọi là bộ nhớ.
Dung lượng: là khả năng lưu trữ dữ liệu của thiết bị. Ví dụ: CD chứa được 700MB; đĩa mềm chứa 1.44MB; đĩa cứng chứa được 40GB, 60GB,; cache L1 chứa được 16 KB, cache L2 chứa được 256 KB
Tốc độ truy nhập: liên quan đến tốc độ truyền dữ liệu của thiết bị. Tính về tốc độ thì CPU là lờn nhất, kế tiếp là cache, sau là các loại RAM.
Giao tiếp: cấu trúc bên ngoài bộ nhớ.
Phân loại bộ nhớ: một số bộ nhớ thông dụng.
ROM (Read Only Memory): thông tin lưu trữ trên ROM không thể xóa được và không xóa được, thông tin sẽ được lưu mãi mãi. Nhưng ngược lại ROM có bất lợi là khi đã cài đặt thông tin vào rồi thì ROM không còn tính đa dụng.
EPROM (Erasable Programmable ROM) là ROM có thể xóa và ghi lại nhiều lần được, phương pháp xóa là phần cứng (dùng tia hồng ngoại).
RAM (Random Access Memory) là thế hệ kế tiếp của ROM, cả ROM và RAM đều là bộ nhớ truy xuất ngẫu nhiên, tức là dữ liệu được truy xuất không theo thứ tự. Tuy nhiên ROM chạy chậm hơn RAM rất nhiều. Thông thường ROM cần trên 50ns để xử lý dữ liệu trong khi đó RAM cần dưới 10ns.
SRAM (Static RAM) và DRAM(Dynamic RAM):
RAM tĩnh là RAM lưu trữ dữ liệu không cần cập nhật thường xuyên. Trong khi DRAM là loại RAM cần cập nhật dữ liệu thường xuyên. Thông thường dữ liệu trong DRAM sẽ được làm tươi (refresh) nhiều lần trong một giây để giữ lại những thông tin đang lưu giữ, nếu không thì dữ liệu sẽ bị mất do hiện tượng rò rỉ điện tích của tụ điện. Các sự khác biệt giữ SRAM và DRAM:
Tốc độ của SRAM nhanh hơn DRAM do không phải tốn thời gian refresh.
Chế tạo SRAM tốn kèm hơn DRAM nên thông thường sủ dụng DRAM để hạ giá thành sản phẩm.
Giới thiệu chương trình Assambler.
Vi điều khiển là một IC lập trình, vì vậy VĐK cần được lập trình trước khi sử dụng. Mỗi phần cứng nhất định phải có chương trình phù hợp kèm theo, do đó trước khi viết chương trình đòi hỏi người viết phải nắm bắt được cấu tạo phần cứng và các yêu cầu mà mạch điện cần thực hiện. Chương trình là tập hợp các lệnh được tổ chức theo một trình tự hợp lí để giải quyết các yêu cầu của người lập trình. Tập hợp tất cả các lệnh gọi là tập lệnh. Họ VĐK MSC-51 đều có chung một tập lệnh, các VĐK được cải tiến sau này thường ít thay đổi hoặc mở rộng tập lệnh mà chú trọng phát triển phần cứng. Lệnh của VĐK là các số nhị phân 8 bit hay còn gọi là mã máy. Các lệnh mang mã 00000000b đến 11111111b. Các mã lệnh này được đưa vào lưu trữ trong ROM, khi thực hiện chương trình VĐK đọc các mã lệnh này, giải mã, và thực hiện lệnh.
Người viết chương trình có thể viết chương trình cho VĐK bằng các ngôn ngữ lập trình , sau khi việc viết chương trình được hoàn tất, các trình biên dịch sẽ chuyển các câu lệnh thành mã máy một cách tự động. Các mã máy này sau đó được đưa (nạp) vào bộ nhớ ROM của VĐK, VĐK sẽ tìm đến đọc các lệnh từ ROM để thực hiện chương trình . Bản thân máy tính không thể thực hiện các mã máy này vì chúng không phù hợp với phần cứng máy tính, muốn thực hiện phải có các chương trình mô phỏng dành riêng.
Chương trình cho VĐK có thể viết bằng C++,C,Visual Basic, hoặc bằng các ngôn ngữ cấp cao khác. Tuy nhiên hợp ngữ Assembler được đa số người dùng VĐK sử dụng để lập trình, vì lí do này em chọn Assembler để sử dụng viết chương trình cho VĐK. Assembler là một ngôn ngữ cấp thấp, trong đó mỗi câu lệnh chương trình tương ứng với một chỉ lệnh mà bộ xử lý có thể thực hiện được. Ưu điểm của hợp ngữ Assembler là: mã gọn, ít chiếm dung lượng bộ nhớ, hoạt động với tốc độ nhanh, và nó có hiệu suất tốt hơn so với các chương trình viết bằng ngôn ngữ bậc cao khác.
Assembler là một ngôn ngữ lập trình cấp thấp gần với ngôn ngữ máy, chương trình sau khi viết bằng Assembler cần được chuyển đổi qua mã lệnh (hay còn gọi là mã máy) của VĐK, quá trình chuyển đổi được thực hiện bằng chương trình dịch Assembler. Các mã lệnh sau đó được nạp vào Rom của VĐK để thực hiện chương trình. Chương trình dịch Assembler được dùng phổ biến hiện nay là chương trình Macro Assembler sử dụng trên Dos, Ride 51 sử dụng trên Window,
Để soạn thảo chương trình có thể sử dụng Notepal hoặc bất cứ chương trình soạn thảo có sử dụng bộ kí tự chuẩn ASCII và lưu tên đuôi như sau: "tên.asm". Ngoài ra có thể sử dụng các phần mềm hỗ trợ soạn thảo dành riêng cho VĐK đã tích hợp sẵn chương trình dịch Assembler.
Một số qui ước khi lập trình hợp ngữ:
Khi giới thiệu các câu lệnh viết bằng hợp ngữ, các câu lệnh cần được bao quát tất cả các trường hợp do đó có một số qui ước khi thiết lập cú pháp các lệnh như sau:
Tên
qui ước
Tên qui ước đại diện cho
Cu pháp lệnh
Ví dụ khi sử dụng
Rn
Các thanh ghi ở các bank thanh ghi
Khi sử dụng thay đổi n thành các số từ 0÷7: R0, R1, , R7.
MOV A,Rn
MOV A,R2
#data
Dữ liệu 8 bit, khi sử dụng data có thể viết dưới dạng:
Số nhị phân ( vd: 10101100b)
Số thập phân ( vd: 88)
Số thập lục phân ( vd: 0A8H)
MOV A,#data
MOV A,#25H
Direct
Ô nhớ có địa chỉ là direct, direct được thay bằng địa chỉ từ 00h đến FFH khi viết chương trình.
MOV A,direct
MOV A,30H
@Ri
Ô nhớ địa chỉ gian tiếp, đây là địa chỉ của một ô nhớ, địa chỉ này được xác định gián tiếp bằng giá trị của thanh ghi R0 hoặc R1 ( chỉ được sử dụng hai thanh ghi R0 và R1 để lưu giá trị này).
MOV A,@Ri
MOV A,@R1
#data: là giá trị cần thiết lập trong một ô nhớ, data được ghi trong chương trình assembler với qui định về cách viết số như ở bên dưới, các số này sau đó được trình biên dịch chuyển thành các số nhị phân tương ứng.
Vídụ:khi ghi #95H đây là giá trị được thiết lập trong từng bit của ô nhớ. (các bit của ô nhớ có giá trị là 10010101b). Còn khi ghi 95H thì hiểu đây là ô nhớ có địa chỉ là 95H. Đối với các ô nhớ được định tên bằng kí hiệu chẳng hạn P0,P1,A,B,TH0... thì được sử dụng tên có thay cho địa chỉ cần sử dụng. Ví dụ: hai lệnh sau đây là như nhau MOV TH0,#43H và MOV 8CH,#43H vì thanh ghi TH0 có địa chỉ là 8CH.
Qui định về cách viết số data: trình biên dịch assambler cho phép sử dụng các loại số sau trong chương trình:
Số Binary (số nhị phân): số nhị phân khi viết cần thêm phía sau giá trị bằng kí tự “B”. Các số này phải là số nhị phân 8 bit. Khi giá trị cần thiết lập là các giá trị cần cho từng bit trong byte thì dùng cách biểu diễn bằng số nhị phân.
Ví dụ: khi cần thiết lập giá trị cho một byte mà các bit 0,1 xen kẽ nhau thì nên biểu diễn bằng số 01010101B cho dể kiểm tra.
Hexadecimal (số thập lục phân-ghi tắt là hex): số hex khi viết cần thêm phía sau giá trị bằng kí tự “H”. Nếu số hex bắt đầu là A,B,C,D,E,F thì cần thêm số “0” phía trước để trình biên dịch nhận biết được đó là số hex. Khi sử dụng các giá trị dành riêng cho một công việc nào đó, việc ghi nhớ bằng số nhị phân rất rắc rối và khó nhớ, khi đó số hex được sử dụng, vì số hex là cách viết ngắn gọn của số nhị phân.
Ví dụ: 69H, 0A3H
Số Decimal (số thập phân): Số thập phân khi viết không cần cần thêm kí tự hoặc thêm sau giá trị bằng kí tự “D”. Khi tính toán: cộng trừ nhân chia, nếu sử dụng số nhị phân hoặc số hex sẽ gây khó khăn cho người viết chương trình, trong trường hợp này số thập phân được sử dụng.
Ví dụ: 27, 25, 68D
Kết thúc chương trình: sau khi chương trình hoàn tất phải kết thúc bằng câu lệnh END.Câu lệnh này báo cho trình biên dịch biết phần kết thúc của chương trình, trình biên dịch bỏ qua tất cả các câu lệnh sau câu lệnh END.
Ta có thể viết một chương trình VĐK theo cấu trúc sau:
;khai báo các biến dạng byte (nếu có).
Var1 data 0x30
Var2 data 0x31
;khai báo các biến dạng bit (nếucó).
Flag1 bit 0x00
Flag2 bit 0x01
;định nghĩa các hằng số (nếu có).
Constant1 EQU 127
Constant2 EQU 126
;tạo mã đặt tại địa chỉ reset.
ORG 0000h
JMP main
;tạo mã đặt tại vecter ngắt (nếu có).
ORG 003h
JMP chươngtrinhngatngoai0
ORG 00Bh
JMP chươngtrinhngattimer0
;đặt địa chỉ đầu cho chương trình chính.
ORG 0030h
main:
;bắt đầu viết các lệng cho chương trình chính từ đây.
MOV SP,#0x6F
;viết các thủ tục khởi tạo hệ thống.
;viết thân chương trình chính (vòng lập chính).
loop_main:
JMP loop_main
;viết các chương trình con và các chươmh trình xử lí ngắt (nếu có).
chuongtrinhcon1:
;các lệnh xử lí của chương trình con 1.
;kết thúc bằng lệnh ret
RET
chuongtrinhcon2:
;các lệnh xử lí của chương trình con 2.
;kết thúc bằng lệnh ret
RET
chuongtrinhngatngoai0:
;các lệnh xử lí của chương trình ngắt ngoài 0.
;kết thúc bằng lệnh reti
RETI
chuongtrinhngattimer0:
;các lệnh xử lí của chương trình ngắt timer 0.
;kết thúc bằng lệnh reti
RETI
;định nghĩa các bảng hằng số lưu sẵn trong bộ nhớ chương trình.
Bang1: DB 0,1,0xF,
Bang2: DB 156,235,
;chỉ dẫn kết thúc tòan bộ chương trình.
END
Thiết kế modun quang báo.
Các IC được dùng trong mạch.
MAX 232.
Hình 3.1: Sơ đồ chân và sơ đồ khối bên trong MAX 232
MAX 232 vừa là thiết bị thu vừa là thiết bị phát, nó chuyển đổi mức tín hiệu TTL với tín hiệu RS 232. MAX 232 có tốc độ truyền nhận cao 120kps; dòng thấp nhất khoảng 8 mA; tín hiệu các ngỏ vào có thể dao động trong khoảng 30V; bên trong có hai bộ biến đổi và truyền nhận.
Chân 1,2,3,4,5,6: là các chân được nối với tụ có điện dung 10µF để chuyển đổi mức tín hiệu.
Chân 7, 14: tín hiệu RS-232 ngõ ra.
Chân 8,13: tín hiệu RS-232 ngõ vào.
Chân 9,12: tín hiệu TTL/CMOS ngõ vào.
Chân 10,11: tín hiệu TTL/CMOS ngõ ra.
Chân 15,16: là hai chân mas và nguồn.
74LS573.
OE 1 20 Vcc
D0 2 19 Q0
D1 3 18 Q1
D2 4 17 Q2
D3 5 16 Q3
D4 6 15 Q4
D5 7 14 Q5
D6 8 13 Q6
D7 9 12 Q7
GND 10 11 LE
OE 1 20 Vcc
D0 2 19 Q0
D1 3 18 Q1
D2 4 17 Q2
D3 5 16 Q3
D4 6 15 Q4
D5 7 14 Q5
D6 8 13 Q6
D7 9 12 Q7
GND 10 11 LE
OE 1 20 Vcc
D0 2 19 Q0
D1 3 18 Q1
D2 4 17 Q2
D3 5 16 Q3
D4 6 15 Q4
D5 7 14 Q5
D6 8 13 Q6
D7 9 12 Q7
GND 10 11 LE
là IC chốt 8 bit vào song song ra song song; tốc độ cao; chống nhiễu cao.
Chân 1:OE chân vào cho phép
Chân 2÷9: các chân tín hiệu vào.
Chân 12÷19: các chân tín hiệu ra.
Chân 11: LE chân chốt tín hiệu, tích cực mức thấp.
Chân 10, 20: chân mass và nguồn.
Bảng trạng thái:
Output Enable
(OC)
Latch Enable
(LE)
D
Output
(Q)
L
H
H
H
L
H
L
L
L
L
X
Q0
H
X
X
Z
Khi chân LE ở mức thấp thì tín hiệu trước đó bị chốt lại. Dữ liệu được đưa ra trên bus khi chân OC ở mức thấp. Khi OC ở mức cao ngõ ra ở trạng thái tổng trở cao.
SRAM 6264.
6264 là một loại RAM tĩnh tốc độ cao, tiêu thụ năng lượng thấp. Gồm có 65536 bit tương đương 8K. RAM 6264 được chế tạo bằng công nghệ CMOS. Điện áp tiêu thụ 2V÷5V. Cường độ dòng điện hoạt động tối đa: 70mA. Công suất tiêu thụ ở trạng thái chờ rất thấp, chỉ khoảng 0,01mW so với khi họat động bình thường là 200mW. Tốc độ truy xuất dữ liệu cao: 70ns÷150ns. Dữ liệu vẫn được lưu giữ khi điện áp nguồn xuống mức tối thiểu là 2V. Các ngõ vào/ra tương thích hoàn toàn với họ TTL. Hoàn toàn không cần hoạt động làm tươi.
Các chân 6264 được chia thành 4 nhóm:
Vcc, GND: chân nguồn và chân mass.
D0÷D7 : vào/ra dữ liệu.
A0÷A12 : chân input địa chỉ.
WE, OE, CS1, CS2: các chân điều khiển.
Bảng sự thật:
CS1
CS2
WE
OE
Input/Output
Mode
H
X
X
X
High Z
Deselect/Power-Down
X
L
X
X
High Z
Deselect
L
H
H
L
Data out
Read
L
H
L
X
Data in
Write
L
H
H
H
High Z
Deselect
IC 74LS138:
INPUTS
OUTPUTS
ENABLE
SELECT
G1
G2
C
B
A
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
x
H
x
x
x
H
H
H
H
H
H
H
H
L
x
x
x
x
H
H
H
H
H
H
H
H
H
L
L
L
L
L
H
H
H
H
H
H
H
H
L
L
L
H
H
L
H
H
H
H
H
H
H
L
L
H
L
H
H
L
H
H
H
H
H
H
L
L
H
H
H
H
H
L
H
H
H
H
H
L
H
L
L
H
H
H
H
L
H
H
H
H
L
H
L
H
H
Các file đính kèm theo tài liệu này:
- QUANG BAO GIAO TIEP MAY TINH.doc
- SO DO MACH.doc