You are on page 1of 21

Giới thiệu về PIC

- Ngày nay vi điều khiển được sử dụng rất nhiều trong lĩnh vực điều khiển tự động, với những ai
quan tâm đến cuộc thi robocon thì đây có thể xem như là 1 lĩnh vực mà các đội thường gặp phải
rất nhiều khó khăn và rất mong muốn lập trình để điều khiển được chú robot mà mình tạo ra.
Mục này được tạo ra nhằm giúp đỡ các bạn sinh viên trong khoa CKD nói riêng hay trong trường
SPKT nói chung có thể chia sẻ cho nhau nhiều hơn về lĩnh vực điều khiển lập trình. Hy vong tôi
có thề phần nào giúp đỡ các bạn bằng cách chia sẽ ít nhiều kinh nghiệm trong lập trình mà mình
đã từng có.

- Trước hết chúng ta cần biết hiện nay có những dòng vi điều khiển nào và những ưu nhược điểm
riêng của nó.
- Đa số các sinh viên đều được tiếp cận với dòng vi điều khiển 89 nổi bật như các dòng 89S với
khả năng self programming tức bạn chỉ cần 1 sợi bus 6 đầu dây là bạn đã có sẵn 1 mạch nạp đơn
giản và cực kì rẻ với giá khoảng 15.000 cho sợi bus đó và cổng LPT, do đó tôi khuyên bạn nếu
có mua vdk dòng 89 nên chọn những con dòng 89S thay vì mua 89C để đỡ tốn tiền mua thêm 1
mạch nạp với giá trên 100.000 trong khi đó bạn có thể mua được cổng LPT ( cổng máy in ) và
sợi bus 6 sợi với giá rẻ hơn nhiều. Nhưng có thể nói nếu sử dụng dòng vdk 89 thì ta sẽ thấy viêc
thiết kế mạch sẽ khó khăn hơn và ở 89 dễ bị nhiễu nên do đó ít ứng dụng nhiều trong công
nghiệp và các sản phẩm thương mại. Ngoài ra 89 còn rất ít chức năng hơn so với các dòng vdk
khác như AVR, PIC, PSOC, … đa số các dòng này thương gặp trong các thiết bị điều khiển
trong lĩnh vực công nghiệp.

- Tới đây sẽ có nhiều người thắc mắc tại sao fải chọn PIC mà ko chọn AVR hay 89, bởi nếu so
với 89 về mặt tính năg và công năg thì có thề xem PIC vượt trội hơn rất nhiều so với 89 với
nhiều module được tích hợp sẵn như ADC 10 BIT, PWM 10 BIT, EEPROM 256 BYTE,
COMPARATER, VERF COMPARATER…Nhưng về mặt giá cả thì có đôi chút chênh lệch như
giá 1 con 89S52 khoảng 20.000 thì PIC16F877A là 60.000 nhưng khi so sánh như thề thì ta nên
xem lai fần linh kiện cho việc thíết kế mạch nếu như xài 89 muốn có adc bạn fải mua con adc
chẳng hạn như adc0808 hay0809 với giá vài chục ngàn và bộ opamp thì khi sử dung PIC nó đã
tích hợp cho ta sẵn các module đó có nghĩa là bạn ko cần mua ADC , opam, EPPROM vì PIC đã
có sẵn trong nó rùi ngoài ra bạn sẽ gặp nhiều thuận lợi hơn trong thiết kế board, khi đó board
mạch của bạn sẽ nhỏ gọn và đẹp hơn dễ thi công hơn rất nhiều, vì tính về giá cả tổng cộng cho
đến lúc thành fẩm thì PIC có thể xem như rẻ hơn 89 fải ko các bạn, 1 điếu đặc biệt nữa là tất cả
các con PIC bạn sử dụng thì đều có chuẩn PI tức chuẩn công nghiệp thay vì chuẩn PC ( chuẩn
dân dụng ) nếu bạn mua 1 con 89PI thi luc đó giá cả giữa PIC và 89PI thì đã chênh lệch rất nhiều
rồi. Và gần đây Philip cũng đã ra 1 dòng 89VRD mới bổ sung them chức năng PWM nhưng giá
cả còn rất đắt mà vẫn còn thiếu nhiều tinh năg so với PIC.

