Kỹ thuật bảng, Pic
Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT03.02 Ngày: 3/6/2006 Trang: 1/14 Tutorial03.02 Gửiđến: picvietnam@googlegroups.com Nộidung: Bài3:KĨTHUẬTBẢNG MICROSOFTWORD Tómtắt: Tutorialpostlênpicvietnam,topic“PIC16F877ATỪDỄTỚIKHÓ”thuộcluồng“CƠBẢNVỀ VIĐIỀUKHIỂN VÀPIC”vớinộidung: ‐ PhântíchgiảithuậtkĩthuậtbảngvàmộtsốứngdụnghiểnthịvớiLED. 1. Đặtvấnđề Trướckhiphântíchgiảithuậtcủakĩthuậtbảngtathựchiệnmộtứngdụngnhỏ,coinhư vừaônlạibàicũ,vừadặtracácvấnđềchobàimới.Ứngdụngnàysửdụngmạchnguyênlíđã đượcxâydựngởbài1. Ứngdụng1:ChomộtLEDchạytừtráisangphảisaumỗikhoảngthờigiandelay100ms. TađãxâydựngmộtmạchứngdụngbaogồmcácLEDđượcgắnvàoPORTBcủaviđiều khiểnPICthôngquacácđiệntrở,vàmuốnLEDnàosáng,cầnxuấtgiátrịlogic1rachân tươngứngcủaPORTB.Đểthuậntiệnchoviệctheodõi,sơđồm ạchsẽđươcđưalạitronghình dướiđây. R5 D2 4 MHz HI R6 D7 D5 D4 0 R2 R1 0 R9 D3 HI SW1 1 2 0 R7 D8 0 D1 0 R3 HI R4 PIC16F877A 8 9 10 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 13 2 3 4 5 6 7 33 34 35 36 37 38 39 40 11 32 RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7 GND OSC2/CLKOUT RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 GND MCLR/VPP OSC1/CLKIN RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+ RA4/TOCKI/C1OUT RA5/AN4/SS/C2OUT RBO/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD VDD VDD R8 C1 30 pF D6 C2 30 pF Hình 1: Sơ đồ nguyên lí mạch ứng dụng. Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT03.02 Ngày: 3/6/2006 Trang: 2/14 TađãbiếtđượccáchthiếtlậpgiátrịchocácchânI/Ocủaviđiềukhiển(bài1),cáchviết chươngtrìnhdelay(bài2),vàmuốncácLEDdịchtừtráisangphải,tasửdụngmộttronghai lệnhsau: LệnhRLF Cúpháp: RLF thanh_ghi,noi_den Tácdụng:dịchtráicácbittrongthanhghi“thanh_ghi”thôngquacờcarryC (thanhghichứcnăngSTATUS).Kếtquảsaukhidịchđượclưuvàothanhghi ”thanh_ghi”nếuthamsố“noi_den”manggiatrị1hoặcthanhghiWnếutham số“noi_den”manggiátrị0.Cóthểhìnhdungcáchdịchcủalệnhnàytheo hìnhdưới. LệnhRRF Cúpháp: RRF thanh_ghi,noi_den Tácdụng:dịchphảicácbittrongthanhghi“thanh_ghi”thôngquacờcarry C(thanhghichứcnăngSTATUS).Kếtquảsaukhidịchđượclưuvàothanhghi ”thanh_ghi”nếuthamsố “noi_den”manggiatrị1hoặcthanhghiWnếutham số“noi_den”manggiátrị0.Cóthểhìnhdungcáchdịchcủalệnhnàytheo hìnhdưới. Đếnđâyxemnhưtađãcóđầyđủcácthôngtinđểviếtchươngtrình.Giảithuậtcũng kháđơngiản,cácbướctiếnhànhlầnlượtnhưsau: ‐ ĐưavàothanhghiPORTBgiátrị10000000b(choLEDđầu tiênsáng). ‐ DịchphảigiátrịtrongthanhghiPORTB(LEDsángcũngđượcdịchtươngứng). ‐ Delay100ms. ‐ Lặplạibước2. Vàđây,chươngtrìnhcủaứngdụng: Chươngtrình3.1: ;============================================================================= ;WWW.PICVIETNAM.COM ;Laptrinh: NGUYENTRUNGCHINH ;Ngaybatdau: 23thang01nam2006 Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT03.02 Ngày: 3/6/2006 Trang: 3/14 ;Ngayhoanthanh: 23thang01nam2006 ;Kiemtrachuongtrinh: picvietnam@googlegroups.com ;Ngaykiemtra: ;SudungvidieukhienMicrochip: PIC16F877A title “chuongtrinh3‐1.asm” processor 16f877a include <p16f877a.inc> __CONFIG _CP_OFF&_WDT_OFF&_BODEN_OFF&_PWRTE_ON&_XT_OSC& _WRT_OFF&_LVP_OFF&_CPD_OFF ;Capnhatvabosung: ;Motachuongtrinh: ChuongtrinhdungdedieukhienmộtLEDsangdịchsangphaisau ;moikhoangthoigian100ms. ;Motaphancung: 8LEDduocganvaoPORTBthongquacacdientro,cac ;thanhphandikembaogomthachanh,machresetvanguon ;================================================================================ ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ;Khoitaocacbien ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ count1 EQU 0x20 ;cacbiendungchodoanchuongtrinhdelay counta EQU 0x21 countb EQU 0x22 ;============================================================================= ;CHƯƠNGTRÌNHCHÍNH ;============================================================================= ORG 0x000 GOTO start start;chươngtrìnhchínhbắtđầutạiđây ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ;KhởitạoPORTB ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT03.02 Ngày: 3/6/2006 Trang: 4/14 BCF STATUS,RP1 BSF STATUS,RP0 ;chọnBANK1 CLRF TRISB ;PORTB<‐outputs BCF STATUS,RP0 ;chọnBANK0 MOVLW b’10000000’ ;bậtLEDđầutiênsánglên MOVWF PORTB ;PORTB<‐b‘10000000’ ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ;Vònglặpchínhcủachươngtrình ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ loop CALL delay100ms ;gọichươngtrìnhcondelay100ms RRF PORTB,1 ;dịchphảithanhghiPORTB ;kếtquảsaukhidịchlưuvàothanhghiPORTB GOTO loop ;vònglặpvôhạn ;================================================================================ ;CHƯƠ NGTRÌNHCON ;================================================================================ delay100ms;chươngtrìnhcondelay100ms MOVLW d’100’ MOVWF count1 d1 MOVLW 0xC7 MOVWF counta MOVLW 0x01 MOVWF countb delay_0 DECFSZ counta,1 GOTO $+2 DECFSZ countb,1 GOTO delay_0 Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT03.02 Ngày: 3/6/2006 Trang: 5/14 DECFSZ count1,1 GOTO d1 RETURN;trởvềchươngtrìnhchính END;kếtthúcchươngtrình ;================================================================================ Xong!Đếnđâytacóthểcảmnhậnđượcrằngdườngnhưviệcpháttriểncácứngdụng đãtrởnêndễdànghơntrước.TươngtựtacóthểđiềukhiểncácLEDdịchtừphảisangtrái (thaylệnhRRFbằnglênhRLF). Bâygiờ,giảsửyêucầucủaứngdụngkhôngphảilàdịchtráihaydịchphải,màlàdịch theomộtquiluậtphứctạpnàođóhoặcchẳngcầnquiluậtdịchnàocả.Rõràngcáclệnh RLFhayRRFkhôngđủkhảnănggiảiquyếtđượcvấnđề,hoặcnếucóthìgiảithuậtcho chươngtrìnhsẽrấtphứctạpvìphảitìmraquiluậtdịchLEDmàyêucầuđặtra.Tuynhiên mọikhókhăndườngnhưđềucócáchgiảiquyếtriêngcủanó,vàtậplệnhcủaPICcung cấpchotamộtcôngcụđểgiảiquyếtkhókhăntrên:lệnhRETLW.Cóthểchorằngđâylà mộtlệnhrấtquantrọngtrongviệcpháttriểncácứngdụngvàgiảithuậtchoviđiềukhiển PIC.Kĩthuậtbảngcũngđượcxâydựngdựatrênlệnhnày.Phầntiếptheosẽphântíchgiải thuậtcủakĩthuậtnày. 2. Kĩthuậtbảng 2.1. Cácthôngtincơsởđểxâydựngkĩthuậtbảng 2.1.1 Cáclệnhhỗtrợchokĩthuậtbảng. TrongbàitrướctatừngbiếtđếnlệnhRETLWvớivaitrònhưlệnhRETURN(trởvề chươngtrìnhchínhtừchươngtrìnhcon),tacũngđãbiếtđượ ccáchsửdụnglệnhnày nhưthếnào.Đểthuậntiệnchoviệctheodõi,lệnhRETLWcũngsẽđượcnhăclạiởđây cùngvớimộtsốlệnhđượcsửdụngchoviệcpháttriểnk ĩthuậtbảng. LệnhRETLW Cúpháp:RETLW k (0≤k≤255) Tácdụng:trởvềchươngtrìnhchínhtừchươngtrìnhconvớigiátrịkđược chứatrongthanhghiW. LệnhADDLW Cúpháp:ADDLW k (0≤k≤255) Tácdụng:cộnggiátrịkvàogiátrịchứatrongthanhghiW,kếtquảchứa trongthanhghiW. Lệnh nàyđược hỗ trợ bởi các bit trạng thái C, DC, Z trong thanh ghi Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT03.02 Ngày: 3/6/2006 Trang: 6/14 STATUS.Chứcnăngcáclệnhnàysẽđượcbànđếnkĩhơnkhicầnpháttriển cácứngdụngliênquanđếncácbittrạngtháinày. LệnhADDWF Cúpháp: ADDWF thanh_ghi,noi_den Tácdụng:CộnggiátrịchứatrongthanhghiWvàothanhghi“thanh_ghi”. Kếtquảđượcchứatrongthanhghi“thanh_ghi”nếuthamsố“noi_den”mang giátrị1hoặcthanhghiWnếuthamsố“noi_den”manggiátrị0. LệnhnàycũngđượchỗtrợbởicácbittrạngtháiC,DC,Ztrongthanhghi STATUS. LệnhBTFSS Cúpháp: BTFSS thanh_ghi,bit (0≤bit≤7) Lệnh1 Lệnh2 ……… Tác dụng: kiểm tra bitđược chỉ định bởi tham số “bit” trong thanh ghi “thanh_ghi”.Nếubitđóbằng0,lệnh1đượcthựcthi.Nếubitđókhác0,lệnh1 đượcbỏquavàthayvàođólàlệnhNOP. LệnhBTFSC Cúpháp: BTFSC thanh_ghi,bit (0≤bit≤7) Lệnh1 Lệnh2 ……………. Tác dụng: kiểm tra bitđược chỉ định bởi tham số “bit” trong thanh ghi “thanh_ghi”.Nếubitđób ằng1,lệnh1đượcthựcthi. Nếubitđóbằng0,Lệnh tiếptheođượcbỏquavàthayvàođóbằnglệnhNOP. Leänh INCF Cúpháp:INCF thanh_ghi,noi_den Tácdụng:tanggiátrịthanhghi“thanh_ghi”len1đơnvị.Kếtquảđượclưu vàothanhghiWnếuthamsố“noi_den”bằng0hoặcthanhghi“thanh_ghi” nếuthamsố“noi_den”bằng1. LệnhnàyđượchỗtrợbởibitZtrongthanhghiSTATUS. Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT03.02 Ngày: 3/6/2006 Trang: 7/14 LệnhDECF Cúpháp:DECFthanh_ghi,noi_den Tácdụng:giảmgiátrịthanhghi“thanh_ghi”1đơnvị.Kếtquảđượcchứa trongthanhghiWnếu“noi_den”bằng0hoặcthanhghi“thanh_ghi”nếu “noi_den”bằng1. LệnhnàyđượchỗtrợbởibitZtrongthanhghiSTATUS. LệnhMOVF Cúpháp:MOVF thanh_ghi,noi_den Tácdụng:đưagiátrịtrongthanhghi“thanh_ghi”vàothanhghiWnếu thamsố“noi_den”bằng0hoặcthanhghi“thanh_ghi”nếuthamsố“noi_den” bằng1. Việcđưagiátrịtrongthanhghi“thanh_ghi”vàothanhghi“thanh_ghi”có vẻvônghĩa.ThôngthườngcôngviệcnàydùngđểthiếtlậpcácgiátrịchobitZ (thanhghiSTATUS).Tasẽbànđếnkĩhơnthaotácnàykhixâydựngcácứng dụngliênquanđếnnó. LệnhXORLW Cúpháp:XORLW k (0≤k≤255) Tácdụng:thựchiệnphéptoánXORgiữagiátrịkvảgiátrịtrongthanhghi W.KếtquảđượcchứatrongthanhghiW.Nếukếtquảphéptoánbằng0,bitZ (thanhghiSTATUS)sẽmanggiátrị1.Nếukếtquảphéptoánkhác0,bitZsẽ manggiátrị0. XembảngsauđểbiếtđượckếtquảlogickhithựchiệnphéptoánXOR giữahai thamsốAvàB: A B Kếtquả 0 0 0 0 1 1 1 0 1 1 1 0 Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT03.02 Ngày: 3/6/2006 Trang: 8/14 LệnhXORWF Cúpháp:XORWF thanh_ghi,noi_den Tácdụng:thựchiệnphéptoánXORgiữacácgiátrịchứatrongthanhghiW vàthanhghithanh_ghi.KếtquảđượcchứatrongthanhghiWnếuthamsố «noi_den»manggiátrị0hoặcthanhghi«thanh_ghi»nếuthamsố «noi_den»manggiátrị1. LệnhnàycũngđượchỗtrợbởibitZtrongthanhghiSTATUS. TacómộtsốnhậnxétvềphéptoánXORnhưsau: ‐KhihaibiếnAvàBmanggiátrịgiốngnhau,kếtquảcủaphéptoánlà0 ‐KhihaibiếnAvàBmanggiátrịkhácnhau,kếtcủaquảphéptoánbằng1 Nhưvậy,giảsửAvàBbằngnhau,thìkếtquảphéptoán(AXORB)sẽbằng0,khi đó,trongtrườnghợpcấutạophầncứngcủaviđiềukhiểnPIC,bitZsẽmangmứclogic 1.CầnchúýlàtậplệnhPICkhôngcóphéptoánsosánh,nênlệnhXORLWvàbitZcủa thanhghiSTATUSđượcsửdụngđểxâydựnggiảithuậtthựchiệnviệcsosánhgiữa haisố. 2.1.2 ThanhghiPC. Tađãbiếtkhôngnhưvixửlíhayvihọđiềukhiển8051,doPICđượcthiếtkếtheo lốikiếntrúcHavardnênbộnhớchươngtrìnhvàbộnhớdữliệuđượctáchriêng.Vàđể thaotácđượcvớibộnhớchươngtrìnhtrongviđiềukhiểnPIC,thanhghiPCđượcđưa vàođểdùngchoviệctruyxuấtbộnhớchươngtrình.Đâylàthanhghichứađịachỉcác lệnhtiếptheosẽđượcthựcthitrongbộnhơchươngtrình. ĐốivớiviđiềukhiểnPIC16F877A,thanhghiPClàthanhghi13bit,baogồmhai thanhghiPCL(chứa8bitthấp)vàthanhghiPCH(chứacácbit caocònlại).Tạisaolà 13bit??Câutrảlờilàphảidùng13bitđểmãhóahếtđượcđịachỉcủabộnhớchương trìnhcódunglượnglà8KwordcủaPIC16F877A(8Kword=2 3 x2 10 word=2 13 word). Nhưvậymớibảođảmcóthểtruyxuấtđếnbấtkìônhớnàotrongbộnhớchươngtrình củaviđiềukhiển. TrướcmắttasẽkhôngcầnquantâmtớithanhghiPCH(vìthanhghinàykhông nằmtrongbộnhớdữliệu)màchỉquantâmtớithanhghiPCL.Thanhghinàycótrong bộnhớdữliệu,diềuđócónghĩanóchophépcácthaotácnhưmộtthanhghithông thường(ghi,xóa,truyxuất, ).ThayđổigiátrịtrongthanhghiPCLsẽlàmthayđổi quátrìnhtruyxuấtbộnhớchươngtrìnhcủaviđiềukhiển.Việcthaotáctrênthanhghi PCLcầnhếtsứccẩntrọngvìnósẽlàmthayđổiquátrìnhthựcthilệnhvàlàmảnh Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT03.02 Ngày: 3/6/2006 Trang: 9/14 hưởngnghiêmtrọngđếngiảithuậtcũngnhưtácdụngcủachươngtrình.Tuynhiên nếukiểmsátđược,tacóthểđiềukhiểnmộtcáchlinhđộngdòngchảycủachươngtrình khi viđiềukhiểnhoạtđộng.Cầnkiểmsoátmộtcáchchặtchẽviệcthaotáctrênthanh ghiPCL,đócũnglàyêucầuquantrọngcủakĩthuậtbảng. Cóthểtìmhiểuthêmthông tinvềthanhghinàytrongdatasheetcủanhàsảnxuất. Tacũngnêntìmhiểucácđểbiếtthêmvàđểkiếmchứnglạicácthôngtintrongbai, đồngthờigiúptacóthêmđượcmộtsốkĩnăngtrongviệckhaithácthôngtintrong datasheetcủamộtsảnphẩmđiệntử.Trongbàinàytachỉcầntìmhiểucácthôngtinđủ đểphụcvụchobài. 2.2. Phântíchgiảithuậtkĩthuậtbảng Tasẽphântíchkĩthuậtnàythôngquamộtứngdụng.Yêucầucủaứngdụngnhưứng dụng1màtađãthựchiệnthànhcôngởphần1,đólàchomộtLEDchạytừtráisangphải, nhưnglầnnàythayvìsửdụnglệnhRLFhayRRF,tasẽsửdụngkĩthuậtbảng.Việcứng dụngkĩthuậtbảngtrongtrườnghợpnàykhôngmangtínhchấttốiưu hóagiảithuật,mà chỉmangtínhchấttìmhiểumộtkĩthuậtviếtchươngtìnhmới. Chươngtrìnhtrongvídụ1đượcviếtlạinhưsau: Chươngtrình3.2: ;============================================================================= ;WWW.PICVIETNAM.COM ;Laptrinh: NGUYENTRUNGCHINH ;Ngaybatdau: 23thang01nam2006 ;Ngayhoanthanh: 23thang01nam2006 ;Kiemtrachuongtrinh:picvietnam@googlegroups.com ;Ngaykiemtra: ;SudungvidieukhienMicrochip: PIC16F877A title “chuongtrinh3‐2.asm” processor 16f877a include <p16f877a.inc> __CONFIG _CP_OFF&_WDT_OFF&_BODEN_OFF&_PWRTE_ON& _XT_OSC&_WRT_OFF&_LVP_OFF&_CPD_OFF ;Capnhatvabosung: Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT03.02 Ngày: 3/6/2006 Trang: 10/14 ;Motachuongtrinh: ChuongtrinhdungdedieukhiencacLEDganvao ;PORTBlầnlượtchạytừtráisangphảisaumoikhoangthoi ;gian100ms. ; Sudungkithuatbang ;Motaphancung: 8LEDduocganvaoPORTBthongquacacdientro,cac ;thanhphandikembaogomthachanh,machresetvanguon ;============================================================================= ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ;Khoitaocacbien ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ count1 EQU 0x20 ;Dùngchochươngtrìnhdelay counta EQU 0x21 ;Dùngchochươngtrìnhdelay countb EQU 0x22 ;Dùngchochươngtrìnhdelay count EQU 0x23 ;dùngđểtrabảngdữliệu ;============================================================================= ;CHUONGTRINHCHINH ;============================================================================= ORG 0x000 GOTO start start ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ;KhởitạoPORTB ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ BCF STATUS,RP1 BSF STATUS,RP0 ;chọnBANK1 CLRF TRISB ;PORTB<‐outputs BCF STATUS,RP0 ;chọnBANK0 ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ;Vònglặpchínhcủachươngtrình ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ [...]... Ngày: 3/6/2006 Trang: 14/14 Ứng dụng của kĩ thuật bảng trong việc xây dựng các giải thuật cho chương trình viết cho vi điều khiển PIC cũng rất đa dạng và thường xuyên. Nhận định này sẽ được thể hiện rõ ràng hơn trong các bài sau. Có thể nói đây là một kĩ thuật quan trọng. Thông qua bài này, ta cũng cảm nhận được một nhược điểm của họ vi điều khiển PIC cũng như các vi điều khiển RISC, đó là các lệnh hỗ trợ cho vi điều khiển không nhiều, dẫn đến ... thao tác nên thực hiện để giúp làm quen với kĩ thuật mới này. Như thường lệ, sau đây sẽ là một số kết luận cho bài 3. 3 Kết luận Kĩ thuật bảng được xây dựng dựa trên các thông tin về cấu tạo vi điều khiển PIC, đó là các thông tin về thanh ghi PC (Program Counter) và nguyên tăc hoạt động của nó. Bên cạnh đó là thông tin về lệnh RETLW và cách ứng dụng của nó. Sử dụng kĩ thuật bảng cho phép điều khiển một cách linh hoạt việc thay đổi dữ liệu trong ... thanh ghi W và thông qua đó, các dữ liệu sử dụng trong chương trình cũng sẽ được truy xuất một cách linh hoạt hơn. Giải thuật kĩ thuật bảng cũng đòi hỏi việc sắp xếp và tổ chức chương trình ở một cấp độ cao hơn, bằng chứng là yêu cầu khắt khe trong việc kiểm soát việc thực thi các lệnh trong chương trình và các lệnh hỗ trợ cho kĩ thuật này cũng khá nhiều. Bên cạnh đó là yêu cầu trong việc tổ chức và sắp xếp một cách hợp lí dữ liệu trong bảng. ... ;=========================================================================== ; Các chương trình con ;=========================================================================== ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ; Chương trình con cho kĩ thuật bảng ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ table ADDWF PCL,1 ; cộng giá trị trong thanh ghi W vào thanh ghi ; PCL, kết quả chứa trong thanh ghi PCL ... countb,1 GOTO delay_0 DECFSZ count1,1 GOTO d1 RETURN END ;============================================================================= Ta cùng phân tích giải thuật của chương trình dựa trên các thông tin đã được cung cấp ở phần 2.1. Sau mỗi lần lệnh “CALL table” đuợc gọi, lệnh RETLW trong chương trình con “table” sẽ mang giá trị từ bảng dữ liệu chứa trong thanh ghi W trở về chương trình chính. ... dữ liệu chỉ chứa 8 giá trị), khi đó dòng chương trình thực thi sẽ không còn đúng như ta mong muốn, biến count sau mỗi lần tăng sẽ được so sánh với giá trị “8” thông qua lệnh “XORLW” và bit trạng thái Z được kiểm tra thông qua lệnh “BTFSC STATUS,Z” (giái thuật cho việc so sánh đã được đề cập ở phần trên). Nếu giá trị trong thanh ghi count chưa bằng 8, bit Z chưa mang giá trị 0, lệnh “GOTO Loop1” được bỏ qua và quá trình lấy dữ liệu lai được tiếp tục thông qua các lệnh tiếp theo sau đó. Nếu thanh ghi count đã bằng 8,