Vi điều khiển PIC - Học nhanh đi vào ứng dụng

28 773 10
Vi điều khiển PIC - Học nhanh đi vào ứng dụng

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

lap trinh vxl

Tác giả: falleaf Diễn dàn PICVIETNAM.COM Su tầm và biên soạn:linhnc308@yhoo.com 1 Vi iu khin PIC - Hc nhanh i vo ng dng Li khuyờn la chn b cụng c lm vic vi PIC Mch np: Falleaf PG2C - PIC Tutorial Chng trỡnh np: IC - PROG Bootloader: Tiny bootloader Debugger: ICD2 Clone Chng trỡnh dch: MPLAB IDE - CCS C La chn PIC: - Mi hc: PIC16F628A hoc PIC16F88 - Hc tng hp: PIC16F877A - Lm ti: PIC16F876A - Cn mnh hn: PIC18F458 Cỏc loi trờn u cú th dựng PG2C v IC-PROG 1.05D - iu khin ng c: PIC18F4331, PIC18F4431 (ICD2) - Lp trỡnh thut toỏn: dsPIC30Fxxxx (dựng ICD2) trỏnh mt thi gian cỏc cõu hi thng c lp i lp li v PIC, cỏc bn mi hc v PIC lu ý bi vit ny. Bi vit ny s c update liờn tc khi cú cỏc thụng tin mi. 0) Mt vi iu c bn v PIC - PIC16F84 l dũng PIC ph bin nht c khuyn khớch cho nhng ngi mi hc. Tuy nhiờn, gn õy, dũng PIC16F628A ra i, giỏ thp hn, nhiu chc nng hn, v thc s l dũng PIC Flash. Nú c hu ht cỏc chuyờn gia khuyờn dựng bt u thc hnh v PIC. Hu ht cỏc tutorial mi u bt u chn PIC16F628A. Tuy nhiờn, hin nay dũng PIC16F88 mi ra i, cng nh s ra i ca PIC16F628A, PIC16F88 cú nhiu chc nng hn PIC16F628A, giỏ c khụng chờnh lch l bao (khong 5000 n 10000 ng ti Vit Nam), v nú h tr gn nh ton b chc nng ca mt vi iu khin hin i. Do vy, chỳng tụi khuyờn cỏc bn nờn chn PIC16F628A hoc PIC16F88 bt u hc v PIC Thi im thỏng 05 nm 2005 - Giỏ hin nay ca dũng PIC 18 chõn dao ng t 20.000 ng n 50.000 ng mi con - 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 hoc hn - Giỏ dũng rfPIC dao ng t 50.000 ng n 100.000 ng ỏnh giỏ cỏc dũng PIC - Dũng PIC nhiu chõn nht l dũng PIC18Fxxxx, cú nhng con s chõn lờn n 80 chõn - Dũng PIC ớt chõn nht l dũng PIC10Fxxx, ch cú 6 chõn - Dũng PIC ph bin nht l dũng PIC16F877A ( mnh v tớnh nng, 40 chõn, b nh cho hu ht cỏc ng dng thụng thng) - Dũng PIC m chỳng tụi ỏnh giỏ cao nht l dũng PIC16F876A (28 chõn, chc nng khụng khỏc gỡ so vi PIC16F877A, nhng nh gn hn nhiu, v s chõn cng khụng quỏ ớt nh PIC16F88). - Dũng PIC h tr giao tip USB l dũng PIC18F2550 v PIC18F4550 - Dũng PIC iu khin ng c mnh nht l dũng PIC18F4x31 - Khi cho rng mỡnh chuyờn nghip hn, cỏc bn nờn dựng PIC18F458 - dsPIC chỳng tụi khuyờn khụng nờn dựng v khụng nờn ngh ti khi mi hc, bn thõn chỳng tụi cng cha cú iu kin lm vic vi dsPIC mc dự v lp trỡnh thỡ dsPIC hon ton ging vi PIC thụng thng. - Dũng PIC tng hỡnh l dũng PIC17xxxxx, hin nay ó khụng cũn c sn xut Tác giả: falleaf Diễn dàn PICVIETNAM.COM Su tầm và biên soạn:linhnc308@yhoo.com 2 1) Mch np PIC, Bootloaders v cỏc chng trỡnh np tng ng Mch np http://www.olimex.com/ Trang web ny cung cp rt nhiu loi mch np ca PIC, cú s nguyờn lý y , v tt c cỏc hng dn liờn quan n vic ci t v s dng mch np. Trong ti liu hng dn PIC Tutorial, chỳng tụi chn s dng mch np PG2C hng dn. http://siscobf.webcindario.com/winpic800.htm Hi khú coi mt chỳt vỡ nú l ting Tõy Ban Nha hay sao ú? Nhng khụng vn gỡ, cỏc bn download v, t ng s hiu phi lm th no. Tụi vn ch trng, ngi cha bit gỡ dựng PG2C. In Circuit Debugger http://www.stolz.de.be/ ICD2 Clone, np c hu ht cỏc loi PIC hin cú, h tr debug trong mch v quan trng nht l np c cho dũng dsPIC30F Bootloader http://www.ac.ugal.ro/staff/ckiku/software/picbootloader.htm õy l b tinybootloader, l b bootloader xn nht cho n bõy gi m tụi bit. http://www.dontronics.com/rfarmer.html http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en 012031 Microchip bootloader, ch h tr dũng 16F, nhng l bootloader chớnh thc ca hóng, cung cp min phớ Chng trỡnh np http://www.ic-prog.com/ 2) Cỏc chng trỡnh dch Chng trỡnh MPLAB IDE : http://www.microchip.com/ Chng trỡnh CCS C (phiờn bn 3.222 cú crack): download ti õy Chng trỡnh HT PIC (phiờn bn 8.05PL2 ngy 27/9/2004, cú crack): download ti õy Chng trỡnh HT PIC18 (phiờn bn demo): http://www.hitech.com/ Hng dn ci t: MPLAB, CCS C, HT PIC, HT PIC18 , download tt c 3) Cỏc ti liu hng dn - Chỳng tụi ng ton vn cỏc ti liu hng dn trong lung TI LIU HNG DN TING ANH cỏc bn tin download. Lu ý rng, chỳng tụi ng nhng ti liu ny bng file .pdf thun tin cho vic download, c trờn mỏy v in n. Chỳng tụi khụng mun ng file .doc vỡ lý do khụng mun cỏc bn mi hc thun tay copy and paste. Chỳng tụi hy vng rng thi gian u mi hc, cỏc bn nờn kiờn nhn hc tng dũng lnh, cỏch trỡnh by hiu rừ ni dung. Ngoi ra, theo nhng ỏnh giỏ cỏ nhõn, nhng ti liu hng dn ny khụng ging nh mt th vin source code, cỏch thc hin ti u hoỏ tng ti mt, nờn cng khụng phự hp vi cỏc bn mi hc. - Ti liu hng dn ting Vit ang c thc hin, v s ng tng phn trong lung TI LIU HNG DN TING VIT. Ti liu ny cng cung cp dng file .pdf trỏnh sao chộp, vỡ lý do chỳng tụi mun son tho hon thin ti liu ny trc khi cụng b, v õy cng l mc ớch chớnh ca din n picvietnam. 4) Hng dn mch np Falleaf PG2C - PIC Tutorial - Ti liu hng dn ny c ng ti lung Falleaf PG2C - PIC Tutorial - Cỏc bn cú th tỡm mua mch np ny v a CD i kốm thụng qua phungtbinh@yahoo.com (H Ni) myfrienddang@yahoo.com (TPHCM) vi giỏ 35.000 ng/b 5) Cỏc a ch tỡm source code ca PIC http://www.piclist.com/ (a ch nhiu source code ca PIC nht trờn i) 6) Cỏc forum ting Anh v PIC - Forum chuyờn v MPASM, cú s tham gia ca Nigel Goodwin: http://www.electro-tech-online.com/ - Forum chuyờn v CCS C, do chớnh CCS C info xõy dng: http://www.ccsinfo.com/forum/viewforum.php?f=1 - Forum hng dn ca Olimex v SparkFun: http://www.sparkfun.com/ Trang web ny hng dn cỏc mch do Olimex cung cp, hay núi cỏch khỏc SparkFun l forum T¸c gi¶: falleaf – DiÔn dµn PICVIETNAM.COM S−u tÇm vµ biªn so¹n:linhnc308@yhoo.com 3 của Olimex. 7) http://www.microchip.com/ Trang web chính của Microchip PIC, cung cấp: - datasheet - diễn đàn chính của Microchip PIC (nhưng không sôi nổi lắm) - môi trường soạn thảo và trình dịch MPLAB (luôn có phiên bản mới nhất) - bán các linh kiện (PIC, dsPIC, rfPIC, mạch nạp, chương trình dịch, linh kiện analog .) - bootloader chính thức của PIC dùng cho 16F877A và 16F876A 8) Một số trang web mua bán các công cụ hỗ trợ PIC, các 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 một số sản phẩm điện tử) http://www.digikey.com/ (bán một số sản phẩm điện tử) http://www.phanderson.com/PIC/PICC/index.html (địa chỉ mua trình dịch và thư viện source code) http://www.diendandientu.com/ (trong luồng Mua Bán Linh Kiện có một số người buôn bán lẻ các sản phẩm PIC) 9) Các đề tài thực hiện với PIC http://www.bobblick.com/techref/projects/propclock/propclock.html Đồng hồ quay, dùng đèn led và hiện tượng lưu ảnh để hiển thị giờ, dùng tín hiệu xung trên các 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 có thể email cho tôi khi gặp vấn đề cần tư vấn về PIC qua địa chỉ: falleaf.pic@gmail.com Khi gửi email, mong các bạn gửi kèm theo mạch nguyên lý, chương trình đã thực hiện, và các 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ể và tất nhiên các vấn đề các bạn muốn hỏi. Tôi không hứa có thể trả lời tất cả email của các bạn, tuy nhiên tôi và các bạn của tôi sẽ cố gắng hết sức để giúp đỡ các bạn thực hiện đề tài trên vi điều khiển PIC. Ngoài ra, chúng tôi rất thích trao đổi về các quan điểm thiết kế, ý tưởng sáng tạo nhất là về PIC, robotics, haptic device, biomedical equipements, radio frequency devices . Chúng tôi rất mong có được sự ủng hộ và chia sẻ của các bạn. Tác giả: falleaf Diễn dàn PICVIETNAM.COM Su tầm và biên soạn:linhnc308@yhoo.com 4 Cơ bản về pic Di õy l hỡnh mch chy ca PIC16F84A, PIC16F628A v PIC16F88. Tt c cỏc PIC ny u cú v trớ chõn tng ng nhau, v thm chớ cú th núi PIC16F628A tng thớch PIC16F84A v PIC16F88 tng thớch vi hai loi cũn li. Cú ngha l trong cỏc ng dng ca PIC16F84A, khi thay i bng PIC16F88, hay PIC16F628A u c. Tt nhiờn, 3 loi vi dũng PIC trờn õy cú th tng thớch vi nhiu dũng PIC c hn, nhng vỡ th trng PIC Vit Nam ph bin vi 3 loi PIC ny, cho nờn chỳng tụi ch cp n 3 loi PIC ny m thụi. Sau khi cỏc bn cú mch np, chng trỡnh np, MPLAB IDE, CCS C hoc HT PIC, cỏc bn lm mch chy ny. K t õy khi thit k cỏch mch test, hoc cỏc thit b ngoi vi khỏc, cn th nghim, cỏc bn ch vic thit k mch ngoi, sau ú cm vo cỏc chõn ra v chy th. Khi mch chy tt, cỏc bn mun thit k c hon chnh, cỏc bn ch vic copy mch chy t Orcad v dỏn vo mch nguyờn lý ca thit b ca bn. Xoỏ cỏc chõn header i, v ni dõy vo trong mch chy PIC. Nh vy, chỳng ta khụng phi tn thi gian thit k cho PIC na. Mt vi im lu ý v mch nh sau: - Ngun ch dựng cho PIC, tuyt i khụng dựng b ngun ny cho thit b ngoi vi. Nu thit b ngoi vi cn ngun, cỏc bn thit k b ngun riờng. Mt s thit b ngoi vi quỏ n gin, v tn ớt dũng, cỏc bn cú th dựng ngun chung (khong 100mA) - Tụi khụng khuyn khớch dựng dao ng ni ca PIC, bi vỡ dao ng ni ch chy c 4MHz, v khụng n nh nh dựng thch anh ngoi. Mt s ti cụng nghip, h dựng thch anh chun cụng nghip 4 chõn, nờn chỳng ta cng to thúi quen dựng thch anh ngoi, khụng cn quỏ tn dng 2 chõn ca PIC. - Mch reset ny l mch reset n gin nht ca PIC, v to ch reset power on. Mt s ng T¸c gi¶: falleaf – DiÔn dµn PICVIETNAM.COM S−u tÇm vµ biªn so¹n:linhnc308@yhoo.com 5 dụng của PIC yêu cần mạch brownout reset, các bạn có thể tham khảo trong datasheet. Nhưng tôi thiết nghĩ, những đề tài thông thường, không cần dùng mạch brownout reset này. - Chúng ta thống nhất chuẩn thiết kế cho các header là nối vào các chân của PIC theo thứ tự hai chân ngoài cùng là Rx0 và GND. Mục đích là để khi chạy mạch in, chân GND có thể được xếp ra phía ngoài, chân Rx0 để quy định cho tất cả các port khác nhau, có port chỉ có 3 chân, có port 5 chân, 8 chân . Nếu lấy chân RB7 làm chuẩn chẳng hạn, thì sẽ rất khó giải thích khi lấy chân RA4 đặt ra phía ngoài. vậy RA0 và RB0 chúng ta lấy làm chuẩn. Điều này cũng đã được thực hiện trong một số tutorial, và gần như là quy ước bất thành văn khi thực hiện các mạch phát triển cho vi điều khiển. Chân VDD (5V) được nối vào, nhằm sử dụng cho các ứng dụng cần có điện áp ngõ vào, nhưng không cao lắm như ở trên đã nói (100mA). Tuyệt đối không thiết kế chân VSS (GND) và chân VDD (5V) ở hai đầu của header, tránh tình trạng đôi khi chúng ta không để ý cắm nhầm, có thể làm hỏng PIC, hoặc hỏng luôn cả thiết bị ngoại vi. - Các nút bấm và công tắc, tôi thiết kế là các nút bấm 4 chân, hiện nay trên thị trường hầu như chỉ bán loại nút bấm này, và loại nút bấm này chắc chắn hơn loại 2 chân trước đây. Các bạn cũng lưu ý sau này khi thiết kế nút bấm cũng nên thiết kế nút bấm 4 chân. - Con ổn áp 78L05 khác với con 7805. Nó là dạng TO92, tức là nó giống như con transistor thông thường, nên rất nhỏ, chứ không phải dạng 3 chân và có tấm tản nhiệt phía sau như con 7805. Do vậy, mạch thiết kế sẽ nhỏ đi khá nhiều. - Ở đây, tôi không chạy ra mạch in, rằng tôi muốn dành công việc này cho các bạn sinh viên mới học. Sau khi các bạn làm xong mạch in, nếu các bạn có thể chia sẻ với chúng tôi thì thật là tuyệt vời. Chỉ có một điều lưu ý là, chúng ta thường không cắm trực tiếp vi điều khiển vào mạch để hàn, mà chúng ta cắm qua một socket để có thể gỡ ra lập trình lại, và để đảm bảo không bị cháy PIC khi hàn. Do vậy, khi cắm socket, các bạn sẽ có thể nhét hai tụ nối ở thạch anh vào bên trong socket, khi cắm PIC lên, nó sẽ che hai cái tụ đó đi, và mạch của các bạn sẽ gọn gàng hơn. Socket loại 18 chân không thể nhét thạch anh và điện trở nối từ chân MCLR đến VDD vào bên trong được, nhưng sau này khi dùng PIC 28 hoặc 40 chân, các bạn nên nhét tất cả vào bên dưới socket để cho mạch gọn gàng hơn. - Một điểm cuối cùng, chúng tôi không thiết kế phần nạp bằng ICSP, bởi chúng tôi không muốn làm cho các bạn mới học PIC cảm thấy bối rối. Chúng ta sẽ thực hiện mạch chạy PIC với các chân ICSP và bootloader sau. Tác giả: falleaf Diễn dàn PICVIETNAM.COM Su tầm và biên soạn:linhnc308@yhoo.com 6 Hc vi iu khin PIC trong 1 ngy Bi tp 1: Bt tt ốn LED Cc dng ca LED c ni vi in tr, in tr c ni vi cỏc chõn vi iu khin. Cc õm ca LED c ni vi GND ca vi iu khin. Nh vy, khi chõn vi iu khin mc cao, tc l 5V, ốn LED s sỏng. Khi chõn vi iu khin mc thp (0V) ốn LED s tt. Lu ý trong hỡnh: Giỏ tr ca in tr c xỏc nh da vo dũng ti a ca vi iu khin, in ỏp v dũng in ti a ca ốn LED. Nh vy, giỏ tr nh nht ca in tr c dựng c tớnh toỏn nh trong hỡnh. R = 125 Ohm. Tuy nhiờn, m bo hot ng ca ốn LED, chỳng ta nõng giỏ tr in tr lờn thnh 200 Ohm. ốn LED khi sỏng quỏ, ch cn s tay vo nú, hoc cỏc va chm mnh, hoc trng hp b tnh in, ốn LED cú th b h ngay. Hin tng ny d thy nht l cỏc LED cc sỏng dựng trong cỏc bng hiu hoc bin bỏo giao thụng, cỏc ốn LED cc sỏng ch cn chm tay vo, s cú hin tng tnh in v n ngay. Vi cỏc LED thng v dựng trong thớ nghim, khú xy ra hin tng ny, tuy nhiờn cht lng sn xut ca cỏc ốn LED cng khụng m bo, do vy chỳng ta chn gii phỏp an ton l trờn ht. Hn na, chỳng ta cng khụng cn ốn LED quỏ sỏng. bt u bi tp 1, chỳng ta tỡm hiu s qua v cu trỳc mt chng trỡnh vit bng MPASM nh sau: Bt c mt chng trỡnh ASM no, cng c bt u bng vic gii thiu v chng trỡnh, tờn chng trỡnh, ngi thc hin chng trỡnh, ngy thc hin chng trỡnh, ngy hon tt, ngi kim tra li chng trỡnh, ngy kim tra chng trỡnh, phiờn bn ca chng trỡnh, mụ t phn cng ca mch giao tip v mt s chỳ thớch. Vỡ vy, tụi a ra õy mt form m tụi cho rng hp lý, t õy v sau, cỏc bn ch cn ct dỏn form ny, thay i ni dung tng mc lm phn m u. Chỳng ta quy nh mt s quy c sau: ;========== dựng phõn cỏch cỏc phn chớnh ca chng trỡnh ;---------------- dựng phõn cỏch cỏc chng trỡnh con ca chng trỡnh T¸c gi¶: falleaf – DiÔn dµn PICVIETNAM.COM S−u tÇm vµ biªn so¹n:linhnc308@yhoo.com 7 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 thanh : 23/05/2005 ; Ngay kiem tra : 23/05/2005 ; Nguoi kiem tra : Doan Hiep ;---------------------------------------------------------------- ; Chu thich : Mo ta cac diem khac nhau cua cac phien ban khac nhau ; : hoac cac chu thich khac ; : vd, dung che do Power On Reset, PORTB = 00000000 ; : hoac, chuong trinh viet cho PIC Tutorial ; : hoac, chuong trinh nay hoan toan mien phi va co the dung cho ; : moi muc dich khac nhau ;================================================= ======= Mặc dù chưa chắc rằng đoạn chú thích này có thể ngắn hơn chương trình các bạn viết, và như vậy việc viết chú thích dài hơn việc viết chương trình? Không, thực sự các chú thích này rất quan trọng, sau 1, 2, 3 năm, các bạn nhìn lại, các bạn sẽ vẫn còn hiểu được mình đã làm gì. Có thể khi mới bắt đầu, các bạn thấy công việc ghi chú này là nhàm chán, chính vậy, tôi đã cung cấp form của ghi chú này, các bạn sau đó chỉ cần cắt và dán. Tôi hy vọng rằng các bạn nên tạo thói quen đưa đoạn chú thích này vào chương trình để các bạn trở nên chuyên nghiệp hơn khi làm việc với vi điều khiển, cụ thể ở đây là PIC. Tất nhiên, đây là bài học đầu tiên, do vậy các chú thích sẽ được ghi rất chi tiết, nhất là khi mô tả phần cứng. Sau này, với các mạch phức tạp hơn, các bạn không thể ghi chú quá chi tiết như thế này được, các bạn chỉ ghi chú những điểm chính thôi. Cũng tất nhiên, khi lập trình với CCS C hay HT PIC, các bạn cũng nên ghi chú như vậy trong chương trình chính, nhưng chúng ta chưa bàn đến CCS C và HT PIC ở đây. Phần thứ hai các bạn cần học, đó là khởi tạo PIC. Phần này là phần bắt buộc theo sau phần ghi chú, bởi chương trình dịch cần phải hiểu bạn đang làm việc với con PIC nào, làm việc với nó như thế nào? Code: ;================================================= ====== TITLE "Mach test LED_1" PROCESSOR P16F628A INCLUDE <P16F628A.inc> __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF &_HS_OSC ;================================================= ====== Các bạn sẽ thấy rằng có một số từ khoá như sau: TITLE: dùng để các bạn ghi chú thích tên chương trình. TITLE là ten chương trình chính. Cú pháp ghi TITLE như trên. Nhớ phải có dấu nháy kép khi viết tên chương trình. PROCESSOR: dùng để khai báo dòng vi điều khiển mà các bạn sử dụng. Các bạn lưu ý, trong MPLAB quy định, không viết đầy đủ tên PIC16F628A mà chỉ viết P16F628A, trong chương trình dịch đã quy định như vậy. INCLUDE: dùng để đưa thêm vào các file mà bạn viết trong chương trình. Mặc định, trong 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 phải T¸c gi¶: falleaf – DiÔn dµn PICVIETNAM.COM S−u tÇm vµ biªn so¹n:linhnc308@yhoo.com 8 trong thư mục bạn đang làm việc, hoặc các file include khong phải là file .inc có sẵn của MPLAB, thì các bạn phải chỉ đường dẫn rõ ràng. Lưu ý rằng, để MPASM dịch được, các bạn phải đặt đường dẫn từ thư mục gốc đến hết tên file (kể cả phần mở rộng của file) không được quá 60 ký tự. __CONFIG: dùng để thiết lập các chế độ hoạt động của PIC. Các bạn có thể xem để hiểu thêm về các chế độ hoạt động này trong 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 này có thể download trên trang web của microchip http://www.microchip.com/ , keyword: MidRange Manual. Mỗi directive để đặt chế độ, cách nhau một ký tự &. Nếu ghi chế độ hoạt động vào đây, các chế độ hoạt động sẽ ở trạng thái mặc định khi khởi động. Các bạn cũng có cách khác để đặt chế độ hoạt động bằng cách tác động trực tiếp vào các thanh ghi khởi tạo. Tuy nhiên, việc này là việc làm không cần thiết, khi chúng ta đã có các directive để viết tắt. Như vậy, chúng ta đặt ở đây chế độ _CP_OFF, tức là khôngđặt chế độ bảo vệ source code khi nạp vào PIC, sau khi nạp vào sẽ có thể đọc ngược lại từ PIC ra. Chúng ta không cần bảo vệ chương trình này, để bạn có thể đọc ngược bằng IC-PROG và kiểm tra lại. Chế độ _PWRITE_ON, tức là cho timer 0 chạy khi Power On Reset. Thực ra timer0 có chạy hay không cũng không quan trọng, nó chẳng liên quan gì đến công việc của chúng ta. Nếu sau này muốn dùng timer0, thì các bạn vẫn phải khởi tạo lại giá trị cho nó, chứ đâu thể sử dụng giá trị ngẫu nhiên của nó được, thành ra cứ để cho nó chạy, sau này cần dùng khỏi phải khởi tạo. _WDT_OFF, tại thời điểm này, tôi tắt Watch Dog Timer lý do các bạn chưa nên tìm hiểu phần này vội. _HS_OSC, chúng ta dùng thạch anh 10MHz, tức là 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 cùng là các bạn phải sử dụng phím TAB để phân cách các cột của một chương trình viết bằng MPASM. Các dòng khởi tạo này được viết ở cột thứ 3. Các directive __CONFIG, TITLE, PROCESSOR, INCLUDE được viết vào cột thứ 3. Còn chi tiết khởi tạo được viết vào cột thứ tư. Cột thứ nhất dùng để viết các [NHÃN], cột thứ hai để viết mã lệnh, cột thứ ba lại dùng để viết chi tiết các tham số của lệnh, và 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 các chú thích. Các chú thích bắt đầu bằng dấu chấm phẩy ( . Trên một dòng, tất cả các ký tự viết sau dấu chấm phẩy đều vô nghĩa. Chính vậy, khi viết phần chú thích ban đầu, các bạn thấy rằng tất cả nội dung đó đều bắt đầu bằng dấu chấm phẩy. Như vậy, một dòng lệnh được cụ thể như sau: Code: NHÃN LỆNH thamso1, thamso2 ; chú thích dòng lệnh Bây giờ chúng ta dành chút thời gian cho lý thuyết, các bạn mở datasheet PIC16F628A trang 15, Section 4. Memory Organization Chúng ta sẽ thấy rằng tổ chức bộ nhớ chương trình của PIC được chia ra làm mấy phần như sau: - Pointer - Stack - Interrupt vector - Program memory T¸c gi¶: falleaf – DiÔn dµn PICVIETNAM.COM S−u tÇm vµ biªn so¹n:linhnc308@yhoo.com 9 Chúng ta tạm thời chưa bàn đến pointer và stack. Interrupt vector được đặt ở địa chỉ 0x0004 Program memory được đặt ở địa chỉ 0x0005 Vậy từ địa chỉ 0x0000 đến địa chỉ 0x0003 chúng ta làm được gì? Khi PIC được reset, nó lập tức nhảy về địa chỉ 0x0000. Rồi cứ sau một chu kỳ máy, nó nhảy đến địa chỉ tiếp theo, xem xem trong địa chỉ đó yêu cầu nó làm gì, nó thực hiện việc đó, xong rồi lại nhảy tiếp. Cứ làm như thế cho đến khi hết chương trình. Tất nhiên, khi chúng ta thực hiện một số lệnh điều khiển vị trí nhảy, thì nó sẽ nhảy không theo thứ tự nữa, nhưng việc này chưa bàn vội. Chúng ta trước mắt chỉ cần biết rằng nó cứ nhảy như vậy cho đến hết chương trình. Như vậy, nếu không sử dụng ngắt, thì chúng ta viết chương trình từ địa chỉ 0x0000 luôn, nó cứ thế là nhảy từ 0x0000 khi khởi động, cho đến hết chương trình. Tuy nhiên, nếu làm như vậy, sau này chúng ta sử dụng chương trình ngắt, thì chúng ta sẽ gặp trục trặc thói quen viết từ địa chỉ 0x0000. Chính vậy, chúng ta nên đặt chương trình trong phần Program Memory như ý đồ thiết kế PIC. Vậy, chương trình của chúng ta sẽ viết như sau: Code: ;================================================= =================== ORG 0x0000 GOTO MAIN ORG 0x0005 MAIN . END. ;================================================= =================== Đây sẽ là cấu trúc một chương trình mà chúng ta sẽ thực hiện. Directive ORG dùng để xác định địa chỉ mà chúng ta sẽ làm việc. Bây giờ chúng ta xem tiếp đến trang 16 của datasheet. Chúng ta thấy rằng, bộ nhớ dữ liệu của PIC16F628A được chia ra thành 4 BANK, hay chúng ta gọi tiếng Việt là 4 BĂNG. Trong 4 băng này, chúng ta thấy rõ nó được chia làm 3 phần. Phần thứ nhất là phần các thanh ghi có địa chỉ xác định (được ghi chú ở bên cạnh) và có tên tuổi rõ ràng. Những thanh ghi này được gọi là những thanh ghi đặc biệt của PIC. Tên của chúng, thực ra không có, một thanh ghi chỉ được xác định bằng địa chỉ của thanh ghi mà thôi. Tuy nhiên, chúng ta đã làm động tác include file P16F628A.inc, file này đã định nghĩa sẵn tên các thanh ghi này, và là quy ước của MPLAB, đồng thời cũng là quy ước chung cho tất cả người dùng PIC. Chúng ta có thể thay đổi, sửa chữa những định nghĩa này, tuy nhiên việc làm đó vừa không cần thiết, lại vừa gây ra rất nhiều khó khăn khi làm việc nhóm. Vậy các bạn phải hiểu, những tên thanh ghi này xem như là không thay đổi trong PIC, và chúng ta sử dụng nó như nó đã tồn tại vài chục năm nay. Phần thứ hai, đó là phần General Purpose Register. Chúng ta gọi nó là các Thanh Ghi Dùng Chung. Những thanh ghi này chưa được định nghĩa, và thế nó cũng không có tên. Những thanh ghi này có giá trị như các biến trong chương trình mà chúng ta sẽ sử dụng. Phần thứ ba, đó là các thanh ghi nằm ở địa chỉ 70h đến 7Fh, và vị trí tương ứng của nó ở băng 1, 2, 3. Các thanh ghi tương ứng đó ở bank1, 2, 3 sẽ tương thích với các thanh ghi từ 70h đến 7Fh ở băng 0. Tuy nhiên, chúng ta tạm thời chưa quan tâm đến phần này. Bây giờ chúng ta học viết chương trình Code: ;================================================= ============================== ORG 0x0000 GOTO MAIN ORG 0x0005 MAIN Tác giả: falleaf Diễn dàn PICVIETNAM.COM Su tầm và biên soạn:linhnc308@yhoo.com 10 BANKSEL TRISB ; bank select CLRF TRISB ; trisb = 00000000 ; portb = output BANKSEL PORTB BSF PORTB, 0 ; rb0 = 1 ; RB0 = 5V GOTO $ ; dung chuong trinh tai day ; vong lap tai cho^~ ; khong bao gio ket thuc END. ; lenh bat buoc de ket thuc ;================================================= =============================== Ri, nh vy, chỳng ta ó thc hin xong mt chng trỡnh vit bng MPASM cho PIC16F628A. Phõn tớch chng trỡnh, chỳng ta s thy, mi khi ng, chng trỡnh gp lnh goto main, nú s nhy n nhón MAIN. nhón MAIN, nú gp lnh banksel, tc l lnh bank select. Cú ngha l nú s chuyn sang hot ng bng cú cha thanh ghi TRISB. Vỡ sao? Bi vỡ ban u khi ng, PIC luụn nm bng 0. Nhng thanh ghi TRISB li nm bng 1, vỡ th cn phi chuyn sang bng 1 lm vic. Thc ra chỳng ta cng cú cỏch yờu cu PIC chuyn sang bng 1 mt cỏch ớch danh, ch khụng phi l chuyn sang bng cú thanh ghi trisb nh chỳng ta va lm. Nhng vic ny l khụng cn thit, c hai vic lm u ging nhau. Chớnh vỡ vy, chỳng ta chn cỏch vit no cho d nh l c. Sau khi chuyn sang bng 1. Chỳng ta dựng lnh CLRF xoỏ thanh ghi TRISB. Tc l TRISB = 00000000 Chỳng ta lu ý mt iu rng, thanh ghi TRISB cú cụng dng quy nh PORTB s cú nhng chõn no l chõn xut, chõn no l chõn nhp. Chỳng ta nh thờm mt iu na, s 0 ging ch O, v s 1 ging ch I. Nh vy, khi TRISB = 00000000 tc l PORTB s l OOOOOOOO, tc cú ngha l tt c cỏc chõn ca portB u l Output. Nu TRISB = 01010101 thỡ PORTB s l OIOIOIOI. Cú ngha l RB0 s l Input, RB1 l Output, RB2 l Input, RB3 l Output c nh th cho n RB7 l Output. Lu ý rng RB0 n RB7 c tớnh t phi sang trỏi. Sau ú, chỳng ta li thc hin lnh Banksel portb, tc l chỳng ta li nhy v bng 0 (bng cha thanh ghi portb). Tt c cỏc lnh lm thay i giỏ tr ca thanh ghi portb, s lm thay i tớn hiu in bờn ngoi chõn ca PORT B. Sau khi chuyn sang bng 0, chỳng ta thc hin lnh BSF PORTB,0. Cú ngha l chỳng ta set bit v trớ 0 ca portb, tc l chỳng ta cho RB0 = 1. Cú ngha l ngoi chõn RB0 s mang giỏ tr in ỏp 5V. Khi ú, ốn LED ni vi RB0 s sỏng. Cỏc bn s thy mach ngoi hot ng nh th ny: Khi bt in lờn, PIC c reset. Nú lp tc bt sỏng ốn LED RB0, ri sau ú gi nguyờn nh vy, khụng lm gỡ c. Bõy gi cỏc bn lu chng trỡnh va vit thnh LED_1.asm vo mt th mc no ú. Nhn Alt - F10, chng trỡnh s dch LED_1.asm thnh LED_1.hex Cỏc bn dựng mch np PG2C v chng trỡnh np IC-PROG np vo PIC (tham kho Hng dn mch np Falleaf PG2C - PIC Tutorial). Cụng vic ca cỏc bn nh sau: 0) Chy th chng trỡnh ban u 1) Thay i lnh BSF PORTB, 0 bng lnh BSF PORTB, 1. Np li chng trỡnh mi vo PIC. Bn s thy bõy gi ốn LED khụng sỏng v trớ RB0 na m sỏng v trớ RB1. 2) Thay lnh BSF PORTB,0 bng on lnh MOVLW b'11110000' MOVWF PORTB Bn s thy cỏc cỏc chõn t RB0 n RB3 s tt ốn, v cỏc chõn t RB4 n RB7 ốn s sỏng. 3) Bn thay lnh CLRF TRISB bng on lnh CLRF TRISB BSF TRISB, 0 v gi nguyờn lnh BSF PORTB, 0 Cỏc bn s thy rng ốn LED trong trng hp ny s khụng sỏng na. Bi vỡ cỏc bn ó lm cho TRISB = 00000001. Nh vy, RB0 tr thnh chõn Input. Khi RB0 tr thnh chõn Input, thỡ lnh BSF PORTB, 0 s khụng cũn tỏc dng na. RB0 lỳc ny khụng th thay i giỏ tr bng chng trỡnh, nú ch cú th nhn giỏ tr in ỏp t bờn ngoi vo. . ;-- -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- ; Biến ở băng 0 ;-- -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- ORG 0x020 ;-- -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - - ; Biến ở băng 1 ;-- -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -. băng 1 ;-- -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - - ORG 0x0A0 ;-- -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - - ; Biến ở băng 2 ;-- -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - - ORG 0x120