- Vậy còn AVR, bạn có thể xem về thời gian ra đòi thì PIC được xem như là 1 bậc đàn anh, hang
ATMEL nhẳm cạnh tranh với PIC đã cho ra đời dòng sản fẩm 90s8535, AT8, hay AT16,… Với
sự ra đời sớm hơn AT nhà sản xuất Microchip đã tạo cho dòng vdk này rất nhiều lợi thề, Các
trường đại học trên thế giới đặc biệt là ở các nước Châu Âu hầu hết xem PIC là 1 môn học trong
bộ môn vi diều khiển nói vậy các bạn cũng thấy sự phổ biến rộng rãi của nó. Ngoài ra PIC còn
được rất nhiều nhà sản xuat fần mêm tạo ra các ngôn ngữ hổ trợ cho việc lập trình ngoài ngôn
ngữ Asembly ra như nếu ai yêu thích sử dụng ngôn ngữ C thì có thề sử dung CCSC, HTPIC, ai
thích sử dung Basic thì có MirkoBasic,… và còn nhiều chương trình khác nữa để hỗ trợ cho việc
lập trình bên cạnh ngôn ngữ kinh điển là asmbler thì sử dụng MPLAB IDE. Trong khi AVR hầu
như chỉ có CodeVisionC, và Bascom, các bản này ko được load free trong khi PIC thì hầu như là
free cho các bạn an tâm sử dụng và đảm bảo ko bi truc trặc so với bản cờ ráchcờ ráchcờ ráchcờ
ráchcờ rách. Bên cạnh đó với bề dày của sự phát triển lâu đời PIC đã tạo ra rất nhiều diễn đàn sôi
nổi về vdk PIC và công ty Microchip cũng tạo ra diễn đàn www.microchip.com cho chính sản
phẩm của minh nhằm hỗ trợ về các kĩ thuật và giải đáp thắc mắc, nếu có vốn tiếng Anh khá bạn
có thể tham gia và học hỏi rất nhiều ở đó, ngoài ra còn có những thư viện đồ sộ các project về
PIC được cập nhật rất nhiều trên www.piclist.com, có thể nói bạn an tâm lựa chọn dòng vdk PIC
bới bạn sẽ có rất nhiều thuận lợi trong việc dễ dàng tìm kiếm các thông tin lập trình các dòng
PIC cũng như sự hỗ trợ rất nhiều từ nhà sản xuất.
- Tóm lại tôi chọn PIC bởi nó được fát triển lâu đời và có rất nhiều dòng sản phầm cho bạn lựa
chọn như dòng ,basic PIC 12 midrange la PIC16, hi end là PIC18, gần đây là DS Pic, vói những
ai wan tâm đến lập trình dk từ xa thì có rf PIC… và trong mỗi dòng sản fẩm ấy lại có rất nhiều
loại chip để đáp ứng mọi nhu cầu của bạn.
- Nói tới đây sẽ có ng thắc mắc ta chọn loại nao để bắt đầu cho việc lập trình dòg vdk PIC. Có
thề nói 1 dòg fổ thông và đáp ứg gần như hầu hết các công dụng thì ta nên chọn dòng fồ thông
ban đầu là PIC16F877A. Vậy nó có những những ghì và có dễ lập trình nó hay không.???

+ Tập lệnh để lập trình chỉ có 35 lệnh rất dễ nhớ và dễ học.


+ 8k Flash Rom.
+ 368 Bytes Ram.
+ 5 Port điều khiển vào ra với tín hiệu điề khiển độc lập, với dòng ra cao có thề kích trực tiếp các
transirtor mà ko cần wa bộ buffer.
+ 2 bộ dinh thời timer0 va timer2 8 bit có thể lập trình được.
+ 1 bộ định thời timer1 16 bit có thể hoạt động trong chế độ sleep với nguồn xung clock ngoài.
+ 2 bộ module CCP ( bao gồm Capture bắt giữ, Compare so sánh, PWM điều chế xung 10 bit).
+ 1 Bộ ADC với 8 kênh ADC 10 bit .
+ 2 bộ so sánh tương tự hoạt động độc lập.
+ Bộ giám sát định thời Watchdogtimer
+ 1 cồng song song 8 bit với các tín hiệu điều khiển.
+ 1 cổng nối tiếp.
+ Hỗ trợ giao tiếp I2C.
+ 15 nguồn ngắt.
+ Chế độ sleep tiết kiệm năg lượng.
+ Nạp chương trình bằng cổng nốii tiếp ICSP.
+ Tần số hoạt động tối đa là 20Mhz.

