Lập trình vi điều khiển sẽ tạo ra chương trình điều khiển cho các máy tự động này.Chương trình điều khiển có thể xuất ra tín hiệu số, mạch điện tử chuyển thành tín hiệu tương tự và điều
Trang 1LỜI CẢM ƠN
Trong thời gian nghiên cứu và hoàn thành đề tài, tôi đã nhận được rất nhiều sự đóng góp và giúp đỡ của quý thầy cô, các bạn sinh viên và sự ủng hộ của tất cả những người thân, bạn bè Những sự ủng hộ đó đã giúp tôi rất nhiều
để hoàn thành đề tài của mình
Qua đây, em xin gửi lời cám ơn sâu sắc tới TS.Nguyễn Thế Lâm đã thường xuyên hướng dẫn, động viên và giúp đỡ em Tôi xin cám ơn những người bạn trong nhóm SP2, những người đã cùng tôi vượt mọi khó khăn, thử thách để hoàn thành công việc Em xin chân thành cám ơn các thầy cô giáo trong khoa Vật Lý, các bạn sinh viên đã động viên kịp thời và đặc biệt là có những ý kiến quý báu để em hoàn thành đề tài
Do đây lần đầu tiên tham gia nghiên cứu khoa học, đặc biệt là tiếp cận với công việc lập trình đầy mới mẻ và phức tạp, trình độ hiểu biết chưa sâu nên không tránh khỏi những thiếu sót, hạn chế Tôi rất mong nhận được nhiều
ý kiến đóng góp thiết thức để hoàn thiện hơn
Hà Nội, tháng 5 năm 2011
Sinh Viên
Chu Thị Quý
Trang 2LỜI CAM ĐOAN
Em xin cam đoan đây là công trình nghiên cứu của riêng em Các số liệu, kết quả trong khóa luận là trung thực và chưa từng ai công bố trong bất
cứ công trình nghiên cứu nào khác
Sinh Viên
Chu Thị Quý
Trang 3Chương 1: Giời thiệu chung về hợp ngữ và vi điều khiển AT89C52 6
Chương 2: Kỹ thuật lập trình vi điều khiển trong chế taọ Robot 13 Chương3: Lập trình điều khiển Robot tự động 21
Trang 4MỞ ĐẦU
1 Lý do chọn đề tài
Trong quá trình chế tạo các máy móc tự động thì lập trình vi điều khiển
là phần việc không thể thiếu Lập trình vi điều khiển sẽ tạo ra chương trình điều khiển cho các máy tự động này.Chương trình điều khiển có thể xuất ra tín hiệu số, mạch điện tử chuyển thành tín hiệu tương tự và điều khiển các thiết bị, ngược lại nó có thể nhận tín hiệu từ bên ngoài để xử lý thông qua các cổng ( port) giao tiếp
Chúng ta có thể hình dung trong cỗ máy, phần cơ khí giúp tạo thành hình dáng thì phần điện tử và lập trình sẽ như bộ não để điều khiển những hoạt động Một ưu điểm vượt trội của lập trình vi xử lý đó là chương trình điều khiển có thể thay thế được rất nhiều mạch logic phức tạp với độ chính xác cao, điều này làm cho mạch điện tử đơn giản hơn và đỡ tốn kém trong qua trình chế taọ
Một chương trình điều khiển có thể được viết bằng nhiều ngôn ngữ lập trình khác nhau như Pascal, lập trình C, Assembly,……Với những ngôn ngữ lập trình cấp cao, nó có ưu điểm là dễ viết, dễ hiểu nhưng kích thước của chương trình sẽ lớn khi thực hiện những chương trình cho các máy phức tạp, việc điều khiển sẽ có nhiều Modul, lúc đó có thể kích thước của chương trình
sẽ lớn hơn dung lượng của chíp điều khiển Chính vì lý do đó, chúng ta có thể khắc phục bằng việc sử dụng những ngôn ngữ lập trình cấp thấp như Assembly để viết chương trình
Để một chương trình có thể chạy được, không phải chỉ có chương trình
là đủ, chúng ta còn cần để chíp vi điều khiển để có thể nạp chương trình đã viết vào đó Một chương trình điều khiển sau khi được dịch ra file Hecxa sẽ
Trang 5được nạp vào chíp và chíp này sẽ được gắn với mạch điện tử Hiện nay, chúng
ta thấy rằng có rất nhiều họ vi điều khiển như 8051, 8048, AVR….Nhưng với quá trình thiết kế và chế tạo Robot, chúng tôi đã sử dụng chíp vi điều khiển AT89C52, đây là một chíp đơn có cấu trúc giống họ MCS51, loại chíp này khá phổ biến và thuận tiện khi giao tiếp
Ngày nay, các chíp vi điều khiển được sử dụng rộng rãi trong nhiều sản phẩm khác nhau, đặc biệt là những sản phẩm công nghệ cao như các thiết bị công nghệ, ngoại vi, máy tính, các thiết bị tự động,…
Với mong muốn vận dụng những kiến thức về kỹ thuật điện tử và lập trình, đặc biệt là tiếp cận với lập trình điều khiển chúng tôi đã tham gia chế tạo thành công một số Robot để tham gia Robocon 2011 vừa qua Trong chế tạo Robot đòi hỏi kỹ thuật tổng hợp gồm nhiều phần khác nhau, trong khóa
luận tốt nghiệp của mình, tôi chỉ trình bày một phân nhỏ là : “Lập trình điều
khiển trong chế tạo Robot ”
2 Mục tiêu nghiên cứu đề tài
Nghiên cứu về một lĩnh vực mới, lĩnh vực lập trình điều khiển, áp dụng vào thực tế để có thể chế tạo ra một số thiết bị điều khiển tự động Đồng thời nắm bắt được một số công nghệ chế tạo Robot nhằm phục vụ nhu cầu tự động hóa của xã hội trong tương lai
Trang 6CHƯƠNG 1: GIỚI THIỆU CHUNG VỀ HỢP NGỮ VÀ VI
ĐIỀU KHIỂN AT89C52
1 Giới thiệu tổng quan về hợp ngữ.
Hợp ngữ ( Assembly language) là ngôn ngữ của máy tính, có vị trí ở giữa ngôn ngữ máy và ngôn ngữ cấp cao Ngôn ngữ Assembly gắn liền với ngôn ngữ nhị phân của máy tính, sử dụng các từ đại diện ngắn gọn thay cho các con số nhị phân dài dòng khó hiểu và sẽ được trình dịch hợp ngữ dịch trực tiếp sang mã máy Ngôn ngữ Assembly sử dụng các từ có tính gợi nhớ, các từ viết tắt để ta dễ ghi nhớ các chỉ thị phức tạp và làm cho việc lập trình bằng Assembly dể dàng hơn Mục đích của việc dùng từ gợi nhớ là nhằm thay thế việc lập tình trực tiếp bằng ngôn ngữ máy được sử dụng trong các máy tính đầu tiên thường gặp nhiều lỗi và tốn thời gian Chương trình viết bằng Assembly sẽ có tốc độ cao nhất và dung lượng nhỏ nhất Các ngôn ngữ cấp cao như Pascal , C, hay Visual Basin sử dụng các từ và các phát biểu dễ hiểu đối với con người Một dòng lệnh của ngôn ngữ lập trình cấp cao khi được biên dịch sang hợp ngữ sẽ bao gồm rất nhiều dòng lệnh Ngôn ngữ máy (machine language) là ngôn ngữ ở dạng nhị phân của máy tính Một chương trình được viết bằng ngôn ngữ máy tính là một chuỗi các byte nhị phân biểu diễn các lệnh mà máy tính thực thi được
Như ta đã nói ở trên, hợp ngữ thay thế các mã nhị phân của ngôn ngữ máy tính bằng các mã gợi nhỡ giúp ta dễ nhớ và dễ lập trình hơn.Một chương trình viết bằng hợp ngữ không thể được thực thi trực tiếp bởi máy tính Sau khi được viết xong, chương trình này phải qua quá trình biên dịch thành ngôn ngữ máy Phụ thuộc vào mức độ phức tạp của môi trường lập trình, việc dịch
Trang 7này có thể bao gồm một hoặc nhiều bước tạo ra sản phẩm là chương trình ngôn ngữ máy thực thi được
Như vậy, một chương trình viết bằng hợp ngữ ( gọi tắt là chương trình hợp ngữ) là chương trình được viết dưới dạng các ký hiệu, các mã gợi nhớ, Trong đó mỗi phát biểu tương ứng với một lệnh ngôn ngữ máy Các chương trình được thực thi trực tiếp bởi máy tính Một chương trình viết bằng ngôn ngữ máy ( gọi tắt là ngôn ngữ máy) là chương trình chứa các mã nhị phân biểu diễn các lệnh của máy tính Các chương trình ngôn ngữ máy thường được gọi là chương trình đối tượng hay mã đối tượng được thực thi bởi máy tính
2 Vi điều khiển AT89C52
2.1 Sơ đồ khối
Sau khi lập trình một chương trình điều khiển dưới dạng File Hecxa sẽ được nạp vào chíp vi điều khiển AT89C52 để gắn với mạch điện tử, ta có sơ
đồ khối như sau:
H 1.1: Sơ đồ khối của chương trình dung AT89C52
Một chương trình sau khi được viết dưới dạng file hecxa trên máy vi tính sẽ được nạp vào chíp vi điều khiển thông qua một bộ nạp chíp Sau đó, chíp vi điều khiển sẽ được gắn trực tiếp vào mạch điện tử Chíp vi điều khiển AT89C51 sẽ thông qua các mạch điện tử, điều khiển mọi hoạt động của động
Chương trình
Trang 8cơ robot trong quá trình làm việc Như vậy, chíp vi điều khiển có vị trí rất quan trọng, nó có tác dụng như bộ não của robot vậy
Cấu tạo của vi điều khiển dưới dạng sơ đồ khối:
Xung đếm Các ngắt Thiết bi nối Thiết bị Thời gian ngoài tiếp song song
H1.2: Sơ đồ khối cấu tạo của vi điều khiển AT89C52
Bộ định
thời
Điều khiển ngắt
Giao tiếp nối tiếp
Giao tiếp song song
Bộ nhớ RAM
Bộ nhớ ROM CPU Các bus địa chỉ, dữ liệu, điều khiển
Trang 92.2 Đặc điểm chung của vi điều khiển AT89C52
Vi điều khiển AT89C52 mà chúng ta sử dụng có những đặc điểm sau:
- 4KB ROM bên trong
- 256 Byte ngoài
- 4 Port xuất nhập dữ liệu I/O
- Giao tiếp nối tiếp
- 64 KB vùng nhớ mã ngoài
- 64 Kb vùng nhớ dữ liệu ngoài
- Xử lý Bôlean
2.3 Sơ đồ chân của vi điều khiển At89C52
Trên sơ đồ chân trên có các nhóm chân sau:
Trang 102.3.2 Nhóm chân điều khiển
Nhóm này còn phân biệt các tín hiệu vào, ra
a Nhóm tín hiệu vào điều khiển
+ Xtal l ( chân số 18), Xtal 2( chân số 19): nối tinh thể thạch anh cho máy phát xung nhịp chu trình
+ RST( Reset): (chân số 9) nối chuyển mạch để xóa về trạng thái ban đầu hay khởi động lại
+ /EA/CPP: (chân số 31) chọn bộ nhớ ngoài (nối đất) hay chọn nhớ trong (nối nguồn nuôi 5V)
+ T2 hay P1.0 (chân số 1) tín hiệu vào đếm cho Timer2/ Counter2 của 89C52
+ T2EX: (chân số 2) tín hiệu vào ngắt ngoài 2 cho 89C52
+ /INT 0 hay P3.2: (chân số 12) tín hiệu vào gây ngắt ngoài 0 cho 8051 + /INT 1 hay P3.3: (chân số 13) tín hiệu vào gây ngắt ngoài 1 cho 8051 + T 0 hay P3.4: (chân số 14) tín hiệu vào đếm cho Timer0/ Counter0 + T 1 hay P3.5: (chân số 15) tín hiệu vào đếm cho Timer1/ Counter 1
b Nhóm tín hiệu ra điều khiển
+ ALE//PROG: ( chân số 30) dùng để đưa tín hiệu chốt địa chỉ (ALE) khi có nhớ ngoài hay điều khiển ghi chương trình /PROG
+ /PSEN: ( chân số 29) dùng để đưa tín hiệu điều khiển đọc bộ nhớ chương trình ROM ngoài
+ /WR hay P3.6: (chân số 29) dùng để đưa tín hiệu ghi dữ liệu vào bộ nhớ ngoài
+ /RP hay P3.7:( chân số 17) để đưa tín hiệu đọc dữ liệu từ bộ nhớ ngoài
Trang 11c Nhóm các tín hiệu địa chỉ, dữ liệu
+ Cổng vào, ra địa chỉ/ dữ liệu P0 hay P0.0-P0.7: ( chân số 39-32) dùng
để trao đổi tín hiệu về dữ liệu D0-D7, hoặc đưa ra các địa chỉ thấp (A0-A7) theo chế độ dồn kênh (kết hợp với tín hiệu chốt địa chỉ ALE)
+ Cổng vào ra địa chỉ/ dứ liệu P2 hay P2.0-P2.7: ( chân số 21-28) dùng
để trao đổi tin song song về dữ liệu ( D0-D7) hoặc đưa ra địa chỉ cao ( A15)
A8-+ Cổng vào ra dữ liệu P1 hay P1.0-P1.7: ( chân số 1-8) dùng để trao đổi tin song song dữ liệu ( D0-D7)
+ Cổng vào, ra P3 hay P3.0-P3.7: ( chân số 10-17)
- P3.0: ( chân số 10) đưa ra tín hiệu nhận tin nối tiếp RXD
- P3.1: ( chân số 11) đưa ra tín hiệu truyền tin nối tiếp TXD
- /INT0 hay P3.2: ( chân số 12) tín hiệu vào gây ngắt 0 của VĐK
- /INT1 hay P3.3: ( chân số 13) tín hiệu vào gây ngắt 1 của VĐK
- T0 hay P3.4: ( chân số 14) tín hiệu vào đếm cho Timer0/ Counter0 cho VĐK 8051/8051
- T1 hay P3.5: ( chân số 15) tín hiệu vào đếm cho Timer1/ Counter1 cho VĐK 8051/8052
- /WR hay P3.6: ( chân số 16) để đưa tín hiệu ghi dữ liệu vào bộ nhớ ngoài
- /RD hay P3.7: ( chân số 17) để đưa tín hiệu độ dữ liệu vào bộ nhớ ngoài
- T2 hay P1.0: ( chân số 1) tín hiệu vào đếm cho Timer2/ Counter2 cho VĐK 8052
- T2EX: ( chân số 1) tín hiệu vào gây ngắt 2 của VĐK 8052
Ngoài các tín hiệu chuyên dùng trên, cổng vào/ ra P3 này còn dùng để trao đổi tin về dữ liệu D7-D0
Trang 121.2.4 Vi điều khiển AT89C52
H1.4: Vi điều khiển AT89C52
H1.5: Vi điều khiển AT89S51 H1.6: Vi điều khiển AT89C2051
Trang 13CHƯƠNG 2: KỸ THUẬT LẬP TRÌNH VI ĐIỀU KHIỂN
TRONG CHẾ TẠO ROBOCON
1.Trình dịch hợp ngữ
Trình dịch hợp ngữ ( trình biên dịch) là chương trình dùng để dịch một chương trình hợp ngữ thành chương trình ngôn ngữ máy Chương trình ngôn ngữ máy ( mã đối tượng) có thể ở dạng địa chỉ tuyệt đối ( Absolute) hoặc ở dạng tái định vị ( Relocatetable) Một phần quan trọng trong quá trình dịch là ghi nhận lại các lỗi có trong chương trình nguồn để thông báo lại cho người viết chương trình Trong dạng sau, việc liên kết được yêu cầu để thiết lập địa chỉ tuyệt đối từ đó chương trình được thực thi
Ngày nay, với điều kiện phát triển của khoa học kỹ thuật, đặc biệt là sự phát triển mạnh mẽ của công nghệ thông tin, nhiều phần mềm ( Software) cho phép tạo cả tệp tin nguồn và biên dịch ra file hecxan một cách dễ dàng Và một trong số những phần mềm như thế, đó là phần mềm READS51 mà tôi sẽ giới thiệu cho các bạn ngay sau đây Phần mềm READS51 là phần mềm lập trình hợp ngữ khá phổ biến hiện nay, phần mềm này sẽ chạy trực tiếp trên windown Ưu điểm lớn nhất của chương trình là cho phép thực hiện các thao tác một cách dễ dàng, hơn nữa bạn có thể viết chương trình trực tiếp bằng Assembly hay C Cách thức sử dụng tương đối đơn giản, sau khi cài đặt, bạn
có thể khởi động từ menu Start\Programes\Rigel\Reads51\Reads51, Giao
diện chương trình cũng tương tự như nhiều phần mềm khác bao gồm một cửa
sổ cho phép viết chương trình điều khiển khi chọn chế độ BUILD MODE và đặc biệt bạn có thể kiểm tra tính đúng đắn của chương trình bằng cách chọn chế độ RUN/DEBUG mode, kết quả thực hiện chương trình được hiển thị
Trang 14trực tiếp trên Simulation ( mô phỏng) dưới dạng các LED hiển thị Ngoài ra, phần mềm còn có một hệ thống các câu lệnh tra cứu tương đối đầy đủ dưới dạng file trợ giúp ( help file) Giao diện chương trình như hình dưới đây:
H2.1 Giao diện của chương trình Reads51
Với phần mềm lập trình READS51 này, bạn có thể trực tiếp lập trình trên cửa sổ giao diện và cũng có thể trực tiếp kiểm tra được đúng hay sai Đây
là điều rất thuận lợi trong quá trình lập trình điều khiển
Trang 152 Một số chương trình mẫu
Trong phần này ta nghiên cứu một số chương trình mẫu, minh họa cho lập trình vi điều khiển, nhưng chương trình này tuy đơn giản nhưng đó là những ví dụ cần thiết cho những ai mới bắt đầu tìm hiểu lĩnh vực này
Chương trình nháy 7 LED:
Để có thể thiết kế một bộ mạch đèn nhấp nháy 7LED Bình thường ta
sẽ phải tốn rất nhiều các cổng logic Nhằm hạn chế tối đa số lượng các cổng logic này, chúng ta sẽ thiết kế một chương trình điều khiển đèn như sau:
ORG 00H
MOV A,#01H ; Ghi nội dung 1 vào thanh chứa A
LOOP: RL A ; Dịch trái 1 bit
MOV P2,A ; Xuất nội dung thanh chứa A ra P2
LCALL DELAY ; Gọi thủ tục trễ
SJMP LOOP ; Quay lại vòng lặp
Tạo sóng vuông sử dụng các ngắt do bộ định thời
Viết một chương trình sử dụng bộ định thời 0 và các ngắt để tạo ra một sóng vuông tần số 10KHz trên chân P1.0:
ORG 00H ; Điểm nhập reset
LJMP MAIN ; Nhảy qua khỏi các vector ngắt
ORG 000BH ; Vector ngắt của bộ định thời
Trang 16TOISR:CPL P0.1 ; Lấy bù
RETS
ORG 0030H ;Điểm nhập của chương trình chính
MAIN:MOV TMOD,#02H ;Chế độ 2 của bộ định thời
MOV TH0,#-50 ;Trì hoãn 50
SETB TR0 ;Bộ định thời hoạt động
MOV IE,#82H ;Cho phép ngắt do bộ định thời 0
SJMP $ ;Không làm gì
END
Đây là một chương trình hoàn chỉnh và có thể nạp cho EPROM sau khi
chuyển sang mã nháy Ngay sau khi Reset hệ thống, bộ đếm chương trình PC
được nạp 0000H Lệnh đầu tiên thực hiện là “LJMP MAIN”, lệnh này rẽ
nhánh đến chương trình ở địa chỉ 0030H trong bộ nhớ chương trình Lệnh “MOV IE,#82H” cho phép các ngắt do bộ định thời 0 tạo ra Mỗi lần
- Định thời trong một khoảng thời gian
- Tạo tốc độ Baud cho Port nối tiếp chíp
Việc đếm sự kiện dùng để xác định số lần xuất hiện của một sự kiện
hơn là đo thời gian giữa các sự kiện Đó là tạo ra một kích thích từ bên ngoài,
cung cấp một chuyển trạng thái từ 1 xuống 0 tới một chân của vi điều khiển
Trang 17Chương trình sau sẽ chuyển tín hiệu xuất ra ở chân P1.0 từ 1 về 0 khi chân P3.4 chuyển trạng thái 5 lần từ 1 về 0:
ORG 8100H
MOV TMOD, #05H ; Chọn chế độ tự nạp lại 8 bit và chức
năng đếm SETB TR0 ; Khởi động bộ định thời
SETB P1.0
AGAIN:MOV A, TH0
MOV R6, TL0 ; Số lần xuất hiện sự kiện được lưu
trong R6 CJNE A, TH0, AGAIN
MOV R7, A
CJNE R6, #5, AGAIN
TEST: CLR P1.0
END
Chương trình dò đường cho Robot:
Một chương trình dò đường cho một robot đơn giản có thể thực hiện như chương trình sau:
Trang 19DELAY:MOV TMOD, #01H ; Chế độ định thời 16 bít
MOV R7, #200 ; Nạp giá trị 100 cho R7
LOOP1:MOV TH0, #high (-5000) ; Bye cao của -5000
MOV TL0, #low (-5000) ; Bye thấp của -5000
SETB TR0 ; Bắt đầu định thời
WAIT:JNB TF0, WAIT ; Chờ khi cờ tràn TF0=1
CLR TR0 ; Bộ định thời ngừng hoạt động CLR TF0 ; Xóa cờ tràn TF0
DJNZ R7, LOOP1 ; Giamr R7 và nhảy khi R7=0 RET
END