Ngày đăng: 14/07/2013, 03:01

Hình ảnh liên quan

D ưới đây là hình mạch chạy của PIC16F84A, PIC16F628A và PIC16F88. Tất cả các PIC này đều có vị trí chân tương ứng nhau, và thậm chí có thể nói PIC16F628A tương thích PIC16F84A và  PIC16F88 tương thích với hai loại còn lạị Có nghĩa là trong các ứng dụng c - Vi điều khiển PIC - Học nhanh đi vào ứng dụng

i.

đây là hình mạch chạy của PIC16F84A, PIC16F628A và PIC16F88. Tất cả các PIC này đều có vị trí chân tương ứng nhau, và thậm chí có thể nói PIC16F628A tương thích PIC16F84A và PIC16F88 tương thích với hai loại còn lạị Có nghĩa là trong các ứng dụng c Xem tại trang 4 của tài liệu.
Lưu ý trong hình: Giá trị của điện trở được xác định dựa vào dòng tối đa của vi điều khiển, điện áp và dòng điện tối đa của đèn LED - Vi điều khiển PIC - Học nhanh đi vào ứng dụng

u.

ý trong hình: Giá trị của điện trở được xác định dựa vào dòng tối đa của vi điều khiển, điện áp và dòng điện tối đa của đèn LED Xem tại trang 6 của tài liệu.
Hình sau sẽ gợi lại cho các bạn nhớ về kiến trúc Harvard và Von Newmann, trong đó các bạn luôn nhớ rằng có sự phân biệt giữa bộ nhớ dữ liệu và bộ nhớ chương trình - Vi điều khiển PIC - Học nhanh đi vào ứng dụng

Hình sau.

sẽ gợi lại cho các bạn nhớ về kiến trúc Harvard và Von Newmann, trong đó các bạn luôn nhớ rằng có sự phân biệt giữa bộ nhớ dữ liệu và bộ nhớ chương trình Xem tại trang 12 của tài liệu.
Chúng ta xem hình dưới đây để biết được bộ xử lý logic hoạt động như thế nào với thanh ghi W. - Vi điều khiển PIC - Học nhanh đi vào ứng dụng

h.

úng ta xem hình dưới đây để biết được bộ xử lý logic hoạt động như thế nào với thanh ghi W Xem tại trang 13 của tài liệu.
Chúng ta xem hình sau để hiểu được nguyên lý tạo dao động bên trong vi điều khiển: - Vi điều khiển PIC - Học nhanh đi vào ứng dụng

h.

úng ta xem hình sau để hiểu được nguyên lý tạo dao động bên trong vi điều khiển: Xem tại trang 14 của tài liệu.
Hình 1: Các nguồn ngắt của dòng PIC Midrange Chúng ta chú ý đến một sốđiểm sau:  - Vi điều khiển PIC - Học nhanh đi vào ứng dụng

Hình 1.

Các nguồn ngắt của dòng PIC Midrange Chúng ta chú ý đến một sốđiểm sau: Xem tại trang 21 của tài liệu.
Nút bấm làm ột hình thức ral ệnh phổ biến nhất trên thế giớị Bạn gọi một cái thang máy, bạn bấm nút, bạn kêu cửa thì bấm chuông, bạn bật đèn thì bấm nút công tắc, và tôi đang ngồi viế t  cho bạn bằng cách bấm nút bàn phím.. - Vi điều khiển PIC - Học nhanh đi vào ứng dụng