…. Nhiêu đó cũg đủ thấy tại sao cần fải học PIC fải ko các bạn.
Hôm nay trước mắt là vậy, tôi sẽ cố gắng sẽ hướng dẫn các bạn lam wen với việc hoc PIC wa
các tutorial sau nhen!
================================================== ======
Giờ tôi xin đề cập những ghì ta sẽ học ở Pic, và hy vọng nó sẽ trở thành 1 bộ môn trong chuyên
nghành cơ điện tử ôtô sau này. Ở đây tôi sẽ đề cập 1 lượt những nội dung mà ta sẽ học trên diễn
đàn. Với mục đích phổ biến kiến thức về VDK Pic các bài học sẽ đi từ dễ tới khó, ban đầu có thể
bạn sẽ gặp 1 chút khó khăn nhưng khi vượt qua được nó thì công việc sau này là sẽ vô cùng dễ
dàng. Nếu có gặp những khó khăn ghì các bạn có thể trực tiếp reply trên diễn đàn, với khả năng
và hiểu biết của mình sẽ giảp đáp các khó khăn vì tôi là người đi trước cũng đã gặp nhiều khó
khăn có thể tôi sẽ giúp được nhiều cho bạn để thấy việc học Pic sẽ dễ dàng hơn.

Bài 1: Tổng quan về vi điều khiển PIC.


Bạn sẽ học ghì ở đây:
+ Sơ đồ khối về Pic các chân port, các thanh ghi trang bộ nhớ.
+ Cách kết nối chúng như thế nào để Pic có thể hoạt động như cấp nguồn ở đâu, sử dung thạch
anh loại nào, reset nối ở đâu.
+ Nạp chương trình cho Pic như thế nào. Và sử dụng mạch nạp ghì thiết kế ra sao có dễ hay
ko!!!( fải nói là cực kì dễ )

Bài 2: Tập lệnh Pic:


Ta viết chương trình cho Pic bằng ngôn ngữ ghì và tập lệnh của nó ra sao có dễ thuộc và có
nhiều không. Ở đây ta nhằm giúp các bạn nắm rõ hơn về cấu trúc của Pic nên tạm thời ta học lập
trình cho Pic bằng ngôn nữ ASM, có thể là khá khó nhưng nó giúp ta hiểu rõ nguồn gốc các cách
thức thực hiện của Pic như thế nào cũng như qua đó ta nắm rõ hơn về phần cứng của Pic. Một
khi đã nắm được chúng ta có thể dễ dang chuyển sang các ngôn ngữ lập trình khác như Pascal,
Visual Basic, hay thông dụng hơn là C, việc học bằng ngôn ngữ ASM sẽ giúp ta kiểm soát được
các lỗi sinh ra hay cách tối ưu hóa chương trình khi ta viết bằng ngôn ngữ khác. Do đó tôi
khuyên bạn hãy bắt đầu và dành chút thời gian cho ngôn ngữ này nó sẽ rất có lợi cho bạn đấy và
tôi sẽ dẫn dắt các bạn từng bước một sẽ rất dễ dàng chứ không khó khăn như nhiều người đã nói.
+ Các lệnh sử dụng trong vdk Pic cụ thể là Pic16F877A bao gồm có 35 lệnh, với số lệnh ít như
vây tôi tin các bạn sẽ dễ dàng cho việc học của mình, chứ không như AVR số lệnh lên tới hơn cả
100 lệnh rất dễ quên do vậy học Pic bằng ASM la sẽ dễ dàng hơn học AVR cũng cùng ngôn ngữ
ASM fải không!!! Chỉ dành ra khoảng 3 tiếng là bạn đã có thể nắm thành thạo cách sử dụng các
lệnh rồi đấy, bởi nó chỉ có 35 lệnh thôi mà.

Bài 3: Ứng dụng học tập lệnh


+ Ta sẽ học cách điều khiển I/O có nghĩa là sẽ khai báo cho pic như thế nào để có thể nó hoạt
động
+ Học cách viết 1 delay đơn giản và ứng dụng ra điều khiển chớp tắt các đèn Led.
+ Nâng cấp cách viết delay làm cho việc delay dễ dang hơn, cách viết 1 chương trình con như thế
nào.

Bài 4: Kỹ thuật bảng


+ Cách tạo 1 bảng tra trên Pic như thế nào.

Bài 5: Giới thiệu chương trình soạn thảo lập trình


+ Ta đã học cách viết lệnh, học viết delay, và tạo bảng tra như thế nào, nhưng ta sẽ viết chúng ở
đâu và viết bằng chương trình ghì?Ở đây sẽ giới thiệu chương trình MPLAB IDE bạn có thể load
free tại trang chủ của Microchip.
+ Cách cài đặt chương trình MPLAB IDE thiết lập cho 1 chương trình soạn thảo nói chung.

