Giáo trình thực hành Vi xử lý - Trường Đại học Sư phạm Kỹ thuật Nam Định

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.

pdf207 trang | Chia sẻ: Tiểu Khải Minh | Ngày: 19/02/2024 | Lượt xem: 102 | Lượt tải: 0download
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:

  • pdfgiao_trinh_thuc_hanh_vi_xu_ly_truong_dai_hoc_su_pham_ky_thua.pdf
Tài liệu liên quan