t.

bấm làm ột hình thức ral ệnh phổ biến nhất trên thế giớị Bạn gọi một cái thang máy, bạn bấm nút, bạn kêu cửa thì bấm chuông, bạn bật đèn thì bấm nút công tắc, và tôi đang ngồi viế t cho bạn bằng cách bấm nút bàn phím Xem tại trang 24 của tài liệu.
Theo dõi hình trên, chúng ta thấỵ Khi bấm nút, có quá trình đi xuống của nút bấm, và quá trình đi lên của nút bấm - Vi điều khiển PIC - Học nhanh đi vào ứng dụng

heo.

dõi hình trên, chúng ta thấỵ Khi bấm nút, có quá trình đi xuống của nút bấm, và quá trình đi lên của nút bấm Xem tại trang 25 của tài liệu.
Các bạn xem hình sau: - Vi điều khiển PIC - Học nhanh đi vào ứng dụng

c.

bạn xem hình sau: Xem tại trang 27 của tài liệu.
Thế thì chỉ còn một cách đặt điện trở như hình tiếp theo đây(H.a): - Vi điều khiển PIC - Học nhanh đi vào ứng dụng

h.

ế thì chỉ còn một cách đặt điện trở như hình tiếp theo đây(H.a): Xem tại trang 28 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan