![]() |
|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#4 |
Đệ tử 9 túi
|
Ngắt ngoài với RB4 đến RB7
Đấy là chương trình quét 16 phím bấm hiển thị lên LED 7 đoạn các số từ 0 đến 9 và các chữ A,b,C,d,E,F.
Xem hình ở file đính kèm! Code:
;======================================== ;Auhor: NHH ;Date: 02/03/06 ;Hardware: PIC16F877A connect PORTB by R220 ;======================================== TITLE "Giai ma ban phim dung interrupt RB4...RB7" PROCESSOR PIC16f877A INCLUDE<P16f877A.inc> __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _CPD_OFF &_LVP_OFF ;======================================== COUNT EQU 0x20 w_temp EQU 0x71 ; variable used for context saving status_temp EQU 0x72 ; variable used for context saving pclath_temp EQU 0x73 ; variable used for context saving ;============================================================================= ;CHUONG TRINH CHINH ;============================================================================= ORG 0000h GOTO MAIN ORG 0004h GOTO INTERRUPT ;==============================INTERRUPT PROGRAM=========================== INTERRUPT movwf w_temp ; save off current W register contents movf STATUS,w ; move status register into W register movwf status_temp ; save off contents of STATUS register movf PCLATH,w ; move pclath register into w register movwf pclath_temp ; save off contents of PCLATH register ;****************************************************************************** BCF INTCON,RBIF MOVLW b'00000001' MOVWF PORTB BTFSS PORTB,4 GOTO DIS_1 MOVLW d'0' ;0 CALL TABLE MOVWF PORTC retfie DIS_1 BTFSS PORTB,5 GOTO DIS_2 MOVLW d'1' ;1 CALL TABLE MOVWF PORTC retfie DIS_2 BTFSS PORTB,6 GOTO DIS_3 MOVLW d'2' ;2 CALL TABLE MOVWF PORTC retfie DIS_3 BTFSS PORTB,7 GOTO DIS_4 MOVLW d'3' ;3 CALL TABLE MOVWF PORTC retfie DIS_4 MOVLW b'00000010' MOVWF PORTB BTFSS PORTB,4 GOTO DIS_5 MOVLW d'4' ;4 CALL TABLE MOVWF PORTC retfie DIS_5 BTFSS PORTB,5 GOTO DIS_6 MOVLW d'5' ;5 CALL TABLE MOVWF PORTC retfie DIS_6 BTFSS PORTB,6 GOTO DIS_7 MOVLW d'6' ;6 CALL TABLE MOVWF PORTC retfie DIS_7 BTFSS PORTB,7 GOTO DIS_8 MOVLW d'7' ;7 CALL TABLE MOVWF PORTC retfie DIS_8 MOVLW b'00000100' MOVWF PORTB BTFSS PORTB,4 GOTO DIS_9 MOVLW d'8' ;8 CALL TABLE MOVWF PORTC retfie DIS_9 BTFSS PORTB,5 GOTO DIS_A MOVLW d'9' ;9 CALL TABLE MOVWF PORTC retfie DIS_A BTFSS PORTB,6 GOTO DIS_b MOVLW d'11' ;A CALL TABLE MOVWF PORTC retfie DIS_b BTFSS PORTB,7 GOTO DIS_C MOVLW d'12' ;b CALL TABLE MOVWF PORTC retfie DIS_C MOVLW b'00001000' MOVWF PORTB BTFSS PORTB,4 GOTO DIS_d MOVLW d'13' ;C CALL TABLE MOVWF PORTC retfie DIS_d BTFSS PORTB,5 GOTO DIS_E MOVLW d'14' ;d CALL TABLE MOVWF PORTC retfie DIS_E BTFSS PORTB,6 GOTO DIS_F MOVLW d'15' ;E CALL TABLE MOVWF PORTC retfie DIS_F BTFSS PORTB,7 GOTO $+4 MOVLW d'16' ;F CALL TABLE MOVWF PORTC retfie ;****************************************************************************** movf pclath_temp,w ; retrieve copy of PCLATH register movwf PCLATH ; restore pre-isr PCLATH register contents movf status_temp,w ; retrieve copy of STATUS register movwf STATUS ; restore pre-isr STATUS register contents swapf w_temp,f swapf w_temp,w ; restore pre-isr W register contents retfie ; return from interrupt ;============== CHUONG TRINH CHINH=============== MAIN BCF STATUS,RP1 BSF STATUS,RP0 ; chon BANK 1 MOVLW b'11110000' ;RB0=Input MOVWF TRISB CLRF TRISC BCF STATUS,RP0 ; chon BANK 0 BSF INTCON,GIE BSF INTCON,RBIE ;cho phep ngat RB4...RB7 MOVLW d'10' CALL TABLE MOVWF PORTC LOOP MOVLW b'00001111' MOVWF PORTB GOTO LOOP ;---------------------------------------------------------- ; Bang tra ve Digital tu 0 den 9 va A....F ; Chi so dau truy cap la 0 ; Bang o PAGE 0 ORG 0x90 TABLE ;---------------------------------------------------------- ADDWF PCL, F ; bat dau tai 0x80 RETLW b'00111111' ; 0 RETLW b'00000110' ; 1 RETLW b'01011011' ; 2 RETLW b'01001111' ; 3 RETLW b'01100110' ; 4 RETLW b'01101101' ; 5 RETLW b'01111101' ; 6 RETLW b'00000111' ; 7 RETLW b'01111111' ; 8 RETLW b'01101111' ; 9 RETLW b'00000000' ; NODISPLAY RETLW b'01110111' ; A RETLW b'01111100' ; B RETLW b'00111001' ; C RETLW b'01011110' ; d RETLW b'01111001' ; E RETLW b'01110001' ; F END
__________________
Ngày mai bắt đầu từ ngày hôm nay Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này: http://www.picvietnam.com/forum//showthread.php?t=1263 thay đổi nội dung bởi: nhh, 09-03-2006 lúc 12:12 PM. |
![]() |
![]() |
|
|
![]() |
||||
Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
TUT về USART trong PIC16F877A | mafd_47a | MPASM | 16 | 19-02-2025 05:32 AM |
TUT ve I2C ( pic16f877a ) | mafd_47a | MPASM | 28 | 28-01-2025 10:45 PM |
Bộ so sánh và PWM cho PIC16F877A | anhquangngai | Cơ bản về vi điều khiển và PIC | 24 | 08-09-2012 09:00 AM |
Pic16f877a TỪ DỄ TỚi KhÓ | ntc | Cơ bản về vi điều khiển và PIC | 373 | 23-05-2009 10:24 PM |
CCS C for PIC16F877A | nhh | Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) | 405 | 24-04-2008 12:00 PM |