Tài liệu cơ bản về vi điều khiển PIC.
Tác giả: falleaf Diễn dàn PICVIETNAM.COM Vi iu khin PIC - Học nhanh vào ứng dụng Lời khuyên lựa chọn công cụ làm việc với PIC Mạch nạp: Falleaf PG2C - PIC Tutorial Chương trình nạp: IC - PROG Bootloader: Tiny bootloader Debugger: ICD2 Clone Chương trình dịch: MPLAB IDE - CCS C Lựa chọn PIC: - Mới học: PIC16F628A PIC16F88 - Học tổng hợp: PIC16F877A - Làm đề tài: PIC16F876A - Cần mạnh hơn: PIC18F458 Các loại dùng PG2C IC-PROG 1.05D - Điều khiển động cơ: PIC18F4331, PIC18F4431 (ICD2) - Lập trình thuật tốn: dsPIC30Fxxxx (dùng ICD2) Để tránh thời gian câu hỏi thường lặp lặp lại PIC, bạn học PIC lưu ý viết Bài viết update liên tục có thơng tin 0) Một vài điều PIC - PIC16F84 dòng PIC phổ biến khuyến khích cho người học Tuy nhiên, gần đây, dòng PIC16F628A đời, giá thấp hơn, nhiều chức hơn, thực dịng PIC Flash Nó hầu hết chun gia khuyên dùng để bắt đầu thực hành PIC Hầu hết tutorial bắt đầu chọn PIC16F628A Tuy nhiên, dòng PIC16F88 đời, đời PIC16F628A, PIC16F88 có nhiều chức PIC16F628A, giá không chênh lệch bao (khoảng 5000 đến 10000 đồng Việt Nam), hỗ trợ gần toàn chức vi điều khiển đại Do vậy, khuyên bạn nên chọn PIC16F628A PIC16F88 để bắt đầu học PIC Thời điểm tháng 05 năm 2005 - Giá dòng PIC 18 chân dao động từ 20.000 đồng đến 50.000 đồng - Giá dòng PIC16Fxxxx dao động từ 40.000 đồng đến 150.000 đồng - Giá dòng PIC18Fxxxx dao động từ 100.000 đồng đến 300.000 đồng - Giá dòng dsPIC dao động từ 150.000 đồng đến 350.000 đồng - Giá dòng rfPIC dao động từ 50.000 đồng đến 100.000 đồng Đánh giá dòng PIC - Dòng PIC nhiều chân dịng PIC18Fxxxx, có số chân lên đến 80 chân - Dịng PIC chân dịng PIC10Fxxx, có chân - Dịng PIC phổ biến dịng PIC16F877A (đủ mạnh tính năng, 40 chân, nhớ đủ cho hầu hết ứng dụng thông thường) - Dịng PIC mà chúng tơi đánh giá cao dịng PIC16F876A (28 chân, chức khơng khác so với PIC16F877A, nhỏ gọn nhiều, số chân khơng q PIC16F88) - Dịng PIC hỗ trợ giao tiếp USB dòng PIC18F2550 PIC18F4550 - Dòng PIC điều khiển động mạnh dịng PIC18F4x31 - Khi cho chun nghiệp hơn, bạn nên dùng PIC18F458 - dsPIC khuyên không nên dùng không nên nghĩ tới học, thân chúng tơi chưa có điều kiện làm việc với dsPIC lập trình dsPIC hồn tồn giống với PIC thơng thường - Dịng PIC tàng hình dịng PIC17xxxxx, khụng cũn c sn xut Su tầm biên soạn:linhnc308@yhoo.com Tác giả: falleaf Diễn dàn PICVIETNAM.COM 1) Mch nạp PIC, Bootloaders chương trình nạp tương ứng Mạch nạp http://www.olimex.com/ Trang web cung cấp nhiều loại mạch nạp PIC, có sơ đồ nguyên lý đầy đủ, tất hướng dẫn liên quan đến việc cài đặt sử dụng mạch nạp Trong tài liệu hướng dẫn PIC Tutorial, chọn sử dụng mạch nạp PG2C để hướng dẫn http://siscobf.webcindario.com/winpic800.htm Hơi khó coi chút tiếng Tây Ban Nha hay đó? Nhưng khơng vấn đề gì, bạn download về, tự động hiểu phải làm Tơi chủ trương, người chưa biết dùng PG2C In Circuit Debugger http://www.stolz.de.be/ ICD2 Clone, nạp hầu hết loại PIC có, hỗ trợ debug mạch quan trọng nạp cho dòng dsPIC30F Bootloader http://www.ac.ugal.ro/staff/ckiku/software/picbootloader.htm Đây tinybootloader, bootloader xịn mà biết http://www.dontronics.com/rfarmer.html http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en 012031 Microchip bootloader, hỗ trợ dòng 16F, bootloader thức hãng, cung cấp miễn phí Chương trình nạp http://www.ic-prog.com/ 2) Các chương trình dịch Chương trình MPLAB IDE : http://www.microchip.com/ Chương trình CCS C (phiên 3.222 có crack): download Chương trình HT PIC (phiên 8.05PL2 ngày 27/9/2004, có crack): download Chương trình HT PIC18 (phiên demo): http://www.hitech.com/ Hướng dẫn cài đặt: MPLAB, CCS C, HT PIC, HT PIC18 , download tất 3) Các tài liệu hướng dẫn - Chúng tơi đăng tồn văn tài liệu hướng dẫn luồng TÀI LIỆU HƯỚNG DẪN TIẾNG ANH để bạn tiện download Lưu ý rằng, đăng tài liệu file pdf để thuận tiện cho việc download, đọc máy in ấn Chúng khơng muốn đăng file doc lý khơng muốn bạn học thuận tay copy and paste Chúng hy vọng thời gian đầu học, bạn nên kiên nhẫn học dịng lệnh, cách trình bày để hiểu rõ nội dung Ngoài ra, theo đánh giá cá nhân, tài liệu hướng dẫn không giống thư viện source code, cách thực tối ưu hoá đề tài một, nên không phù hợp với bạn học - Tài liệu hướng dẫn tiếng Việt thực hiện, đăng phần luồng TÀI LIỆU HƯỚNG DẪN TIẾNG VIỆT Tài liệu cung cấp dạng file pdf để tránh chép, lý chúng tơi muốn soạn thảo hoàn thiện tài liệu trước cơng bố, mục đích diễn đàn picvietnam 4) Hướng dẫn mạch nạp Falleaf PG2C - PIC Tutorial - Tài liệu hướng dẫn đăng luồng Falleaf PG2C - PIC Tutorial - Các bạn tìm mua mạch nạp đĩa CD kèm thông qua phungtbinh@yahoo.com (Hà Nội) myfrienddang@yahoo.com (TPHCM) với giá 35.000 đồng/bộ 5) Các địa tìm source code PIC http://www.piclist.com/ (địa nhiều source code PIC đời) 6) Các forum tiếng Anh PIC - Forum chuyên MPASM, có tham gia Nigel Goodwin: http://www.electro-tech-online.com/ - Forum chuyên CCS C, CCS C info xây dựng: http://www.ccsinfo.com/forum/viewforum.php?f=1 - Forum hướng dẫn Olimex SparkFun: http://www.sparkfun.com/ Trang web hướng dẫn mạch Olimex cung cấp, hay nói cỏch khỏc SparkFun l forum Su tầm biên soạn:linhnc308@yhoo.com Tác giả: falleaf Diễn dàn PICVIETNAM.COM ca Olimex 7) http://www.microchip.com/ Trang web Microchip PIC, cung cấp: - datasheet - diễn đàn Microchip PIC (nhưng không sôi lắm) - môi trường soạn thảo trình dịch MPLAB (ln có phiên nhất) - bán linh kiện (PIC, dsPIC, rfPIC, mạch nạp, chương trình dịch, linh kiện analog ) - bootloader thức PIC dùng cho 16F877A 16F876A 8) Một số trang web mua bán công cụ hỗ trợ PIC, sản phẩm từ PIC http://www.ccsinfo.com/ (bán chương trình CCS C cho PIC) http://www.dontronics.com/dt101.html (bán số sản phẩm điện tử) http://www.digikey.com/ (bán số sản phẩm điện tử) http://www.phanderson.com/PIC/PICC/index.html (địa mua trình dịch thư viện source code) http://www.diendandientu.com/ (trong luồng Mua Bán Linh Kiện có số người buôn bán lẻ sản phẩm PIC) 9) Các đề tài thực với PIC http://www.bobblick.com/techref/projects/propclock/propclock.html Đồng hồ quay, dùng đèn led tượng lưu ảnh để hiển thị giờ, dùng tín hiệu xung mấu rotor để xác định thời gian hiển thị http://www.seattlerobotics.org/encoder/may97/picchip.html 10) Email hỗ trợ thực hành PIC Các bạn email cho gặp vấn đề cần tư vấn PIC qua địa chỉ: falleaf.pic@gmail.com Khi gửi email, mong bạn gửi kèm theo mạch nguyên lý, chương trình thực hiện, thông tin như: bạn sử dụng hệ điều hành gì? bạn dùng mạch nạp nào? bạn dùng chương trình dịch gì? bạn dùng chương trình nạp gì? Các lỗi báo cụ thể tất nhiên vấn đề bạn muốn hỏi Tôi không hứa trả lời tất email bạn, nhiên bạn cố gắng để giúp đỡ bạn thực đề tài vi điều khiển PIC Ngoài ra, chúng tơi thích trao đổi quan điểm thiết kế, ý tưởng sáng tạo PIC, robotics, haptic device, biomedical equipements, radio frequency devices Chúng mong có ủng hộ chia sẻ ca cỏc bn Su tầm biên soạn:linhnc308@yhoo.com Tác giả: falleaf Diễn dàn PICVIETNAM.COM Cơ pic Dưới hình mạch chạy PIC16F84A, PIC16F628A PIC16F88 Tất PIC có vị trí chân tương ứng nhau, chí nói PIC16F628A tương thích PIC16F84A PIC16F88 tương thích với hai loại cịn lại Có nghĩa ứng dụng PIC16F84A, thay đổi PIC16F88, hay PIC16F628A Tất nhiên, loại vi dòng PIC tương thích với nhiều dịng PIC cũ hơn, thị trường PIC Việt Nam phổ biến với loại PIC này, đề cập đến loại PIC mà Sau bạn có mạch nạp, chương trình nạp, MPLAB IDE, CCS C HT PIC, bạn làm mạch chạy Kể từ thiết kế cách mạch test, thiết bị ngoại vi khác, cần thử nghiệm, bạn việc thiết kế mạch ngồi, sau cắm vào chân chạy thử Khi mạch chạy tốt, bạn muốn thiết kế hoàn chỉnh, bạn việc copy mạch chạy từ Orcad dán vào mạch nguyên lý thiết bị bạn Xoá chân header đi, nối dây vào mạch chạy PIC Như vậy, tốn thời gian thiết kế cho PIC Một vài điểm lưu ý mạch sau: - Nguồn dùng cho PIC, tuyệt đối không dùng nguồn cho thiết bị ngoại vi Nếu thiết bị ngoại vi cần nguồn, bạn thiết kế nguồn riêng Một số thiết bị ngoại vi đơn giản, tốn dịng, bạn dùng nguồn chung (khoảng 100mA) - Tơi khơng khuyến khích dùng dao động nội PIC, dao động nội chạy 4MHz, khơng ổn định dùng thạch anh ngồi Một số đề tài công nghiệp, họ dùng thạch anh chuẩn công nghiệp chân, nên tạo thói quen dùng thạch anh ngồi, khơng cần q tận dụng chân PIC - Mạch reset mạch reset đơn giản PIC, tạo chế reset power on Mt s ng Su tầm biên soạn:linhnc308@yhoo.com Tác giả: falleaf Diễn dàn PICVIETNAM.COM dụng PIC yêu cần mạch brownout reset, bạn tham khảo datasheet Nhưng tơi thiết nghĩ, đề tài thông thường, không cần dùng mạch brownout reset - Chúng ta thống chuẩn thiết kế cho header nối vào chân PIC theo thứ tự hai chân Rx0 GND Mục đích để chạy mạch in, chân GND xếp phía ngồi, chân Rx0 để quy định cho tất port khác nhau, có port có chân, có port chân, chân Nếu lấy chân RB7 làm chuẩn chẳng hạn, khó giải thích lấy chân RA4 đặt phía ngồi Vì RA0 RB0 lấy làm chuẩn Điều thực số tutorial, gần quy ước bất thành văn thực mạch phát triển cho vi điều khiển Chân VDD (5V) nối vào, nhằm sử dụng cho ứng dụng cần có điện áp ngõ vào, khơng cao nói (100mA) Tuyệt đối khơng thiết kế chân VSS (GND) chân VDD (5V) hai đầu header, tránh tình trạng đơi khơng để ý cắm nhầm, làm hỏng PIC, hỏng thiết bị ngoại vi - Các nút bấm công tắc, thiết kế nút bấm chân, thị trường bán loại nút bấm này, loại nút bấm chắn loại chân trước Các bạn lưu ý sau thiết kế nút bấm nên thiết kế nút bấm chân - Con ổn áp 78L05 khác với 7805 Nó dạng TO92, tức giống transistor thông thường, nên nhỏ, dạng chân có tản nhiệt phía sau 7805 Do vậy, mạch thiết kế nhỏ nhiều - Ở đây, không chạy mạch in, tơi muốn dành cơng việc cho bạn sinh viên học Sau bạn làm xong mạch in, bạn chia sẻ với chúng tơi thật tuyệt vời Chỉ có điều lưu ý là, thường khơng cắm trực tiếp vi điều khiển vào mạch để hàn, mà cắm qua socket để gỡ lập trình lại, để đảm bảo khơng bị cháy PIC hàn Do vậy, cắm socket, bạn nhét hai tụ nối thạch anh vào bên socket, cắm PIC lên, che hai tụ đi, mạch bạn gọn gàng Socket loại 18 chân nhét thạch anh điện trở nối từ chân MCLR đến VDD vào bên được, sau dùng PIC 28 40 chân, bạn nên nhét tất vào bên socket mạch gọn gàng - Một điểm cuối cùng, không thiết kế phần nạp ICSP, chúng tơi khơng muốn làm cho bạn học PIC cảm thấy bối rối Chúng ta thực mạch chạy PIC với chân ICSP bootloader sau Su tầm biên soạn:linhnc308@yhoo.com Tác giả: falleaf – DiƠn dµn PICVIETNAM.COM Học vi điều khiển PIC ngày Bài tập 1: Bật tắt đèn LED Cực dương LED nối với điện trở, điện trở nối với chân vi điều khiển Cực âm LED nối với GND vi điều khiển Như vậy, chân vi điều khiển mức cao, tức 5V, đèn LED sáng Khi chân vi điều khiển mức thấp (0V) đèn LED tắt Lưu ý hình: Giá trị điện trở xác định dựa vào dòng tối đa vi điều khiển, điện áp dòng điện tối đa đèn LED Như vậy, giá trị nhỏ điện trở dùng tính tốn hình R = 125 Ohm Tuy nhiên, để đảm bảo hoạt động đèn LED, nâng giá trị điện trở lên thành 200 Ohm Đèn LED sáng quá, cần sờ tay vào nó, va chạm mạnh, trường hợp bị tĩnh điện, đèn LED bị hư Hiện tượng dễ thấy LED cực sáng dùng bảng hiệu biển báo giao thông, đèn LED cực sáng cần chạm tay vào, có tượng tĩnh điện nổ Với LED thường dùng thí nghiệm, khó xảy tượng này, nhiên chất lượng sản xuất đèn LED không đảm bảo, chọn giải pháp an tồn hết Hơn nữa, khơng cần đèn LED sáng Để bắt đầu tập 1, tìm hiểu sơ qua cấu trúc chương trình viết MPASM sau: Bất chương trình ASM nào, bắt đầu việc giới thiệu chương trình, tên chương trình, người thực chương trình, ngày thực chương trình, ngày hồn tất, người kiểm tra lại chương trình, ngày kiểm tra chương trình, phiên chương trình, mơ tả phần cứng mạch giao tiếp số thích Vì vậy, tơi đưa form mà cho hợp lý, từ sau, bạn cần cắt dán form này, thay đổi nội dung mục để làm phần mở đầu Chúng ta quy định số quy ước sau: ;========== dùng để phân cách phần chương trình ; dùng để phân cách chương trình chương trình S−u tÇm biên soạn:linhnc308@yhoo.com Tác giả: falleaf Diễn dàn PICVIETNAM.COM Code: ;================================================= ======= ; Ten chuong trinh : Mach test den LED_1 ; Nguoi thuc hien : Falleaf ; Ngay thuc hien : 23/05/2005 ; Phien ban : 1.0 ; Mo ta phan cung : Dung PIC16F628A - thach anh 10MHz ; : LED giao tiep voi PORTB ; : Cuc am cua LED noi voi GND ; : RB0 - RB7 la cac chan output ; -; Ngay hoan : 23/05/2005 ; Ngay kiem tra : 23/05/2005 ; Nguoi kiem tra : Doan Hiep ; -; Chu thich : Mo ta cac diem khac cua cac phien ban khac ; : hoac cac chu thich khac ; : vd, dung che Power On Reset, PORTB = 00000000 ; : hoac, chuong trinh viet cho PIC Tutorial ; : hoac, chuong trinh hoan toan mien phi va co the dung cho ; : moi muc dich khac ;================================================= ======= Mặc dù chưa đoạn thích ngắn chương trình bạn viết, việc viết thích dài việc viết chương trình? Khơng, thực thích quan trọng, sau 1, 2, năm, bạn nhìn lại, bạn cịn hiểu làm Có thể bắt đầu, bạn thấy công việc ghi nhàm chán, vậy, tơi cung cấp form ghi này, bạn sau cần cắt dán Tơi hy vọng bạn nên tạo thói quen đưa đoạn thích vào chương trình để bạn trở nên chuyên nghiệp làm việc với vi điều khiển, cụ thể PIC Tất nhiên, học đầu tiên, thích ghi chi tiết, mô tả phần cứng Sau này, với mạch phức tạp hơn, bạn ghi chi tiết được, bạn ghi điểm thơi Cũng tất nhiên, lập trình với CCS C hay HT PIC, bạn nên ghi chương trình chính, chưa bàn đến CCS C HT PIC Phần thứ hai bạn cần học, khởi tạo PIC Phần phần bắt buộc theo sau phần ghi chú, chương trình dịch cần phải hiểu bạn làm việc với PIC nào, làm việc với nào? Code: ;================================================= ====== TITLE "Mach test LED_1" PROCESSOR P16F628A INCLUDE CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF &_HS_OSC ;================================================= ====== Các bạn thấy có số từ khố sau: TITLE: dùng để bạn ghi thích tên chương trình TITLE ten chương trình Cú pháp ghi TITLE Nhớ phải có dấu nháy kép viết tên chương trình PROCESSOR: dùng để khai báo dịng vi điều khiển mà bạn sử dụng Các bạn lưu ý, MPLAB quy định, không viết đầy đủ tên PIC16F628A mà viết P16F628A, chương trình dịch quy định INCLUDE: dùng để đưa thêm vào file mà bạn viết chương trình Mặc định, MPLAB đường dẫn đến thư mục chứa file P16F628A.inc có sẵn Nếu bạn đặt file nơi khác khơng phi Su tầm biên soạn:linhnc308@yhoo.com Tác giả: falleaf – DiƠn dµn PICVIETNAM.COM thư mục bạn làm việc, file include khong phải file inc có sẵn MPLAB, bạn phải đường dẫn rõ ràng Lưu ý rằng, để MPASM dịch được, bạn phải đặt đường dẫn từ thư mục gốc đến hết tên file (kể phần mở rộng file) không 60 ký tự CONFIG: dùng để thiết lập chế độ hoạt động PIC Các bạn xem để hiểu thêm chế độ hoạt động tài liệu PICmicro Mid Range MCU Family Reference Manual Section 27 Device Configuration Bits Table 27-1 page 27-7 Tài liệu download trang web microchip http://www.microchip.com/, keyword: MidRange Manual Mỗi directive để đặt chế độ, cách ký tự & Nếu ghi chế độ hoạt động vào đây, chế độ hoạt động trạng thái mặc định khởi động Các bạn có cách khác để đặt chế độ hoạt động cách tác động trực tiếp vào ghi khởi tạo Tuy nhiên, việc việc làm không cần thiết, có directive để viết tắt Như vậy, đặt chế độ _CP_OFF, tức khôngđặt chế độ bảo vệ source code nạp vào PIC, sau nạp vào đọc ngược lại từ PIC Chúng ta không cần bảo vệ chương trình này, để bạn đọc ngược IC-PROG kiểm tra lại Chế độ _PWRITE_ON, tức cho timer chạy Power On Reset Thực timer0 có chạy hay khơng khơng quan trọng, chẳng liên quan đến cơng việc Nếu sau muốn dùng timer0, bạn phải khởi tạo lại giá trị cho nó, đâu thể sử dụng giá trị ngẫu nhiên được, thành chạy, sau cần dùng khỏi phải khởi tạo _WDT_OFF, thời điểm này, tơi tắt Watch Dog Timer lý bạn chưa nên tìm hiểu phần vội _HS_OSC, dùng thạch anh 10MHz, tức chạy chế độ dao động HS Tham khảo tại: datasheet PIC16F628A Section 14 Special Features of the CPU 14.2 Oscillator Configuration Page 95 Một điểm lưu ý cuối bạn phải sử dụng phím TAB để phân cách cột chương trình viết MPASM Các dịng khởi tạo viết cột thứ Các directive CONFIG, TITLE, PROCESSOR, INCLUDE viết vào cột thứ Còn chi tiết khởi tạo viết vào cột thứ tư Cột thứ dùng để viết [NHÃN], cột thứ hai để viết mã lệnh, cột thứ ba lại dùng để viết chi tiết tham số lệnh, cột thứ tư bỏ trống để tạo khoảng cách với cột thứ năm Cột thứ năm dùng để viết thích Các thích bắt đầu dấu chấm phẩy ( Trên dòng, tất ký tự viết sau dấu chấm phẩy vơ nghĩa Chính vậy, viết phần thích ban đầu, bạn thấy tất nội dung bắt đầu dấu chấm phẩy Như vậy, dòng lệnh cụ thể sau: Code: NHÃN LỆNH thamso1, thamso2 ; thích dịng lệnh Bây dành chút thời gian cho lý thuyết, bạn mở datasheet PIC16F628A trang 15, Section Memory Organization Chúng ta thấy tổ chức nhớ chương trình PIC chia làm phần sau: - Pointer - Stack - Interrupt vector - Program memory S−u tÇm biên soạn:linhnc308@yhoo.com Tác giả: falleaf Diễn dàn PICVIETNAM.COM Chúng ta tạm thời chưa bàn đến pointer stack Interrupt vector đặt địa 0x0004 Program memory đặt địa 0x0005 Vậy từ địa 0x0000 đến địa 0x0003 làm gì? Khi PIC reset, nhảy địa 0x0000 Rồi sau chu kỳ máy, nhảy đến địa tiếp theo, xem xem địa u cầu làm gì, thực việc đó, xong lại nhảy tiếp Cứ làm hết chương trình Tất nhiên, thực số lệnh điều khiển vị trí nhảy, nhảy khơng theo thứ tự nữa, việc chưa bàn vội Chúng ta trước mắt cần biết nhảy hết chương trình Như vậy, khơng sử dụng ngắt, viết chương trình từ địa 0x0000 ln, nhảy từ 0x0000 khởi động, hết chương trình Tuy nhiên, làm vậy, sau sử dụng chương trình ngắt, gặp trục trặc thói quen viết từ địa 0x0000 Chính vậy, nên đặt chương trình phần Program Memory ý đồ thiết kế PIC Vậy, chương trình viết sau: Code: ;================================================= ORG 0x0000 GOTO MAIN ORG =================== 0x0005 MAIN END ;================================================= =================== Đây cấu trúc chương trình mà thực Directive ORG dùng để xác định địa mà làm việc Bây xem tiếp đến trang 16 datasheet Chúng ta thấy rằng, nhớ liệu PIC16F628A chia thành BANK, hay gọi tiếng Việt BĂNG Trong băng này, thấy rõ chia làm phần Phần thứ phần ghi có địa xác định (được ghi bên cạnh) có tên tuổi rõ ràng Những ghi gọi ghi đặc biệt PIC Tên chúng, thực khơng có, ghi xác định địa ghi mà Tuy nhiên, làm động tác include file P16F628A.inc, file định nghĩa sẵn tên ghi này, quy ước MPLAB, đồng thời quy ước chung cho tất người dùng PIC Chúng ta thay đổi, sửa chữa định nghĩa này, nhiên việc làm vừa không cần thiết, lại vừa gây nhiều khó khăn làm việc nhóm Vậy bạn phải hiểu, tên ghi xem không thay đổi PIC, sử dụng nó tồn vài chục năm Phần thứ hai, phần General Purpose Register Chúng ta gọi Thanh Ghi Dùng Chung Những ghi chưa định nghĩa, khơng có tên Những ghi có giá trị biến chương trình mà sử dụng Phần thứ ba, ghi nằm địa 70h đến 7Fh, vị trí tương ứng băng 1, 2, Các ghi tương ứng bank1, 2, tương thích với ghi từ 70h đến 7Fh băng Tuy nhiên, tạm thời chưa quan tâm đến phần Bây học viết chương trình Code: ;================================================= ORG 0x0000 GOTO MAIN ORG ============================== 0x0005 MAIN Su tầm biên soạn:linhnc308@yhoo.com Tác giả: falleaf Diễn dàn PICVIETNAM.COM BANKSEL TRISB CLRF TRISB ; bank select ; trisb = 00000000 ; portb = output BANKSEL PORTB BSF PORTB, ; rb0 = ; RB0 = 5V GOTO $ ; dung chuong trinh tai day ; vong lap tai cho^~ ; khong bao gio ket thuc END ; lenh bat buoc de ket thuc ;================================================= =============================== Rồi, vậy, thực xong chương trình viết MPASM cho PIC16F628A Phân tích chương trình, thấy, khởi động, chương trình gặp lệnh goto main, nhảy đến nhãn MAIN Ở nhãn MAIN, gặp lệnh banksel, tức lệnh bank select Có nghĩa chuyển sang hoạt động băng có chứa ghi TRISB Vì sao? Bởi ban đầu khởi động, PIC nằm băng Nhưng ghi TRISB lại nằm băng 1, cần phải chuyển sang băng để làm việc Thực có cách để yêu cầu PIC chuyển sang băng cách đích danh, khơng phải chuyển sang băng có ghi trisb vừa làm Nhưng việc không cần thiết, hai việc làm giống Chính vậy, chọn cách viết cho dễ nhớ Sau chuyển sang băng Chúng ta dùng lệnh CLRF để xoá ghi TRISB Tức TRISB = 00000000 Chúng ta lưu ý điều rằng, ghi TRISB có cơng dụng quy định PORTB có chân chân xuất, chân chân nhập Chúng ta nhớ thêm điều nữa, số giống O, số giống chữ I Như vậy, TRISB = 00000000 tức PORTB OOOOOOOO, tức có nghĩa tất chân portB Output Nếu TRISB = 01010101 PORTB OIOIOIOI Có nghĩa RB0 Input, RB1 Output, RB2 Input, RB3 Output RB7 Output Lưu ý RB0 đến RB7 tính từ phải sang trái Sau đó, lại thực lệnh Banksel portb, tức lại nhảy băng (băng chứa ghi portb) Tất lệnh làm thay đổi giá trị ghi portb, làm thay đổi tín hiệu điện bên chân PORT B Sau chuyển sang băng 0, thực lệnh BSF PORTB,0 Có nghĩa set bit vị trí portb, tức cho RB0 = Có nghĩa ngồi chân RB0 mang giá trị điện áp 5V Khi đó, đèn LED nối với RB0 sáng Các bạn thấy mach hoạt động này: Khi bật điện lên, PIC reset Nó bật sáng đèn LED RB0, sau giữ ngun vậy, khơng làm Bây bạn lưu chương trình vừa viết thành LED_1.asm vào thư mục Nhấn Alt - F10, chương trình dịch LED_1.asm thành LED_1.hex Các bạn dùng mạch nạp PG2C chương trình nạp IC-PROG để nạp vào PIC (tham khảo Hướng dẫn mạch nạp Falleaf PG2C - PIC Tutorial) Công việc bạn sau: 0) Chạy thử chương trình ban đầu 1) Thay đổi lệnh BSF PORTB, lệnh BSF PORTB, Nạp lại chương trình vào PIC Bạn thấy đèn LED không sáng vị trí RB0 mà sáng vị trí RB1 2) Thay lệnh BSF PORTB,0 đoạn lệnh MOVLW b'11110000' MOVWF PORTB Bạn thấy các chân từ RB0 đến RB3 tắt đèn, chân từ RB4 đến RB7 đèn sáng 3) Bạn thay lệnh CLRF TRISB đoạn lệnh CLRF TRISB BSF TRISB, giữ nguyên lệnh BSF PORTB, Các bạn thấy đèn LED trường hợp không sáng Bởi bạn làm cho TRISB = 00000001 Như vậy, RB0 trở thành chân Input Khi RB0 trở thành chân Input, lệnh BSF PORTB, khơng cịn tác dụng RB0 lúc khơng thể thay đổi giá trị chương trình, nhận giá trị điện áp từ bên vào Su tầm biên soạn:linhnc308@yhoo.com 10 Tác giả: falleaf DiƠn dµn PICVIETNAM.COM Bµi - DELAY FUNCTION Qua học thứ nhất, học cách bật tắt đèn LED Bây muốn làm cho đèn LED nhấp nháy, có nghĩa bật đèn LED, sau chờ khoảng thời gian, tắt đèn led đi, sau lại chờ khoảng thời gian lại bật đèn led lên Muốn thực việc này, phải tìm cách làm hàm delay (delay - tiếng Anh có nghĩa trễ, chậm lại) Hàm DELAY hàm thơng dụng lập trình thời gian thực Ngun lý hàm delay dùng thời gian thực lệnh vi điều khiển để làm thời gian trễ Như bạn biết (nếu chưa biết biết hihi), lệnh vi điều khiển, thực hiện, cần phải tốn khoảng thời gian Nếu việc làm mà khơng tốn thời gian vơ lý Vậy thời gian thực lệnh PIC bao lâu? Như học đề cập, sử dụng thạch anh từ 4MHz đến 10MHz đến 20MHz Thạch anh tạo dao động xung nhịp xác để trì khoảng thời gian xác định cho vi điều khiển hoạt động Chúng ta xem hình sau để hiểu nguyên lý tạo dao động bên vi điều khiển: Hình 1: Thạch anh tạo dao động chân OSC, đưa vào bên PIC PIC đếm nhịp dao động thạch anh, để thực lệnh Như vậy, thời gian thực lệnh nhịp dao động thạch anh Chúng ta thường gọi thời gian thực lệnh PIC chu kỳ máy (đoạn số hình) Vậy chu kỳ máy bao nhiêu, sử dụng thạch anh 10MHz cho PIC? Code: Tần số dao động thạch anh: F_osc = 10MHz Chu kỳ dao động thạch anh: T_osc = 1/10.000.000 s Chu kỳ máy T_instruction = * T_osc = 4/10.000.000 s = 0.0000004 s = 0.0004 ms = 0.4 us = 400 ns Như vậy, lệnh máy thực vòng 0.4 micro giây, hay 400 nano giây Tương tự, bạn dùng thạch anh 4MHz, chu kỳ máy 1us, dùng thạch anh 20MHz, chu kỳ máy 200 nano giây Quay trở lại với việc cần thực việc giống nhấp nháy đèn LED, cần PIC phải dừng lại, khơng làm để chờ Nếu lệnh NOP (lệnh khơng làm gì) giúp chờ 0.4 us, mà cần chờ giây, viết lệnh NOP cho đủ? Thay vậy, viết vòng lặp vi điều khiển làm việc vơ thưởng vơ phạt N lần, lần tốn T chu kỳ máy Như vậy, sau kết thúc việc làm vô thưởng vơ phạt đó, vi điều khiển chờ N * T chu kỳ máy Để viết vòng lặp vậy, trước tiên học cách đặt biến Một biến đặt PIC, thực chất tên gọi chung cho nhiều ghi giá trị Trong phần này, đơn giản làm đặt biến có nghĩa đặt tên cho ghi Thực ra, hoàn toàn khơng cần đặt tên, mà gọi trực tiếp địa ghi, làm vậy, sau này, chương trình phức tạp dần lên, dễ bị lẫn lộn biến Khi đặt biến, ghi nằm đâu? Nó nằm nhớ chương trình cụ thể, S−u tÇm biên soạn:linhnc308@yhoo.com 14 Tác giả: falleaf Diễn dàn PICVIETNAM.COM nằm vùng nhớ dùng chung mà đề cập học trước Vậy làm để đặt biến? Có nhiều cách đặt biến, phần này, hướng dẫn bạn cách đặt biến mà cho rõ ràng Code: ;================================================= ================= ORG 0x020 COUNT_L RES COUNT_H RES COUNT_N RES 1 ;================================================= ================= Các bạn vừa làm gì? Directive ORG dùng để xác định địa vùng nhớ Các bạn lưu ý rằng, xác định địa vùng nhớ đây, bạn xác định địa vùng nhớ liệu, khơng phải địa vùng nhớ lập trình Những bạn viết phía bên dưới, giúp cho trình dịch hiểu bạn làm việc vùng nhớ lập trình, hay vùng nhớ liệu Directive RES quy định việc đặt biến Số phía sau xác định biến có tên COUNT_L chiếm ghi bit, tức byte Tiếp theo, bạn lại đặt biến tên COUNT_H Như vậy, biến COUNT_H chiếm byte Câu hỏi đặt ghi nằm đâu? Các bạn lưu ý, bạn dùng directive ORG, bạn xác định nơi bắt đầu đặt biến Như vậy, biến COUNT_L có độ dài byte, đặt địa 0x020 tức địa vùng nhớ liệu dùng chung băng (20h) Vì COUNT_L chiếm byte Do đó, biến COUNT_H chiếm byte tiếp theo, địa COUNT_H 21h, COUNT_H có byte, ghi địa 21h Đến biến COUNT_N, tương tự, địa 22h Biến COUNT_N chiếm ghi, vậy, biến COUNT_N nằm từ 22h, 23h đến 24h Nếu tiếp tục đặt thêm biến khác, biến địa 25h, Nếu hiểu nôm na theo cách này, bạn dễ hiểu hơn, một giá trị Giá trị nằm ghi liệu (bộ nhớ liệu), nằm lệnh điều khiển (bộ nhớ chương trình) Điều khẳng định rằng, giá trị Một bạn đặt tên đó, để đại diện cho số, có nghĩa thay bạn viết giá trị đó, bạn viết tên đại diện đó, để dễ nhớ Chẳng hạn, bạn viết chữ pi, đại diện cho số có giá trị 3.1415926 Trong đó, bạn đặt biến pi, có nghĩa bạn xác định địa ghi liệu đó, mà bạn truy xuất đến biến pi, có nghĩa bạn thao tác với ghi địa mà biến pi đại diện Ví dụ: bạn đặt biến pi ghi 0x20 chẳng hạn Điều có nghĩa ban làm với biến pi, bạn làm việc với ghi địa 0x20 Nhưng bạn thấy rằng, biến pi số pi có khác nhau? Bây biến pi pi mang giá trị Nhưng bạn nên nhớ, câu lệnh lúc vị trí biến (thanh ghi) F, vị trí số k (trong cấu trúc câu lệnh MPASM, post lại từ dddt) có phân biệt rõ ràng Vậy tùy theo vị trí bạn đặt đâu, biến, Nếu biến, mang giá trị dịa ghi nằm nhớ liệu, hằng, nằm đâu kể nhớ liệu nhớ chương trình Vậy muốn đặt biến băng khác làm nào? Các bạn lấy địa đầu vùng nhớ liệu dùng chung băng viết sau: Code: ;================================================= ORG 0x0A0h COUNT_X RES 10 S−u tÇm biên soạn:linhnc308@yhoo.com 15 Tác giả: falleaf Diễn dàn PICVIETNAM.COM ;================================================= Tóm lại, để chuẩn hố chương trình, bạn chép đoạn code vào, sau khơng cịn phải viết lại nữa: Code: ;================================================= ====================== ; ; Bien nam o Bank0 ; ORG 0x020 COUNT_L RES COUNT_H RES 1 ; -; Bien nam o Bank1 ; -ORG COUNT1_L RES 0x0A0 ; ; Bien nam o Bank2 ; ORG 0x120 ;================================================= ======================= Như vậy, chương trình tổng quát trở thành nào? Code: ;================================================= ; Phần thích ban đầu ; ;================================================= ; Phần khởi tạo vi điều khiển TITLE PROCESSOR INCLUDE CONFIG ======================= ;================================================= ; Phần đặt biến ======================= ======================= ; ; Biến băng ; ORG 0x020 ; -; Biến băng ; -ORG 0x0A0 ; -; Biến băng ; -ORG 0x120 Su tầm biên soạn:linhnc308@yhoo.com 16 Tác giả: falleaf – DiƠn dµn PICVIETNAM.COM ;================================================= ; Phần chương trình ORG 0x0000 GOTO MAIN ORG ======================== 0x0005 MAIN ; dòng lệnh viết END ;================================================= ========================= Như vậy, biết cách viết chương trình đầy đủ dành cho vi điều khiển PIC ngôn ngữ MPASM Các bạn cần ý thêm, phía chỗ biến băng 2, bạn không đặt biến cả, bạn để nguyên vậy, bên dưới, bạn đặt lại địa 0x0000, chẳng ảnh hưởng đến chương trình Cũng giống như, bạn khơng viết đoạn ORG 0x0000 GOTO MAIN, mà bạn để dịng ORG 0x0005 chương trình chạy bình thường Đơn giản từ đoạn 0x0000 đến 0x0004, PIC khơng làm Chúng tơi cố gắng bước hình thành cho bạn kết cấu chương trình viết MPASM, ngày hoàn thiện hơn, để bạn nắm rõ lý chương trình viết vậy, thống với điểm viết chương trình Nếu bạn tin tưởng vào việc tạo chuẩn viết chương trình MPASM cho Việt Nam, bạn người đặt móng cho Tơi có tham vọng này, quy cách ký hiệu cố gắng dùng chuẩn thống nhất, mong bạn làm việc này, để sau tất người làm việc với hiểu truyền tải ý tưởng cách nhanh Kể từ nay, bạn biết cách đặt biến, biết cách viết phần khởi tạo, bàn tới việc viết phần chương trình mà thơi Code: ;================================================= ORG 0x0000 GOTO MAIN MAIN LOOP ORG =========================== 0x0005 BANKSEL TRISB CLRF TRISB MOVLW MOVWF D'255' COUNT_L ; COUNT_L byte BANKSEL PORTB BSF CALL BCF CALL GOTO PORTB, DELAY PORTB, DELAY LOOP ; đặt portb output ;================================================= ; Các chương trình ;================================================= DELAY DECFSZ COUNT_L, GOTO DELAY RETURN ============================ ;================================================= GOTO $ ============================ Su tầm biên soạn:linhnc308@yhoo.com ============================ F 17 Tác giả: falleaf Diễn dàn PICVIETNAM.COM END ;================================================= ============================ Cỏc bạn vừa làm với đoạn chương trình trên? Điểm thứ bạn nên ý, việc tơi thêm phần chương trình vào phần chương trình Phần cuối chương trình tơi ln để GOTO $ kết thúc với lệnh END Tạm thời bạn viết để khoá chương trình dịng GOTO $, chương trình nhảy đến đó, thực vịng lặp vơ chỗ, lệnh END lệnh bắt buộc Việc giúp phần tách rạch ròi phần chương trình chương trình để tránh nhầm lẫn Bởi bắt đầu học bản, cho chương trình bạn viết ngắn, nên chưa xa việc phân bổ vị trí Các bạn đơn giản hiểu cần phải bỏ đoạn chương trình đâu đó, nên tách thêm phần để dành riêng cho việc viết chương trình Việc làm sau có lợi, tạm thời khoan bàn tới, viết Phân tích đoạn chương trình này, thấy chương trình ln bao gồm sau: Code: [NHÃN] câu lệnh RETURN Lưu ý trên, gọi chương trình CALL DELAY Như vậy, việc gọi hàm thực lệnh CALL [NHÃN] Con trỏ chương trình nhảy [NHÃN] gọi Nó thực lệnh nằm từ nhãn trở Thực gặp lệnh RETURN, quay trở thực lệnh bên lệnh CALL Ở đây, gặp phải vấn đề, khái niệm Top of Stack Tuy nhiên, tạm gác lại cho học sau, cịn bạn cần nắm việc thực lệnh CALL kèm với nhãn Con trỏ nhảy tới nhãn thực lệnh bên đó, đến gặp lệnh RETURN nhảy trở vị trí nằm sau lệnh CALL thực tiếp cơng việc làm Vì bỏ qua khái niệm Top of Stack, đề nghị bạn không đặt câu hỏi lệnh thực hiện, lại có lệnh CALL gọi chỗ khác làm nào? Chúng ta giải vấn đề phần sau Thế bên hàm DELAY làm gì? Lưu ý rằng, chương trình chính, sau khởi tạo PORTB ngõ output, bạn thấy ghi giá trị d'255' vào biến COUNT_L Cách viết giá trị sau: b'11001010' để xác định số nhị phân d'234' để xác định số thập phân 0xF3 để xác định số thập lục phân Lưu ý: Số nhị phân có giá trị 1, tối đa dài bit Số thập phân có giá trị từ đến 255, số thập lục phân có giá trị từ 00 đến FF Quay trở lại, biến COUNT_L mang giá trị 255 Khi thực hàm DELAY, bạn thực lệnh DECFSZ (DECrement File, Skip if Zero), có nghĩa giảm giá trị ghi đơn vị Nếu sau giảm xong, mà kết 0, nhảy cách ô nhớ nhớ chương trình, thực lệnh Nếu giá trị sau giảm đơn vị chưa 0, thực lệnh liền kề với Như vậy, vịng lặp thực sau: Code: COUNT_L = 255 (ở đặt) DELAY COUNT_L = COUNT_L - if COUNT_L GOTO DELAY if COUNT_L = RETURN Su tầm biên soạn:linhnc308@yhoo.com 18 Tác giả: falleaf DiƠn dµn PICVIETNAM.COM Code: Lệnh DECFSZ [File], F/W Nếu phía sau dấu phẩy, để W, kết lưu vào ghi W, [File] không thay đổi giá trị hết Nhưng đây, muốn thực đoạn mã giả trên, nên phải để F COUNT_L giảm dần từ 255 đến 1, q trình chạy lên DELAY, giảm COUNT_L đơn vị, xong lại nhảy DELAY, lại thực việc giảm đơn vị COUNT_L Khi COUNT_L = lại giảm đơn vị, lúc COUNT_L = Và khơng thực lệnh GOTO nữa, mà thay lệnh NOP, sau thực lệnh RETURN, có nghĩa quay lại lệnh CALL Như vậy, bạn hiểu rõ hàm DELAY Nhưng quan trọng tính tốn thời gian hao tốn đoạn vòng lặp kể từ bắt đầu thực lệnh CALL, thực muốn muốn biết xác thời gian thực lệnh Thời gian thực lệnh CALL DELAY bao lâu? Lệnh CALL thực tốn chu kỳ máy, ghi (2) Lệnh DECFSZ tốn chu kỳ máy giá trị trả khác Như vậy, trình thực giảm từ 255 xuống 1, thực 255 - = 254 lần Mỗi lần tốn chu kỳ máy, ký hiệu (254) Khi thực lệnh GOTO, lệnh GOTO tốn chu kỳ máy, thực 254 lần, ký hiệu (254 x = 506) Khi COUNT_L = 1, thực lệnh DECFSZ, tốn thêm chu kỳ máy (1) Sau thực lệnh này, kết trả 0, thực lệnh NOP (1), sau thực lệnh RETURN, lệnh RETURN tốn chu kỳ máy (2) Kết quả: (2) + (254) + (508) + (1) + (1) + (2) = 768 chu kỳ máy Nếu dùng thạch anh 10MHz, chu kỳ máy tốn 0.4 us, có nghĩa lệnh CALL DELAY tốn 768 * 0.4 us tức khoảng 1/3000 giây Chúng ta khoan bàn đến việc xa hơn, biết cách tính thời gian hao tốn hàm DELAY Nhưng tính q cơng, chuyển thành cơng thức cụ thể sau: CALL = DELAY (COUNT_L) = [COUNT_L - 1] * (DECFSZ + GOTO) + + RETURN = Các bạn nên nhớ công thức để sau phát triển lên tính cơng thức khác Có lẽ hơm tạm dừng học Các bạn lưu ý, tơi có tính sai đoạn phía trên, qng gà hay đó, tính từ 255 xuống giảm có 253 lần Đúng phải 254 lần Như từ giảm xuống có lần thơi Xin thành thật cáo lỗi với bạn Tổng kết Các bạn học ngày hôm nay? - Các bạn hiểu khái niệm chu kỳ máy, dao động thạch anh tạo ra, PIC thực lệnh vòng dao động thạch anh Như vậy, chu kỳ máy PIC chu kỳ dao động thạch anh nhân với 4, hay tần số PIC tần số thạch anh chia - Các bạn học cách đặt biến chương trình viết MPASM, bạn đặt biến băng bạn muốn - Sau đó, bạn bổ sung phần đặt biến vào sườn chương trình lần trước học, bạn hồn thiện sườn chương trình viết MPASM - Các bạn lại thêm vào sườn chương trình phần chương trình con, tơi thơng báo với bạn bạn thiếu phần ngắt (Interrupt) bảng (Table) nữa, bạn có sườn chương trình viết MPASM hồn chỉnh Các bạn khơng phải đợi lâu để hồn tất sườn chương trình - Các bạn học cách dùng hàm CALL RETURN, ln ln kèm cặp với - Các bạn học thêm lệnh: BCF, CALL, RETURN, DECFSZ Tài liệu tham kho: Su tầm biên soạn:linhnc308@yhoo.com 19 Tác giả: falleaf – DiƠn dµn PICVIETNAM.COM Các bạn tham khảo datasheet PIC16F84A, PIC16F628A PIC16F88 để biết thêm chi tiết cấu trúc nhớ liệu, có có băng 2, có khơng có, có lại có băng 3, băng Nhớ ý phần tập lệnh để đọc hiểu thêm lệnh vừa học (Instruction Set) Các bạn dùng keyword: DELAY để tìm trang http://www.piclist.com/ đoạn chương trình viết hàm DELAY, làm để viết hàm DELAY dài hơn? Lưu ý cuối cùng, bạn chuẩn bị trở thành người viết PIC chuyên nghiệp, đó, bạn cần phải nhớ chân PIC để thiết kế mạch điều khiển, bạn nên in hình sơ đồ chân PIC để dán lên trước bàn làm việc Các bạn download in (có datasheet, muốn gửi trực tiếp cho bạn để bạn đỡ công) Bài tập làm thêm: 1) Các bạn thấy rằng, thời gian DELAY ngắn, thực tế bạn khó thấy đèn LED nhấp nháy Vì vậy, thay viết hàm CALL DELAY, bạn viết dọc 20 dòng CALL DELAY liên tiếp nhau, bạn thấy khác biệt 2) Nhưng viết 20 dịng CALL DELAY viết 20 dịng lệnh NOP, có nghĩa bạn thực vịng lặp, lặp lại 20 lần, vịng lặp bạn thực hàm DELAY Như vậy, bạn phải viết hàm DELAY_NGOAI để bên thực hàm DELAY_TRONG Chính vậy, tơi gợi ý cho bạn tìm trang web http://www.piclist.com/ để tìm source code hàm DELAY, bạn biết phải để viết hàm DELAY chờ lâu Quan trọng bạn phải công thức tính tốn thời gian hàm DELAY mà bạn viết (bài tập tính điểm) 3) Bây bạn điều khiển đèn LED, muốn đèn LED nháy theo thứ tự chẳng hạn, bạn làm nào? (bài tập tính điểm) Ghi chú: (bài tập tính điểm) tập mà cộng đồn vào để tặng PIC cho bạn tham gia giải thông báo việc bán PIC ***** &&& ***** Bài 3: Ngắt (interrupt) Giới thiệu Khái niệm ngắt khái niệm phổ biến tất hệ thống vi điều khiển, vi xử lý máy tính Vậy ngắt gì? Các bạn hình dung hình ảnh xe máy bờ ruộng, đường dài thẳng, nhiên có bò chạy ngang, húc xuống ruộng Cả xe người lao xuống ruộng Chúng ta lồm cồm bò dậy, phủi quần áo, chửi lên chẳng biết chửi ai, đem ơng trời chửi Sau đó, dắt xe máy lên bờ ruộng, chỗ mà bị húc té xuống, lấy xe chạy tiếp Nếu lỡ có bị khác, lại húc Hoạt động ngắt giống vậy, chạy chương trình đó, nhiên có kiện xảy ra, phải dừng việc làm lại, giải việc xảy Cuối cùng, lại quay trở chỗ mà tạm dừng lại lúc tiếp tục công việc làm Khái niệm ngắt đơn giản vậy, nhiên, vi điều khiển nói chung, PIC nói riêng, ngắt nhiều nguồn xảy ra, với nguồn ngắt khác nhau, định trước ngắt làm việc Cũng bờ ruộng, bị bị húc, bị trâu húc, bị vấp cục đã, bị lọt ổ gà Và bị bò húc chửi ơng trời, bị trâu húc mắng ông trăng, bị vấp cục đá tự trách xui xẻo, đến vấp ổ gà vơ nhà thương Các nguồn ngắt PIC: Số lượng loại nguồn ngắt PIC đa dạng, khác dịng PIC Do khơng thể liệt kê hết tất dòng PIC tất loại ngắt dòng Chúng ta đưa sơ đồ tổng quát nguồn ngắt, sâu vào số loại ngắt phổ bin Su tầm biên soạn:linhnc308@yhoo.com 20 ... PICVIETNAM.COM Học vi điều khiển PIC ngày Bài tập 1: Bật tắt đèn LED Cực dương LED nối với điện trở, điện trở nối với chân vi điều khiển Cực âm LED nối với GND vi điều khiển Như vậy, chân vi điều. .. vậy, vi? ??t vòng lặp vi điều khiển làm vi? ??c vơ thưởng vơ phạt N lần, lần tốn T chu kỳ máy Như vậy, sau kết thúc vi? ??c làm vô thưởng vơ phạt đó, vi điều khiển chờ N * T chu kỳ máy Để vi? ??t vòng lặp vậy,... Như vậy, chân vi điều khiển mức cao, tức 5V, đèn LED sáng Khi chân vi điều khiển mức thấp (0V) đèn LED tắt Lưu ý hình: Giá trị điện trở xác định dựa vào dòng tối đa vi điều khiển, điện áp dòng