Bài 6: Timer
+ 16F877A co 3 timer và ta sẽ học cách khởi tạo các timer này
+ Khởi tạo Timer0.
+ Khởi tạo Timer1.
+ Khởi tạo Timer2.
+ Ứng dụng timer để lam delay
+ Cách sử dụng timer ở chế độ counter để đọc giá trị từ encoder.(trong robocon dùng encoder để
xác định chính xác quãng đường robo chạy là bao nhiêu còn trong công nghiệp dùng để đếm sản
phẩm,….)

Bài 7: Ngắt
+ Cấu trúc của ngắt, các nguồn ngắt.
+ Khởi tạo ngắt và vào ra ngắt như thế nào.
Tóm lại là tất tần tật về ngắt và sẽ cung cấp cho các bạn 1 đoạn code mẫu vào ra ngắt và cách
thiết lập trình tự thứ tự ngắt.

Bài 8: Module ADC


+ Khởi tạo ADC thế nào, đọc giá trị chúng ở đâu?
+ Cách làm 1 cảm biến dò đường có khả năg tự học sân dựa trên ADC
+ Ứng dụng ADC để đo nhiệt độ.

Bài 9: Module CCP


Một module vô cùng thú vị với nhiều chức năng Capture, Compare, PWM.
+ Module Capture dùng để bắt giữ tín hiệu khi xảy ra.
+ Module Compare dùng để so sánh giá trị.
+ Module PWM dùng để điều chế xung, trong robocon dùng để điều khiển tốc độ động cơ rất
hữu ích cho các bạn làm robo khi có module này khi đó việc điều khiền tốc độ động cơ vô cùng
dễ dàng .

Bài 10: Ứng dụng điều khiển động cơ


+ Điều khiển động cơ DC.
+ Điều khiển Step motor.
+ Điều khiển mini servo motor.
+ Ứng dung ADC điều khiển tốc độ.

Bài 11: Module Comparaer va Voltage Reference


+ Cách khởi tạo Comparater và Voltage Reference.
+ Chuyển đổi xung dạng sin sang dạng xung vuông từ Pic.
+ Úng dụng đọc tần số từ điện xoay chiều ở nhà bạn có đúng là 50Hz ko?
+ Trên ôtô , xe gắn máy thì ta sẽ ứng dụng viết chương trình đọc tốc độ động cơ từ cảm biến G,
Ne. chỉ với việc đưa dây tín hiệu về Pic là ta có thể biết dc tốc độ động cơ.

Bài 12: Module EEPROM


+ Đây là bộ nhớ không mất dữ liệu khi mất điện
+ Cách khởi tạo và đưa giá trị vào EEPROM.
+ 1 ứng dụng khá thú vị là viết chương trình điều khiển vi trí và nhớ vị trí ghế trên xe, ngoài ra
cách lưu giá trị cảm biến tự học trên eeprom.
Bài 13: Điều khiển LCD (màn hình tinh thể lỏng)
+ Giới thiệu LCD 16x2
+ Cách viết xuất giá trị thông tin ra cho LCD.
+ Sử dụng LCD ở dạng 8 bit .
+ Sử dung LCD ở dạng 4 bit.

Bài 14: Chuẩn giao tiếp I2C


+ I2C là ghì?
+ Làm cách nào giao tiếp giữa 2 hay nhiều con Pic làm việc độc lập với nhau mà chỉ sử dụng có
2 dây (vô cùng hay đó các bạn).

Đó là toàn bộ module cho chương trình học vdk PIC sau khi học xong tôi nghĩ các bạn sẽ làm
được nhiều hơn nữa. Tạm thời là 14 bài từ cấp độ dễ tới khó, các bạn cần phải học tuần từ bài
một theo thứ tự, đừng vì thích bài này mà bỏ bài kia bởi các bài có sự liên quan chặt chẽ với
nhau. Có thể 14 bài nay là chưa đủ nếu có yêu cầu hay bổ sung ghì thêm mà các bạn cần thì có
thể nói với tôi, mong rằng nó sẽ đầy đủ thêm cho các bạn.

Mạch nạp PIC


Hiện nay có rất nhiều loại mạch nạp cho pic . Từ rẻ tiền cho đến đắt tiền , nhưng ở bài này mình
xin giới thiệu các bạn mạch nạp loại đơn giản nhất của pic

Mạch đơn giản nhất có lẽ là pic-pg1


This image has been resized.Click to view original image
tiếp theo là pic - pg2 là bản cải tiến của pg1 (có thêm chân nạp cắm IC ngay trên mạch )
This image has been resized.Click to view original image
cả 2 mạch trên đêu dùng cổng com và có chương trình nạp là winpic800

Winpic800
các mạch nạp cho cổng LPT
đầu tiên phải kể đến là mạch pg3
This image has been resized.Click to view original image

