PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   Lập nhóm PIC16F877A (http://www.picvietnam.com/forum/showthread.php?t=325)

anhquangngai 16-01-2007 05:01 PM

Trích:

Nguyên văn bởi nhh (Post 1827)
Đấ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


Ko go dc TV thong cam!

co bac nao chay thu chuong trinh nay tren phan cung chua?
Em da chay thu tren phan cung voi Thach Anh 20MHz nhung no ko chay
anh em nao da co chuong trinh chay tot tren phan cung giai ma ban phim thi post len cho em xin dc ko?
chuong trinh bac NHH viet thi chay rat tot khi mo phong bang Proteus nhung khi chay tren phan cung thi ko dc?
Mong bac nao giup em voi??

anhquangngai 20-01-2007 05:53 PM

sao khong co ai tra loi giup vay ?
bun wa!

nhh 23-01-2007 12:04 PM

Trích:

Nguyên văn bởi anhquangngai (Post 6966)
sao khong co ai tra loi giup vay ?
bun wa!

Ở đây, code C, không chơi MPLAP, code chưa được tối ưu lắm!
http://www.picvietnam.com/forum/show...ted=1#post7001

111985 19-03-2007 01:18 PM

anh có thể nói rỏ hơn về sơ đồ hoạt động của mạch ko

omlun 19-03-2007 10:13 PM

chủ đề này khá hấp dẫn!! thanks may anh

tranvanthuong 22-03-2007 08:38 AM

Em có 1 yêu cầu đặt ra nhờ anh giúp đở. em có 1 cái tivi 1 bảng quang báo được điều khiển bằng máy tính.khi nội dung hình ảnh và âm thanh hiện lên tivi thì quang báo bằt đầu chạy chữ về nội dung hình ảnh và âm thanh đó anh chỉ em cách làm đi! EM RẤT MONG ĐưỢC SỰ GIÚP Đở CỦA ANH-THÂN CHÀO ANH

kysikodau 02-04-2007 04:25 AM

Trích:

Nguyên văn bởi nhh (Post 1825)
Đây là chương trình đếm số lần switch on từ 1 đến 9 hiển thị lên LED 7 đoạn,dùng ngắt ngoài RB0 và kỹ thuật bảng.

Code:

;========================================
;Auhor:                NHH
;Date:                02/03/06
;Hardware:        PIC16F877A ,Crystal 10MHz
;========================================
        TITLE                "Count button on by Interrupt RB0"
        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,INTF        ;xoa co int
        INCF        COUNT,F
        MOVLW        d'10'
        SUBWF        COUNT,W
        BTFSS        STATUS,0
        GOTO        $+2
        GOTO        NODISPLAY
        MOVF        COUNT,W
        CALL        TABLE
        MOVWF        PORTD
        retfie                        ; return from interrupt
NODISPLAY                        ;khong hien thi neu vuot qua 9
        MOVLW        d'10'
        CALL        TABLE
        MOVWF        PORTD
        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'11111111'                ;RB0=Input
        MOVWF        TRISB
        CLRF        TRISD
        BCF        OPTION_REG,INTEDG        ;interrupt canh xuong
        BCF        STATUS,RP0                ; chon BANK 0
        BSF        INTCON,GIE                ;cho phep interrupt toan cuc
        BSF        INTCON,INTE                ;cho phep interrupt RB0
       
        CLRF        COUNT       
        MOVLW        d'0'
        CALL        TABLE       
        MOVWF        PORTD
       
        GOTO        $
;----------------------------------------------------------
; Bang tra ve Digital tu 0 den 9 va OFF
; Chi so dau truy cap la 0
; Bang o PAGE 0

        ORG 0x80
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'                ; OFF
               
        END


Ở bài này em muốn sau khi đếm đến 9 thì lặp lại từ đầu, ko biết phải lảm thế nào

tranvanthuong 09-04-2007 09:15 AM

buồn quá không ai giúp đỡ hết,
Mấy anh ơi em đang làm đề tài nghiên cứu 16f877a, em gặp đề tài mừng quá đăng kí ngay vào diễn đàn liền! em làm cái đề tài là quang báo gồm 1 ma trận 8x160 tức gồm 20 matrận led 8x8, bảng quang báo này chạy chử ngược xuôi,từ trung tâm ra,chử rớt từ bên trái qua phải-phải qua trái. các anh giúp em giải thuật với,con 2 tháng nửa là nộp rồi -em đợi tin các anh
thân chào!

loveall 01-06-2007 02:36 AM

xin anhh post tiếp bài cho anh em nhờ!!hôm nay ghé qua room này!thấy bài bác anhh viết hay quá!nên down Protues về tét thử ,thấy mạch chạy ok ,tự nhiên thấy yêu Pic vô cùng!!Xin anhh post thêm ít bài nữa cho anh em có cơ hội học hỏi thêm!!

LeDuc 17-06-2007 07:00 AM

Trong hàm init chọn như sau: dùng pre cho timer0 với tỉ lệ 1:2
Code:

void init(void){
        // khoi tao cho các port
        // Khoi tao cho cac thanh ghi       
        OPTION  = 0x00; // dung prescaler cho timer0 voi ti le la 1:2

        // Khoi tao cho ngat Timer0
        GIE = 1; // cho phep ngat toan cuc
        T0IE = 1; // cho phep ngat timer0
        T0IF = 0; // xoa co ngat timer0
        TMR0 = 6; // khoi tao
}

[/QUOTE]

Bác Ngô ơi giúp em với,trong CCS cờ ngắt timer0 là gì vậy? em đọc trong trong thư viện 16f877a.h kô thấy no định nghĩa chỗ này.Em liều lam đại thì nó ko chịu--->em pó tay.Và cái cho phép ngắt toàn cục ko thấy ai nói đến vậy?Và cách tính khoản giá trị nạp ban đầu cho timer?
VD : em muốn tạo ra một xung với tần số là 10Khz o portD.7 .
f=100Khz =>T=1/10=0.1ms=100micro giây. |
chu ky may dai 1 micro s,
==> cần có 50 micro s tương đương với 50 lần đếm lên của timer
==> giá trị cần nạp cho timer la :
256 - 50=206=0xCE
Nếu là 8051 thi ta nạp vào thanh TH0=0xCE ;
Vậy đối với Pic 16f877A cái giá trị đó giờ phải viết vào đâu vậy bác Ngô ?giúp em với.
Các bác có thể chỉ rõ hơn về vấn đề timer này khi dùng CCS ko vậy?
Thanks các bác .

falleaf 17-06-2007 10:37 AM

Trích:

Nguyên văn bởi tranvanthuong (Post 8153)
buồn quá không ai giúp đỡ hết,
Mấy anh ơi em đang làm đề tài nghiên cứu 16f877a, em gặp đề tài mừng quá đăng kí ngay vào diễn đàn liền! em làm cái đề tài là quang báo gồm 1 ma trận 8x160 tức gồm 20 matrận led 8x8, bảng quang báo này chạy chử ngược xuôi,từ trung tâm ra,chử rớt từ bên trái qua phải-phải qua trái. các anh giúp em giải thuật với,con 2 tháng nửa là nộp rồi -em đợi tin các anh
thân chào!

Bạn cần làm những việc đó, bạn cần đưa ra thiết kế mạch, rồi hỏi xem mạch có vần đề gì chưa. Sau đó lại tiếp tục đưa source code, và hỏi tiếp. Bạn phải tự làm, và tự trình bày, thì người khác mới kiểm tra giúp được. Chẳng lẽ người ta đưa cho bạn mạch in và chương trình luôn?

Chúc vui

david 18-07-2007 12:02 PM

mới học->mong các bác giúp dỡ
 
Bác nào có thể giảng giúp em về phần khởi tạo cho Pic ko? Đằng sau __CONFIG viết nhưng cái gì?em ko hiểu được,mong các bác chỉ giáo

namqn 18-07-2007 06:48 PM

Trích:

Nguyên văn bởi david (Post 10151)
Bác nào có thể giảng giúp em về phần khởi tạo cho Pic ko? Đằng sau __CONFIG viết nhưng cái gì?em ko hiểu được,mong các bác chỉ giáo

Đằng sau __CONFIG viết những cái gì còn tùy thuộc vào chip bạn đang sử dụng là chip nào. Và viết như thế nào cũng có thể còn tùy thuộc vào ngôn ngữ bạn đang sử dụng là ngôn ngữ nào.

Thân,

david 18-07-2007 08:59 PM

em đang tìm hiểu về pic16f877a,viết bằng MPASM,nhưng em ko hiểu đàng sau _CONFIG phải khai báo những gì,căn cứ vào đầu? Mong bác chỉ giáo dùm

namqn 18-07-2007 11:59 PM

Trích:

Nguyên văn bởi david (Post 10165)
em đang tìm hiểu về pic16f877a,viết bằng MPASM,nhưng em ko hiểu đàng sau _CONFIG phải khai báo những gì,căn cứ vào đầu? Mong bác chỉ giáo dùm

Bạn vào thư mục con 'MPASM Suite' của thư mục cài đặt MPLAB, mở tập tin 'P16F877A.INC' và đến cuối tập tin đó, bạn sẽ thấy các tổ hợp đã được định nghĩa cho từ cấu hình. Bạn chỉ dùng 1 trong những khả năng của một nhóm cấu hình, ví dụ chỉ dùng 1 trong các giá trị _CP_ALL và _CP_OFF (cho Code Protection). Tương tự cho các nhóm cấu hình khác. Bạn sẽ AND các giá trị này với nhau, ví dụ:

Code:

        __CONFIG  _HS_OSC & _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _LVP_OFF & _DEBUG_OFF
Thân,


Múi giờ GMT. Hiện tại là 08:19 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam