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)

ngulapphuong 19-06-2006 12:37 PM

Nhờ các bác cho em hỏi về cách định địa chỉ gián tiếp, thanh ghi SFR, INDF và những vấn đề liên quan

falleaf 19-06-2006 12:39 PM

Trích:

Nguyên văn bởi pb1
bác fall ơi, xem giúp em cái !.Em đã tải file lên rồi, tại sao không thấy file đâu?
em định tải file lên để nhờ các bác chỉ giáo tí.

gửi email cho mình, mình tải lên lại cho, nhớ ghi rõ là gửi lên luồng nào nhé

Dang Khoa 15-07-2006 06:45 PM

xin cho minh hoi: cac ban dung chuong trinh gi ma mo phong duoc cac mach dien dem len vay, hay dong ho do ma. cam on nhieu

friends 17-07-2006 09:41 PM

lap trinh pic 16f876a
 
cac anh oi , cho em noi la : lap trinh voi pic 16f877a cung giong het voi lap trinh cho con pic 16f876a phai khong? a`, phan mem asm de viet cho pic down o dau vay cac anh

namqn 17-07-2006 10:33 PM

Câu hỏi 1: Đúng, ngoại trừ PIC16F877A có một số chân và thanh ghi tương ứng mà PIC16F876A không có.

Câu hỏi 2: vào link sau download MPLAB IDE, trong đó có trình hợp dịch, bộ mô phỏng, và một số thứ khác
http://www.microchip.com/stellent/id...&part=SW007002

Thân,

dohoangnam 18-07-2006 09:39 AM

tôi thấy tất cả các diễn đàn đều rất hay. Cả chuyện bác F muốn giúp các bạn học qua một công việc cụ thể nữa. Tất cả đều là ý tưởng tốt. Nhưng tôi có chút ý kiến. Học về 1 con 16f877a này cũng tốt. Nhưng chúng ta học bằng các dự án như bác F làm thì tốt hơn học "chay" thế này. Nhưng mới cái bắt đầu mà bác F đã yêu cầu nặng anh em quá. Anh em sv chủ yếu là ít tiền. Đấy là cái thứ nhất (kể cả vài trăm ngàn thôi cũng khó khăn), thứ 2 tôi thấy công việc ấy cũng hơi nặng so với sức chung của mọi người. Hy vọng các anh em admin quan tâm hơn nữa.
Thân.

newuser 03-08-2006 09:10 AM

Trích:

Nhờ các bác cho em hỏi về cách định địa chỉ gián tiếp, thanh ghi SFR, INDF và những vấn đề liên quan
FSR là nơi chứa địa chỉ (tương đương R0 và R1 nếu bạn học 8051)
INDF là nơi chứa kết quả hoặc giá trị mà FSR trỏ đến (tương tự @R0 hoặc @R1).

spirit 07-09-2006 07:19 PM

Giup em ve bus trong Proteus
 
Anh nhh chỉ giúp em cách vẽ bus nhiều tín hiệu cùng đi chung với nhau như dây màu xanh nước biển anh vẽ trong proteus với, em đang bí phần đó
Thanks

nhh 09-09-2006 11:12 AM

Trích:

Nguyên văn bởi spirit (Post 4820)
Anh nhh chỉ giúp em cách vẽ bus nhiều tín hiệu cùng đi chung với nhau như dây màu xanh nước biển anh vẽ trong proteus với, em đang bí phần đó
Thanks

Ví dụ như bạn muốn nối bus chung từ VDK đến led 7 đoạn:
Sau khi đưa 2 linh kiện ra, bạn nhấp vào biểu tượng bus.Click vào điểm 1, rồi double click vào điểm 2 để kết thúc.Nếu muốn vẽ điểm trung gian thì cứ click vào điểm đó là được.Sau đó nối dây bình thường.
Để chương trình nhận ra chân nào của VDK nối đến chân nào của led 7 thanh, bạn cần đặt nhãn cho các cặp chân tương ứng trên 2 linh kiện này.

Vào biểu tượng wire label:
Click vào 1 dây bạn muốn đặt label:
Làm tương tự cho dây còn lại:
Tiếp tục cho các cặp chân khác.

Chúc thành công !

spirit 09-09-2006 05:44 PM

Cám ơn anh rất nhiều

falleaf 09-09-2006 09:21 PM

Trích:

Nguyên văn bởi dohoangnam (Post 4035)
tôi thấy tất cả các diễn đàn đều rất hay. Cả chuyện bác F muốn giúp các bạn học qua một công việc cụ thể nữa. Tất cả đều là ý tưởng tốt. Nhưng tôi có chút ý kiến. Học về 1 con 16f877a này cũng tốt. Nhưng chúng ta học bằng các dự án như bác F làm thì tốt hơn học "chay" thế này. Nhưng mới cái bắt đầu mà bác F đã yêu cầu nặng anh em quá. Anh em sv chủ yếu là ít tiền. Đấy là cái thứ nhất (kể cả vài trăm ngàn thôi cũng khó khăn), thứ 2 tôi thấy công việc ấy cũng hơi nặng so với sức chung của mọi người. Hy vọng các anh em admin quan tâm hơn nữa.
Thân.

Câu chuyện học PIC của F, chắc F cũng đã kể cả trăm lần rồi, trên chat và cả trên diễn đàn. Lúc trước F học PIC, hoàn toàn là học chay, không có con PIC trong tay, tự ngồi nghĩ tự viết chương trình, tự làm mô phỏng với MPLAB, tự nhìn các con số nhảy để mà hình dung.

Đó là chuyện hồi trước F học, bây giờ các bạn có nhiều công cụ để học, thoải mái hơn, thông tin nhiều hơn. Điều đó là tốt hơn rất nhiều. Như vậy học chay hay không chay, tùy thuộc vào mỗi người. Có người thì thông minh theo kiểu tưởng tượng (vd F cũng là kiểu đó, cho nên ngồi tưởng tượng tốt). Có người thông minh theo kiểu trực quan (vd như F nhìn vào cái máy mà nó dập bụp bụp bụp, F khó mà học hiểu cái đó, nhưng có nhiều người nhìn vào cái máy thôi, lại hiểu ngay và có thể chế cái máy tương tự).... Đó là cách người ta nói về trí thông minh của loài người, mỗi người có một khả năng thông minh khác nhau.

Do vậy, F không cho rằng cách học nào tốt hơn cách học nào, mà chỉ khuyên mọi người chọn cách học tốt nhất cho chính mình.

Về vấn đề tài chính để học. Sự thực là picvietnam đã hỗ trợ 120K (theo giá thị trường) cho một đề tài nghiên cứu của các bạn, mà đề tài đó theo kinh nghiệm thực hành của các bạn kể trên khi khoảng 200 - 300K.

Đúng là con số khá lớn đối với một số bạn sinh viên. Nhưng nếu các bạn không nhân những cơ hội này đầu tư vào để học, để thực hành, thì các bạn sẽ tốn nhiều cái 100K vào những việc vô bổ khác. Hãy can đảm nói với bạn gái của mình rằng, anh muốn dành một chút tiền để đầu tư vào việc học.

Nếu các bạn thực sự học và làm việc, khi các bạn kết thúc dự án, và có kết quả khả dĩ vì những tìm hiểu học tập của các bạn. F sẽ mua lại mô hình đó cho các bạn. (miễn sao đừng bán mắc cho F, vì F không có tiền nhiều đâu, chỉ là giúp đỡ các bạn thực sự khó khăn thôi, hihi..).

Nói để các bạn thấy việc này. Để làm cái mô hình của F ở bên Hàn, giáo sư đã phải bỏ 5000$ tới thời điểm này mà chưa ra cái hình thù gì cả. Trong khi đó, ở VN mà làm thì cái mô hình F đang làm về haptics 1 bậc tự do, thì thực ra chỉ là 2 cái động cơ, mấy miếng nhôm lớn. Cùng lắm chỉ 3 triệu động là căng. Tất nhiên động cơ và driver mua mới thì tốn kém, còn mua ở nhà mình chơi đồ cũ, nhưng có ảnh hưởng gì nhiều đâu.

Vậy nên việc nghiên cứu ở nước ngoài, còn khó khăn hơn ta nhiều, về nhiều khía cạnh, nhất là chi phí đầu tư thử nghiệm. Có những cái quá cao cấp, thì chúng ta không làm được, nhưng tốn 500K đi nữa, để học một bộ điều khiển mà 90% các bộ điều khiển công nghiệp phải sử dụng thì F không nghĩ nó là quá nhiều. Và nó rẻ ngang với việc theo một lớp học PIC. Trong khi học cái này thì có thể giữ được mô hình, lại có thêm 2 con PIC...

Các bạn tính toán thật kỹ vì cơ hội không có lần thứ hai đâu :). Đây là lần đầu tiên, F thực hiện việc này, chủ yếu để thử nghiệm mô hình dự án mở trên mạng, sau đó, tất nhiên, nếu có thể, F sẽ kêu gọi những nhà tài trợ cho các dự án kiểu như thế này. Lúc đó sẽ tốt hơn cho các bạn, nhưng bây giờ tiếng nói của F chưa đủ mạnh với những nhà tài trợ, vì ... các bạn chưa làm xong dự án :).

Chúc vui.

spirit 11-09-2006 10:46 PM

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


Anh nhh cho em hỏi phát: theo em biết ngắt xảy ra ở chân RB0 khi có sự thay đổi mức logic trên nó, như vậy khi ta bấm phím thì RB0 sẽ bằng 0 ( lúc đầu RB0 bằng 1) sẽ tạo ngắt nhưng khi ta nhả phím ra thì lúc đó chân RB0 sẽ chuyển mức logic từ 0 lên 1 ngay ( chưa kể đến trường hợp rung phím nữa )
==> không lẽ lúc đó con Pic sẽ vào ngắt tiếp hả anh ?
À quên nữa,trong chương trình của em thấy anh viết thiếu lệnh nhảy tới đoạn pop các giá trị của thanh khi W,Status,Pclath trong ngắt nữa, theo em ta nên đặt nhãn đoạn này là Pop và thay thế các lệnh retfie ở trên bằng lệnh goto pop
@nhh : anh viết rất hay,tiếp tục viết nhiều bài như thế nữa đi anh

sonny 12-09-2006 12:13 PM

Bác nào biết về A/D converter trong PIC16F877A xin chỉ dùm. Tui đã đọc rồi nhưng thấy khó hiểu quá, nhất là chế độ sleep của nó và cơ chế biến đổi từ tín hiệu analog thành 10 bit đầu ra.
Cám ơn các bác nhiều!

nhh 12-09-2006 09:52 PM

Trích:

Nguyên văn bởi spirit (Post 4899)
Anh nhh cho em hỏi phát: theo em biết ngắt xảy ra ở chân RB0 khi có sự thay đổi mức logic trên nó, như vậy khi ta bấm phím thì RB0 sẽ bằng 0 ( lúc đầu RB0 bằng 1) sẽ tạo ngắt nhưng khi ta nhả phím ra thì lúc đó chân RB0 sẽ chuyển mức logic từ 0 lên 1 ngay ( chưa kể đến trường hợp rung phím nữa )
==> không lẽ lúc đó con Pic sẽ vào ngắt tiếp hả anh ?
À quên nữa,trong chương trình của em thấy anh viết thiếu lệnh nhảy tới đoạn pop các giá trị của thanh khi W,Status,Pclath trong ngắt nữa, theo em ta nên đặt nhãn đoạn này là Pop và thay thế các lệnh retfie ở trên bằng lệnh goto pop
@nhh : anh viết rất hay,tiếp tục viết nhiều bài như thế nữa đi anh

Ngắt ngoài có 2 kiểu, bằng thay đổi trạng thái chân:
+ Ngắt cạnh xuống: low to high
Code:

BCF        OPTION_REG,INTEDG        ;interrupt cạnh xuống
+ Ngắt cạnh lên: high to low
Code:

BSF        OPTION_REG,INTEDG        ;interrupt cạnh lên
Khi khai báo ngắt, ta phải khai báo cho pic biết sử dụng ngắt nào.

Vậy ở đây, khi thả button lên, tuy có thay đổi trạng thái chân RB0, vẫn không có ngắt xảy ra.

Mình không viết bằng MPASM nữa, nên bạn qua luồng "PIC16F877A từ dễ tới khó", đọc các tutorial của mod Chính.

Chúc thành công!

spirit 01-10-2006 11:51 PM

Trích:

Nguyên văn bởi nhh (Post 2082)
Code:

;========================================
;Author:                NHH
;Date:                02/03/06
;Hardware:        PIC16F877A ,Crystal 4MHz
;========================================
        PROCESSOR        PIC16f877A
        INCLUDE<P16f877A.inc>
        __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _CPD_OFF &_LVP_OFF
;========================================
        COUNT                EQU        0x20
        COUNT1                EQU        0x21
        COUNT2                EQU        0x22
        COUNT3                EQU        0x23
        COUNT4                EQU        0x24
        COUNT5                EQU        0x25
        COUNT6                EQU        0x26
        COUNT7                EQU        0x27
       
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        0x00
        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
;******************************************************************************
        DECFSZ        COUNT,F
        GOTO        CHECK
        MOVLW        d'1'
        MOVWF        COUNT       
        INCF        COUNT1,F
        GOTO        CHECK       
BACK        BCF        INTCON,TMR0IF        ;xoa co ngat TMR0
;******************************************************************************
        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

CHECK       
        CALL        CHECK1
        CALL        CHECK2
        CALL        CHECK3
        CALL        CHECK4
        CALL        CHECK5
        GOTO        BACK
;==============        CHUONG TRINH CHINH===============
MAIN
        BCF        STATUS,RP1
        BSF        STATUS,RP0                ; chon BANK 1
        MOVLW        b'11111111'                ;PORTA=Input
        MOVWF        TRISA
        MOVLW        b'00000001'                ;RB0=Input
        MOVWF        TRISB
        CLRF        TRISD
;------------------------------
;Khoi tao ngat Timer0
;------------------------------
        BSF        OPTION_REG,PS0                ;TMR0 rate 1: 64
        BSF        OPTION_REG,PS1
        BCF        OPTION_REG,PS2
        BCF        OPTION_REG,PSA                ;Prescaler is assigned to the Timer0 module
        BCF        OPTION_REG,T0CS               
        BCF        STATUS,RP0                ;select BANK 0

        BSF        INTCON,GIE
        BSF        INTCON,TMR0IE
        BCF        INTCON,TMR0IF

        MOVLW        d'246'
        MOVWF        COUNT
        CLRF        COUNT1
        CLRF        COUNT2
        CLRF        COUNT3
        CLRF        COUNT4
        CLRF        COUNT5
        CLRF        COUNT6
        CLRF        COUNT7
LOOP
        CALL        DISPLAY1
        CALL        DISPLAY2
        CALL        DISPLAY3
        CALL        DISPLAY4
        CALL        DISPLAY5
        CALL        DISPLAY6
       
        BTFSC        PORTB,0
        GOTO        LOOP
        GOTO        MODIFY
MODIFY
        BCF        INTCON,GIE
       
        BTFSC        PORTA,0
        GOTO        $+2
        CALL        LED34
        BTFSC        PORTA,1
        GOTO        $+2
        CALL        LED56
        BTFSS        PORTB,0
        GOTO        MODIFY
        BSF        INTCON,GIE
        GOTO        LOOP
LED34
        INCF        COUNT3,F
        MOVLW        d'10'
        SUBWF        COUNT3,W
        BTFSS        STATUS,0
        RETURN
        CLRF        COUNT3
        INCF        COUNT4,F
        MOVLW        d'6'
        SUBWF        COUNT4,W
        BTFSS        STATUS,0
        RETURN
        CLRF        COUNT4
        RETURN
LED56
        INCF        COUNT5,F
        MOVLW        d'4'
        SUBWF        COUNT5,W
        BTFSS        STATUS,0
        RETURN
        MOVLW        d'2'
        SUBWF        COUNT6,W
        BTFSS        STATUS,0
        GOTO        LED5
        CLRF        COUNT6
        RETURN
       
LED5
        MOVLW        d'10'
        SUBWF        COUNT5,W
        BTFSS        STATUS,0
        GOTO        MODIFY
        CLRF        COUNT5
        INCF        COUNT6,F
        GOTO        MODIFY

;============CHUONG TRINH CON===
DISPLAY1
        MOVLW        b'11111101'
        MOVWF        PORTB
        MOVF        COUNT1,W
        CALL        TABLE
        MOVWF        PORTD
        CALL        DECREATE
        CLRF        PORTB
        CLRF        PORTD               
        RETURN
DISPLAY2
        MOVLW        b'11111011'
        MOVWF        PORTB
        MOVF        COUNT2,W
        CALL        TABLE
        MOVWF        PORTD
        CALL        DECREATE
        CLRF        PORTB
        CLRF        PORTD
        RETURN
DISPLAY3
        MOVLW        b'11110111'
        MOVWF        PORTB
        MOVF        COUNT3,W
        CALL        TABLE
        MOVWF        PORTD
        CALL        DECREATE
        CLRF        PORTB
        CLRF        PORTD
        RETURN
DISPLAY4
        MOVLW        b'11101111'
        MOVWF        PORTB
        MOVF        COUNT4,W
        CALL        TABLE
        MOVWF        PORTD
        CALL        DECREATE
        CLRF        PORTB
        CLRF        PORTD
        RETURN
DISPLAY5
        MOVLW        b'11011111'
        MOVWF        PORTB
        MOVF        COUNT5,W
        CALL        TABLE
        MOVWF        PORTD
        CALL        DECREATE
        CLRF        PORTB
        CLRF        PORTD
        RETURN
DISPLAY6
        MOVLW        b'10111111'
        MOVWF        PORTB
        MOVF        COUNT6,W
        CALL        TABLE
        MOVWF        PORTD
        CALL        DECREATE
        CLRF        PORTB
        CLRF        PORTD
        RETURN

DECREATE
        DECFSZ        COUNT7
        GOTO        DECREATE
        RETURN

;........................................................
CHECK1
        MOVLW        d'10'
        SUBWF        COUNT1,W
        BTFSS        STATUS,0
        GOTO        BACK
        CLRF        COUNT1
        INCF        COUNT2,F
        RETURN
CHECK2
        MOVLW        d'6'
        SUBWF        COUNT2,W
        BTFSS        STATUS,0
        GOTO        BACK
        CLRF        COUNT2
        INCF        COUNT3,F
        RETURN
CHECK3
        MOVLW        d'10'
        SUBWF        COUNT3,W
        BTFSS        STATUS,0
        GOTO        BACK
        CLRF        COUNT3
        INCF        COUNT4,F
        RETURN
CHECK4
        MOVLW        d'6'
        SUBWF        COUNT4,W
        BTFSS        STATUS,0
        GOTO        BACK       
        CLRF        COUNT4
        INCF        COUNT5,F
        RETURN
CHECK5
        MOVLW        d'10'
        SUBWF        COUNT5,W
        BTFSS        STATUS,0
        GOTO        BACK       
        CLRF        COUNT5
        INCF        COUNT6,F
        RETURN
CHECK6
        INCF        COUNT5,F
        MOVLW        d'4'
        SUBWF        COUNT5,W
        BTFSS        STATUS,0
        RETURN
        MOVLW        d'2'
        SUBWF        COUNT6,W
        BTFSS        STATUS,0
        CALL        LED_5
        CLRF        COUNT6
        RETURN
       
LED_5
        MOVLW        d'10'
        SUBWF        COUNT5,W
        BTFSS        STATUS,0
        RETURN
        CLRF        COUNT5
        INCF        COUNT6,F
        RETURN
;----------------------------------------------------------

; Bang tra ve Digital tu 0 den 9 va OFF
; Chi so dau truy cap la 0
; Bang o PAGE 0

        ORG 07F0h
TABLE
;----------------------------------------------------------
        ADDWF        PCL, F                        ; bat dau tai 0x90
        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'00111111'                ; 0
               
        END


Anh NHH xem lại chương trình nay đi,em mắc mạch như trong hình ( mô phỏng bằng Proteus )nhưng chương trình chạy không đúng.

newuser 03-10-2006 09:21 AM

Trích:

Ngắt ngoài có 2 kiểu, bằng thay đổi trạng thái chân:
+ Ngắt cạnh xuống: low to high

Code:
BCF OPTION_REG,INTEDG ;interrupt cạnh xuống+ Ngắt cạnh lên: high to low

Code:
BSF OPTION_REG,INTEDG ;interrupt cạnh lênKhi khai báo ngắt, ta phải khai báo cho pic biết sử dụng ngắt nào.

Vậy ở đây, khi thả button lên, tuy có thay đổi trạng thái chân RB0, vẫn không có ngắt xảy ra.
Nếu mình nhớ không nhầm thì bit INTEDG chỉ xác định sườn tác động cho ngắt ngoài thôi mà! Đâu có liên quan gì đến ngắt thay đổi đâu.
Theo đúng nghĩa của ngắt thay đổi, sườn lên hay sườn xuống đều phải gây ngắt và việc lựa chọn sườn tác động nào để gây ngắt là do người lập trình quyết định. Các bạn có thể tham khảo ở một appnote của Microchip vận dụng ngắt onchange để dùng như ngắt ngoài sẽ rõ.

picpicpic 07-10-2006 07:43 PM

Sao không thấy bác nào viết về ADC, PWM vậy nhỉ !

spirit 15-10-2006 01:12 PM

Giúp em với
 
Trích:

Nguyên văn bởi nhh (Post 4912)
Ngắt ngoài có 2 kiểu, bằng thay đổi trạng thái chân:
+ Ngắt cạnh xuống: low to high
Code:

BCF        OPTION_REG,INTEDG        ;interrupt cạnh xuống
+ Ngắt cạnh lên: high to low
Code:

BSF        OPTION_REG,INTEDG        ;interrupt cạnh lên
Khi khai báo ngắt, ta phải khai báo cho pic biết sử dụng ngắt nào.

Vậy ở đây, khi thả button lên, tuy có thay đổi trạng thái chân RB0, vẫn không có ngắt xảy ra.

Mình không viết bằng MPASM nữa, nên bạn qua luồng "PIC16F877A từ dễ tới khó", đọc các tutorial của mod Chính.

Chúc thành công!

+Ra vậy,em hiểu rồi nhưng còn đối với các ngắt RB4..RB7 thì sao hả anh , em đọc trong datasheet không thấy Microchip nhắc đến ngắt cạnh lên hay xuống mà chỉ nói xảy ra ngắt khi có sự thay đổi mức LOGIC trên chân.
+Khi cấu hình là ngõ vào thì cần phải có lệnh BCF option_reg,not_RBPU để cho phép điện trở kéo lên bên trong phải không ạ? Nhưng em thấy bài quét phím 4x4 của anh em thấy không có lệnh này.
+Chương trình quét phím 4x4 của anh khi mô phỏng Proteus thì chính xác nhưng khi em đem ra mạch thật test thử thì không đúng nữa.(không biết anh đã test thử trên mạch thật chưa?) à,khi em đem ra mạch thật test thì ngõ xuất LED 7 đoạn là Port D chứ không phải Port C .
Mong anh giải đáp giúp em một số thăc mác trên,chờ tin anh
@NHH:Anh học BK Tphcm phải không ? Nếu anh học ở đó thì anh có thể cho em gặp riêng không ?
@picpicpic :Bạn qua dientuvietnam.net xem sao

spirit 17-10-2006 05:38 PM

Hic,anh NHH đâu rồi trả lời giúp em đi

newuser 18-10-2006 06:53 PM

Trích:

Ra vậy,em hiểu rồi nhưng còn đối với các ngắt RB4..RB7 thì sao hả anh , em đọc trong datasheet không thấy Microchip nhắc đến ngắt cạnh lên hay xuống mà chỉ nói xảy ra ngắt khi có sự thay đổi mức LOGIC trên chân.
mình đã nói ở trên đây thôi, chẳng có bit nào xác định sườn tác động của ngắt onchange cả, sườn lên hay sườn xuống đều có thể gây ngắt, nếu có bit để mà chọn sườn tác động thì còn gì là ngắt do thay đổi trạng thái (onchange)? muốn ngắt xảy ra theo sườn nào thì bạn phải viết chương trình thôi

spirit 18-10-2006 08:02 PM

Trích:

Nguyên văn bởi newuser (Post 5575)
mình đã nói ở trên đây thôi, chẳng có bit nào xác định sườn tác động của ngắt onchange cả, sườn lên hay sườn xuống đều có thể gây ngắt, nếu có bit để mà chọn sườn tác động thì còn gì là ngắt do thay đổi trạng thái (onchange)? muốn ngắt xảy ra theo sườn nào thì bạn phải viết chương trình thôi

Mình xem trong datasheet thì thấy như sau:
OPTION_REG REGISTER (ADDRESS 81h, 181h)

Bit6: INTEDG : Interrupt Edge Select bit
1 = Interrupt on rising edge of RB0/INT pin
0 = Interrupt on falling edge of RB0/INT pin

Vậy thì có bit INTEDG chọn cạnh ngắt lên hay xuống mà Newuser ?

Mình cũng đã xem apnote AN552:Implementing Wake-up on Key Stroke của Microchip rồi cũng thấy không nói về bit xác định sườn ngắt chân RB4...RB7

Chắc có lẽ như bạn nói là không có bit để chọn cạnh ngắt như RB0 mà mình phải xác định trong chương trình của mình.

Còn chương trình quét phím 4x4 của anh NHH trên mình đã test thử trên Proteus thì chạy tốt nhưng khi đem ra mạch thật thì không chạy được
Bạn test giùm minh nhé Newuser,mình cũng đã thử viết lại nhiều lần rồi nhưng vãn chưa được.
Mình có nhiều vấn đề vẫn chưa thông lắm bạn Newuser giúp mình nhé

newuser 18-10-2006 10:58 PM

1 Attachment(s)
Trích:

Nguyên văn bởi spirit (Post 5577)
Mình xem trong datasheet thì thấy như sau:
OPTION_REG REGISTER (ADDRESS 81h, 181h)

Bit6: INTEDG : Interrupt Edge Select bit
1 = Interrupt on rising edge of RB0/INT pin
0 = Interrupt on falling edge of RB0/INT pin

Vậy thì có bit INTEDG chọn cạnh ngắt lên hay xuống mà Newuser ?

Mình cũng đã xem apnote AN552:Implementing Wake-up on Key Stroke của Microchip rồi cũng thấy không nói về bit xác định sườn ngắt chân RB4...RB7

Chắc có lẽ như bạn nói là không có bit để chọn cạnh ngắt như RB0 mà mình phải xác định trong chương trình của mình.

Còn chương trình quét phím 4x4 của anh NHH trên mình đã test thử trên Proteus thì chạy tốt nhưng khi đem ra mạch thật thì không chạy được
Bạn test giùm minh nhé Newuser,mình cũng đã thử viết lại nhiều lần rồi nhưng vãn chưa được.
Mình có nhiều vấn đề vẫn chưa thông lắm bạn Newuser giúp mình nhé

trời đất, có ai nói là không có bit chọn sườn tác động cho ngắt ngoài (RB0/INT) đâu? Ngắt onchange chỉ có ở các chân của PORTB<4:7> thôi, đúng không?
để đảm bảo là không có ngắt không mong muốn xảy ra mỗi khi nhả phím thì bạn phải viết thêm một đoạn code kiểm tra trạng thái chân gây ngắt onchange, chắc chắn rằng trạng thái chân này đã trở về mức logic ban đầu(trạng thái trước khi nhấn phím), nếu chưa về trạng thái ban đầu thì chưa xoá cờ báo ngắt. Tôi không biết đoạn chương trình của bạn nhh, nhưng theo tôi suy đoán,Proteus đã lý tưởng hoá việc nhấn phím -->không khử nảy phím nhấn.
bạn đọc appnote này xem

spirit 18-10-2006 11:02 PM

Thanks newuser đúng là cái mình cần.

pisco 18-10-2006 11:23 PM

pic
 
em cung moi nghien cuu ve con pic6f877a , em cung thay mach nap cua may bac nhung sao ko thay co bo nguon cung cap cho no vay

spirit 19-10-2006 06:59 PM

Đề nghị bạn post tiếng việt có dấu,nếu bạn ở tpHCM bạn có thể qua cửa hàng (của PICVIETNAM ) : STH ở đường Lạc Long Quân gần chỗ giao với Âu Cơ

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:51 AM.

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