Các thanh ghi điều khiển thuyền thông nối tiếp

Một phần của tài liệu Thiết kế bộ xử lý cân điện tử dùng vi điều khiển 8051 hiển thị dữ liệu ra màn LCD có gioa tiếp với máy tính qua cổng RS232 (Trang 55)

b) Sơ đồ nối ghép của MAX232 với 8051 theo moden không

3.3 Các thanh ghi điều khiển thuyền thông nối tiếp

3.3.1 Bộ đệm dữ liệu nối tiếp(SBUF).

SBUF là thanh ghi 8 bít đợc dùng riêng cho truyền thông nối tiếp trong 8051. Đối với một byte dữ liệu cần phải đợc truyền qua đờng TxD thì nó phải đợc đặt trong thanh ghi SBUF. Tơng tự nh vậy SBUF giữ một byte dữ liệu khi nó đợc nhận bở đờng RxD của 8051. SBUF có thể đợc truy cập bởi mọi thanh ghi bất kỳ trong 8051. Xét một ví dụ dới đây để thấy SBUF đợc truy cập nh thế nào?

MOV SBUF, # “D” ; Nạp vào SBUF giá trị 44H mã ACSII của ký tự D.

MOV SBUF, A ; Sao thanh ghi A vào SBUF.

MOV A, SBUF ; Sao SBUF vào thanh ghi A.

Khi một byte đợc ghi vào thanh ghi SBUF nó đợc đóng khung với các bít Start và Stop và đờng truyền nối tiếp qua chân TxD. Tơng tự nh vậy, khi các bít đợc nhận nối tiếp

P3.1 TxD P3.0 RxD Max232 8051 +Vcc 2 6 7 8 9 11 10 14 13 11 2 10 14 13 T1OUT T1IIN R1IIN R1OUT T2IIN R2OUT T2OUT R2IIN RS232 side TTL side 15 16 DB - 9 12 2 C3 + C4 + 3 2 5 12 11 + C1 + C2

từ RxD thì 8051 mở khung nó để loại trừ các bít Start và Stop để lấy ra một byte từ dữ liệu nhận đợc và đặt nó vào thanh ghi SBUF.

3.3.2. Thanh ghi điều khiển nối tiếp SCON.

Thanh ghi SCON là thanh ghi 8 bít đợc dùng để lập trình việc đóng khung bít bắt đầu Start, bít dừng Stop và các bít dữ liệu cùng với việc khác.

Dới đây là mô tả các bít khác nhau của SCON:

D7 D6 D5 D4 D3 D2 D1 D0

SM0 SM1 SM2 REN TB8 RB8 TI RI

a

Kí hiệu Vị trí ý nghĩa

SM0 SCON.7 Số xác định chế độ làm việc cổng nối tiếp SM1 SCON.6 Số xác định chế độ làm việc cổng nối tiếp

SM2 SCON.5 Dùng cho truyền thông giữa các bộ vi xử lý (SM2 = 0) REN SCON.4 Dùng cho truyền thông giữa các bộ vi xử lý (SM2 = 0)

TB8 SCON.3 Không sử dụng rộng rãi

RB8 SCON.2 Không sử dụng rộng rãi

T1 SCON.1 Cờ ngắt truyền

R1 SCON.0 Cờ ngắt thu

Hình 3.3: Thanh ghi điều khiển cổng nối tiếp SCON. a.Các bit của SCON b.Chức năng của các bit

a. Các bít SM0, SM1.

Đây là các bít D7 và D6 của thanh ghi SCON. Chúng đợc dùng để xác định chế độ đóng khung dữ liệu bằng cách xác định số bít của một ký tự và các bít Start và Stop. Các tổ hợp của chúng đợc biểu diễn trong bảng sau:

Bảng 3.3 Các chế độ đóng khung dữ liệu

SM0 SM1 Chế độ

0 0 Chế độ nối tiếp 0

0 1 Chế độ nối tiếp 1, 8 bít dữ liệu, Start, Stop

1 0 Chế độ nối tiếp 2

1 1 Chế độ nối tiếp 3

