I _ GIÔÙI THIEÄU: _Ñaây laø taøi lieäu höôùng daãn söû duïng CCS laäp trình ngoân ngöõ C cho vi ñieàu khieån PIC cuûa Microchip . Taùc giaû teân TRAÀN XUAÂN TRÖÔØNG, SV K2001 ,ÑH BKHCM . Laø thaønh vieân txt2203treân dieãn ñaøn diendandientu.com , thaønh vieân txttreân dieãn ñaøn picvietnam.com. Moïi ñoùng goùp yù kieán veà taøi lieäu haõy email ñeán ñòa chæ : txt2203yahoo.com. Raát caùm ôn moïi ñoùng goùp yù kieán cuûa caùc baïn yeâu thích laäp trình vi xöû lyù ñoái vôùi taøi lieäu naøy . II _ VAØI VAÁN ÑEÀ VEÀ TAØI LIEÄU NAØY : _Taøi lieäu höôùng daãn laäp trình C cho PIC söû duïng phaàn meàm CCS caùc phieân baûn . Taøi lieäu cuõng giaûi thích caùch thöùc hoaït ñoäng cuûa 1 soá module cuûa VÑK ñeå caùc baïn naém roõ hôn hoaït ñoäng VÑK nhaèm söû duïng haøm vaø vieát chöông trình 1 caùch chính xaùc . _Taøi lieäu naøy khoâng chuû yù thay theá hoaøn toaøn HELP cuûa CCS , noù chæ laø phaàn coâ ñoïng , laø höôùng daãn vaø giaûi thích cô baûn vieát 1 chöông trình baét ñaàu töø ñaâu , giôùi thieäu 1 soá haøm vaø caùch hoaït ñoäng , 1 soá vaán ñeà khi laäp trình , . . . do ñoù noù khoâng ñaày ñuû , baïn neân ñoái chieáu taøi lieäu naøy vôùi HELP tieáng Anh ñeå naém roõ vaán ñeà , ñoàng thôøi hoïc caû tieáng Anh deã daøng . _CCS coù phaàn “ common questions “ – nhöõng caâu hoûi thöôøng gaëp vaø traû lôøi , chöa ñöôïc dòch ôû ñaây duø noù raát quan troïng , nhieàu baïn hay boû qua , khoâng ñeå yù . Baïn neân xem noù . _Trang web ñi keøm laø nhöõng caäp nhaät söûa loãi vaø naâng caáp qua caùc phieân baûn . _Taøi lieäu trình baøy veà caùc vaán ñeà sau : _ Chöông 0 : Giôùi thieäu CCS . Vieát 1 chöông trình C trong CCS nhö theá naøo . Coâng cuï moâ phoûng . CCS tích hôïp MPLAB . _ Chöông 1 : Söû duïng bieán vaø haøm , caùc caáu truùc leänh , chæ thò tieàn xöû lyù. _ Chöông 2 : Caùc haøm xöû lyù soá , xöû lyù bit , delay . _ Chöông 3 : Xöû lyù ADC , caùc haøm vaøo , ra trong C . _ Chöông 4 : Truyeàn thoâng vôùi PC , xöû lyù chuoãi . _ Chöông 5 : vaán ñeà TIMER. _ Chöông 6 : Truyeàn thoâng I2C , SPI vaø PARALLEL . _ Chöông 7 : Caùc vaán ñeà veà PWM , Capture vaø Compare . _ Chöông 8 : Vaán ñeà ngaét ( interrupt ). _Trong moãi chöông seõ coù caùc höôùng daãn söû duïng caùc haøm thích hôïp cho chuû ñeà ñoù . _Neân ñoïc chöông 1 tröôùc . Caùc chöông coøn laïi ñoäc laäp nhau . _Taøi lieäu naøy vieát ñeán ñaâu ñöa leân maïng cho moïi ngöôøi thamkhaûo ñeán ñoù . Haàu heát seõ trình baøy söû duïng 1 caùch cô baûn nhaát, sau ñoù seõ boå sung theâm VD,chöông trình, . . . theâm ñeán ñaâu seõ thoâng baùo ñeán ñoù . 1 2 CHÖÔNG 0 : HÖÔÙNG DAÃN SÖÛ DUÏNG CCS – VIEÁT CHÖÔNG TRÌNH C TRONG CCS I _ GIÔÙI THIEÄU CCS : _CCS laø trình bieân dòch duøng ngoân ngöõ C laäp trình cho VÑK . Ñaây laø ngoân ngöõ laäp trình ñaày söùc maïnh , giuùp baïn nhanh choùng trong vieäc vieát chöông trình hôn so vôùi ngoân ngöõ Assembly . _Maõ leänh ñöôïc toái öu khi bieân dòch . _Tuy nhieân C khoâng phaûi laø vaïn naêng , coù theå thöïc hieän moïi thöù nhö yù muoán . Trong 1 soá tröôøng hôïp , noù coù theå sinh maõ chaïy sai (tham khaûo caùc caûi tieán ôû caùc version CCS treân web : info.CCS.com hoaëc trang web ñi keøm ). _CCS chöùa raát nhieàu haøm phuïc vuï cho moïi muïc ñích vaø coù raát nhieàu caùch laäp trình maõ cho cuøng 1 vaán ñeà daãn ñeán khaùc nhau toác ñoä thöïc thi maõ , ñoä daøi chöông trình . Söï toái öu laø do kyõ naêng laäp trình C cuûa baïn . _CCS C coù ñuû khaû naêng ñeå baïn khoâng caàn phaûi cheøn theâm baát kyø doøng leänh ASSEMBLY naøo , vaø maëc duø vaãn cho pheùp baïn phoái hôïp ASSEMBLY cuønh vôùi C , tuy nhieân CCS seõ khoâng baûo ñaûm chöông trình chaïy chính xaùc . _CCS cung caáp caùc coâng cuï tieän ích giaùm saùt hoaït ñoäng chöông trình nhö : CASM list : cho pheùp xem maõ ASM cuûa file baïn bieân dòch , giuùp baïn quaûn lyù maõ vaø naém ñöôïc caùc thöùc maõ sinh ra vaø noù chaïy nhö theá naøo , laø coâng cuï raát quan troïng , baïn coù theå gôõ roái chöông trình vaø naém ñöôïc hoaït ñoäng cuûa noù ; SYMBOL hieån thò boä nhôù caáp phaùt cho töøng bieán , giuùp quaûn lyù boä nhôù caùc bieán chöông trình ,. . . CallTree hieån thò phaân boå boä nhôù . _ Coù nhieàu tieän ích trong muïc Tools , nhöng do baûn crack neân nhieàu caùi khoâng xaøi ñöôïc . _Chöông trình CCS duøng cho taøi lieäu naøy laø PCW COMPILER baûn môùi nhaát version 3.235 , bao goàm : PCB , PCM vaø PCH , laäp trình cho caùc hoï PIC 10 bit ,12 bit , 14 bit vaø PIC 18 , chöa coù DsPIC . II _ SÖÛ DUÏNG CCS : _Ñeå vieát 1 chöông trình C môùi : chaïy CCS , vaøo New ñeå taïo 1 file C môùi . Treân thanh toolbar : Choïn “Microchip 12 bit” ñeå vieát chöông trình cho PIC 12 bit . “Microchip 14 bit” ñeå vieát chöông trình cho PIC 14 bit . “Microchip PIC18” ñeå vieát chöông trình cho PIC18 . _Choïn “Compiler” ñeå bieân dòch chöông trình baïn ñang vieát. _Treân ñaây laø caùch vieát chöông trình caáp toác vaø goïn . ñeå vieát chöông trình 1 caùch chi tieát vaø cuï theå , söû duïng Project > New > PIC Wizard . Sau ñoù choïn teân project seõ löu , nhaán save . Baûng sau hieän ra : _Neáu söû duïng maïch dao ñoäng thaïch anh ngoaøi thì ñieàn giaù thò xung clock vaøo oâ sau : Phaûi nhaáp keùp vaøo môùi hieäu chænh ñöôïc . 3 _Choïn con PIC muoán laäp trình : _Muoán xem tröôùc maõ sinh ra khi hieäu chænh baát kyø ñieàu gì , choïn : _Tuyø thuoäc loaïi PIC muoán laäp trình maø muïc FUSES seõ coù theâm nhieàu hay ít tuyø choïn , VD 18F4431: _Ñeå yù beân döôùi laø 1 daõy tab caùc löïa choïn caùc thoâng soá khaùc: _chuù yù 2 nuùt muõi teân coù theå môû theâm nhieàu muïc khaùc . _Sau khi hieäu chænh nhö yù muoán , OK ñeå hoaøn thaønh . III _ CCS TÍCH HÔÏP TRONG MPLAB – VIEÁT MAÕ VAØ MOÂ PHOÛNG : _Coâng cuï moâ phoûng cho PIC 16Fxxx. . ña naêng nhaát chæ coù theå laø PIC Simulator IDE 5x , hoã trôï 38 loaïi PIC 16Fxxx . Coù caû Oscilocope , INT aûo , . . . vaø nhieàu chöùc naêng khaùc vôùi giao dieän tuyeät ñeïp , deã duøng . Hoaït ñoäng ñoäc laäp , laáy file HEX ñeå moâ phoûng . Coù dòch ngöôïc ra Assemble . Coù boä laäp trình BASIC vaø Assemble raát hay vaø deã duøng , duø khaù ñôn giaûn nhöng ñuû ñeå vieát caùc chöông trình nhoû chaát löôïng . Baïn neân thöû qua . Khuyeát ñieåm : thieáu 1 vaøi module moâ phoûng nhö : chöùc naêng PWM khoâng coù taùc duïng . _ Moâ phoûng vôùi PIC 18 , PIC 12 , vaø nhieàu loaïi PIC 16 maø IDE treân khoâng hoã trôï ? Baïn coù theå duøng CCS tích hôïp trong MPLAB döôùi daïng plugin . Ñeå coù ñöôïctính naêng naøy , sau khi caøi ñaët CCS , phaûi caøi tieáp CCS_plugin_for_MPLAB6xx . _Baïn coù theå soaïn maõ CCS trong moâi tröôøng MPLAB vaø cho pheùp moâ phoûng maõ C laãn maõ ASSEMBLY dòch ngöôïc cuûa noù , töông töï nhö laäp trình vaø moâ phoûng vôùi MPLAB C18 . _Quan troïng : 1 soá VÑK maø MPLAB khoâng hoã trôï moâ phoûng heát cacù chöùc naêng cuûa noù, baïn neân xem kyõ trong phaàn HELP cuûa MPLAB , muïc SIM ñeå coù chitieát . Hoaëc vaøo Debug>Setting…>choïn tab Limitations . Boû qua phaàn naøy coù theå khieán baïn laàm töôûng chöông trình vieát sai trong khi noù khoâng hoã trôï moâ phoûng . Cho tôùi hieän taïi , toâi chöa bieát caùch moâ phoûng chöoãi xung ñi vaøo PIC , töø 4 ñoù chöông trình nhaän bieát vaø hoaït ñoäng töông öùng vôùi noù ( nhö laø kích hoaït ngaét ngoaøi , taïo xung timer ngoaøi , taïo tín hieäu analog vaøo chaân AD , . . . _ Thieát laäp moâi tröôøng CCS : vaøo MPLAB IDE , voâ muïc Project> Set Language Tool Location . . . Hoäp thoaïi môû ra , nhaán vaøo daáu + cuûa doøng CCS C Compile >Executable ,sau ñoù choïn Browser ñeå thieát laäp ñöôøng daãn ñeán file ccsc . exetrong thö muïc caøi ñaët CCS ( teân maëc ñònh laø PICC ) . Baïn coù theå theâm ñöôøng daãn vaøo 4 doøng cuûa Default Search Path . . . neáu thaáy caàn . _ Taïo 1 döï aùn ( project ) CCS trong MPLAB : vaøo Project> Project Wizard : _Choïn VÑK laøm vieäc : _ÔÛ böôùc 2 : choïn boä coâng cuï ( Active toolSuite ) laø CCS C Compiler , nhaán Next . _Ñieàn teân döï aùn vaø ñöôøng daãn , click Next . _Böôùc 4 : coù theå khoâng caàn Add file thieát bò .h vì trong file maõ maø baïn seõ vieát sau ñoù coù doøng include file naøy roài thì noù töï include vaøo thoâi. theá laø baïn ñaõ coù moâi tröôøng laøm vieäc CCS trong 5 MLPAB . Khuyeát ñieåm laø baïn khoâng theå duøng caùc tieän ích cuûa CCS ñoäc laäp ñöôïc ( Casm list . . . ) . Tuy vaäy , sau khi bieân dòch caùc file CAsm list vaø file COFF , . . .seõ coù trong thö muïc döï aùn vaø baïn coù theå môû chuùng baèng 1 trình vaên baûn nhö laø Notepad. _Beân traùi laø cöûa soå döï aùn, nôi baïn coù theå theâm vaøo caùc file caàn thieát. _Ñeå theâm 1 file .c , nhaán choät phaûi leân “ source file” > Add file . . . _Ñeå theâm 1 file .h , nhaán chuoät phaûi leân “Header file “ > add file . . . _Muïc Other files : duøng ñeå theâm vaøo caùc file phuïc vuï cho döï aùn nhö caùc file C , file text , . . .Caùc file naøy coù theå ñöôïc bieân dòch maø cuõng coù theå khoâng , vaø duøng ñeå ghi caùc chuù giaûi , sô ñoà thuaät toaùn , . . . _Ñeå bieân dòch döï aùn , choïn : _Bieân dòch xong , cöûa soå Output hieän ra : 6 _löu yù : caùc caûnh baùo ( warning ) laø coù theå boû qua , trình bieân dòch vaãn taïo ra file hex . Nhöng loãi error neáu coù thì khoâng theå boû qua , vì noù khoâng theå taïo file hex ñöôïc . haõy nhaán keùp vaøo doøng warning hay error naøo thì seõ nhaûy ñeán vò trí phaùt sinh noù . _Ñeå moâ phoûng : _Sau khi choïn MPLAB SIM , thanh toolbar sau hieän ra : _Choïn RUN khi moâ phoûng chöông trình seõ chaïy lieân tuïc . _Choïn animate ñeå xem chöông trình moâ phoûng doøng leänh lieân tuïc theo 1 möùc thôøi gian ñònh tröôùc cho 1 leänh . Ñeå hieäu chænh khoaûng thôøi gian ñeå nhaûy 1 leänh , vaøo debugger>setting . . .Choïn Tab nhö beân döôùi : 7 _Hình treân cho thaáy :böôùc nhaûy laø 500 ms cho 1 doøng leänh C hay ASM , hieäu chænh nhoû hôn seõ laøm taêng toác ñoä animate , coøn caäp nhaät treân Watch seõ maát 5x100=500 ms , coù theå thay ñoåi . Neáu muoán Watch caäp nhaät ngay töùc thì ( real time ) thì ñaùnh daáu choïn treân oâ _Ñeå moâ phoûng töøng doøng leänh , duøng , hay phím F7 , tieân lôïi hôn khi duøng animate . _Ta coù theå duøng moïi tieän ích trong muïcView ñeå phuïc vuï moâ phoûng . Bao goàm : 1 _ Disassembly listing: theå hieän maõ ASM cho töøng doøng leänh C . Löu yù laø seõ coù 1 con troû moâ phoûng maøu xanh beân traùi cho caû hoäp thoaïi doøng leänh C laãn ASM nghóa laø tieán trình moâ phoûng theå hieän treân caû 2 hoäp thoaïi . Khi moâ phoûng , neáu ñaët con troû chuoät beân hoäp ASM , con troû xanh seõ moâ phoûng töøng doøng leänh ASM töông öùng cho doøng leänh C beân hoäp leänh C . Ngöôïc laïi , neáu choïn hoäp thoaïi C , seõ moâ phoûng töøng doøng leänh C , töông öùng caû 1 nhoùm doøng leänh ASM töông öùng . _Nhaán Halt ñeå döøng moâ phoûng . Nhaán Reset ñeå reset laïi vieäc moâ phoûng 2 _ Hardware Stack : cho pheùp giaùm saùt stack . 3 _ Program memory: xem boä nhôù chöông trình , gioáng nhö Disassembly listing . 8 4 _ File registers :hieån thò caùc thanh ghi ñòa chæ leänh boä nhôù . 5 _ EEPROM: hieån thò boä nhôù EEPROM . 6 _ Memory usage gauge :hieån thò tình traïng söû duïng boä nhôù . 7 _ Watch: cho pheùp giaùm saùt noäi dung caùc bieán C hay caùc thanh ghi boä nhôù trong khi moâ phoûng . _Choïn Watch . _Ñeå giaùm saùt thanh ghi boä nhôù , choïn teân thanh ghi roài nhaán Add SFR : Teân thanh ghi seõ theâm vaøo vuøng beân döôùi . _Ñeå giaùm saùt teân bieán c trong chöông trình cuûa mình , choïn teân bieán vaø nhaán Add symbol. MPLAB cho pheùp tôùi 4 khung Watch laøm vieäc . thöôøng ta chæ caàn 1 . _Ñeå loaïi boû bieán hay thanh ghi baát kyø khoûi vieäc giaùm saùt , choïn noù vaø nhaán nuùt Delete treân baøn phím. _Nhaán chuoät phaûi treân vuøng giaùm saùt ñeå coù caùc löïa choïn theâm , trong ñoù coù muïc Properties , tuy nhieân chuùng khoâng quan troïng tröø khi coù nhöõng yeâu caàu ñaëc bieät . _Click chuoät phaûi leân vuøng naøy : Seõ ñoå xuoáng menu sau , cho pheùp hieån thò noäi dung bieán theo daïng soá hex, thaäp phaân , nhò phaân , . . _Click keùp vaøo oâ giaù trò ñeå hieäu chænh giaù trò bieán neáu muoán . _Löu yù laø khi reset laïi ñeå moâ phoûng töø ñaàu , Watch khoâng töï caäp nhaät . Phaûi ñoùng noù roài môû laïi . 8 _Special function Register: cho pheùp giaùm saùt caùc thanh ghi chöùc naêng ñaëc bieät . 9 _ Simulator Trace: ghi laïi toaøn boä tieán trình thöïc thi maõ töø luùc reset ñeán luùc döøng .Raát tuyeät vôøi khi muoán xem chöông trình coù ñoä daøi bao nhieâu chu kyø leänh , hay quan saùt 1 voøng laëp thöïc thi xong thì maát bao nhieâu thôøi gian , xem chöông trình chaïy nhö theá naøo , . . .Löu yù laø cöûa soå seõ khoâng caäp 9 nhaät trong luùc ñang moâ phoûng , maø phaûi ñoùng noù laïi roài môû laïi thì noù môùi update keát quaû môùi . Ngoaøi ra nhaán chuoät phaûi leân cöûa soå seõ cho nhieàu löïa choïn tuyø bieán hay . _Vaøi thuû thuaät linh tinh : _Nhaán chuoät traùi leân moãi cöûa soå ñeå môû menu >Dockable : cöûa soå luoân ôû treân cuøng .Ñeå boû tính naêng naøy , click phaûi leân ñoù vaø choïn undockable . _Khi môû nhieàu cöûa soå giaùm saùt , seõ daãn ñeán khoù quan saùt vaø choïn cöûa soå , do ñoù muoán choïn caùi naøo thì vaøo Window ñeå choïn II _ VIEÁT 1 CHÖÔNG TRÌNH TRONG CCS : _Sau ñaây laø ví duï veà caáu truùc 1 chöông trình trong CCS : include < 16F877 .h > device PIC6f877 =16 ADC=10 use delay(clock=20000000) . . . . Int16 a,b; . . . . Void xu_ly_ADC ( ) { . . . . . . } INT_TIMER1 Void xu_ly_ngat_timer ( ) { . . . . . . } Main ( ) { . . . . . . } _Ñaàu tieân laø caùc chæ thò tieàn xöû lyù : . . . coù nhieäm vuï baùo cho CCS caàn söû duïng nhöõng gì trong chöông trình C nhö duøng VXL gì , coù duøng giao tieáp PC qua coång COM khoâng , coù duøng ADC khoâng , coù duøng DELAY khoâng , coù bieân dòch keøm caùc filehay khoâng . . . _Caùc khai baùo bieán . _Caùc haøm con do ta vieát : xu_ly_ADC () , . . . _ Caùc haøm phuïc vuï ngaét theo sau bôûi 1 chæ thò tieàn xöû lyù cho bieát duøng ngaét naøo. _Chöông trình chính . 10
Trang 1I / _ GIỚI THIỆU:
_Đây là tài liệu hướng dẫn sử dụng CCS lập trình ngôn ngữ C cho vi điều khiển PIC của Microchip Tác giả tên TRẦN XUÂN TRƯỜNG , SV K2001 ,ĐH BK HCM Là thành viên txt2203 trên diễn đàn diendandientu.com , thành viên txt trên diễn đàn picvietnam.com Mọi đóng góp ý kiến về
tài liệu hãy email đến địa chỉ : txt2203@yahoo.com Rất cám ơn mọi đóng góp ý kiến của các bạn yêu thích lập trình vi xử lý đối với tài liệu này
II / _ VÀI VẤN ĐỀ VỀ TÀI LIỆU NÀY :
_Tài liệu hướng dẫn lập trình C cho PIC sử dụng phần mềm CCS các phiên bản Tài liệu cũng giải thích cách thức hoạt động của 1 số module của VĐK để các bạn nắm rõ hơn hoạt động VĐK nhằm sử dụng hàm và viết chương trình 1 cách chính xác
_Tài liệu này không chủ ý thay thế hoàn toàn HELP của CCS , nó chỉ là phần cô đọng , là hướng dẫn và giải thích cơ bản viết 1 chương trình bắt đầu từ đâu , giới thiệu 1 số hàm và cách hoạt động ,
1 số vấn đề khi lập trình , do đó nó không đầy đủ , bạn nên đối chiếu tài liệu này với HELP tiếng Anh để nắm rõ vấn đề , đồng thời học cả tiếng Anh dễ dàng
_CCS có phần “ common questions “ – những câu hỏi thường gặp và trả lời , chưa được dịch ở đây dù nó rất quan trọng , nhiều bạn hay bỏ qua , không để ý Bạn nên xem nó
_Trang web đi kèm là những cập nhật sửa lỗi và nâng cấp qua các phiên bản
_Tài liệu trình bày về các vấn đề sau :
_ Chương 0 : Giới thiệu CCS Viết 1 chương trình C trong CCS như thế nào Công cụ mô phỏng CCS tích hợp MPLAB
_ Chương 1 : Sử dụng biến và hàm , các cấu trúc lệnh , chỉ thị tiền xử lý
_ Chương 2 : Các hàm xử lý số , xử lý bit , delay
_ Chương 3 : Xử lý ADC , các hàm vào , ra trong C
_ Chương 4 : Truyền thông với PC , xử lý chuỗi
_ Chương 5 : vấn đề TIMER
_ Chương 6 : Truyền thông I2C , SPI và PARALLEL
_ Chương 7 : Các vấn đề về PWM , Capture và Compare
_ Chương 8 : Vấn đề ngắt ( interrupt )
_Trong mỗi chương sẽ có các hướng dẫn sử dụng các hàm thích hợp cho chủ đề đó
_Nên đọc chương 1 trước Các chương còn lại độc lập nhau
_Tài liệu này viết đến đâu đưa lên mạng cho mọi người tham khảo đến đó Hầu hết sẽ trình bày sử dụng 1 cách cơ bản nhất , sau đó sẽ bổ sung thêm VD,chương trình, thêm đến đâu sẽ thông báo đến đó
Trang 2CHƯƠNG 0 :
HƯỚNG DẪN SỬ DỤNG CCS – VIẾT CHƯƠNG
TRÌNH C TRONG CCS
I / _ GIỚI THIỆU CCS :
_CCS là trình biên dịch dùng ngôn ngữ C lập trình cho VĐK Đây là ngôn ngữ lập trình đầy sức mạnh , giúp bạn nhanh chóng trong việc viết chương trình hơn so với ngôn ngữ Assembly
_Mã lệnh được tối ưu khi biên dịch
_Tuy nhiên C không phải là vạn năng , có thể thực hiện mọi thứ như ý muốn Trong 1 số trường hợp , nó có thể sinh mã chạy sai (tham khảo các cải tiến ở các version CCS trên web : info.CCS.com hoặc trang web đi kèm )
_CCS chứa rất nhiều hàm phục vụ cho mọi mục đích và có rất nhiều cách lập trình mã cho cùng 1 vấn đề dẫn đến khác nhau tốc độ thực thi mã , độ dài chương trình Sự tối ưu là do kỹ năng lập trình
C của bạn
_CCS C có đủ khả năng để bạn không cần phải chèn thêm bất kỳ dòng lệnh ASSEMBLY nào , và mặc dù vẫn cho phép bạn phối hợp ASSEMBLY cùnh với C , tuy nhiên CCS sẽ không bảo đảm chương trình chạy chính xác
_CCS cung cấp các công cụ tiện ích giám sát hoạt động chương trình như : C/ASM list : cho phép xem mã ASM của file bạn biên dịch , giúp bạn quản lý mã và nắm được các thức mã sinh ra và nó chạy như thế nào , là công cụ rất quan trọng , bạn có thể gỡ rối chương trình và nắm được hoạt động của nó ; SYMBOL hiển thị bộ nhớ cấp phát cho từng biến , giúp quản lý bộ nhớ các biến chương trình , CallTree hiển thị phân bổ bộ nhớ
_ Có nhiều tiện ích trong mục Tools , nhưng do bản crack nên nhiều cái không xài được
_Chương trình CCS dùng cho tài liệu này là PCW COMPILER bản mới nhất version 3.235 , bao gồm : PCB , PCM và PCH , lập trình cho các họ PIC 10 bit ,12 bit , 14 bit và PIC 18 , chưa có DsPIC
Trang 3II / _ SỬ DỤNG CCS :
_Để viết 1 chương trình C mới : chạy CCS , vào New để tạo 1 file C mới Trên thanh toolbar : Chọn “Microchip 12 bit” để viết chương trình cho PIC 12 bit “Microchip 14 bit” để viết chương trình cho PIC 14 bit “Microchip PIC18” để viết chương trình cho PIC18
_Chọn “Compiler” để biên dịch chương trình bạn đang viết
_Trên đây là cách viết chương trình cấp tốc và gọn để viết chương trình 1 cách chi tiết và cụ thể , sử dụng Project -> New -> PIC Wizard Sau đó chọn tên project sẽ lưu , nhấn save Bảng sau hiện
ra :
_Nếu sử dụng mạch dao động thạch anh ngoài thì điền giá thị xung clock vào ô sau :
Phải nhấp kép vào mới hiệu chỉnh được
Trang 4_Chọn con PIC muốn lập trình :
_Muốn xem trước mã sinh ra khi hiệu chỉnh bất kỳ điều gì , chọn :
_Tuỳ thuộc loại PIC muốn lập trình mà mục FUSES sẽ có thêm nhiều hay ít tuỳ chọn , VD 18F4431:
_Để ý bên dưới là 1 dãy tab các lựa chọn các thông số khác:
_chú ý 2 nút mũi tên có thể mở thêm nhiều mục khác
_Sau khi hiệu chỉnh như ý muốn , OK để hoàn thành
III / _ CCS TÍCH HỢP TRONG MPLAB – VIẾT MÃ VÀ MÔ PHỎNG :
_Công cụ mô phỏng cho PIC 16Fxxx đa năng nhất chỉ có thể là PIC Simulator IDE 5x , hỗ trợ 38 loại PIC 16Fxxx Có cả Oscilocope , INT ảo , và nhiều chức năng khác với giao diện tuyệt đẹp , dễ dùng Hoạt động độc lập , lấy file HEX để mô phỏng Có dịch ngược ra Assemble Có bộ lập trình BASIC và Assemble rất hay và dễ dùng , dù khá đơn giản nhưng đủ để viết các chương trình nhỏ chất lượng Bạn nên thử qua Khuyết điểm : thiếu 1 vài module mô phỏng như : chức năng PWM không có tác dụng
_ Mô phỏng với PIC 18 , PIC 12 , và nhiều loại PIC 16 mà IDE trên không hỗ trợ ? Bạn có thể dùng CCS tích hợp trong MPLAB dưới dạng plugin Để có được tính năng này , sau khi cài đặt CCS , phải cài tiếp CCS_plugin_for_MPLAB6xx
_Bạn có thể soạn mã CCS trong môi trường MPLAB và cho phép mô phỏng mã C lẫn mã
ASSEMBLY dịch ngược của nó , tương tự như lập trình và mô phỏng với MPLAB C18
_Quan trọng : 1 số VĐK mà MPLAB không hỗ trợ mô phỏng hết cacù chức năng của nó , bạn nên xem kỹ trong phần HELP của MPLAB , mục SIM để có chi tiết Hoặc vào Debug->Setting…->chọn tab Limitations Bỏ qua phần này có thể khiến bạn lầm tưởng chương trình viết sai trong khi nó không hỗ trợ mô phỏng Cho tới hiện tại , tôi chưa biết cách mô phỏng chưỗi xung đi vào PIC , từ
Trang 5đó chương trình nhận biết và hoạt động tương ứng với nó ( như là kích hoạt ngắt ngoài , tạo xung timer ngoài , tạo tín hiệu analog vào chân AD ,
_ Thiết lập môi trường CCS : vào MPLAB IDE , vô mục Project-> Set Language Tool Location Hộp thoại mở ra , nhấn vào dấu + của dòng CCS C Compile ->Executable ,sau đó chọn Browser để thiết lập đường dẫn đến file ccsc exe trong thư mục cài đặt CCS ( tên mặc định là PICC ) Bạn có thể thêm đường dẫn vào 4 dòng của Default Search Path nếu thấy cần
_ Tạo 1 dự án ( project ) CCS trong MPLAB : vào Project-> Project Wizard :
_Chọn VĐK làm việc :
_Ở bước 2 : chọn bộ công cụ ( Active toolSuite ) là CCS C Compiler , nhấn Next
_Điền tên dự án và đường dẫn , click Next
_Bước 4 : có thể không cần Add file thiết bị *.h vì trong file mã mà bạn sẽ viết sau đó có dòng
#include file này rồi thì nó tự include vào thôi thế là bạn đã có môi trường làm việc CCS trong
Trang 6MLPAB Khuyết điểm là bạn không thể dùng các tiện ích của CCS độc lập được ( C/asm list ) Tuy vậy , sau khi biên dịch các file C/Asm list và file COFF , sẽ có trong thư mục dự án và bạn có thể mở chúng bằng 1 trình văn bản như là Notepad
_Bên trái là cửa sổ dự án, nơi bạn có thể thêm vào các file cần thiết
_Để thêm 1 file *.c , nhấn chột phải lên “ source file” -> Add file
_Để thêm 1 file *.h , nhấn chuột phải lên “Header file “ -> add file
_Mục Other files : dùng để thêm vào các file phục vụ cho dự án như các file C , file text , Các file này có thể được biên dịch mà cũng có thể không , và dùng để ghi các chú giải , sơ đồ thuật toán ,
_Để biên dịch dự án , chọn :
_Biên dịch xong , cửa sổ Output hiện ra :
Trang 7_lưu ý : các cảnh báo ( warning ) là có thể bỏ qua , trình biên dịch vẫn tạo ra file hex Nhưng lỗi error nếu có thì không thể bỏ qua , vì nó không thể tạo file hex được hãy nhấn kép vào dòng warning hay error nào thì sẽ nhảy đến vị trí phát sinh nó
_Để mô phỏng :
_Sau khi chọn MPLAB SIM , thanh toolbar sau hiện ra :
_Chọn RUN khi mô phỏng chương trình sẽ chạy liên tục
_Chọn animate để xem chương trình mô phỏng dòng lệnh liên tục theo 1 mức thời gian định trước cho 1 lệnh Để hiệu chỉnh khoảng thời gian để nhảy 1 lệnh , vào debugger->setting Chọn Tab như bên dưới :
Trang 8_Hình trên cho thấy :bước nhảy là 500 ms cho 1 dòng lệnh C hay ASM , hiệu chỉnh nhỏ hơn sẽ làm tăng tốc độ animate , còn cập nhật trên Watch sẽ mất 5x100=500 ms , có thể thay đổi Nếu muốn Watch cập nhật ngay tức thì ( real time ) thì đánh dấu chọn trên ô
_Để mô phỏng từng dòng lệnh , dùng , hay phím F7 , tiên lợi hơn khi dùng animate
_Ta có thể dùng mọi tiện ích trong mục View để phục vụ mô phỏng Bao gồm :
1 / _ Disassembly listing : thể hiện mã ASM cho từng dòng lệnh C Lưu ý là sẽ có 1 con trỏ mô phỏng màu xanh bên trái cho cả hộp thoại dòng lệnh C lẫn ASM nghĩa là tiến trình mô phỏng thể hiện trên cả 2 hộp thoại Khi mô phỏng , nếu đặt con trỏ chuột bên hộp ASM , con trỏ xanh sẽ mô phỏng từng dòng lệnh ASM tương ứng cho dòng lệnh C bên hộp lệnh C Ngược lại , nếu chọn hộp thoại C , sẽ mô phỏng từng dòng lệnh C , tương ứng cả 1 nhóm dòng lệnh ASM tương ứng
_Nhấn Halt để dừng mô phỏng Nhấn Reset để reset lại việc mô phỏng
2 / _ Hardware Stack : cho phép giám sát stack
3 / _ Program memory : xem bộ nhớ chương trình , giống như Disassembly listing
Trang 94 / _ File registers : hiển thị các thanh ghi địa chỉ lệnh bộ nhớ
5 / _ EEPROM : hiển thị bộ nhớ EEPROM
6 / _ Memory usage gauge : hiển thị tình trạng sử dụng bộ nhớ
7 / _ Watch : cho phép giám sát nội dung các biến C hay các thanh ghi bộ nhớ trong khi mô phỏng _Chọn Watch
_Để giám sát thanh ghi bộ nhớ , chọn tên thanh ghi rồi nhấn Add SFR :
Tên thanh ghi sẽ thêm vào vùng bên dưới
_Để giám sát tên biến c trong chương trình của mình , chọn tên biến và nhấn Add symbol
MPLAB cho phép tới 4 khung Watch làm việc thường ta chỉ cần 1
_Để loại bỏ biến hay thanh ghi bất kỳ khỏi việc giám sát , chọn nó và nhấn nút Delete trên bàn phím
_Nhấn chuột phải trên vùng giám sát để có các lựa chọn thêm , trong đó có mục Properties , tuy nhiên chúng không quan trọng trừ khi có những yêu cầu đặc biệt
_Click chuột phải lên vùng này :
Sẽ đổ xuống menu sau , cho phép hiển thị nội dung biến theo dạng số hex, thập phân , nhị phân ,
_Click kép vào ô giá trị để hiệu chỉnh giá trị biến nếu muốn
_Lưu ý là khi reset lại để mô phỏng từ đầu , Watch không tự cập nhật Phải đóng nó rồi mở lại
8 / _Special function Register : cho phép giám sát các thanh ghi chức năng đặc biệt
9 / _ Simulator Trace : ghi lại toàn bộ tiến trình thực thi mã từ lúc reset đến lúc dừng Rất tuyệt vời khi muốn xem chương trình có độ dài bao nhiêu chu kỳ lệnh , hay quan sát 1 vòng lặp thực thi xong thì mất bao nhiêu thời gian , xem chương trình chạy như thế nào , Lưu ý là cửa sổ sẽ không cập
Trang 10nhật trong lúc đang mô phỏng , mà phải đóng nó lại rồi mở lại thì nó mới update kết quả mới Ngoài ra nhấn chuột phải lên cửa sổ sẽ cho nhiều lựa chọn tuỳ biến hay
_Vài thủ thuật linh tinh :
_Nhấn chuột trái lên mỗi cửa sổ để mở menu ->Dockable : cửa sổ luôn ở trên cùng Để bỏ tính năng này , click phải lên đó và chọn undockable
_Khi mở nhiều cửa sổ giám sát , sẽ dẫn đến khó quan sát và chọn cửa sổ , do đó muốn chọn cái nào thì vào Window để chọn
II / _ VIẾT 1 CHƯƠNG TRÌNH TRONG CCS :
_Sau đây là ví dụ về cấu trúc 1 chương trình trong CCS :
#include < 16F877 h >
#device PIC6f877 *=16 ADC=10
#use delay(clock=20000000)
Int16 a,b;
Void xu_ly_ADC ( )
{
}
#INT_TIMER1
Void xu_ly_ngat_timer ( )
{
}
Main ( )
{
}
_Đầu tiên là các chỉ thị tiền xử lý : # có nhiệm vụ báo cho CCS cần sử dụng những gì trong chương trình C như dùng VXL gì , có dùng giao tiếp PC qua cổng COM không , có dùng ADC không , có dùng DELAY không , có biên dịch kèm các file hay không
_Các khai báo biến
_Các hàm con do ta viết : xu_ly_ADC () ,
_ Các hàm phục vụ ngắt theo sau bởi 1 chỉ thị tiền xử lý cho biết dùng ngắt nào
_Chương trình chính