Phần mềm nạp

ICPROG
Trình biên dịch PWH4_049 cho PIC
Download tại đây

Đo tốc độ động cơ bằng encoder hiển thị lên lcd


Kiểm soát tốc độ động cơ trong truyền động điện là rất quan trọng. Có nhiều các để thực hiện
việc này: dùng máy phát tốc, dùng encoder,... Bài này tôi sẽ hướng dẫn anh em lấy phản hồi tốc
độ thông qua việc dùng encoder. Về cơ bản thì anh em chỉ cần đọc được số xung của encoder
đếm được sau một thời gian sau đó tính tốc độ bằng công thức :
V=S/t
Tuy nhiên ở đây sử dụng encoder nên anh em phải lưu ý cách tính toán.
Trong bài này tôi đang dùng chương trình delay_ms(5000); chương trình này nhằm mục đích tạo
ra thời gian 5s để vdk đọc xung từ encoder. Tuy nhiên, trong các ứng dụng lớn như điều khiển
PID tốc độ động cơ thì anh em có thể dùng ngắt để update xung từ encoder nhưng có lưu ý là nếu
làm như vậy thì anh em nên:
+dùng pic có tốc độ xử lý cao như 18f452
+hoặc encoder có số xung ra nhỏ(50 xung chẳng hạn)
+hoặc xử lý ngắt tốt
>>để tránh hiện tượng vdk phải phục vụ ngắt quá nhiều gây ra chậm trễ trong sử lý.
Download file mô phỏng tại đây

Lưu ý:
+Chương trình được viết bằng ngôn ngữ C
+Tốc độ có sai lệch anh em tìm các sửa nhé! sau đó nhớ post lên
+Update protues 7.5sp3

Hiển thị LCD với PIC


chỉ cần gọi thu viên LCD bằng lệnh :
#include<LCD.c>
Anh em có thể đưa bất kỳ nội dung mình muốn nào lên LCD.
Nếu dùng thêm :
#use rs232(baud=9600,xmit=PIN_c6,rcv=PIN_c7)
thì anh em có thể đưa giá trị của một biến bất kì lên LCD
sample programme:

Code
#include<18f452.h>
#fuses HS,NOLVP,NOWDT,NOPROTECT
#use delay(clock=12000000)
#use rs232(baud=9600,xmit=PIN_c6,rcv=PIN_c7)
#use fast_io(c)
#use fast_io(d)
#include<lcd.c>
void main(){
set_tris_c(0x00);
set_tris_d(0x00);
while(1){
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("bachanguyen");
lcd_gotoxy(1,2);
lcd_putc("hoicodien.org");
delay_ms(5000);
}
}

Kết quả mô phỏng:

Giao tiếp nối tiếp của PIC

Giao tiếp theo chuẩn RS232, ứng dụng rất nhiều trong thực tế mà ứng dụng dùng để giao tiếp
giữa vdk với máy tính là một trong những ứng dụng đó
Để PIC có thể trao đổi dữ liệu với máy tính thì ta cần làm mạch chuyển đổi mức logic do mức
logic trong máy tính và vi điều khiển là khác nhau. Sơ đồ mạch như sau:

Nếu không có điều kiện làm mạch thật anh em có thể mô phỏng bằng proteus:

về chường trình thì cần khai báo:


#use rs232(baud=9600,xmit=PIN_c6,rcv=PIN_c7)
Để có thể dùng được chức năng này. Đây là chương trình

Code
#use delay(clock=12000000)
#use rs232(baud=9600,xmit=PIN_c6,rcv=PIN_c7)
#use fast_io(c)
void main(){
set_tris_c(0x00);
while(1){
printf("giao tiep RS232\n\r");
printf("bachanguyen\n\r");
printf("www.hoicodien.org");
printf("\n\r");
printf("\n\r");
delay_ms(2000);
}
}

Kết quả mô phỏng:


Bàn thêm về chuẩn RS232

Cổng nối tiếp RS232 là một giao diện phổ biến rộng rãi nhất. Người ta còn gọi cổng này là cổng
COM1, còn cổng COM2 để tự do cho các ứng dụng khác. Giống như cổng máy in cổng COM
cũng được sử dụng một cách thuận tiện cho việc giao tiếp với thiết bị ngoại vi.

Việc truyền dữ liệu qua cổng COM được tiến hành theo cách nối tiếp. Nghĩa là các bit dữ liệu
được truyền đi nối tiếp nhau trên một đường dẫn. Loại truyền này có khả năng dùng cho những
ứng dụng có yêu cầu truyền khoảng cách lớn hơn, bởi vì các khả năng gây nhiễu là nhỏ đáng kể
hơn khi dùng một cổng song song (cổng máy in).