Bít SM2 là bít D5 của thanh ghi SCON. Bít này cho phép khả năng đa xử lý của 8051 và nó nằm ngoài phạm vi trình bày của phần này. Đối với các ứng dụng của chúng ta đặt SM2 = 0 vì ta không sử dụng 8051 trong môi trờng đa xử lý.

c. Bít REN.

Đây là bít cho phép thu (Receive Enable), bít D4 của thanh ghi SCON. Bít REN cũng đợc tham chiếu nh là SCON.4 vì SCON là thanh ghi có thể đánh địa chỉ theo bít. Khi bít REN cao thì nó cho phép 8051 thu dữ liệu trên chân RxD của nó. Và kết quả là nếu ta muốn 8051 vừa truyền và nhận dữ liệu thì bít REN phải đợc đặt lên 1. Khi đặt REN thì bộ thu bị cấm. Việc đặt REN = 1 hay REN = 0 có thể đạt đợc bằng lệnh “SETB SCON.4” và “CLR SCON.4” tơng ứng.

d. Bít TB8 và RB8.

Bít TB8 là bít SCON.3 hay là bít D3 của thanh ghi SCON. Nó đợc dùng để cho chế độ nối tiếp 2 và 3. Ta đặt TB8=0 vì nó không đợc sử dụng trong các ứng dụng của mình.

Bít RB8 (bít thu 8) là bít D2 của thanh ghi SCON. Trong chế độ nối tiếp 1 thì bít này nhận một bản sao của bít Stop khi một dữ liệu 8 bít đợc nhận. Bít này cũng nh bít TB8 rất hiếm khi đợc sử dụng. Trong các ứng dụng của mình ta đặt RB8 = 0 vì nó đợc sử dụng cho chế độ nối tiếp 2 và 3.

e. Các bít TI và RI.

Các bít ngắt truyền TI và ngắt thu RI là các bít D1 và D0 của thanh ghi SCON. Các bít này là cực kỳ quan trọng của thanh ghi SCON. Khi 8051 kết thúc truyền một ký tự 8 bít thì nó bật TI để báo rằng nó sẵn sàng truyền một byte khác. Bít TI đợc bật lên trớc bít Stop. Còn khi 8051 nhận đợc dữ liệu nối tiếp qua chân RxD và nó tách các bít Start và Stop để lấy ra 8 bít dữ liệu để đặt vào SBUF, sau khi hoàn tất nó bật cờ RI để báo rằng nó đã nhận xong một byte và cần phải lấy đi kẻo nó bị mất cờ RI đợc bật khi đang tách bít Stop. Trong các ví dụ dới đây sẽ nói về vai trò của các bít TI và RI.

3.4 Lập trình 8051 truyền thông nối tiếp

3.4.1. Lập trình 8051 để truyền dữ liệu nối tiếp.

a. Các bớc để lập trình truyền dữ liệu.

Khi lập trình 8051 để truyền các byte ký tự nối tiếp thì cần phải thực hiện các bớc sau đây:

1. Nạp thanh ghi TMOD giá trị 204 báo rằng sử dụng Timer1 ở chế độ 2 để thiết lập chế độ baud.

2. Nạp thanh ghi TH1 các giá trị cho trong bảng 3.1 để thiết lập chế độ baud truyền dữ liệu nối tiếp .

3. Nạp thanh ghi SCON giá trị 50H báo chế độ nối tiếp 1 để đóng khung 8 bít dữ liệu, 1 bít Start và 1 bít Stop.

4. Bật TR1 = 1để khởi động Timer1. 5. Xoá bít TI bằng lệnh “CLR TI”

6. Byte ký tự cần phải truyền đợc ghi vào SBUF.

7. Bít cờ TI đợc hiển thị bằng lệnh “JNB TI, xx” để báo ký tự đã đợc truyền hoàn tất cha.

8. Để truyền ký tự tiếp theo quay trở về bớc 5.

b .Quá trình truyền số liệu.

Thực hiện qua các bớc sau:

1. Byte ký tự cần phải truyền đợc ghi vào SBUF. 2. Truyền bít Start

3. Truyền ký tự 8 bít lần lợt từng bít một.

4. Bít Stop đợc truyền xong, trong quá trình truyền bít Stop thì cờ TI đợc bật (TI= 1) bởi 8051 để báo sẵn sàng để truyền ký tự kế tiếp.

