Các chip vi xử lý, vi điều khiển đang được ứng dụng rộng rãi trong các thiết bị điện, điện tử từ đơn giản đến phức tạp, trong công nghiệp cũng như dân dụng, từ các thiết bị văn phòng đến các khí tài quân sự. Các hệ thống xây dựng trên các chip vi xử lý, vi điều khiển được sử rộng rãi do chúng có các đặc điểm ưu việt như tính linh hoạt cao, mức độ tích hợp lớn và khả năng sản xuất hàng loạt với giá thành hạ.
Môn học Vi xử lý là môn học cơ sở của các ngành Công nghệ Điện-Điện tử, Công nghệ Kỹ thuật điện, Công nghệ Tự động. Việc phổ biến của máy tính và các vi điều khiển với giá thành hạ đã tạo điều kiện cho sinh viên được tiếp cận với môn học này qua các bài tập thực hành.
Trên cơ sở chương trình chi tiết môn học thực hành Vi xử lý đã được trường ĐHSPKT Nam Định phê duyệt, nhóm tác giả biên soạn giáo trình môn học thực hành Vi xử lý làm tài liệu giảng dạy cho học sinh, sinh viên các ngành Công nghệ Điện- Điện tử, Công nghệ Kỹ thuật điện, Công nghệ Tự động. Giáo trình chú trọng giới thiệu phần ứng dụng bao gồm tổ chức phần cứng và phương pháp lập trình cho các hệ thực tế nhằm giúp cho học sinh, sinh viên nhanh chóng nắm được các kiến thức và kỹ năng cơ bản ứng dụng vi xử lý, vi điều khiển.
207 trang |
Chia sẻ: Tiểu Khải Minh | Ngày: 19/02/2024 | Lượt xem: 184 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Giáo trình thực hành Vi xử lý - Trường Đại học Sư phạm Kỹ thuật Nam Định, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
hiệu tiếng nói và Fmax=5
Mhz cho tín hiệu truyền hình. Do tần số lớn nhất có thể biến thiên chút ít trong
thực tế (ví dụ thay đổi từ giọng nói của người này với người khác), chúng ta đảm
bảo rằng Fmax không vượt quá một giá trị đã được xác định trước bằng cách cho
tín hiệu tương tự qua một bộ lọc làm suy giảm các thành phần tần số lớn hơn
Fmax. Do đó, chúng ta chắc chắn rằng không có các thành phần tần số trong tín
hiệu lớn hơn Fmax. Trong thực tế, một quá trình lọc thường được thực hiện trước
khi lấy mẫu.
Từ hiểu biết của chúng ta về Fmax, chúng ta có thể lựa chọn tốc độ lấy mẫu thích
hợp. Chúng ta biết rằng, tần số cao nhất trong tín hiệu tương tự có thể được tái
tạo lại rõ ràng khi tín hiệu được lấy mẫu ở tần số Fs=1/T là Fs/2. Bất kỳ tần số
nào lớn hơn Fs/2 hoặc nhỏ hơn –F2/2 cho kết quả các mẫu xác định với tần số
tương ứng trong phạm vi / 2 / 2s sF F F . Để tránh kết quả không rõ ràng,
Giáo trình thực hành Vi xử lý
152
chúng ta phải lựa chọn tốc độ lấy mẫu đủ cao. Nghĩa là, chúng ta phải lựa chọn
Fs/2 lớn hơn so với Fmax. Do đó, để tránh vấn đề chồng phổ, Fs được lựa chọn sao
cho
2s maxF F (0.10)
Trong đó Fmax là thành phần tần số cao nhất của tín hiệu tương tự. Với tốc độ lấy
mẫu được lựa chọn theo cách này, bất kỳ thành phần tần số nào, ví dụ |Fi|<Fmax
trong tín hiệu tương tự được ánh xạ thành tín hiệu hình sin thời gian rời rạc với
tần số
1 12 2ii s
Ff F (0.11)
Hoặc tương đương
2i if (0.12)
Do, 1| | 2f hay | |
1.3. Lượng tử hóa tín hiệu biên độ liên tục
Như chúng ta đã thấy, một tín hiệu số là một chuỗi các số (mẫu) trong đó mỗi số
được biểu diễn bởi một số hữu hạn các con số (độ chính xác hữu hạn).
Quá trình chuyển đổi một tín hiệu có biên độ liên tục, thời gian rời rạc thành tín
hiệu số bằng cách biểu diễn mỗi giá trị mẫu bởi một số các con số hữu hạn (thay
vì vô hạn) được gọi là lượng tử hóa. Sai số xuất hiện trong việc biểu diễn tín hiệu
có giá trị liên tục bởi một số hữu hữu hạn các mức giá trị rời rạc được gọi là sai
số lượng tử hóa hoặc nhiễu lượng tử.
Chúng ta ký hiệu hoạt động lượng tử trên các mẫu x(n) là Q[x(n)] và cho xq(n)
ký hiệu chuỗi mẫu đã được lượng tử hóa ở đầu ra của bộ lượng tử hóa. Do đó:
( ) [ ( )]qx n Q x n
Sai số lượng tử là một chuỗi số eq(n) định nghĩa là sự khác nhau giữa giá trị được
lượng tử hóa và giá trị mẫu thực tế. Do đó:
( ) ( ) ( )q qe n x n x n (0.13)
Chúng ta chỉ ra quá trình lượng tử hóa qua một ví dụ. Hãy xem xét tín hiệu thời
gian rời rạc
Giáo trình thực hành Vi xử lý
153
0.9 , 0( ) 0, 0
n nx n n
Thu được bằng cách lấy mẫu tín hiệu mũ tương tự ( ) 0.9 , 0tax t t với tần số
lẫy mẫu Fs=1Hz (xem hình 1.20(a)). Quan sát bảng 1.2, các giá trị của 10 mẫu
đầu tiên của x(n), chỉ ra rằng việc mô tả giá trị mẫu x(n) đòi hỏi n con số có
nghĩa. Rõ ràng tín hiệu này không thể xử lý bởi một bộ tính toán hoặc một máy
tính số do chỉ có vài mẫu đầu tiên có thể lưu và thao tác. Chẳng hạn, phần lớn
các bộ tính toán xử lý với số có tám số có nghĩa.
Giáo trình thực hành Vi xử lý
154
Hình 6.4 Quá trình lượng tử hóa
Tuy nhiên, chúng ta giả thiết rằng có thể sử dụng chỉ một số có nghĩa. Để đánh
giá các con số vượt quá, chúng ta có thể hoặc đơn giản bỏ qua chúng bằng cách
cắt cụt hoặc làm tròn kết quả. Kết quả tín hiệu được lượng tử hóa xq(n) được chỉ
ra trong bảng 1.2. Chúng ta chỉ thảo luận lượng tử hóa bằng cách làm tròn, mặc
dù việc cắt cụt dễ dàng hơn. Quá trình làm tròn được chỉ ra bằng đồ thị trong
hình 1.20b. Các giá trị theo sau trong tín hiệu số được gọi là mức lượng tử, trong
đó khoảng Ä giữa hai mức lượng tử liên tiếp được gọi là kích thước bước lượng
tử hoặc độ phân giải. Bộ lượng tử làm tròn gán mỗi mẫu x(n) tới mức lượng tử
gần nhất. Ngược lại, một bộ lượng tử thực hiện cắt cụt sẽ gán mỗi mẫu x(n) tới
mức lượng tử nhỏ hơn nó. Sai số lượng tử eq(n) trong làm tròn bị giới hạn trong
phạm vi – Ä/2 đến Ä/2, nghĩa là:
( )2 2qe n (0.14)
2. Giới thiệu các bộ chuyển đổi ADC, DAC thường dùng.
2.1 Bộ chuyển đổi số tương tự sử dụng vi mạch DAC 0808.
DAC0808 là bộ chuyển đổi tín hiệu số thành tín hiệu tương tự 8 bit, tốc độ
chuyển đổi 150 ns. DAC hoạt động với nguồn đôi có dải biến thiên từ ± 4.5V
đến ±18V. Lối vào số không đảo tương thích TTL, CMOS nên có thể giao tiếp
trực tiếp với các bộ vi xử lý.
Sơ đồ khối:
Giáo trình thực hành Vi xử lý
155
Hình 6.5 Sơ đồ khối bộ chuyển đổi ADC
Giáo trình thực hành Vi xử lý
156
Sơ đồ chân:
Hình 6.6 Sơ đồ chân DAC 0808
2.2. Sơ đồ mạch nguyên lý DAC0808
Hình 6.7 Sơ đồ mạch nguyên lý DAC 0808
Giải thích: DAC có 8 đầu vào từ D0-D7, trong đó D7 có trọng số thấp nhất và D0
có trọng số cao nhất.
2.3. Viết chương trình cho vi điều khiển 89C51 chuyển đổi DAC
Ví dụ 1: Kết nối vi điều khiển 8051 với DAC0808, cổng P2 nối với các chân dữ
liệu của DAC. Hệ thống tạo sóng dạng răng cưa tại lối ra mạch khuếch đại.
Giáo trình thực hành Vi xử lý
157
Bước 1: Vẽ lưu đồ giải thuật
Bước 2: Viết chương trình
org 0
loop0:
mov r0,#0 ;r0 la bien dem tang tu 0-255
loop:
mov p2,r0
call delayms
inc r0
cjne r0,#255,loop
jmp loop0
delayms:
mov r7,#250
djnz r7,$
ret
end
Begin
Xuất dữ liệu 0 ra DAC
End
Tăng dữ liệu số điều khiển DAC
Tạo trễ, hiển thị
Giáo trình thực hành Vi xử lý
158
Ví dụ 2: Kết nối vi điều khiển với DAC0808. Viết chương trình tạo sóng sin
Sơ đồ mạch nguyên lý:
Hình 6.8 Sơ đồ kết nối vi điều khiển với DAC 0808
Viết chương trình
org 0
loop0:
mov r0,#0
mov dptr,#bangma
loop:
mov a,r0
movc a,@a+dptr
mov p1,a
nop
nop
inc r0
Giáo trình thực hành Vi xử lý
159
cjne r0,#0,loop
jmp loop0
bangma:
db 127,130,133,136,139,143,146,149,152,155,158,161,164,167,170
db 173,176,178,181,184,187,190,192,195,198,200,203,205,208,210
db 212,215,217,219,221,223,225,227,229,231,233,234,236,238,239
db 240,242,243,244,245,247,248,249,249,250,251,252,252,253,253
db 253,254,254,254,254,254,254,254,253,253,253,252,252,251,250
db 249,249,248,247,245,244,243,242,240,239,238,236,234,233,231
db 229,227,225,223,221,219,217,215,212,210,208,205,203,200,198
db 195,192,190,187,184,181,178,176,173,170,167,164,161,158,155
db 152,149,146,143,139,136,133,130,127,124,121,118,115,111,108
db 105,102,99,96,93,90,87,84,81,78,76,73,70,67,64,62,59,56,54,51
db 49,46,44,42,39,37,35,33,31,29,27,25,23,21,20,18,16,15,14,12,11
db 10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10
db 11,12,14,15,16,18,20,21,23,25,27,29,31,33,35,37,39,42,44,46,49
db 51,54,56,59,62,64,67,70,73,76,78,81,84,87,90,93,96,99,102,105
db 108,111,115,118,121,124
Để tạo bảng mã sin, chúng ta có thể sử dụng một chương trình như Matlab để tạo
bảng mã này. Sau đây là ví dụ sử dụng Matlab để tạo bảng mã sin:
i=0:1:255;
x=127+127*sin(2*pi*i/256);
y1=round(y);
dlmwrite('my_data.out',y1, ',')
3. Giới thiệu ADC0809
ADC0809 là IC biến đổi tương tự số sản xuất trên công nghệ CMOS có độ phân
giải 8 bit. IC có 8 kênh vào tương tự độc lập, được lựa chọn bởi bộ chọn kênh 3
đầu vào. Bộ chuyển đổi sử dụng kỹ thuật chuyển đổi xấp xỉ liên tiếp. ADC0809
có mức điện áp tương thích TTL dễ dàng giao tiếp với các bộ vi xử lý, vi điều
Giáo trình thực hành Vi xử lý
160
khiển, đầu ra dữ liệu 3 trạng thái. ADC0809 được nuôi bởi nguồn đơn 5V với
công suất tiêu thụ thấp 15mW. Thời gian chuyển đổi 100 us.
Sơ đồ khối:
Hình 6.9 Sơ đồ khối ADC 0809
Sơ đồ chân:
Hình 6.7 Sơ đồ chân ADC 0809
Giáo trình thực hành Vi xử lý
161
IN
ANALOG
SELECT
C2
R9R8
4
5 6
1
2 3
74LS00
BUSCONTROL
R7
R6
R4
R3
R2
R1 R5
C11uF
+VCC
2.5VDZ
3
2
8
4
1 +
TL082
5
6
8
4
7+
TL082
-VCC
+VCC
UIN 5
6
8
4
7+
TL0823
2
8
4
1+ TL082
ADC0809
IN0
IN1
IN2
IN3
IN4
IN5
IN6
IN7
Ref-
Ref+
msb2.12.22.32.42.52.62.7lsb2.8
EOC
ADDAADDBADDC
ALE
EStartCKGN
D
VC
C
5V
OUTDIGITAL
3.1. Sơ đồ mạch nguyên lý ADC0809
Hình 6.10 Sơ đồ mạch nguyên lý ADC 0809
3.2. Lược đồ thời gian hoạt động của ADC0809
Giáo trình thực hành Vi xử lý
162
3.3. Viết chương trình cho vi điều khiển 8051 chuyển đổi ADC
Ví dụ 1: Viết chương trình cho vi điều khiển 89c51 để đo điện thế hiển thị trên hai led 7 đoạn. Điện thế đầu vào biến thiên trong khoảng 0-5V. Độ chính xác đến 0.1V. Sơ đồ nguyên lý:
Hình 6.11 Sơ đồ mạch kết nối vi điều khiển với ADC 0809
Bước 1: Vẽ lưu đồ giải thuật
Begin
Xác lập ban đầu
Tách giải mã
Tạo xung điều khiển adc, start, ale
End
Chương trình chuyển đổi
Hiển thị
Kiểm tra
Y
N
Giáo trình thực hành Vi xử lý
163
Bước 2: Viết chương trình
;Chuong trinh su dung cac led gan voi cong p2 de hien thi ma chuyen doi (tich
cuc muc thap)
;Su dung cong Int0 cua ADC0809 de lay tin hieu tuong tu dau vao
;p1 noi voi duong dieu khien va trang thai
;p1.0,p1.1,p1.2 noi voi duong chon dau vao tuong tu A,B,C
ADD_A equ p1.7
ADD_B equ p1.6
ADD_C equ p1.5
ADC_latch equ p1.4 ;bit p1.3 dung de chot 1 trong 8 kenh dau vao
ADC_startCV equ p1.3 ;bit p1.4 khoi tao mot chu trinh chuyen doi
ADC_eoc equ p1.2 ;p1.5 la bit kiem tra ket thuc mot chu trinh
chuyen doi cua ADC
ADC_readCV equ p1.1 ;p1.6 la bit dieu khien dua du lieu da chuyen
doi ra cong cua ADC
;-------Bat dau chuong trinh-----------
;------- Thiet lap dau vao ------------
org 0
start:
mov p2,#0ffh ;xoa tat ca cac led gan voi cong p2
setb p3.0 ;cam tat ca cac led
setb p3.1
;chon kenh lay tin hieu tuong tu la kenh IN0(A=B=C=0)
clr ADD_A
clr ADD_B
clr ADD_C
clr ADC_latch ;xung chot tac dong o suon duong
call delayms
setb ADC_latch
;------Bat dau qua trinh chuyen doi-----
Giáo trình thực hành Vi xử lý
164
mov p0,#0ffH ;cong p0 la cong lay - du lieu vao - tu ADC
loop:
setb ADC_startCV ;---qua trinh chuyen doi bat dau khi co su chuyen doi tu
suon am
call delayms ;ton tai o muc cao se reset lai thanh ghi du lieu cua ADC
clr ADC_startCV
jb ADC_eoc ,$ ;doi cho den khi qua trinh chuyen doi trong ADC hoan
thanh
;qua trinh chuyen doi hoan thanh ghi chan EOC chuyen tu
muc
;cao xuong muc thap
setb ADC_readCV ;gui du lieu ra cong du lieu cua ADC
call delayms
mov a,p0 ;doc du lieu tu ADC
clr ADC_readCV
;---------Doc du lieu tu ADC va cho hien thi ra cong p2----- -----------
mov b,#51
div ab
mov dptr,#bangma
movc a,@a+dptr
anl a,#7fh ;bat dau cham
mov p2,a
clr p3.1
setb p3.0
call delayms
setb p3.1
mov a,b
mov b,#5
div ab
movc a,@a+dptr
Giáo trình thực hành Vi xử lý
165
mov p2,a
clr p3.0
call delayms
setb p3.0
jmp loop
;----------chuong trinh con tre--------------------
delayms:
mov r7,#255
djnz r7,$
ret
bangma:
db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h
Một số chú ý
- Chân out1 có trọng số cao nhất, chân out7 có trọng số thấp nhất. Sinh viên
thường nối chân ra có trọng số cao nhất của ADC với chân vào có trọng số thấp
nhất của vi điều khiển dẫn đến số chuyển đổi hiển thị không đúng.
- Trên kit thực tập MGH1, đầu ra D0 của ADC có trọng số cao nhất, D7 có
trọng số thấp nhất.
-Để phù hợp với giắc nối cứng trên kit MGH1, nên nối các chân như sau:
A= P1.7
B= P1.6
C= P1.5
Latch=P1.4
Start= P1.3
OE= P1.2
EOC= P1.1
- Khi điều khiển ADC trên kit MGH1 cần có jump nối để chọn xung clock in
cho ADC (chân 10). Tần số trên kit MGH1 khoảng 200Khz.
Giáo trình thực hành Vi xử lý
166
Bài tập
1. Viết chương trình tạo xung răng cưa, chu kỳ T=0,2s. Thạch anh tần số
12Mhz.
2. Viết chương trình tạo xung tam giác có chu kỳ T=0.3s. Thạch anh 12Mhz.
3. Viết chương trình tạo xung sin có chu kỳ T=0.1s. Thạch anh 12Mhz.
4. Viết chương trình đo điện thế trong dải từ 0-5V. Hiển thị giá trị nhị phân
ra cổng P2.
5. Viết chương trình đo nhiệt độ trên 4 kênh, hiển thị nhiệt độ kênh hiện tại
ra 2 led 7 đoạn. Các kênh được lựa chọn bằng 2 switch nối với chân P3.0
và P3.1.
Giáo trình thực hành Vi xử lý
167
Bài 7: Lập trình 8051 điều khiển động cơ điện
I. Mục tiêu bài học
- Phân tích và kết nối phần cứng của mạch giao tiếp VĐK với các bộ điều khiển
cho động cơ một chiều và động cơ bước.
- Lập trình cho VĐK xuất dữ liệu qua các cổng điều khiển chiều quay, tốc độ
của các động cơ trên.
Yêu cầu vật tư, thiết bị
- Máy tính có cổng COM
- Phần mềm Pinnacle 52
- Kit thực tập MGHI
- Phần mềm nạp chương trình
- Chip vi điều khiển 8051
- Board mạch điều khiển động cơ một chiều
- Board mạch điều khiển động cơ bước
- Động cơ một chiều
- Động cơ bước
- Board mạch giao tiếp led 7 đoạn
- Đồng hồ số
- Osciloscope
II. Nội dung bài học
1. Kết nối bộ điều khiển động cơ một chiều
Khi thiết kế một rôbốt chúng ta thường quan tâm đến việc di chuyển của nó.
Thường có hai sự lựa chọn cho người thiết kế là sử dụng động cơ một chiều hay
động cơ bước. Khi tiêu chí của sự lựa chọn bao gồm tốc độ, trọng lượng, kích
thước, giá thành v.v., động cơ một chiều thường được ưa chuộng sử dụng hơn
động cơ bước. Có rất nhiều điều chúng ta có thể làm với động cơ một chiều khi
giao tiếp với vi điều khiển. Chẳng hạn, chúng ta có thể điều khiển tốc độ động
cơ, điều khiển chiều quay và cũng có thể giải mã góc quay của động cơ bằng bộ
encoder để theo dõi số vòng quay của động cơ.
Giáo trình thực hành Vi xử lý
168
Việc điều khiển động cơ một chiều từ vi điều khiển thường thông qua một mạch
cầu H. Ngày nay, rất nhiều nhà sản xuất đã sản xuất các IC tích hợp mạch cầu H,
chúng có mặt và được sử dụng rộng rãi. L293D là một ví dụ về IC điều khiển cầu
H được sử dụng phổ biến. Mạch cầu H cũng có thể được xây dựng dựa trên các
transistor lưỡng cực hoặc MOSFET.
Mạch cầu H là một mạch đóng ngắt điều khiển chuyển động của motor. Cơ bản,
mạch cầu H gồm bốn phần tử đóng ngắt như được chỉ ra trong hình
Hình 7.1 Nguyên lý điều khiển chiều quay động cơ một chiều
Như quan sát thấy trong hình có bốn phần tử đóng ngắt được đặt tên lần lượt: L1,
L2, R1, R2. Khi các switch này được bật từng cặp sẽ thay đổi hướng dòng điện
qua nó. Ví dụ, nếu chúng ta bật L1 và R2 motor quay theo chiều thuận khi dòng
từ nguồn cấp qua cuộn dây motor xuống mass qua R2.
Tương tự, khi bật R1, L2, dòng chảy theo hướng đối diện và motor quay theo
hướng ngược lại. Đây là cơ chế làm việc cơ bản của mạch cầu H.
Động cơ
L1
L2
R1
R2
V0
Gnd
Giáo trình thực hành Vi xử lý
169
Như đã nói, mạch cầu H có thể thiết kế dựa trên việc sử dụng các transistor
lưỡng cực hoặc MOSFET, điều phải quan tâm là công suất của mạch. Nếu motor
cần chạy với dòng tương đối cao do đó một lượng nhiệt lớn tỏa ra ở đây thì cần
phải có các thiết bị tản nhiệt để làm mát mạch.
Lưu ý rằng, trong trường hợp L1 và L2 ( hoặc R1 và R2) dẫn đồng thời sẽ dẫn
đến hiện tượng ngắn mạch và gây cháy mạch do quá dòng.
Hình 7.2 Sơ đồ mạch nguyên lý điều khiển động cơ một chiều
2. Lập trình điều khiển chiều quay động cơ một chiều
Để điều khiển chiều quay động cơ một chiều, ta kết nối ba chân điều khiển của
vi điều khiển với mạch điều khiển động cơ có sơ đồ nguyên lý như hình vẽ.
Giáo trình thực hành Vi xử lý
170
Ví dụ : Viết chương trình cho vi điều khiển 8051 điều khiển động cơ một chiều
theo yêu cầu:
Khi chân P1.0= 1 thì động cơ dừng
Khi chân P1.1= 1 thì động cơ quay thuận
Khi chân P1.0= 1 thì động cơ quay ngược
org 0
main:
setb p1.0
setb P1.1
dung:
clr P2.0
clr P2.1
Kiemtra:
Jb p1.0,dung
Jb p1.1,thuan
Giáo trình thực hành Vi xử lý
171
Clr p2.0
Setb p2.1
Jmp kiemtra
Thuan:
Setb p2.0
Clr p2.1
Jmp kiemtra
End
3. Lập trình điều khiển tốc độ động cơ một chiều
Điều chế độ rộng xung PWM là một trong các kỹ thuật sử dụng trong điều khiển
tốc độ quay của động cơ. Điều chế độ rộng xung là cơ chế trong đó một sóng
vuông có độ rỗng thay đổi được và do đó làm thay đổi điện áp ra trung bình.
Xem xét dạng sóng vuông trong hình sau:
Ton là thời gian lối ra ở mức cao và Toff là thời gian lối ra ở mức thấ, Ttotal
=Ton+Toff.
Độ rỗng của sóng vuông được định nghĩa là:
( )on onon off total
T TD T T T
Thế lối ra biến thiên theo độ rỗng Vout=D.Vin
Hay onout intotal
TV xVT
Từ biểu thức này, chúng ta thấy rằng có thể điều chỉnh điện thế ra bằng cách
thay đổi thời gian Ton khi cố định Ttotal.
Điều khiển tốc độ động cơ một chiều bằng vi điều khiển có thể sử dụng các
bộ timer và các chân cổng thay đổi trạng thái cao/thấp tại các khoảng thời gian
Toff Ton
Ttotal
Giáo trình thực hành Vi xử lý
172
nhất định. Như phần trên đã trình bày, bằng cách thay đổi thời gian Ton, chúng ta
có thể thay đổi độ rỗng của sóng vuông trong khi giữ Ttotal không đổi.
Mạch điều khiển motor bằng phương pháp PWM hoạt động dựa theo nguyên
tắc cấp nguồn cho Motor bằng chuỗi xung đóng mở với tốc độ nhanh. Nguồn DC
được chuyển đổi thành tín hiệu xung vuông( chỉ gồm 2 mức 0V và xấp xỉ điện áp
hoạt động ). Tín hiệu xung vuông này được cấp cho motor, nếu tần số chuyển
mạch đủ lớn motor sẽ chạy với 1 tốc độ đều đặn phụ thuộc vào moment của trục
quay.
Với phương pháp PWM, điều chỉnh tốc độ motor thông qua việc điều chế độ
rộng của xung, tức là thời gian “ đầy xung”(“ON”) của chuỗi xung vuông cấp
cho motor. Việc điều chỉnh này sẽ tác động đến công suất trung bình cấp cho
motor và do đó sẽ thay đổi tốc độ của motor cần điều khiển.
Giáo trình thực hành Vi xử lý
173
Hình 7.3: Xung điều khiển
Như hình trên, với dãy xung điều khiển trên cùng, xung “ON” có độ rộng nhỏ
nên động cơ chạy chậm. Nếu độ rộng xung “ON” càng lớn( dãy xung thứ 2 và
Ví dụ:
Viết chương trình cho vi điều khiển 8051 điều khiển động cơ một chiều sử dụng
điều chế độ rộng xung PWM
Phân tích: Ta sử dụng timer0 của vi điều khiển hoạt động ở mode 0. Các giá trị
xác định thời gian một chân ở mức cao và mức thấp được tải sao cho tổng thời
gian trễ không đổi. Khi ở mức cao, ta nạp một giá trị X vào trong thanh ghi TH0
và sau đó thời gian ở mức thấp giá trị 255-X sẽ được tải vào thanh ghi TH0 do đó
tổng thời gian không đổi là 255.
Chương trình chính cần gọi chương trình PWM_SETUP và vi điều khiển sẽ có
lối ra PWM. Chương trình phục vụ ngắt timer0 sẽ thực hiện điều chế độ rộng
xung. Độ rộng xung có thể thay đổi bằng cách thay đổi giá trị chứa trong thanh
ghi R7. Trong ví dụ trên, sử dụng giá trị 160, cũng có thể chọn giá trị khác biến
thiên trong khoảng từ 0-255 tương ứng với lối ra 0V tương ứng với 0 và Vmax
tương ứng với 255.
PWMPIN EQU P1.0 ; Chan dieu khien do rong xung
PWM_SETUP:
MOV TMOD,#00H ; Xac lap timer0 hoat dong o mode0
Giáo trình thực hành Vi xử lý
174
MOV R7, #160 ; Dat do rong xung. Gia tri trong R7 la X nhu trong trinh
bay o phan tren
SETB EA ; Cho phep ngat
SETB ET0 ; Cho phep ngat timer0
SETB TR0 ; Timer0 bat dau hoat dong
RET
Chương trình phục vụ ngắt:
TIMER_0_INTERRUPT:
JB F0, HIGH_DONE ;nếu cờ F0 đã được đặt nghĩa là chân PWMPIN
;vừa ở mức cao
LOW_DONE:
SETB F0
SETB PWMPIN
MOV TH0, R7 ; Nạp giá trị trong R7 vào TH0
CLR TF0
RETI
HIGH_DONE:
CLR F0
CLR PWMPIN
MOV A, #0FFH
CLR C
SUBB A, R7
MOV TH0, A
CLR TF0
RETI
4. Lập trình ghép nối với bộ điều khiển động cơ bước
Một động cơ DC thông thường sẽ quay chừng nào được cấp nguồn. Không cần
một mạch điện thông minh nào cần thiết để điều khiển một động cơ như vậy, trừ
khi muốn làm giảm tốc độ hoặc điều khiển chiều quay. Một động cơ bước khác
rất nhiều, nếu chỉ cấp nguồn, nó sẽ đứng nguyên tại chỗ. Để cho động cơ di
Giáo trình thực hành Vi xử lý
175
chuyển, cần phải cung cấp cho nó một tín hiệu thay đổi. Điều này tương đương
với một kim với nam châm điện đặt xung quanh nó.
Hình 7.4 Động cơ bước
Hình sau chỉ ra cách áp dụng tín hiệu lên cực N. Trên hình bên phải, nguồn được
đặt vào E, kim sẽ quay đến hướng này.
Nếu chỉ có bốn cuộn, bước chuyển động sẽ lớn (thô). Tưởng tượng một cách sắp
xếp tương tự với 100 nam châm điện xung quanh kim. Bằng cách cấp năng lượng
mỗi cuộn theo chuỗi, kim sẽ quay 100 bước để đi hết đường tròn. Bằng cách điều
khiển 100 nam châm điện độc lập sẽ đòi hỏi mạch điện tử phức tạp.
Giáo trình thực hành Vi xử lý
176
Trong hình trên, các chữ cái khoanh tròn biểu diễn các nam châm điện. Tất cả
các nam châm cùng tên được nối với nhau. Khi cấp năng lượng cho mạch, tất cả
các nam châm điện bật đồng thời. Trong hình trái, có 8 nam châm điện, nhưng
chỉ có 4 mạch. Sắp xếp theo chuỗi thông qua bốn mạch cho chuyển động nửa
bước.
4.1. Sơ đồ nguyên lý mạch điều khiển động cơ bước
Hình 7.7 Sơ đồ mạch nguyên lý mạch
4.2. Ví dụ
Ví dụ 1: Viết chương trình cho vi điều khiển 8051 điều khiển động cơ bước
quay thuận
org 0000H
loop:
mov p1,#10000000B
call delay
mov p1,#01000000B
call delay
mov p1,#00100000B
call delay
mov p1,#00010000B
Giáo trình thực hành Vi xử lý
177
call delay
jmp loop
delay:
mov r4, #10
delay3:
mov r3,#0ffH
delay1:
mov r5, #0ffh
delay2:
djnz r5,delay2
djnz r3, delay1
djnz r4,delay3
ret
Ví dụ 2: Điều khiển động cơ theo nút nhấn
Hình 7.8 Điều khiển chiều quay động cơ bước bằng nút nhấn
Trong ví dụ này ta điều khiển động cơ quay theo chiều kim đồng hồ nếu nút
được nhấn và quay ngược chiều kim đồng hồ nếu nút không được nhấn.
Các chân P0.4 đến P0.7 được nối với bộ điều khiển động cơ bước và một nút
nhấn được nối với chân P2.0.
Chương trình điều khiển động cơ quay theo trạng thái nút nhấn.
Giáo trình thực hành Vi xử lý
178
org 0000H
main:
Jb p2.0,quaynguoc
Call quaythuan
Jmp main
quaynguoc:
Call quaynguoc1
Jmp main
quaynguoc1:
mov P0,#11101111b; bật cuộn 1
call delay ; trễ một khoảng thời gian
mov P0,#11011111b; bật cuộn 2
call delay ; trễ một khoảng thời gian
mov P0,#10111111b; bật cuộn 3
call delay ; trễ một khoảng thời gian
mov P0,#01111111b; bật cuộn 4
call delay ; trễ một khoảng thời gian
ret
quaythuan:
mov P0,#01111111b; bật cuộn 4
call delay ; trễ một khoảng thời gian
mov P0,#10111111b; bật cuộn 3
call delay ; trễ một khoảng thời gian
mov P0,#11011111b; bật cuộn 2
call delay ; trễ một khoảng thời gian
mov P0,#11101111b; bật cuộn 1
call delay ; trễ một khoảng thời gian
ret
delay:
mov r4, #10
Giáo trình thực hành Vi xử lý
179
delay3:
mov r3,#0ffH
delay1:
mov r5, #0ffh
djnz r5,$
djnz r3, delay1
djnz r4,delay3
ret
Bài tập:
Bài tập 1: Viết chương trình cho vi điều khiển 89C51 điều khiển động cơ
một chiều với yêu cầu động cơ quay thuận 5 giây sau đó động cơ quay
ngược 5 giây rồi dừng lại
Bài tập 2: Viết chương trình cho vi điều khiển 89C51 điều khiển động cơ
một chiều chỉ quay với 50% công suất
Bài tập 3: Viết chương trình cho vi điều khiển 89C51 khiển động cơ bước
với yêu cầu khi nhấn phím nối chân p1.0 thì động cơ quay thuận, nhấn
phím nối chân p1.1 động cơ quay ngược, nhấn phím nối chân p1.2 động
cơ dừng. Biết đầu ra nối với cuộn dây động cơ tại các chân P2.0, P2.1,
P2.2, P2.3
Giáo trình thực hành Vi xử lý
180
Bài 8: Giao tiếp qua cổng nối tiếp (COM) I. Mục tiêu bài học
- Phân tích và kết nối phần cứng mạch giao tiếp VĐK với máy tính thông qua
cổng nối tiếp (COM).
- Lập trình cho VĐK trao đổi dữ liệu qua cổng nối tiếp với máy tính qua cổng
COM. Sử dụng phần mềm Delphi hoặc Visual Basic để tạo một giao diện đơn
giản trên máy tính phục vụ truyền thông nối tiếp giữa máy tính với VĐK.
Yêu cầu vật tư, thiết bị
- Máy tính có cổng COM
- Phần mềm Pinnacle 52
- Phần mềm Visual Basic
- Kit thực tập MGHI
- Phần mềm nạp chương trình
- Chip vi điều khiển 8051
- Board mạch giao tiếp led 7 đoạn
- Đồng hồ số
- Osciloscope
II. Nội dung bài học
1. Cấu trúc cổng nối tiếp.
1.1. Cấu tạo và phân bố các chân tín hiệu
Các máy tính tương thích IBM đều được trang bị hai cổng giao diện tuần tự-
RS232C và RS-232C ( RS là chữ viết tắt của Referent Standart ) là một chuẩn
của hiệp hội công nghiệp điện tử EIA. Chuẩn châu âu của giao diện này được gọi
là V.24. Chuẩn này tương tự như chuẩn IEEE 1284 của giao diện song song, quy
định cấu trúc vật lý, tham số điện và tín hiệu cho ổ cắm 25 chân như giao diện
song song. Hãng IBM quy định thêm ổ cắm 9 chân cho máy tính cá nhân.
162738495
Loại 25 chân Loại 9 chân Tín hiệu Hướng truyền ý nghĩa 1 - Tiếp đất - Bảo vệ, tiếp đất 2 3 TD Ra Dữ liệu phát 3 2 RD Vào Dữ liệu nhận 4 7 RTS Ra Yêu cầu phát 5 8 CTS Vào Sẵn sàng nhận 6 6 DSR vào Bảo vệ, tiếp đất
7 5 Tiếp đất - Phát hiện có
Giáo trình thực hành Vi xử lý
181
Hình 8.1 Sơ đồ chân cổng nối tiếp
ý nghĩa các tín hiệu quan trọng được giải thích sau đây.
RTS: máy tính phát tín hiệu này ra thiết bị ngoại vi báo chuẩn bị truyền dữ liệu.
CTS: Tín hiệu này đến từ thiết bị ngoại vi báo đã sẵn sàng nhận dữ liệu.
Nếu máy tính nhận được dữ liệu này nó bắt đầu truyền dữ liệu ra thiết bị ngoại
vi. Như vậy RTS và CTS là hai tín hiệu bắt tay giữa máy tính và thiết bị ngoại vi.
Cáp nối sẽ bắt chéo hai tín hiệu này.
DCD: Trong trường hợp thiết bị ngoại vi là một Modem và nối được đường
truyền, nó bảo vệ máy tính tín hiệu DCD. DCD luôn ở trạng thái tích cực khi
đường dây vẫn được nối.
DSR: Trong trường hợp thiết bị ngoại vi là một Modem nó bảo vệ máy tính tín
hiệu này sau khi khởi động thành công và sẵn sàng hoạt động.
DTR: Tín hiệu này do máy tính báo ra thiết bị ngoại vi. Tín hiệu này thường
được khởi động hay đóng mạch thiết bị ngoại vi. DTR và DSR có trách nhiệm
chuẩn bị kết nối.
RI: Tín hiệu báo từ thiết bị ngoại vi về máy tính. Nếu thiết bị ngoại vi là Modem,
tín hiệu RI báo máy tính đang bị một máy tính khác truy cập qua đường điện
thoại.
DSRD ( ổ cắm 25 chân) cho phép thay thế tốc độ truyền. Tín hiệu này đi theo hai
chiều, có nghĩa là cả máy tính và thiết bị ngoại vi đều có khả năng đổi tốc độ.
Tham số điện của cổng nối tiếp:
11421531641751861972082192210231124122513
Giáo trình thực hành Vi xử lý
182
Giao diện tuần tự RS232 cần điện thế tín hiệu cao hơn mức TTL( 0V, 5V) để
truyền tín hiệu được xa.Tham số điện của RS232 đựoc quy định như sau.
Logic 0 : +3V đến +25V ( gọi là “Space”)
Logic 1 : - 3V đến – 25V ( gọi là “Mark”)
Mọi tín hiệu giữa –3V và +3V đều không có ý nghĩa. Vì tín hiệu trong máy tính
chỉ có 0V và 5V (TTL) hay thấp hơn lên tín hiệu từ máy tính ra giao diện RS232
và ngược lại phải qua bộ chuyển mức tín hiệu. Sử dụng vi mạch MAX232, hay
MAX233 có sơ đồ chân như sau:
Hình 8.2 Sơ đồ chân MAX 232 và MAX 233
- Các đặc tính kỹ thuật của cổng nối tiếp
1.2. Địa chỉ cổng và tốc độ truyền của cổng nối tiếp.
- Địa chỉ cổng và yêu cầu ngắt. Giao diện Địa chỉ cơ sở Yêu cầu ngắt COM 1 3F8H IRQ4 COM 2 2F8H IRQ3 COM 3 3E8H IRQ4 COM 4 2E8H IRQ3 - Tốc độ truyền và các số chia tương ứng của giao diện tuần tự.
T1IN 2R1OUT
3T2IN 1
R2OUT 20
T1OUT5 R1IN
4 T2OUT18
R2IN19
VS+14
VSa-12 VSb-
17
C1+
8
C1-
13
C2a+ 11C2b+
15
C2a- 16C2b-
10
MAX233
T1IN 11R1OUT 12T2IN 10R2OUT 9
T1OUT14 R1IN13 T2OUT7 R2IN8
C2+
4
C2-
5
C1+
1
C1-
3
VS+2 VS-6
MAX232
Giáo trình thực hành Vi xử lý
183
Tốc độ ( baud) Số chia ( D) Giá trị số chia cao ( H) Giá trị số chia thấp ( L ) 50 2304 09 00 300 384 01 80 600 192 00 C0 2400 48 00 30 4800 24 00 18 9600 12 00 0C 19200 6 00 06 38400 3 00 03 57600 2 00 02 115200 1 00 01 1.3. Phương pháp truyền.
Phương pháp truyền từ máy tính ra thiết bị ngoại vi.
Có ba phương pháp:
Truyền một chiều ( Simplex) : dữ liệu chỉ được truyền theo một chiều :Từ
máy tính ra hoặc vào máy tính. Trong trường hợp thứ nhất dữ liệu được truyền ra
qua đường TD,đường RD không được nối. Thiết bị ngoại vi không sử dụng
đường RTS. tín hiệu DCD luôn ở trạng thái không tích cực vì thiết bị ngoại vi chỉ
nhận dữ liệu. Tín hiệu DSR luôn tích cực.
Truyền hai chiều riêng biệt ( haft duplex) : truyền hai chiều riêng biệt giữa
máy tính và thiết bị ngoại vi. Trong trường hợp này chỉ TD hoặc TR làm việc
trong một thời điểm. Tín hiệu bắt tay RTS và CTS được sử dụng. Nếu máy tính
muốn truyền dữ liệu, nó đưa tín hiệu RT lên trạng thái tích cực và đợi tín hiệu
ngoại vi trả lời qua tín hiệu CTS. Nếu thiết bị ngoại vi muốn truyền dữ liệu, nó
đưa tín hiệu DCD về máy tính. DSR không được dùng đến. Máy tính báo sẵn
sàng nhận dữ liệu qua DTR và cho phép hay cấm thiết bị ngoại vi ( Máy tính
luôn đảm nhiệm vai trò chủ trong khi trao đổi dữ liệu). Hướng truyền dữ liệu
được thay đổi bằng cách thay đổi hai tín hiệu RTS và CTS. Tín hiẹu RI rất quan
trọng trong biên bản truyền này, qua RI thiết bị ngoại vi báo một thiết bị khác
đang tìm cách kết nối với máy tính qua thiết bị ngoại vi dang hoạt động (
Modem).
Giáo trình thực hành Vi xử lý
184
Truyền hai chiều cùng một lúc ( Full Duplex) : Dữ liệu được truyền theo
cả hai chiều cùng một lúc. Trong trường hợp này, máy tính và thiết bị ngoại vi
đảm nhiệm chức năng máy phát và máy nhận cùng một lúc. Tín hiệu RTS và
CTS lúc này không có ý nghĩa. DTR đảm nhiệm việc chuyển mạch.
1.4. Khung dữ liệu nối tiếp.
- Khung của dữ liệu dạng TTL.
- Khung dữ liệu truyền đi.(Ví dụ truyền đi chữ A đã chuyển sang chuẩn RS232 ).
2. Giao tiếp PC với PC.
Cáp Null Modem dùng để kết nối hai máy tính với nhau hay máy tính với một
thiết bị ngoại vi có giao diện tuần tự và dùng biên bản Zero Modem hay X
modem để truyền dữ liệu.
Tín hiệu DSR nối với tín hiệu DTR tín hiệu RTS nối với CTS, bằng cách này
giao diện của máy tính luôn hoạt động, dữ liệu được trao đổi qua đường TD và
TR.
Giáo trình thực hành Vi xử lý
185
Hình 8.3 Sơ đồ giao tiếp PC với PC
3. Giao tiếp PC với thiết bị ngoại vi
- Sơ đồ giao tiếp đầu ra của cổng COM với thiết bị ngoại vi tương thích TTL.
Ta phải sử dụng vi mạch chuyển đổi MAX232 để chuyển thành vào ra TTL cho
các chân RD và TD.
Hình 8.4 Sơ đồ giao tiếp PC với thiết bị ngoại vi
- Sơ đồ giao tiếp đầu ra của cổng COM với vi điều khiển 8051.
DCDDSRRDRTSTDCTSDTRRI
OTD IRDTDRD
DCDIRDDSRCTSRI
OTDDTRRTS
COM INTERFACE TTL
162738495
TO PC
CONN-D9F
T1IN11 R1OUT12 T2IN10 R2OUT9
T1OUT 14R1IN 13T2OUT 7R2IN 8
C2+
4
C2-
5
C1+
1
C1-
3
VS+ 2VS- 6
U1
MAX232
C1
1uF
C2
1uF
C3
1uF
C4
1uF
123456
IN
CONN-SIL6
1234
OUT
CONN-H4
TD
RD
L8 L7 L6 L5 L4 L3 L2 L1
L1L2L3L4L5L6L7L8
8051 AND PC INTERFACE
162738495
TO PC
CONN-D9F
T1IN11 R1OUT12 T2IN10 R2OUT9
T1OUT 14R1IN 13T2OUT 7R2IN 8
C2+
4
C2-
5
C1+
1
C1-
3
VS+ 2VS- 6
U1
MAX232
C1
1uF
C2
1uF
C3
1uF
C4
1uF
X1CRYSTALXTAL2 18
XTAL1 19
ALE 30EA 31
PSEN 29
RST 9
P0.0/AD039 P0.1/AD138 P0.2/AD237 P0.3/AD336 P0.4/AD435 P0.5/AD534 P0.6/AD633 P0.7/AD732
P 1.0 1P 1.1 2P 1.2 3P 1.3 4P 1.4 5P 1.5 6P 1.6 7P 1.7 8
P3.0/RXD10 P3.1/TXD11 P3.2/INT012 P3.3/INT113 P3.4/T014
P3.7/RD17 P3.6/W R
16 P3.5/T115
P2.7/A1528
P2.0/A821 P2.1/A922 P2.2/A1023 P2.3/A1124 P2.4/A1225 P2.5/A1326 P2.6/A1427
U2
A T89C51
IN
C51u
R110k
D1LED-RED
R2100
D2LED-RED
R3100
D3LED-RED
R4100
D4LE D-RED
R5100
D5LED-RED
R6100
D6LED-RED
R7100
D7LED-RED
R8100
D8LED-RED
R9100
OUT INDICATOR
IN TEST
Giáo trình thực hành Vi xử lý
186
Hình 8.5 Sơ đồ giao tiếp với vi điều khiển 8051
Ta phải sử dụng vi mạch chuyển đổi MAX232 để chuyển thành vào ra TTL cho
các chân RD và TD vì vi điều khiển tương thích mức TTL , giao tiếp với PC qua
hai chân đó là RXD ( nhận ) và TXD ( phát ).
4. Lập trình cho vi điều khiển 8051 giao tiếp với PC điều khiển thiết bị ngoại
vi sử dụng phần mềm Visual hoặc Delphi tạo ứng dụng và Pinnacle 52 lập
trình cho 8051.
4.1. Lập trình truy xuất trực tiếp cổng.
- Để lập trình điều khiển thiết bị ngoại vi bằng phương pháp truy xuất trực tiếp
cổng ta phải nắm được địa chỉ cổng cần truy xuất, các thanh ghi điều khiển,
phương thức truyền, định dạng khung dữ liệu...
- Ngôn ngữ lập trình viết trên dos của Windows.
4.2. Lập trình truy xuất gián tiếp thông qua driver.
Driver ở đây chính là các thư viện liên kết động cho phép người lập trình truy
xuất cổng gián tiếp. Chúng hỗ trợ cta đơn giản hoá việc lập trình.
- Sử dụng phần Mscomm
+ Để có được Mscomm sau khi cài phần mềm Delphi ta phải nhập thêm
đối tượng này bằng cách sau:
Chọn Component trên menu của
chương trình sau đó chọn Import
Actix X lúc này chương trình
hiện ra một hộp thoại cho phép ta
lựa chọn các đối tượng cần nhập
vào. Ta tiến hàn kéo thanh cuốn
dọc và lựa chọn Microsoft
Comm Control 6.0 sau đó chọn
Install .
Giáo trình thực hành Vi xử lý
187
Sau đó ta chọn Actix X trên thanh công cụ để lấy Mscomm ra ứng dụng
+ Các thuộc tính điều khiển cổng
+ Các thuộc tính khi lập trình nhận và
xuất dữ liệu.
Input: nhận một chuỗi ký tự và xoá khỏi bộ đệm.
InBufferCount: số ký tự có trong bộ đệm nhận
InBufferSize: kích thước bộ đệm nhận
Output, OutBufferCount và OutBufferSize hoàn toàn tương tự nhưng là
để xuất dữ liệu.
+ Thiết lập các thuộc tính cho Mscomm
Để thiết lập thuộc tính cho Mscomm ta có thể thiết lập trong Object Inspector
sau khi đã nhấp chuột vào đối tượng. Hoặc ta nháy đúp chuột vào biểu tượng của
Mscomm để thiết lập thuộc tính.
Khi đó ta có các thông số cần thiết lập như sau:
Hình 8.6 Thiết lập các thông số cổng COM
Trong nhãn General cho ta thiết lập:
Thông số CommPort: Xác định cổng cần truyền thông.
Giáo trình thực hành Vi xử lý
188
Thông số Settings cho ta thiết lập: Tốc độ
truyền: 4200b/s, 9600b/s, ....
Kiểm tra chẵn lẻ với bảng sau:
Số bit dữ liệu: 4 bit, 5 bit, 7 bit, 8 bit.
Số bit Stop: 1 bit ,1.5 bit, 2 bit.
Thông số Handshahing: cho phép thiết lập chế độ bắt tay hay không bắt tay khi
truyền dữ liệu, mặc định là không chọn.
Trong nhãn Buffers:
InBufferSize ( bộ đệm dữ liệu đầu vào ) ta thiết lập là 1024.
OutBufferSize ( bộ đệm dữ liệu đầu ra) ta thiết lập là 1024.
Trong nhãn Hardware: cho ta thiết lập các thông số để kiểm tra như: chọn tiếp
việc thay thế bit kiểm tra chẵn lẻ ( Parity Replace )....
Sau khi thiết lập xong các thông số cơ bản ta nhấn OK để chấp nhận .
Giáo trình thực hành Vi xử lý
189
4.3. Các ví dụ cơ bản lập trình cho PC giao tiếp với thiết bị ngoại thông
qua 8051.
- Ví dụ 1: Viết chương trình trên Delphi tạo một ứng dụng để truyền các ký tự gõ
vào từ bàn phím ra led đơn thông qua vi điều khiển 89c51 để điều khiển các
LED đơn gắn ở Port 0 sáng tắt theo mã ASSCII của phím được nhấn.
* Tạo ứng dụng trên Delphi. ( có thể sử dụng VB để tạo ứng dụng )
+ Khởi động phần mềm Delphi và tạo ra giao diện như sau:
Hình 8.7 Tạo giao diện trên DELPHI
Để tạo được giao diện như trên ta cần lấy trong thư viện Delphi gồm:
+ 1 textbox để hiển thị có ký hiệu Memo1 như trên hình đồng thời ta có thể dán
nhãn cho textbox đó bằng cách lấy label trong thư viện và gán tên cho chúng là
“dữ liệu cần truyền”
+ 2 nút bấm lấy được bằng cách vào Commandbutton trong thư viện và gán tên
lần lượt là “truyền”và “thoát”
+Ta cần lấy biểu tượng chiếc điện thoại bàn như trên hình vẽ để thiết lập cổng
COM.Trước khi lấy được biểu tượng này ta phải chọn Component trên menu
của chương trình sau đó chọn Import Actix X lúc này chương trình hiện ra một
hộp thoại cho phép ta lựa chọn các đối tượng cần nhập vào. Ta tiến hàn kéo
thanh cuốn dọc và lựa chọn Microsoft Comm Control 6.0 sau đó chọn Install.
Sau bước này ta sẽ thấy xuất hiện biểu tượng chiếc điện thoại trong thư viện và
chỉ việc lấy ra sử dụng.
Sau khi tạo được giao diện như trên ta sẽ phải thiết lập cho các sự kiện( viết
chương trình cho các sự kiện) để chúng hoạt động đáp ứng theo yêu cầu bằng
Giáo trình thực hành Vi xử lý
190
cách khi viết cho sự kiện nào ta sẽ nháy đúp chuột vào sự kiện đó rồi viết chương
trình cho chúng.
Thiết lập thông số cho Mscomm1 như sau:
MSComm1.CommPort:= 1; // chọn cổng Com 1
MSComm1.PortOpen:= True; // mở cổng
MSComm1.Settings:= '9600,n,8,1'; // chọn tốc đọ truyền là 9600, không kiểm tra
chẵn lẻ, 8 bit dữ liệu, 1 bit stop.
+ Viết mã nguồn cho các sự kiện như sau:
//CHUONG TRINH TRUYEN DU LIEU QUA CONG COM1
//THONG QUA 89C51 DIEU KHIEN LED DON
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, MSCommLib_TLB;
type
TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
Button2: TButton;
MSComm1: TMSComm;
MEMO1: TMemo;
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Giáo trình thực hành Vi xử lý
191
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
begin
MSComm1.PortOpen:= false; // CHON DONG CONG
close; // DONG UNG DUNG
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
// THIET LAP THUOC TINH CHO CONG COM
MSComm1.CommPort:= 1; // CONG COM1
MSComm1.PortOpen:= True; // CHON MO CONG
MSComm1.Settings:= '9600,n,8,1';
MEMO1.Text:=''; // XOA CAC KY TU TRONG MEMO1
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// DAP UNG SU KIEN KHI NHAN NUT TRUYEN
mscomm1.output:=memo1.Text; //TRUYEN DI
end;
end.
+ Sau khi thiết kế và viết mã nguồn xong ta hợp dịch và tạo ra được ứng dụng
chạy trên Windows có giao diện như sau:
Giáo trình thực hành Vi xử lý
192
Hình 8.8 ứng dụng chạy trên WINDOW
* Viết chương trình cho VĐK 89C51. ( Chương trình viết trên Pinnacle 52).
+ Khởi động phần mềm lập trình Pinnacle 52và soạn thảo chương trình như sau:
;Chuong trinh nhan du lieu tu PC
;Tan so thanh anh su dung la 11.0592Mhz
;************************
mov scon,#50h ;
MOV TMOD,#20h ;Timer 1 tu dong nap lai
MOV TH1,#0FDh ;toc do truyen la 9600
SETB TR1 ;khoi dong timer1
;************************
MOV P0,#00H ;tat het cac led port0
loop:
jnb ri,$ ;kiem tra co nhan
clr ri ;xoa co nhan de nhan ki tu ke tiep
mov p0,sbuf ;dua du lieu tai bo dem noi tiep ra port0
jmp loop ;cho nhan
end ;ket thuc chuong trinh
+ Hợp dịch nội dung chương trình vừa soạn thảo và nạp vào vi điều khiển.
+Kết nối phần cứng để chạy ứng dụng và quan sát kết quả.
- Kết nối Com1 với hệ Kit thực tập
- Chọn truyền thông nối tiếp với khối VĐK
Giáo trình thực hành Vi xử lý
193
- Dùng bus để nối đầu ra của Port 0 với Led đơn.
- Chạy ứng dụng và nhập ký tự cần truyền từ bàn phím và nhấn truyền
sau đó quan sát Led đơn.
- Ví dụ 2: Viết chương trình trên Delphi tạo một ứng dụng để truyền các ký tự gõ
vào từ bàn phím ra led đơn thông qua vi điều khiển 89c51 để điều khiển các
LED đơn gắn ở Port 0 sáng tắt theo mã ASSCII của phím được nhấn đồng thời
hiển thị ký tự được nhấn từ bên ngoài trên ứng dụng.
Giáo trình thực hành Vi xử lý
194
* Tạo ứng dụng trên Delphi.
+ Khởi động phần mềm Delphi và tạo ra giao diện như sau:
Để tạo được giao diện như trên ta cần lấy trong thư viện Delphi gồm:
+ 2 textbox để hiển thị có ký hiệu Memo1 và Memo2 như trên hình đồng thời để
phân biệt rõ 2 textbox đó ta có thể dán nhãn cho chúng bằng cách lấy 2 label
trong thư viện và gán tên cho chúng lần lượt là “dữ liệu cần truyền” và “dữ liệu
nhận được”
+ 3 nút bấm lấy được bằng cách vào Commandbutton trong thư viện và gán tên
lần lượt là “truyền”, “nhận” và “thoát”
+ Viết mã nguồn cho các sự kiện như sau:
unit TRUYENNHAN;
//CHUONG TRINH TRUYEN NHAN DU LIEU NOI TIEP TU PC THONG
QUA VDK VOI THIET BI NGOAI VI
// SU DUNG CONG COM1, TOC DO TRUYEN 9600B/S
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, MSCommLib_TLB;
type
TForm1 = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
Label1: TLabel;
Label2: TLabel;
Giáo trình thực hành Vi xử lý
195
MSComm1: TMSComm;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button3Click(Sender: TObject);
begin
MSComm1.PortOpen:= false; //DONG CONG
close //DONG UNG DUNG
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
//TRHIET LAP THUOC TINH CONG COM
MSComm1.CommPort:= 1; //CHONG CONG COM1
MSComm1.PortOpen:= True; //MO CONG
MSComm1.Settings:= '9600,n,8,1';
MEMO1.Text:=''; //XOA CAC MEMO
MEMO2.Text:='';
end;
procedure TForm1.Button1Click(Sender: TObject);
Giáo trình thực hành Vi xử lý
196
begin
//SU KIEN KHI NHAN NUT TRUYEN
mscomm1.output:=memo1.Text; //TRUYEN DI
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
//SU KIEN KHI NHAN NUT NHAN
memo2.Text:=memo2.Text+mscomm1.Input; // NHAN VAO
end;
end.
+ Sau khi thiết kế và viết mã nguồn xong ta hợp dịch và tạo ra được ứng dụng
chạy trên Windows có giao diện như sau:
* Viết chương trình cho VĐK 89C51. ( Chương trình viết trên Pinnacle 52).
+ Khởi động phần mềm lập trình Pinnacle 52và soạn thảo chương trình như sau:
;Chuong trinh truyen va nhan du lieu tu PC
;Tan so thanh anh su dung la 11.0592Mhz
;************************
mov scon,#52h ;
MOV TMOD,#20h ;Timer 1 tu dong nap lai
MOV TH1,#0FDh ;toc do truyen la 9600
SETB TR1 ;khoi dong timer1
;************************
mov p2,#0ffh ;dat p2 lam dau vao
MOV P1,#00H ;tat het cac led port0
Giáo trình thực hành Vi xử lý
197
loop:
jnb ti,$
clr ti
mov a,p2
mov sbuf,a
jnb ti,$
jnb ri,loop
clr ri
mov p1,sbuf
jmp loop
end ;ket thuc chuong trinh
+ Hợp dịch nội dung chương trình vừa soạn thảo và nạp vào vi điều khiển.
+Kết nối phần cứng để chạy ứng dụng và quan sát kết quả.
- Kết nối Com1 với hệ Kit thực tập
- Chọn truyền thông nối tiếp với khối VĐK
- Dùng bus để nối đầu ra của Port 1 với Led đơn.
- Nối Port 2 với bàn phím hexa
- Chạy ứng dụng và nhập ký tự cần truyền từ bàn phím và nhấn truyền
sau đó quan sát Led đơn và trên ứng dụng .
- Ví dụ 3: Viết chương trình trên Visual tạo một ứng dụng để nhận dữ liệu là các số
đếm từ vi điều khiển 89c51 hiển thị số đếm trên giao diện Visual và Led 7 đoạn
* Tạo ứng dụng trên Visual.
+ Khởi động phần mềm Visual và tạo ra giao diện như sau:
Giáo trình thực hành Vi xử lý
198
Thiết lập thông số cho Mscomm1 như sau:
MSComm1.CommPort:= 1; // chọn cổng Com 1
MSComm1.PortOpen:= True; // mở cổng
MSComm1.Settings:= '9600,n,8,1'; // chọn tốc đọ truyền là 9600, không kiểm tra
chẵn lẻ, 8 bit dữ liệu, 1 bit stop.
+ Viết mã nguồn cho các sự kiện như sau:
Dim x As Integer
Private Sub Command1_Click()
com.PortOpen = False ' dong cong noi tiep
End 'ket thuc chuong trinh
End Sub
Private Sub Command2_Click()
com.Output = Text2.Text + "@" 'gui gia tri dat ra cong com cung voi ky tu @
End Sub
Private Sub Command3_Click()
Text1.Text = "0000"
End Sub
Private Sub Form_Load()
Timer1.Interval = "1" 'dat timer1 cu 100ms xay ra 1 lan
Timer1.Enabled = True 'cho phep timer 1 lam viec
' Xac lap thong so cho cong cong com
com.CommPort = 1 'chon cong com 1
com.Settings = "1200,n,8,1" 'chonm toc do truyen la 1200, khong kiem tra
chan le, 8 bit du lieu, 1 bit dung
com.PortOpen = True 'mo cong com
'xac lap thong so cho timer 1
Text1.Text = "0000"
Text2.Text = "9999"
End Sub
Private Sub Timer1_Timer()
Text3.Text = com.Input
If Text3.Text = "@" Then
Giáo trình thực hành Vi xử lý
199
Text1.Text = Text4.Text
Text4.Text = ""
Else
Text4.Text = Text4.Text + Text3.Text
End If
End Sub
+ Sau khi thiết kế và viết mã nguồn xong ta hợp dịch và tạo ra được ứng dụng
chạy trên Windows có giao diện như sau:
* Viết chương trình cho VĐK 89C51. ( Chương trình viết trên Pinnacle 52).
+ Khởi động phần mềm lập trình Pinnacle 52và soạn thảo chương trình như sau:
;chuong trinh viet cho VDK 8051 dem xung ngoai su dung bo dem 0
;gia tri so dem lon nhat la 9999
;gia tri so dem can dem dat duoc tren may tinh
;gia tri so dem dem duoc hien thi tren led 7 doan va tren may tinh
;port 0 noi voi cac doan
;p2.0 den p2.3 quet led
;p3.4 cap xung dem
;p3.0 noi voi TXD cua may tinh qua cong com ( su dung vi mach MAX232)
;p3.1 noi voi RXD cua may tinh qua cong com
;thach anh su dung la 11.0592Mhz
;toc do truyen la 1200, 8 bit du lieu, 1 bit dung, khong kiem tra chan le
;-----------------------------------------------------------------------
org 0
jmp main
Giáo trình thực hành Vi xử lý
200
;-------------------------
;khai bao dia chi ngat noi tiep
org 23h
push acc
push psw
jnb ri,kt_truyen
mov a,sbuf
cjne a,#'@',doc_du_lieu ;@ la ky tu danh dau vi tri ket thuc cua chuoi ky
tu nhan duoc
mov r1,#50h ;50h-53h la cac vi tri cat gia tri so dem
nhan duoc tu may tinh
jmp thoat_ngat
doc_du_lieu:
clr c
subb a,#30h ;chuyen tu ma ASSCII thanh so bcd
mov @r1,a
inc r1
thoat_ngat:
clr ri
pop psw
pop acc
reti
kt_truyen:
jnb ti,$
clr ti
pop psw
pop acc
reti
;----------------------------------------------
main:
mov dptr,#ma_7doan
mov ie,#10010000b ;cho phep ngat noi tiep
;thiet lap tham so cho cong noi tiep
MOV TMOD,#20h ;timer 1 mode 2 tu dong nap lai
Giáo trình thực hành Vi xử lý
201
MOV TH1,#0E8h ;toc do truyen 1200
SETB TR1 ;khoi dong timer1
mov scon,#50h ;cho phep nhan du lieu noi tiep'
mov a,#00000101b ;timer0 mode1 che do bo dem
orl tmod,a
mov tl0,#0
mov th0,#0
mov r0,#0
mov r1,#50h ;vi tri cat du lieu doc duoc tu may tinh
mov 50h,#9
mov 51h,#10
mov 52h,#9
mov 53h,#9 ;mac dinh khi chay chuong trinh se so
sanh voi 9999
setb tr0
loop0:
call xu_ly_so_so_sanh ;chuong trinh chuyen so dem nhan duoc tu may
tinh sang so thap phan
call tach_giai_ma ;tach va chuyen sang ma 7 doan de hien thi tren
;led 7 doan
call hien_thi ;goi chuong trinh hien thi tren led 7 doan
call chuyen_ma_ascii ;chuyen tu so bcd sang ma ASSCII de truyen len
;may tinh
call truyen_noi_tiep ;truyen gia tri dem duoc len may tinh
mov a,tl0
cjne a,61h,ss100 ;so sanh gia tri dem duoc voi so can so nhan
;duoc tu may tinh
sjmp ssr0
ss100:
cjne a,#100,$+3
jc loop0
mov tl0,#0
inc r0
ssr0:
Giáo trình thực hành Vi xử lý
202
mov a,r0
cjne a,60h,loop0
mov r0,#0
mov tl0,#0
jmp loop0
;--------------------------------
xu_ly_so_so_sanh:
mov a,50h
mov b,#10
mul ab
add a,51h
mov 60h,a ;cat byte cao can so sanh vao o nho 60h
mov a,52h
mov b,#10
mul ab
add a,53h
mov 61h,a ;cat byte thap can so sanh vao o nho 61h
ret
;--------------------------------
tach_giai_ma:
mov a,tl0
mov b,#10
div ab
mov 41h,a
mov 40h,b
movc a,@a+dptr
mov 30h,a
mov a,b
movc a,@a+dptr
mov 31h,a
mov a,r0
mov b,#10
div ab
mov 43h,a
Giáo trình thực hành Vi xử lý
203
mov 42h,b
movc a,@a+dptr
mov 32h,a
mov a,b
movc a,@a+dptr
mov 33h,a
ret
;-----------------------------------
chuyen_ma_ascii:
mov a,40h
add a,#30h
mov 40h,a
mov a,41h
add a,#30h
mov 41h,a
mov a,42h
add a,#30h
mov 42h,a
mov a,43h
add a,#30h
mov 43h,a
ret
;-------------------------------------
truyen_noi_tiep:
mov a,#'@'
mov sbuf,a
call delay
mov a,43h
mov sbuf,a
call delay
mov a,42h
mov sbuf,a
call delay
mov a,41h
Giáo trình thực hành Vi xử lý
204
mov sbuf,a
call delay
mov a,40h
mov sbuf,a
call delay
ret
;-------------------------------------------
;chuong trinh hien thi tren led 7 doan
hien_thi:
mov p0,31h
mov p2,#11111110b
call delay100us
mov p2,#0ffh
mov p0,30h
mov p2,#11111101b
call delay100us
mov p2,#0ffh
mov p0,33h
mov p2,#11111011b
call delay100us
mov p2,#0ffh
mov p0,32h
mov p2,#11110111b
call delay100us
mov p2,#0ffh
ret
;-------------------------------------------------
delay100us:
mov r5,#50
djnz r5,$
ret
;----------------------------------------------------
delay:
mov r6,#1
Giáo trình thực hành Vi xử lý
205
dl1:
mov r7,#255
lap_hien_thi:
call hien_thi
djnz r7,lap_hien_thi
djnz r6,dl1
ret
;---------------------------------------------------
ma_7doan:
db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h
end
+ Hợp dịch nội dung chương trình vừa soạn thảo và nạp vào vi điều khiển.
+Kết nối phần cứng để chạy ứng dụng và quan sát kết quả.
- Kết nối Com1 với hệ Kit thực tập
- Chọn truyền thông nối tiếp với khối VĐK
- Dùng bus để nối đầu ra của Port 0 với cac đoạn a,b,c,d,e,f,g.
- Nối Port 2 với quét led
Chạy ứng dụng và quan sát phần hiển thị trên Led 7 đoạn và trên máy tính .
Bài tập:
Bài tập 1: Viết chương trình trên Visual tạo một ứng dụng để truyền các ký tự gõ
vào từ bàn phím ra led đơn thông qua vi điều khiển 89c51 để điều khiển các
LED đơn gắn ở Port 0 sáng tắt theo yêu cầu:
- Khi nhấn phím 1 thì 8 led đơn sáng dần
- Khi nhấn phím A thì 8 led đơn tắt dần
- Khi nhấn phím B thì 8 led đơn chớp tắt
Bài tập 2: Viết chương trình trên Visual tạo một ứng dụng để nhận dữ liệu là
nhiệt độ từ cảm biến qua ADC đến vi điều khiển 89c51
Giáo trình thực hành Vi xử lý
206
Tài liệu tham khảo Tiếng việt
1. Nguyễn Tăng Cường, Phan Quốc Thắng (2004), “Cấu trúc và lập trình họ
vi diều khiển 8051”, NXB Khoa học và Kỹ thuật
2. Nguyễn Tăng Cường, (2003), “Máy tính cấu trúc và lập trình”, (tập 1+2),
NXB Khoa học và Kỹ thuật.
3. Đỗ Xuân Tiến, (2003), “Kỹ thuật vi xử lý và lập trình ASSEMBLY cho hệ
vi xử lý”, NXB Khoa học và Kỹ thuật.
Tiếng anh
4. Barry B Bray (1995), “The Intel Microprocessor 32 bit”, Prentice Hall .
5. Daniel tabak (1995), “Advanced Microprocessor”. McGrow Hill.
6. Ayala, K. J.(1991), “The 8051 Microcontroller: Architecture, Programming, and Applications”,West Publishing Company, 1991
Các file đính kèm theo tài liệu này:
- giao_trinh_thuc_hanh_vi_xu_ly_truong_dai_hoc_su_pham_ky_thua.pdf