Cổng COM không phải là một hệ thống bus nó cho phép dễ dàng tạo ra liên kết dưới hình thức
điểm với điểm giữa hai máy cần trao đổi thông tin với nhau, một thành viên thứ ba không thể
tham gia vào cuộc trao đổi thông tin này.
* Các chân và đường dẫn được mô tả như sau:
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.
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 KIT Vi điều khiển. Trong khi đó các dữ liệu mà máy tính nhận được, lại được dẫn đến
chân RXD các tín hiệu khác đóng vai trò như là tín hiệu hổ trợ khi trao đổi thông tin, và vì thế
không phải trong mọi trường hợp ứng dụng đều dùng hết.
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.
GIỚI THIỆU VI MẠCH GIAO TIẾP MAX 232
Vi mạch MAX 232 của hãng MAXIM là một vi mạch chuyên dùng trong giao diện nối tiếp với
máy tính. Chúng có nhiệm vụ chuyển đổi mức TTL ở lối vào thành mức +10V hoặc –10V ở phía
truyền và các mức +3…+15V hoặc -3…-15V thành mức TTL ở phía nhận.
Vi mạch MAX 232 có hai bộ đệm và hai bộ nhận. Đường dẫn điều khiển lối vào CTS, điều khiển
việc xuất ra dữ liệu ở cổng nối tiếp khi cần thiết, được nối với chân 9 của vi mạch MAX 232.
Còn chân RST (chân 10 của vi mạch MAX ) 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 bắt tay được nối với cổng nối tiếp qua các 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 ba
đường dẫn TxD, RxD và GND (mass).
ĐẶC ĐIỂM KỸ THUẬT VỀ ĐIỆN CỦA RS232C
Qui định về chân của RS232C

Mức điện áp logic của RS-232C là khoảng điện áp giữa +15V và –15V. Các đường dữ liệu sử
dụng mức logic âm: logic 1 có điện thế giữa –5V và –15V, logic 0 có điện thế giữa +5V và
+15V. tuy nhiên các đường điền khiển (ngoại trừ đường TDATA và RDATA) sử dụng logic
dương: gía trị TRUE = +5V đến +15V và FALSE =-5V đến –15.
Ở chuẩn giao tiếp này, giữa ngõ ra bộ kích phát và ngõ vào bộ thu có mức nhiễu được giới hạn là
2V. Do vậy ngưỡng lớn nhất của ngõ vào là ±3V trái lại mức ± 5V là ngưỡng nhỏ nhất với ngõ
ra. Ngõ ra bộ kích phát khi không tải có điện áp là ± 25V.
Các đặc điểm về điện khác bao gồm
• RL (điện trở tải) được nhìn từ bộ kích phát có giá trị từ 3 ÷ 7k.
• CL (điện dung tải) được nhìn từ bộ kích phát không được vượt quá 2500pF.
• Để ngăn cản sự dao động quá mức, tốc độ thay đổi (Slew rate ) của điện áp không được vượt
qúa 30V/µs.
Đối với các đường điều khiển, thời gian chuyển của tín hiệu (từ TRUE sang FALSE, hoặc từ
FALSE sang TRUE ) không được vượt qúa 1ms. Đối với các đường dữ liệu, thời gian chuyển (từ
1 sang 0 hoặc từ 0 sang 1) phải không vượt qúa 4% thời gian của 1 bit hoặc 1ms.
CÁC ĐƯỜNG DỮ LIỆU VÀ ĐIỀU KHIỂN CỦA RS232
- TxD: Dữ liệu được truyền đi từ Modem trên mạng điện thoại.
- RxD: Dữ liệu được thu bởi Modem trên mạng điện thoại.
Các đường báo thiết bị sẵn sàng:
- DSR : Để báo rằng Modem đã sẵn sàng.
- DTR : Để báo rằng thiết bị đầu cuối đã sẵn sàng
- Các đường bắt tay bán song công.
- RTS : Để báo rằng thiết bị đầu cuối yêu cầu phát dữ liệu.
- CTS : Modem đáp ứng nhu cầu cần gửi dữ liệu của thiết bị đầu cuối cho thiết bị đầu cuối có thể
sử dụng kênh truyền dữ liệu. Các đường trạng thái sóng mang và tín hiệu điện thoại:
- CD : Modem báo cho thiết bị đầu cuối biết rằng đã nhận được một sóng mang hợp lệ từ mạng
điện thoại.
- RI : Các Modem tự động trả lời báo rằng đã phát hiện chuông từ mạng điện thoại địa chỉ đầu
tiên có thể tới được của cổng nối tiếp được gọi là địa chỉ cơ bản (Basic Address). Các địa chỉ ghi
tiếp theo được đặt tới bằng việc cộng thêm số thanh ghi đã gặp của bộ UART vào địa chỉ cơ bả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 thường nằm trong
khoảng –12 đến +12. Các bit dữ liệu được gửi đảo ngược lại. Mức điện áp đối với mức High
nằm giữa –3V và –12V và mức Low nằm giữa +3V và +12V. Trên hình 2-4 mô tả một dòng dữ
liệu điển hình của một byte dữ liệu trên cổng nối tiếp RS-232C.
- Ở trạng thái tĩnh trên đường dẫn có điện áp –12V. Một bit khởi động (Starbit) sẽ mở đầu việc
truyền dữ liệu. Tiếp đó là các bit dữ liệu riêng lẻ sẽ đến, trong đó các bit giá trị thấp sẽ được gửi
trước tiên. Còn số của các bit thay đổi giữa 5 và 8. Ở cuối của dòng dữ liệu còn có một bit dừng
(Stopbit) để đặt trở lại trạng thái ngõ ra (-12V).