5. Bằng việc hiển thị cờ TI ta biết chắc rằng ta không nạp quá vào thanh ghi SBUF. Nếu ta nạp một byte vào SBUF trớc ghi TI đợc bật thì phần dữ liệu của byte trớc cha truyền hết sẽ bị mất. Hay nói cách khác là 8051 bật cờ TI khi đã truyền xong một byte và nó sẵn sàng để truyền byte kế tiếp.

6. Sau khi SBOF đợc nạp một byte mới thì cờ nhằm để có thể truyền byte mới này. Từ phần trình bày trên đây ta kết luận rằng bằng việc kiểm tra bít cờ ngắt TI ta biết đợc 8051 có sẵn sàng để truyền một byte khác không. Quan trọng hơn cần phải nói ở đây là bít cờ TI đợc bật bởi từ 8051 khi nó hoàn tất việc truyền một byte dữ liệu, còn việc xoá nó thì phải đợc lập trình viên thực hiện bằng lệnh “CLR TI”. Cũng cần lu ý rằng, nếu ta ghi một byte vào thanh ghi SBUF trớc khi cờ TI đợc bật thì sẽ có nguy cơ mất phần dữ liệu đang truyền. Bít cờ TI có thể kiểm tra bằng lệnh “JNB TI …” hoặc có thể sử dụng ngắt .

3.4.2. Lập trình 8051 để nhận dữ liệu nối tiếp.

a. Các bớc để lập trình nhận dữ liệu.

Trong lập trình của 8051 để nhận các byte ký tự nối tiếp thì phải thực hiện các bớc sau đây.

1. Nạp giá trị 20H vào thanh ghi TMOD để báo sử dụng bộ Timer1, chế độ 2 (8 bít, tự động nạp lại) để thiết lập tốc độ baud.

3. Nạp giá trị 50H vào thanh ghi SCON để báo sử dụng chế độ truyền nối tiếp 1 là dữ liệu đợc đóng gói bởi 8 bít dữ liệu, 1 bít Start và 1 bít Stop.

4. Bật TR1 = 1 để khởi động Timer1. 5. Xoá cờ ngắt RI bằng lệnh “CLR RI”

6. Bít cờ RI đợc hiển thị bằng lệnh “JNB RI, xx” để xem toàn bộ ký tự đã đợc nhận cha.

7. Khi RI đợc thiết lập thì trong SBUF đã có 1 byte. Các nội dung của nó đợc cất lu vào một nơi an toàn.

8. Để nhận một ký tự tiếp theo quay trở về bớc 5.

b .Quá trình nhận số liệu.

Khi nhận các bít qua chân RxD của nó thì 8051 phải đi quan các bớc sau: 1. Nó nhận bít Start báo rằng bít sau nó là bít dữ liệu đầu tiên cần phải nhận.

2. Ký tự 8 bít đợc nhận lần lợt từng bít một. Khi bít cuối cùng đợc nhận thì một byte đợc hình thành và đặt vào trong SBUF.

3. Khi bít Stop đợc nhận thì 8051 bật RI = 1 để báo rằng toàn bộ ký tự đợc nhận và phải lấy đi trớc khi nó bị byte mới nhận về ghi đè lên.

4. Bằng việc kiểm tra bít cờ RI khi nó đợc bật lên chúng ta biết rằng một ký tự đã đợc nhận và đang nằm trong SBUF. Cần sao nội dung SBUF vào nơi an toàn trong một thanh ghi hay bộ nhớ khác trớc khi nó bị mất.

5. Sau khi SBUF đợc ghi vào nơi an toàn thì cờ RI đợc xoá về 0 bằng lệnh “CLR RI” nhằm cho các ký tự kế tiếp nhận đợc đa vào SBUF. Nếu không làm đợc điều này thì gây ra mất ký tự vừa nhận đợc.

Từ mô tả trên đây ta rút ra kết luận rằng bằng việc kiểm tra cờ RI ta biết 8051 đã nhận đợc một byte ký tự cha hay rồi. Nếu ta không sao đợc nội dung của thanh ghi SBUF vào nơi an toàn thì có nguy cơ ta bị mất ký tự vừa nhận đợc. Quan trọng hơn là phải nhớ rằng cờ RI đợc 8051 bật lên nh lập trình viên phải xoá nó bằng lệnh “CLR RI”. Cũng nên nhớ rằng, nếu ta sao nội dung SBUF vào nơi an toàn trớc khi RI đợc bật ta mạo hiểm đã sao dữ liệu cha đầy đủ. Bít cờ RI có thể đợc kiểm tra bởi lệnh “JNB RI, xx” hoặc bằng ngắt .

3.5. Ngôn ngữ lập trình Visual basic 6.0.3.5.1. Giới thiệu3.5.1. Giới thiệu3.5.1. Giới thiệu 3.5.1. Giới thiệu

Visual Basic là ngôn ngữ lập trình phổ biến nhất ngày nay, là ngôn ngữ lập trình trên môi trờng Windows ra đời sớm nhất và đã tạo ra một cuộc cách mạng trong công

nghiệp phần mềm. Có thể nói VB mạnh về tất cả (đợc hỗ trợ rất nhiều khả năng về cơ sở dữ liệu, các kỹ thuật phần mềm mới nh OLE, COM, DCOM... ) nhng chính vì khả năng này nên tốc độ nhìn chung là chậm.

Với Visual Basic, công việc tạo giao diện trên máy tính trở nên dễ dàng hơn rất nhiều so với việc tạo giao diện bằng ngôn ngữ C trớc đây. Chỉ với một vài thao tác Click – Drag đơn giản, ta có thể bổ sung vào các cửa sổ còn trống các lệnh đơn, các hộp văn bản, các nút lệnh, các nút tuỳ chọn... Sau khi tạo giao diện thì công việc chỉ là viết mã cho các đối tợng này (gọi là các điều khiển: control). Nh vậy ta có thể nói, với VB công việc tạo giao diện đồ hoạ cho các ứng dụng đã đợc VB đảm nhận.

Visual Basic cho phép ứng dụng tạo liên kết với các ứng dụng Windows khác rất dễ dàng, cho phép dễ dàng tạo ra các ứng dụng thiên về quản lý dữ liệu và mạng.

Visual Basic cho phép ngời sử dụng giao tiếp với th viện liên kết động DLL. Điều này giúp giảm kích cỡ chơng trình, tập tin thực thi và đặc biệt làm cho chơng trình có khả năng nâng cấp dễ dàng hơn.

3.5.2. Truyền thông nối tiếp dùng VB 6.0 a. Điều khiển truyền thông:

Bình thờng khi chạy phần mềm visual basic ta chỉ thấy có một số thành phần quen thuộc trên hợp công cụ (toolbox). Nhng visual basic cho phép nhiều thành phần có thể đợc bổ sung thêm vào. Điều khiển truyền thông Mscomm của viual basic là một trong số các đối tợng có thể đợc bổ sung để tham gia vào một số ứng dụng trong việc chuyển nhận dữ liệu qua cổng nối tiếp.

Trong visual basic 5.0 và 6.0 ta có thể bổ sung thành phần MSCOMM đề cập ở trên nh sau: chọn project=> components (Ctrl-T),của sổ sau sẽ xuất hiện:

Hình3.4: Cách chọn thêm thành phần microsoft comm control ở visual basic 6.0 Đánh dấu chọn thành phần microsoft comm control 6.0 nh hình trên, sau đó nhấn OK. Khi đó thành phầnMscomm sẽ xuất hiện trong hợp công cụ nh chỉ ra ở hình dới đây:

Điều khiển Mscomm

Hình3.5 Thành phần Mscomm trong hợp công cụ (toolbox)

Điều khiển truyền thông cung cấp hai khả năng trao đổi thông tin:

Điều khiển sự kiện:

Truyền thông điều khiển sự kiện là phơng pháp tốt nhất đợc sử dụng trong quá trình việc trao đổi thông tin nối tiếp khi nó giải phóng máy tính để làm các công việc khác.

Ta cũng có thể hỏi vòng các sự kiện và lỗi bằng cách kiểm tra giá trị của đặc tính comEvent sau mỗi chu kỳ của chơng trình để xác định xem liệu có một sự kiện hoặc một lỗi đã xuất hiện.

