intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Vi điều khiển Microchip phần 6

Chia sẻ: Danh Ngoc | Ngày: | Loại File: PDF | Số trang:18

132
lượt xem
39
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tham khảo tài liệu 'vi điều khiển microchip phần 6', kỹ thuật - công nghệ, điện - điện tử phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả

Chủ đề:
Lưu

Nội dung Text: Vi điều khiển Microchip phần 6

  1. BCF STATUS,RP0 ; choïn BANK0 Loop1 CLRF count ; reset thanh ghi chöùa giaù trò ñeám Loop2 MOVF count, 0 ; ñöa giaù trò ñeám vaøo thanh ghi W CALL Table ; goïi chöông trình con Table MOVWF PORTB ; xuaát giaù trò chöùa trong thanh ghi W ra PORTB CALL delay100ms ; goïi chöông trình con delay100ms INCF count, 0 ; taêng giaù trò than ghi count vaø chöùa keát quaû trong ; thanh ghi W XORLW d’8’ ; so saùnh thanh ghi W vôùi giaù trò 8 BTFSC STATUS,Z ; kieåm tra bit Z (Zero) GOTO Loop1 ; nhaûy veà label Loop1 neáu W = 0 INCF count, 1 ; thöïc thi leänh naøy neáu W khaùc 0 GOTO Loop2 Table ADDWF PCL,1 ; coäng gí trò thanh ghi W vaøo thanh ghi PCL, keát ; quaû chöùa trong thanh ghi PCL RETLW b’10000000’ RETLW b’01000000’ RETLW b’00100000’ RETLW b’00010000’ RETLW b’00001000’ RETLW b’00000100’ RETLW b’00000010’ RETLW b’00000001’ delay100ms 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 DECFSZ count1,1 GOTO d1 ; delay 100ms
  2. RETURN ; trôû veà chöông trình chính END ; keát thuùc chöông trình ÔÛ phaàn tröôùc ta ñaõ töøng ñeà caäp ñeán leänh RETLW nhöng khi ñoù leänh naøy chæ coù taùc duïng nhö leänh RETURN. Tuy nhieân trong tröôøng hôïp naøy leänh RETLW coù moät vai troø cuï theå hôn laø mang döõ lieäu töø baûng döõ lieäu trôû veà chöông trình chính vaø xuaát ra PORTB döõ lieäu vöøa mang veà ñoù. Sau moãi laàn mang döõ lieäu veà bieán count seõ taêng giaù trò ñeám leân. Giaù trò ñeám ñöôïc ñöa vaøo thanh ghi W ñeå coäng vaøo thanh ghi PCL. Thanh ghi PCL laø thanh ghi chöùa giaù trò boä ñeám chöông trình, giaù trò töø bieán count ñöôïc coäng vaøo thanh ghi PCL thoâng qua thanh ghi W seõ ñieàu khieån chöông trình nhaûy tôùi ñuùng ñòa chæ caàn laáy döõ lieäu töø baûng döõ lieäu vaøo thanh ghi W vaø thanh ghi W mang döõ lieäu ñoù trôû veà chöông trình chính troâng qua leänh RETLW. Ñeå ñeà phoøng tröôøng hôïp giaù trò bieán count coäng vaøo thanh ghi PCL seõ ñieàu khieån chöông trình ñeán vò trí vöôït qua vò trí cuûa baûng döõ lieäu (tröôøng hôïp naøy xaûy ra khi bieán count mang giaù trò lôùn hôn 8, khi ñoù vò trí leänh caàn thöïc thi do boä ñeám chöông trình chæ ñeán khoâng coøn ñuùng nöõa), ta so saùnh bieán count vôùi giaù trò 8. Neáu bieán count mang giaù trò 8 thì pheùp toaùn XOR giöõa bieán cao vaø giaù trò seõ coù keát quaû baèng 0 vaø côø Z trong thanh ghi STATUS seõ ñöôïc set. Luùc naøy ta caàn reset laïi bieán count baèng caùch nhaûy veà label Loop1. Vieäc duøng baûng döõ lieäu trong tröôøng hôïp naøy laøm cho chöông trình trôû neân daøi hôn, quaù trình thöïc thi chöông trình laâu hôn vì boä ñeám chöông trình lieân tuïc bò thay ñoåi giaù trò, tuy nhieân ta cuõng thaáy ñöôïc moät öu ñieåm cuûa vieäc duøng baûng döõ lieäu laø cho pheùp ta saép xeáp boá trí döõ lieäu moät caùch linh hoaït. Dieàu naøy theå hieän qua vieäc chæ caàn thay ñoåi döõ lieäu trong baûng döõ lieäu, ta seõ coù ñöôïc nhieàu caùch ñieàu khieån caùc LED saùng hay taét theo nhieàu qui luaät khaùc nhau chöù khoâng chæ ñôn thuaàn laø dòch LED saùng sang traùi hoaëc sang phaûi. ÖÙng duïng sau ñaây cho ta thaáy roõ hôn hieäu quaû cuûa baûng döõ lieäu. ÖÙng duïng4 2: Töông töï nhö öùng duïng 1, nhöng laàn naøy ta cho LED chaïy töø vò trí giöõa sang hai phía sau moãi khoaûng thôøi gian delay 100 ms. Chöông trình cho öùng duïng naøy hoaøn toaøn töông töï nhö trong öùng duïng, ta chæ caàn thay ñoåi baûng döõ lieäu moät caùch thích hôïp. ; Chöông trình 4.1.6 ; Chöông trình ñieàu khieån hieån thò LED processor 16f877a ; khai baùo vi ñieàu khieån include ; header file ñính keøm __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF
  3. ; khai baùo caùc “Configuration bits” ;----------------------------------------------------------------------------------------------- ;Khai baùo bieán ;----------------------------------------------------------------------------------------------- count1 EQU 0x20 ; duøng cho chöông trình delay counta EQU 0x21 ; duøng cho chöông trình delay countb EQU 0x22 ; duøng cho chöông trình delay count EQU 0x23 ; duøng ñeå tra baûng döõ lieäu ORG 0x000 ; ñòa chæ baét ñaàu chöông trình GOTO start start ; chöông trình chính baét ñaàu taïi ñaây BCF STATUS,RP1 BCF STATUS,RP0 ; choïn BANK0 CLRF PORTB ; xoùa PORTB BSF STATUS,RP0 ; choïn BANK1 MOVLW 0x00 MOVWF TRISB ; PORTB
  4. RETLW b’10000001’ RETLW b’01000010’ RETLW b’00100100’ RETLW b’00011000’ RETLW b’00100100’ delay100ms 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 DECFSZ count1,1 GOTO d1 ; delay 100ms RETURN ; trôû veà chöông trình chính END ; keát thuùc chöông trình ÖÙng duïng 4.3: Test chöùc naêng Input/Output cuûa caùc pin cuûa vi ñieàu khieån. ÔÛ caùc öùng duïng tröôùc ta chæ laøm moät vieäc laø xuaát tín hieäu ñieàu khieån ra caùc PORT theo moät soá qui taéc ñònh saün naøo ñoù. Trong öùng duïng naøy ta seõ phaùt trieån theâm moät chöùc naêng nöõa cuûa caùc PORT laø khaû naêng nhaän tín hieäu ñieàu khieån töø beân ngoaøi. Vi ñieàu khieån seõ ñoïc tín hieäu 0 (ñieän aùp 0 V) vaø 1 (ñieän aùp 5 V) ñöôïc taïo ra baèng caùch söû duïng caùc coâng taéc aán töø caùc pin RB0:RB3 cuûa PORTB , sau ñoù kieåm tra xem coâng taéc naøo ñöôïc aán vaø baät LED töông öùng vôùi coâng taéc ñoù (caùc LED naøy ñöôïc boá trí ôû caùc pin RB7:RB4) saùng leân. Ñeå kieåm tra ñöôïc öùng duïng naøy ta caàn xaây döïng sô ñoà maïch nhö sau:
  5. HI HI R8 R7 R6 R5 R9 U1 D1 R1 1 40 RB7/PGD MCLR/VPP 39 RB6/PGC 2 38 D2 RA0/AN0 RB5 R2 SW5 3 37 RA1/AN1 RB4 4 36 RA2/AN2/VREF-/CVREFRB3/PGM 5 35 D3 RA3/AN3/VREF+ RB2 6 34 RA4/T0CLK/C1OUT RB1 7 33 R3 RA5/AN4/SS/C20UT RB0/INT D4 0 8 RE0/RD/AN5 9 32 R4 HI RE1/WR/AN6 VDD 10 31 RE2/CS/AN7 GND SW1 11 0 HI VDD 12 30 RD7/PSP7 GND 29 SW2 RD6/PSP6 13 28 0 OSC1/CLK RD5/PSP5 14 27 OSC2/CLKOUT RD4/PSP4 SW3 4 MHz 15 26 RC0/T1OSO/T1CLK RC7/RX/DT 16 25 RC1/T1OSI/CCP2 RC6/TX/CK 17 24 SW4 RC2/CCP1 RC5/SDO 18 23 RC3/SCK/SCL RC4/SDI/SDA 19 22 RD0/PSP0 RD3/PSP3 20 21 0 RD1/PSP1 RD2/PSP2 PIC16F877A Hình 4.2 Maïch test chöùc naêng I/O cho öùng duïng 3. Chöông trình vieát cho öùng duïng naøy nhö sau: ;Chöông trình 4.1.7 processor 16f877a include __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF ;-------------------------------------------------------------------------------------------------------------- ;Khai baùo haèng ;-------------------------------------------------------------------------------------------------------------- SW1 EQU 0 SW2 EQU 1 SW3 EQU 2 SW4 EQU 3 LED1 EQU 4 LED2 EQU 5
  6. LED3 EQU 6 LED4 EQU 7 ORG 0x000 GOTO start start BCF STATUS,RP1 BCF STATUS,RP0 CLRF PORTB BSF STATUS,RP0 MOVLW b'00001111' ; thieát laäp chöùc naêng I/O cho töøng pin trong ;PORTB MOVWF TRISB BCF STATUS,RP0 loop BTFSS PORTB,SW1 ; kieåm tra coâng taéc 1 CALL switch1 ; thöc thi leänh naøy neáu coâng taéc 1 ñöôïc aán BTFSS PORTB,SW2 ; neáu coâng taéc ; 1 khoâng ñöôïc aán, kieåm tra coâng ; taéc 2 CALL switch2 ; tieáp tuïc quaù trình ñoái vôùi caùc coâng taéc coøn laïi BTFSS PORTB,SW3 CALL switch3 BTFSS PORTB,SW4 CALL switch4 GOTO loop switch1 CLRF PORTB BSF PORTB,LED1 RETURN switch2 CLRF PORTB BSF PORTB,LED2 RETURN switch3 CLRF PORTB BSF PORTB,LED3 RETURN switch4 CLRF PORTB
  7. BSF PORTB,LED4 RETURN END Trong chöông trình treân ta öùng duïng thuaät toaùn hoûi voøng thoâng qua voøng laëp loop trong phaàn chöông trình chính. Khi coâng taéc khoâng ñöôïc nhaán, möùc logic taïi caùc pin noái vôùi coâng taéc laø möùc 1. Khi coâng taéc ñöôïc aán, caùc pin treân sem nhö noái ñaát vaø mang möùc logic 0. Ta chæ vieäc kieåm tra lieân tuïc traïng thaùi logic cuûa caùc pin ñoù vaø baät LED töông öùng vôùi coâng taéc thoâng qua caùc chöông trình con switch1, switch2, switch3 vaø swtich4 khi phaùt hieän moät coâng taéc naøo ñoù ñöôïc aán. Tuy nhieân caàn chuù yù laø phaûi thieát laäp traïng thaùi I/O thích hôïp cho töøng pin trong PORTB (thieát laäp RB3:RB0 laø input, RB7:RB4 laø output). Moät ñieåm quan trong caàn löu yù laø caùc coâng taéc aán thöôøng bò “doäi”, töùc laø khi aán xuoáng hoaëc thaû ra, ñieän aùp taïi caùc coâng taéc seõ phaûi traûi qua moät giai ñoaïn quaù ñoä, ñieän aùp seõ dao ñoäng khoâng oån ñònh trong moät khoaûng thôøi gian naøo ñoù, ngoaøi ra traïng thaùi logic cuûa pin cuõng seõ thay ñoåi do moät taùc ñoäng töùc thôøi töø moät tröôøng beân ngoaøi maø khoâng phaûi do ta aán coâng taéc. Caùc yeáu toá treân seõ laøm aûnh höôûng tôùi hoaït ñoäng cuûa vi ñieàu khieån. Ñeå khaéc phuïc nhöôïc ñieåm treân ta coù hai phöông phaùp: Phöông phaùp choáng “doäi” baèng phaàn cöùng: ta theâm caùc tuï ñieän vaøo caùc coâng taéc ñeå loïc bôùt caùc tín hieäu nhoû gaây nhieãu vaø caùc tín hieäu khoâng oån ñònh trong thôøi gian quaù ñoä. Phöông phaùp naøy cuõng hieäu quaû nhöng gaây toán keùm veà linh kieän vaø maïch nguyeân lí trôû neân phöùc taïp. Phöông phaùp choáng “doäi” baèng phaàn meàm: ta cho vi ñieàu khieån delay trong moät thôøi gian ngaén vaø kieåm tra xem coâng taéc coøn ñöôïc aán khoâng, neáu coâng taéc thöïc söï coøn ñöôc aán thì môùi tieán haønh caùc thao taùc töông öùng vôùi coâng taéc ñoù. Chöông trình caûi tieán ñeå khaéc phuïc nhöôïc ñieåm treân coù theå ñöôïc vieát nhö sau: ;Chöông trình 4.1.8 processor 16f877a include __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF ;-------------------------------------------------------------------------------------------------------------- ;Khai baùo haèng ;-------------------------------------------------------------------------------------------------------------- SW1 EQU 0 SW2 EQU 1 SW3 EQU 2 SW4 EQU 3
  8. LED1 EQU 4 LED2 EQU 5 LED3 EQU 6 LED4 EQU 7 ;-------------------------------------------------------------------------------------------------------------- ;Khai baùo bieán ;-------------------------------------------------------------------------------------------------------------- count1 EQU 0x20 counta EQU 0x21 countb EQU 0x22 ;-------------------------------------------------------------------------------------------------------------- ;Caùc khai baùo khaùc ;-------------------------------------------------------------------------------------------------------------- SWdel SET del150 ; gaùn SWdel vôùi label del150 ;-------------------------------------------------------------------------------------------------------------- ;Chöông trình ;-------------------------------------------------------------------------------------------------------------- ORG 0x000 GOTO start start ; vò trí baét ñaàu chöông trình chính BCF STATUS,RP1 BCF STATUS,RP0 ; choïn BANK0 CLRF PORTB BSF STATUS,RP0 ; choïn BANK1 MOVLW b'00001111' MOVWF TRISB BCF STATUS,RP0 ; choïn BANK0 loop ; voøng laëp kieåm tra coâng taùc naøo ñöôïc aán BTFSS PORTB,SW1 ; kieåm tra SW1 CALL switch1 ; nhaûy tôùi chöông trình con switch1 neáu ; SW1 ñöôïc aán BTFSS PORTB,SW2 ; neáu SW1 khoâng ñöôïc aán tieáp tuïc kieåm tra ; SW2 CALL switch2 ; thao taùc töông töï nhö SW1 BTFSS PORTB,SW3 CALL switch3 BTFSS PORTB,SW4 CALL switch4 GOTO loop switch1
  9. CLRF PORTB ; xoùa PORTB CALL SWdel ; goïi chöông trình delay del150 BTFSC PORTB,SW1 ; kieåm tra coâng taéc 1 coøn nhaán hay khoâng RETURN ; neáu khoâng coøn nhaán thì trôû veà chöông ; trình chính led1_ON BSF PORTB,LED1 ; baät LED1 saùng BTFSC PORTB,SW1 ; xaùc nhaän laïi traïng thaùi coâng taéc 1 RETURN ; trôû veà chöông trình chính neáu coâng taéc ; khoâng coøn aán GOTO led1_ON ; tieáp tuïc giöõ LED1 saùng neáu coâng taéc coøn ; ñöôïc aán switch2 ; thao taùc töông töï vôùi caùc coâng taéc coøn laïi CLRF PORTB CALL SWdel BTFSC PORTB,SW2 RETURN led2_ON BSF PORTB,LED2 BTFSC PORTB,SW2 RETURN GOTO led2_ON switch3 CLRF PORTB CALL SWdel BTFSC PORTB,SW3 RETURN led3_ON BSF PORTB,LED3 BTFSC PORTB,SW3 RETURN GOTO led3_ON switch4 CLRF PORTB CALL SWdel BTFSC PORTB,SW4 RETURN led4_ON BSF PORTB,LED4
  10. BTFSC PORTB,SW4 RETURN GOTO led4_ON ;--------------------------------------------------------------------------------------------------------------- ;Chöông trình delay caûi tieán cho pheùp nhieàu khoaûng thôøi gian delay khaùc nhau ;--------------------------------------------------------------------------------------------------------------- del0 RETURN del1 MOVLW d'1' GOTO delay del5 MOVLW d'5' GOTO delay del10 MOVLW d'10' GOTO delay del20 MOVLW d'20' GOTO delay del50 MOVLW d'50' GOTO delay del100 MOVLW d'100' GOTO delay del150 MOVLW d'150' GOTO delay del200 MOVLW d'200' GOTO delay delay MOVWF count1 d1 ; taïo thôøi gian delay 1 mS MOVLW 0xC7 MOVWF counta MOVLW 0x01 MOVWF countb delay_0 DECFSZ counta,1
  11. GOTO $+2 DECFSZ countb,1 GOTO delay_0 DECFSZ count1,1 GOTO d1 RETURN END Vôùi chöông trình treân, thôøi gian aán coâng taéc phaûi laâu hôn thôøi gian delay ñöôïc chæ ñònh bôûi haèng soá SWdel do coâng taéc seõ ñöôïc kieåm tra laïi traïng thaùi sau thôøi gian delay . Neáu thôøi gian aán coâng taéc khoâng ñaït yeâu caàu, thao taùc baät LED töông öùng vôùi coâng taéc ñoù saùng leân seõ khoâng ñöôïc thöïc hieän vaø vi ñieàu khieån seõ tieáp tuïc quaù trình kieåm tra traïng thaùi caùc coâng taéc coøn laïi. Thôøi gian delay caàn ñöôïc kieåm ñònh baèng thöïc nghieäm vaø ñöôïc aán ñònh moät caùch thích hôïp ñeå choáng “doäi” moät caùch hieäu quaû, ñoàng thôøi cuõng khoâng ñöôïc laâu quaù, nhö vaäy seõ gaây söï khoù chòu trong vieäc söû duïng coâng taéc do phaûi aán coâng taéc trong moät khoaûng thôøi gian ñuû laâu. Vieäc thay ñoåi thôøi gian delay trong chöông trình coù theå ñöôïc thöïc hieän ñôn giaûn baèng caùch thay ñoåi label cuûa chöông trình delay gaùn cho tham soá SWdel. Thöïc ra ta coù theå tröïc tieáp ñöa tham soá thôøi gian delay tröïc tieáp vaøo thanh ghi count1 maø khoâng caàn thoâng qua tham soá SWdel, ñieàu ñoù laøm cho chöông trình trôû neân daøi vaø phöùc taïp hôn. Tuy nhieân chöông trình treân cuõng ñaõ cho ta thaáy ñöôïc moät ñieåm khaùc bieät giöõa leänh “EQU” vaø leänh “SET”, giuùp ta hieåu roõ hôn vaø söû duïng moät caùch thích hôïp caùc leänh treân trong caùc öùng duïng khaùc. ÖÙng duïng 4. 4: öùng duïng toång hôïp. Trong öùng duïng naøy ta seõ taäp hôïp laïi taát caû caùc kó naêng ñöôïc söû duïng trong caùc öùng duïng tröôùc. Yeâu caàu ñaët ra cuõng nhö öùng duïng 3, tuy nhieân beân caïnh vieäc baät LED töông öùng vôùi coâng taéc saùng leân, ta phaûi tieáp tuïc thöïc hieän moät thao taùc nöõa laø ra leänh cho vi ñieàu khieån hieån thò 8 LED ñöôïc gaén vaøo PORTD theo moät thöù töï töông öùng. Cuï theå nhö sau: AÁn SW1: LED1 saùng, 8 LED PORTD chaïy töø traùi sang phaûi (LED saùng chaïy). AÁn SW2: LED2 saùng, 8 LED PORTD chaïy töø traùi sang phaûi (LED taét chaïy). AÁn SW3: LED3 saùng, 8 LED PORTD chaïy töø traùi sang phaûi (2 LED saùng chaïy). AÁn SW4: LED4 saùng, 8 LED PORTD chaïy töø traùi sang phaûi (2 LED taét chaïy). Ñeå test ñöôïc öùng duïng naøy, ta caàn phaùt trieån theâm maïch test cuûa öùng duïng 3 baèng caùch theâm vaøo 8 LED ôû PORTD thoâng qua caùc ñieän trôû. Cuï theå nhö sau:
  12. HI HI R9 R8 R7 R6 R5 U1 R1 D1 1 40 MCLR/VPP RB7/PGD 39 R2 RB6/PGC D2 2 38 RA0/AN0 RB5 SW5 3 37 RA1/AN1 RB4 R3 D3 4 36 RA2/AN2/VREF-/CVREFRB3/PGM 5 35 RA3/AN3/VREF+ RB2 R4 D4 6 34 RA4/T0CLK/C1OUT RB1 7 33 RA5/AN4/SS/C20UT RB0/INT SW1 0 8 RE0/RD/AN5 9 32 SW2 HI RE1/WR/AN6 VDD 10 31 RE2/CS/AN7 GND SW3 11 0 HI VDD 12 30 SW4 GND RD7/PSP7 29 RD6/PSP6 13 28 0 OSC1/CLK 0.33 K RD5/PSP5 D5 14 27 OSC2/CLKOUT RD4/PSP4 0.33 K D6 4 MHz 15 26 RC0/T1OSO/T1CLK RC7/RX/DT 16 25 0.33 K RC1/T1OSI/CCP2 RC6/TX/CK D7 17 24 RC2/CCP1 RC5/SDO 18 23 RC3/SCK/SCL RC4/SDI/SDA 0.33 K D8 19 22 RD0/PSP0 RD3/PSP3 0.33 K D9 20 21 RD1/PSP1 RD2/PSP2 0.33 K D10 PIC16F877A 0.33 K D11 0.33 K D12 0 Hình 4.3 Maïch test öùng duïng 4. Chöông trình vieát cho maïch test naøy cuõng töông töï nhö öùng duïng 3 nhöng ñöôïc theâm vaøo phaàn hieän thò LED ôû PORTD. Ta söû duïng thuaät toaùn baûng döõ lieäu ñeå hieån thò LED. Chöông trình cuï theå nhö sau: ;Chöông trình 4.1.9 processor 16f877a include __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF ;--------------------------------------------------------------------------------------------------------------- ;Khai baùo caùc haèng soá ;--------------------------------------------------------------------------------------------------------------- SW1 EQU 0 SW2 EQU 1 SW3 EQU 2
  13. SW4 EQU 3 LED1 EQU 4 LED2 EQU 5 LED3 EQU 6 LED4 EQU 7 ;---------------------------------------------------------------------------------------------------------------- ;Khai baùo bieán ;---------------------------------------------------------------------------------------------------------------- count EQU 0x20 ; bieán duøng cho quaù trình dòch LED count1 EQU 0x21 ; caùc bieán duøng cho chöông trình delay counta EQU 0x22 countb EQU 0x23 ;---------------------------------------------------------------------------------------------------------------- ;Chöông trình ;---------------------------------------------------------------------------------------------------------------- ORG 0x000 GOTO start start ; vò trí baét ñaàu chöông trình chính BCF STATUS,RP1 BCF STATUS,RP0 ; choïn BANK0 CLRF PORTB CLRF PORTD BSF STATUS,RP0 ; choïn BANK1 MOVLW b'00001111' MOVWF TRISB MOVLW 0x00 MOVWF TRISD BCF STATUS,RP0 ; choïn BANK0 loop1 CLRF count ; reset bieán count CALL check_key ; goïi chöông trình con check_key loop2 MOVF count,W ; ñöa gía trò bieán count vaøo thanh ghi W BTFSC PORTB,LED1 ; kieåm tra traïng thaùi bit LED1 CALL table1 ; goïi chöông trình con “table1” neáu bit ; “LED1” mang giaù trò baèng 1 BTFSC PORTB,LED2 ; tieáp tuïc kieåm tra bit LED2 neáu bit LED1 baèng 0 CALL table2 ; thao taùc töông töï vôùi caùc bit chæ thò traïng thaùi caùc ; SW coøn laïi BTFSC PORTB,LED3 CALL table3
  14. BTFSC PORTB,LED4 CALL table4 MOVWF PORTD ; ñöa giaù trò töø thanh ghi W sau khi quay trôû veà töø ; baûng döõ lieäu ra PORTD CALL delay ; goïi chöông trình con delay INCF count,0 ; taêng giaù trò bieán count ñeå kieåm tra XORLW d'14' ; so saùnh bieán count vôùi giaù trò 14 BTFSC STATUS,Z ; kieåm tra côø Z (Zero) GOTO loop1 ; nhaûy tôùi label “loop1” neáu Z baèng 1 (giaù trò ; bieán “count” baèng 14) INCF count,1 ; taêng giaù trò bieán “count” neáu Z baèng 0 (giaù trò ; bieán “count” khoâng baèng 14) GOTO loop2 ; sau ñoù nhaûy tôùi label “loop2” table1 ; caùc baûng döõ lieäu duøng cho phaàn dòch LED ADDWF PCL,f RETLW b'10000000' RETLW b'01000000' RETLW b'00100000' RETLW b'00010000' RETLW b'00001000' RETLW b'00000100' RETLW b'00000010' RETLW b'00000001' RETLW b'00000010' RETLW b'00000100' RETLW b'00001000' RETLW b'00010000' RETLW b'00100000' RETLW b'01000000' table2 ADDWF PCL,f RETLW b'01111111' RETLW b'10111111' RETLW b'11011111' RETLW b'11101111' RETLW b'11110111' RETLW b'11111011' RETLW b'11111101' RETLW b'11111110'
  15. RETLW b'11111101' RETLW b'11111011' RETLW b'11110111' RETLW b'11101111' RETLW b'11011111' RETLW b'10111111' table3 ADDWF PCL,f RETLW b'11000000' RETLW b'01100000' RETLW b'00110000' RETLW b'00011000' RETLW b'00001100' RETLW b'00000110' RETLW b'00000011' RETLW b'00000011' RETLW b'00000110' RETLW b'00001100' RETLW b'00011000' RETLW b'00110000' RETLW b'01100000' RETLW b'11000000' table4 ADDWF PCL,f RETLW b'00111111' RETLW b'10011111' RETLW b'11001111' RETLW b'11100111' RETLW b'11110011' RETLW b'11111001' RETLW b'11111100' RETLW b'11111100' RETLW b'11111001' RETLW b'11110011' RETLW b'11100111' RETLW b'11001111' RETLW b'10011111' check_key ; chöông trình con check_key kieåm tra traïng thaùi
  16. BTFSS PORTB,SW1 ; caùc SW, sau ñoù baät LED töông öùng vôùi SW ñoù CALL switch1 ; saùng neáu SW ñoù ñöôïc aán. Traïng thaùi caùc LED BTFSS PORTB,SW2 ; coù taùc duïng nhö caùc bit côø hieäu khi xaùc ñònh thao CALL switch2 ; taùc dòch LED töông öùng vôùi SW ñöôïc aán BTFSS PORTB,SW3 CALL switch3 BTFSS PORTB,SW4 CALL switch4 RETURN switch1 CLRF PORTB BSF PORTB,LED1 RETURN switch2 CLRF PORTB BSF PORTB,LED2 RETURN switch3 CLRF PORTB BSF PORTB,LED3 RETURN switch4 CLRF PORTB BSF PORTB,LED4 RETURN delay ; chöông trình delay moät khoaûng thôøi gian 250 ms MOVLW d'250' MOVWF count1 d1 MOVLW 0xC7 MOVWF counta MOVLW 0x01 MOVWF countb delay_0 DECFSZ counta,1 GOTO $+2 DECFSZ countb,1 GOTO delay_0
  17. DECFSZ count1,1 GOTO d1 RETURN END Trong chöông trình naøy ta lôïi duïng caùc bit traïng thaùi cuûa caùc LED ñeå duøng nhö caùc côø hieäu ñeå xaùc ñònh thao taùc dòch LED töông öùng vôùi SW ñöôïc nhaán trong voøng laëp “loop1” vaø “loop2”. Caùc thuaät toaùn nhö baûng döõ lieäu, kieåm tra traïng thaùi coâng taéc,… ñeàu ñaõ ñöôïc ñeà caäp ñeán ôû caùc phaàn tröôùc, vaán ñeà ñaët ra trong chöông trình naøy chæ laø saép xeáp vaø toå chöùc hôïp lí thöù töï caùc thao taùc vaø caùc thuaät toaùn. Tuy nhieân neáu ñoïc kó chöông trình treân ta seõ phaùt hieän moät ñieåm baát hôïp lí ôû vò trí ñaët leänh “CALL check_key”. Neáu ñaët ôû vò trí nhö chöông trình treân, vi ñieàu khieån seõ chæ kieåm tra caùc SW ngay taïi thôøi ñieåm keát thuùc quaù trình dòch LED. Nhö vaäy muoán thay ñoåi thao taùc queùt LED ta phaûi aán SW ñuùng ngay taïi thôøi ñieåm ñoù, ñieàu naøy gaây nhieàu khoù khaên vaø taïo söï baát hôïp lí so vôùi thöïc teá. Ñeå khaéc phuïc ta chæ vieäc ñaët leänh ñoù vaøo trong voøng laëp “loop2”, khi ñoù traïng thaùi caùc SW seõ ñöôïc caäp nhaät thöôøng xuyeân hôn sau moãi laàn dòch LED maø khoâng phaûi chôø cho ñeán khi keát thuùc moät quaù trình dòch LED. Tôùi giai ñoaïn naøy xem nhö ta keát thuùc nhöõng thao taùc ñôn giaûn nhaát khi söû duïng vi ñieàu khieån PIC16F877A. Trong phaàn naøy ta chæ söû duïng duy nhaát vi ñieàu khieån PIC vaø caùc PORT I/O ñeå xaây döïng caùc öùng duïng. Keå töø phaàn sau ta seõ keát hôïp vi ñieàu khieån PIC vôùi caùc thieát bò ngoaïi vi khaùc ñeå phaùt huy toái ña khaû naêng cuûa vi ñieàu khieån. 4.2 VI ÑIEÀU KHIEÅN PIC16F877A VAØ IC GHI DÒCH 74HC595 Muïc ñích söû duïng IC 74HC595 laø naâng cao soá löôïng pin output cuûa vi ñieàu khieån. Thay vì phaûi truy xuaát tröïc tieáp moät giaù trò naøo ñoù ra caùc PORT I/O, ta coù theå truy xuaát giaùn tieáp thoâng qua IC 74HC595. Tuy nhieân vieäc tröôùc tieân laø phaûi tìm hieåu xem IC 74HC595 hoaït ñoäng nhö theá naøo vaø caùch ñieàu khieån noù ra sao. Hình sau laø sô ñoà khoái cuûa IC:
  18. Hình 4.4 Sô ñoà khoái IC 74HC595 Thöc chaát ñaây laø IC ghi dòch vôùi 8 bit ngoõ ra QH:QA vôùi choát döõ lieäu 8 bit. Döõ lieäu chæ ñöôïc ñöa vaøo qua 1 pin SER vaø ñöôïc ñieàu khieån bôûi caùc pin RCK (pin ñieàu khieån choát döõ
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2