Địa chỉ cơ bản của cổng nối tiếp của máy tính PC có thể tóm tắt trong bảng các địa chỉ sau:
COM 1 (cổng nối tiếp thứ nhất) Địa chỉ cơ bản = 3F8(Hex)
COM 2 (cổng nối tiếp thứ hai) Địa chỉ cơ bản = 2F8(Hex)
COM 3 (cổng nối tiếp thứ ba) Địa chỉ cơ bản = 3E8(Hex)
COM 4 (cổng nối tiếp thứ tư) Địa chỉ cơ bản = 2E8(Hex)
Cũng như ở cổng máy in, các đường dẫn tín hiệu riêng biệt cũng cho phép trao đổi qua các địa
chỉ trong máy tính PC. Trong trường hợp này, người ta thường sử dụng những vi mạch có mức
độ tích hợp cao để có thể hợp nhất nhiều chức năng trên một chip. Ở máy tính PC thường có một
bộ phát/nhận không đồng bộ vạn năng (gọi tắt là UART: Universal Asnchronous Receiver/
Transmitter) để điều khiển sự trao đổi thông tin giữa máy tính và các thiết bị ngoại vi. Phổ biến
nhất là vi mạch 8250 của hãng NSC hoặc các thế hệ tiếp theo.
Thông thường với các yêu cầu ứng dụng tốc độ thấp người ta giao tiếp qua ngõ nối tiếp, nó giao
tiếp theo tiêu chuẩn RS232C và dùng để giao tiếp giữa máy tính với Modem hoặc Mouse. Ngoài
ra cũng có thể dùng giao tiếp với printer hay plotter nhưng không thông dụng lắm bởi tốc độ
truyền quá chậm. Đối với máy AT cho ta hai ngõ giao tiếp COM1 và COM2. Trong một số card
I/O ta có thể có đến 4 cổng COM.
Để giao tiếp nối tiếp với 2 ngõ COM này Bus hệ thống của CPU (Data Bus và Address Bus)
hãng IBM sử dụng hai Chip lập trình của Intel là 8250 UART (Universal Asynchronus Receiver
Transmitter). Địa chỉ theo bộ nhớ của hai Chip này là 0040:0000 cho UART của ngõ COM1 và
0040:0002 cho UART của ngõ COM2 (Địa chỉ logic do hệ điều hành chỉ định) và địa chỉ theo
Port để truy xuất khi sử dụng là 3F8-3FF cho COM1 và 2F8-2FF cho COM2.
Dữ liệu truyền qua cho Port COM dưới dạng nối tiếp từng Bit một, đơn vị dữ liệu có thể là 5 Bit,
6 Bit hay 1 byte tùy theo sự cài đặt lúc khởi tạo Port COM. Ngoài ra để truyền dữ liệu qua Port
COM còn cần những tham số sau: Bit mở đầu cho một đơn vị dữ liệu START Bit. STOP Bit (Bit
kết thúc). Parity (Kiểm tra chẵn lẻ). Baud Rate (Tốc độ truyền) tạo thành một Frame (Khung
truyền).
Port COM là một thể khởi tạo bằng BIOS thông qua chức năng 0 của Interrupt 14, nạp vào thanh
ghi DX1 chỉ số chọn kênh (COM1 = 0, COM2 = 1).
Thanh ghi AL được nạp vào các tham số của việc truyền dữ liệu.

Bit D0 D1 : Cho biết độ rộng của dữ liệu