Visual basic sử dụng các bộ điều khiển cửa sổ chuẩn cho các cồng truyền thông tin nối tiếp (nh serial.dll và serial.vxd ). Điều khiển truyền thông đợc bổ sung cho ứng dụng của một cổng nối tiếp, nói khác đi mỗi điều khiển truyền thông mà ta dùng chỉ có thể điều khiển một cổng nối tiếp. Nếu cần truy nhập nhiều cổng trong một ứng dụng thì ta phải nhiều điều khiển truyền thông. Địa chỉ cổng và địa chỉ ngắt có thể thay đổi nhở control panel trong windows. Các tham số (nh tốc độ truyền bit, chẳn lẽ,…)đều đó có thể thay đổi bằng cách lựa chọn : control panel=> sestem=> device manager=> port(com và lpt)=> port setting. Việc thiết lập cổng truyền thông (IRQ và địa chỉ cổng) có thể thay đổi bằng cách lực chọn : control panel=>sestem=>device manager=> port(com và LPT)=>resources. Việc này đã đợc nói đến ở phần cổng nối tiếp.

b. Đặc tính (Properti)

Hình bên đây chỉ ra các đặc tính của nó. Theo mặc định, cổng thứ nhất tạo ra đối t- ợng có tên Mscomm1, đối tợng ứng với cổng thứ hai đợc gọi là Mscomm2 ,… có thể nhìn thấy các đặc tính chính của đối tợng là: Commport, Dtrenable, Eofenable,Hnadshaking, Inbuffersize, Index,Inputlen, Inputmode, Left, Name, Nulldiscard, Outbuffersize, Parityreplace, Rthreshold, Rtsenable, Settings, Sthreshold, Tag, Top. Ta thấy điều khiển truyền thông có nhiều đặc tính, nhng để có thể làm việc với điều khiển truyền thông, trớc hết ta cần hiểu kỹ các đặc tính chính đợc liệt kê trong bảng sau.

Bảng 3.4 : Bảng các đặc tính của điều khiển MSComm

Các đặt tính Sự mô tả

Commport Đặt và trả lại số cổng truyền thông

Input Trả lại và loại bỏ các ký tự khỏi xâu đệm nhận

Output Viết một xâu ký tự tới vào bộ đệm truyền

Portopen Mở đóng một cổng và đặt thông số cho cổng

Thí dụ sau đây chỉ ra cách truyền thông qua cổng nối tiếp có thể đợc tiến hành nh thề

nào bằng cách sử dụng một Modem.

Private sub form_load

biến để lu trữ chuỗi nhập vào

Dim instring as string

sử dụng com1

Mscomm1.comport =1

9600 baud, no parity, 8 bit data, 1 stop bit

Mscomm1.setting = ”9600 ,N,8,1”

ra lệnh cho msc đọc hết bộ đệm nhận khi dùng lệnh input

mscomm1.inputlen =0 ‘mở cổng

Mscomm1.portopen = true

gởi lệnh attention tới modem

Mscomm1.output = ”ATV1Q0”&CHR$(13)

để chắc rằng modem đã trả lời OK đợi dữ liệu trả lời gởi về cổng nối tiếp“ ”

do Doevents

Buffer$ = buffer$ & mscomm1.input

Loop until instr (buffer$ &, ”OK” &vbCLRF)

đọc dữ liệu trả lời OK đóng cổng nối tiếp“ ”

Mscomm1.portopen = false End sub

Sau đây ta sẽ lần lợt tìm hiểu một số đặt tính quan trọng của điều khiển truyền thông

Setting Prorety :

Đặt tính setting đặt và trả lại các thông số truyền thông cho cổng RS_232, nh tốc độ baud, tính chẳn lẻ số bit data và số bit stop

Cú pháp của câu lệnh là :

[form.]mscomm.setring [=paramstring$]

Nếu paramstring$ không hợp lệ (valid) thì khi mở cổng điều khiển truyền thông sẽ

Một phần của tài liệu Thiết kế bộ xử lý cân điện tử dùng vi điều khiển 8051 hiển thị dữ liệu ra màn LCD có gioa tiếp với máy tính qua cổng RS232 (Trang 55)

Tải bản đầy đủ (DOC)

(93 trang)
w