0 0 : Dữ liệu có độ rộng 5 Bit
0 1 : Dữ liệu có độ rộng 6 Bit
1 0 : Dữ liệu có độ rộng 7 Bit
1 1 : Dữ liệu có độ rộng 8 Bit.

Bit D2 : Cho biết số Stop Bit.


0 : Sử dụng một bit Stop
1 : Sử dụng hai bit Stop

Bit D3 D4 : Các Bit parity (chẵn lẻ)


0 0 : Không kiểm tra tính Parity
1 1 : Không kiểm tra tính Parity
0 1 : Odd (lẻ)
1 0 : Even (chẵn)

Bit D5D6D7 : Cho biết tốc độ truyền (Baud Rate)


0 0 0 : Tốc độ truyền 110bps (bit per second)
0 0 1 : Tốc độ truyền 150bps (bit per second)
0 1 0 : Tốc độ truyền 300bps (bit per second)
0 1 1 : Tốc độ truyền 600bps (bit per second)
1 0 0 : Tốc độ truyền 1200bps (bit per second)
1 0 1 : Tốc độ truyền 2400bps (bit per second)
1 1 0 : Tốc độ truyền 4800bps (bit per second)
1 1 1 : Tốc độ truyền 9600bps (bit per second)
CÁC IC KÍCH PHÁT VÀ THU CỦA RS232C
Nhờ tính phổ biến của giao tiếp, người ta đã chế tạo các IC kích phát và thu. Hai vi mạch như
vậy được Motorola sản xuất là IC kích phát MC 1488 có dạng vỏ vuông. Và MC 1489.Mỗi IC
kích phát 1488 nhận một tín hiệu mức TTL và chuyển thành tín hiệu ở ngõ ra tương thích với
mức điện áp của RS232C. IC 1489 phát hiện các mức vào của RS232C và chuyển chúng thành
các ngõ ra có mức TTL.
MINH HỌA THÔNG TIN NỐI TIẾP BẤT ĐỒNG BỘ
Đối với các máy PC, các cổng liên lạc nối tiếp (serial port) còn được gọi là các cổng COM. Hoàn
toàn có thể sử dụng các cổng này để kết nối máy PC với các máy tính khác, với các Modem, các
máy in, máy vẽ, các thiết bị điều khiển, mouse, mạng …
Tất cả các máy tính PC có khả năng làm việc tối đa là 4 cổng nối tiếp khi sử dụng các card giao
tiếp I/O chuẩn. Các cổng nối tiếp thường được thiết kế theo các qui định RS-232 theo các yêu
cầu về điện và về tín hiệu. BIOS chỉ hỗ trợ các cổng nối tiếp RS-232C. Còn các chuẩn khác như:
RS-422, BiSync, SDLC, IEEE-488 (GPIB),… cần phải có các trình điều khiển thiết bị bổ sung
để hỗ trợ.
*Sơ đồ thực thực tế

Vi mạch này nhận mức RS232 đã được gởi tới từ máy tính và biến đổi tín hiệu náy thành tín hiệu
TTL để cho tương thích với IC 8051 và nó cũng thực hiện ngược lại là biến đổi tín hiệu TTL từ
Vi điều khiển thành mức +12V, -12V để cho phù hợp hoạt động của máy tính. Giao tiếp theo
cách này, khoảng cách từ máy tính đến thiết bị ngoại vi có thể đạt tới trên 20 mét.
Đối với đề tài chỉ yêu cầu truyền dữ liệu từ máy tính qua KIT chứ không truyền dữ liệu từ KIT
qua máy tính vì vậy chúng em chọn vi mạch MAX232 để thực hiện biến đổi tương thích mức tín
hiệu.
Ưu điểm của giao diện này là có khả năng thiết lập tốc độ Baud.
Khi dữ liệu từ máy tính được gởi đến KIT Vi điều khiển 8051 qua cổng COM thì dữ liệu này sẽ
được đưa vào từng bit (nối tiếp) vào thanh ghi SBUF (thanh ghi đệm), đến khi thanh ghi đệm đầy
thì cờ RI trong thanh ghi điều khiển sẽ tự động Set lên 1 và lúc này CPU sẽ gọi chương trình con
phục vụ ngắt và dữ liệu sẽ được đưa vào để xử lý.
Về cơ bản thì vì việc giao tiếp nối tiếp này đã có chuẩn rồi nên việc sử dụng vi điều khiền nào là
do ta chọn. Khi dùng các loại vi điều khiển khác nhau thì câu lệnh sẽ có sự khác nhau và cách
setup cũng sẽ khác nhau một chút 

You might also like