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)

david 19-07-2007 10:17 AM

Cảm ơn bác đã Reply,nhưng em muốn biết tác dụng của từng cấu hình,ví dụ như _BODEN_ON, _PWRTE_ON,_DEBUG_OFF ... có ảnh hương như thế nào khi mình lập trình?Bác co thế chỉ giúp em tác dụng của từng cái ko?Mới học nên nhiều cái chưa biết lắm ---->Mong bác nhiệt tình giúp đỡ

bien_van_khat 19-07-2007 11:03 AM

Mình khuyên bạn nên hỏi "coi mấy cái này ở đâu?"

Bạn mở datasheet của con 877 mục 14.1 "Configuration bits".

david 29-07-2007 11:32 AM

Cho em hỏi chương trình này!
 
Em mới bắt đầu với Pic,và đây là chường trình đếm xung vào ở chân RA0,hiện thị led7segment nối vào PortB,dùng kỹ thuật bảng.Em dùng MPLAP dịch thì không có lỗi,nhưng khi mô phỏng bằng Proteus thì nó không chạy,mong các bác chỉ cho chỗ sai.


Code:

;========================================================
                                TITLE                "Dem xung"
                                PROCESSOR        P16F877A
                                INCLUDE                <P16F877A.inc>
                                __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF & _LVP_OFF
                               
;==========================================================
;Khai bao bien                :
        DEM                  EQU        0x20                       
                       
;============================================================
;Chuong trinh chinh:
;============================================================

                ORG                        0x0000
                GOTO                        MAIN
                ORG                                0x0005
MAIN
                BANKSEL                        TRISA
                MOVLW                        b'00111111'
                MOVWF                        TRISA
                CLRF                        TRISB
                BANKSEL                        PORTA
                MOVLW                        b'00111111'
                MOVWF                        PORTB                                       
                CLRF                        DEM
LOOP
                BTFSC                        PORTA,0
                GOTO                        $-1       
                BTFSS                        PORTA,0
                GOTO                        $-1
                INCF                        DEM,1
                MOVF                        DEM,0
                XORWF                        d'10'
                BTFSC                        STATUS,Z
                GOTO                        MAIN
                MOVF                        DEM,0
                CALL                        TABLE
                MOVWF                        PORTB
                GOTO                        LOOP
                                                                       
                       
                ORG                        0x800

TABLE
                ADDWF                        PCL,1
                RETLW                        b'00111111'               
                RETLW                        b'00000110'
                RETLW                        b'01011011'       
                RETLW                        b'01001111'               
                RETLW                        b'01100110'               
                RETLW                        b'01101101'
                RETLW                        b'01111101'               
                RETLW                        b'00000111'               
                RETLW                        b'01111111'               
                RETLW                        b'01101111'               

END


david 29-07-2007 11:36 AM

Các bác có gắng đọc nhe,em chỉnh cho nó gần lại mộ chút,không ngờ post lên nó lại sát nhau như thê.

namqn: bạn vào edit lại post trên, sẽ thấy tôi thêm các tag [code] và [ /code] để định dạng code của bạn.

namqn 29-07-2007 07:27 PM

Trích:

Nguyên văn bởi david (Post 10396)
Em mới bắt đầu với Pic,và đây là chường trình đếm xung vào ở chân RA0,hiện thị led7segment nối vào PortB,dùng kỹ thuật bảng.Em dùng MPLAP dịch thì không có lỗi,nhưng khi mô phỏng bằng Proteus thì nó không chạy,mong các bác chỉ cho chỗ sai.
...

Bảng của bạn đặt ở 0x0800 mà trong chương trình của bạn lại không xử lý thanh ghi PCLATH.

Thân,

david 30-07-2007 12:00 AM

Gửi bác namqn:
Em bắt đâu bảng ở địa chỉ 0x80 thì không phải xử lí PCLATH đúng không ạ,nhưng khi bắt đầu mô phỏng thì thì led7seg hiện 0(cai này thì đúng)nhưng khi em bấm BUTTON thì nó cứ trơ ra,hic
Bác chỉ dùm em chỗ sai cái,nó làm em mất hứng mấy ngày nay

namqn 30-07-2007 01:10 AM

Trích:

Nguyên văn bởi david (Post 10408)
Gửi bác namqn:
Em bắt đâu bảng ở địa chỉ 0x80 thì không phải xử lí PCLATH đúng không ạ,nhưng khi bắt đầu mô phỏng thì thì led7seg hiện 0(cai này thì đúng)nhưng khi em bấm BUTTON thì nó cứ trơ ra,hic
Bác chỉ dùm em chỗ sai cái,nó làm em mất hứng mấy ngày nay

Khi mô phỏng các ví dụ liên quan đến hiển thị thì bạn nên giảm thời gian delay và chỉnh lại tần số của chip trong tầm vài trăm kHz. Lý do là có khả năng không mô phỏng các quá trình trong chip theo thời gian thực được.

Với những bài toán loại này tôi luôn chạy mạch thật.

Thân,

uydanh 10-11-2007 11:20 AM

Các bạn, cho mình hỏi một câu ngớ ngẩn, nhưng thật sự không hiểu chổ này thì không làm ăn gì được hết : một port nào đó (như PORTB của pic6f877a chẳng hạn), việc cho phép nó kéo lên hay không kéo lên Vdd có ý nghĩa như thế nào? Mình thật sự không hiểu chổ này. Cảm ơn các bạn rất nhiều.

caodangvtc 13-12-2007 05:39 PM

cảm ơn các anh nhiều

Dolphin 13-12-2007 06:41 PM

Điện trở kéo lên thiết lập mức lôgíc lối vào của khối mạch khi không có thiết bị ngoài nối với lối vào. Ví dụ khi set điện trở kéo lên thì có thể mắc button trực tiếp vào port mà không cần điện trở kéo lên bên ngoài.

damhaicnn 17-12-2007 10:40 AM

có bác nào hiểu rõ cụm từ 16 bit trong 16 bit - computer thì nói hộ em với.em tìm kiếm trên mạng mà chỉ toàn tiếng anh. hơi khó hiểu.
cảm ơn rất nhiều

vandungevn 19-12-2007 12:14 AM

16 bits đó nói về hệ thống sử lí 16 bít. trong Computer thì là hệ thống máy tính 16 bits, như bây giờ Pen TUM là 64 bits đó

bien_van_khat 20-12-2007 08:38 PM

Trích:

Nguyên văn bởi damhaicnn (Post 13388)
có bác nào hiểu rõ cụm từ 16 bit trong 16 bit - computer thì nói hộ em với.em tìm kiếm trên mạng mà chỉ toàn tiếng anh. hơi khó hiểu.
cảm ơn rất nhiều

Ở đây 4bit, 8bit, 16bit, 32bit hay 64bit chỉ độ rộng của bus dữ liệu, là số bit của thanh ghi chứa. Nói một cách hình ảnh thì đây là số bit mà CPU có thể xử lý đồng thời.

VD: với máy tính 8bit, bộ nhớ dữ liệu được tổ chức theo đơn vị BYTE, các thanh ghi cũng có độ lớn 1 BYTE, các phép toán số học, logic, di chuyển dữ liệu cũng xử lý trên dữ liệu có độ rộng 8 bit.

ducchotdai 21-12-2007 12:22 AM

giúp em với
 
em tìm kiếm bản dịch con Pic 16F877A mấy hôm nay rồi mà ko tìm được,bác nào có gửi giùm vào mail cho em được ko???cảm ơn nhiêu nhiều nhiều nhiều.....có bản trong diễn đàn kêu Download được nhưng khi dow thử thì yêu cầu mật khẩu nên không dow được.gửi vô mail giùm nha trananhduc2004@yahoo.com

le.nhatcuong 21-12-2007 11:50 PM

xin các bác chỉ giup mình lập trình C ngắt ngoài "External interrupt" cua 16F877A
minh dang lam luan van tot nghiep, dung PIC de tinh CosY (cốt phi) cua mang dien ha the bang cách đo độ rộng xung vuông
Xin chân thành cảm ơn

le.nhatcuong 22-12-2007 12:07 AM

ngắt ngoài RB0!!!!!
 
Trích:

Nguyên văn bởi le.nhatcuong (Post 13472)
xin các bác chỉ giup mình lập trình C ngắt ngoài "External interrupt" cua 16F877A
minh dang lam luan van tot nghiep, dung PIC de tinh CosY (cốt phi) cua mang dien ha the bang cách đo độ rộng xung vuông
Xin chân thành cảm ơn

help me!!!

nhh 22-12-2007 10:31 AM

Trích:

Nguyên văn bởi le.nhatcuong (Post 13472)
xin các bác chỉ giup mình lập trình C ngắt ngoài "External interrupt" cua 16F877A
minh dang lam luan van tot nghiep, dung PIC de tinh CosY (cốt phi) cua mang dien ha the bang cách đo độ rộng xung vuông
Xin chân thành cảm ơn

Nếu bạn dùng CCS C: http://www.picvietnam.com/forum//sho...p?t=357&page=2

dovanhiep 22-12-2007 07:32 PM

moi người giúp em với!
 
Mình đang làm luận văn!
Thầy giáo yêu cầu tìm hiểu về cách làm việc của họ vi điều khiển PIC6F8.
Mọi người biết tài liệu nào về Pic thì giúp mình với nha!.
Thanksss!

namqn 22-12-2007 11:25 PM

Trích:

Nguyên văn bởi dovanhiep (Post 13490)
Mình đang làm luận văn!
Thầy giáo yêu cầu tìm hiểu về cách làm việc của họ vi điều khiển PIC6F8.
Mọi người biết tài liệu nào về Pic thì giúp mình với nha!.
Thanksss!

Theo tôi được biết thì không có họ vi điều khiển nào là PIC6F8 cả. Nếu bạn muốn tìm hiểu về một vi điều khiển nào đó của Microchip thì có thể vào website của Microchip (www.microchip.com), gõ vào hộp tìm kiếm của họ tên của vi điều khiển đó, bạn sẽ có một danh sách các tài liệu liên quan đến nó.

Thân,

dovanhiep 26-12-2007 05:01 PM

Cam on anh!
 
Trích:

Nguyên văn bởi namqn (Post 13495)
Theo tôi được biết thì không có họ vi điều khiển nào là PIC6F8 cả. Nếu bạn muốn tìm hiểu về một vi điều khiển nào đó của Microchip thì có thể vào website của Microchip (www.microchip.com), gõ vào hộp tìm kiếm của họ tên của vi điều khiển đó, bạn sẽ có một danh sách các tài liệu liên quan đến nó.

Thân,

Em hom do viet nham! Em muon noi la ho vi dieu khien Pic16F877a.
Neu anh co tai lieu nao lien quan thi gui cho em nha!.
Hi vong se duoc anh giup do sau nay!

tity 26-12-2007 07:44 PM

Em chào cả gia đình PIC!!!
các bác cho em hỏi một ý về cách hay là thuật toán để nạp vào một bộ nhớ (loại nào đó mà khi mất nguồn dữ liệu không bị mất)!!! Em cũng đã tìm hiểu khá kỹ về con 8051 và bây giờ muốn khám xét con PIC mà cụ thể là 16F877A chẳng hạn. Em có một ý thế này mong được các bác góp ý cũng như chỉ dạy:" Có thể dùng vi điều khiển để điều khiển nạp cho bộ nhớ như trên được không? dữ liệu nạp vào bộ nhớ sẽ được lấy từ con vi điều khiển chứ không phải là trên máy tính nữa". Vấn đề cơ bản ở đây là phải biết cách để nạp cho bộ nhớ cơ!!!
Mong nhận được sự chỉ giáo tận tình từ các bác!!!
Em chân thành cảm ơn!

minoan 21-02-2008 10:25 AM

Cho hỏi 1 chút nhé:
1. Trong PIC 16f877a chỉ có vector ngat 0x004. Vậy nếu ta muốn sử dụng nhiều ngắt trong chương trình thì chẳng lẽ lại là:
; Sử dụng MPLAB
;....
org 0x00
goto main
org 0x04
goto ISR
org 0X05
goto main
...
ISR:
bsf ngat_Timer0 ;kiem tra co bao ngat T0
goto Timer0
bsf ngat_I2C ;kiem tra co bao ngat I2C
goto I2C
bsf ngat_USART
goto USART
retfie

Timer0
return

I2C
return

USART
return

main

end
2. Trên hình vẽ
http://i84.photobucket.com/albums/k3...ed22222222.jpg
http://i84.photobucket.com/albums/k3...itled11111.jpg
Bộ nhớ chương trình là 368byte, tại sao có tận 4bank, nếu tính thế thì phải là 512byte chứ?

falleaf 21-02-2008 10:41 AM

http://www.picvietnam.com/forum//showthread.php?t=5

Bạn đọc kỹ bài viết này, có 2 bài về ngắt, bài #9 và #10.

Trích:

Như lần trước đã giới thiệu, vectơ ngắt của PIC nằm ở vị trí 0x0004 các bạn xem lại hình sau:

Khác với khi bạn bị té ruộng, bạn té xuống ngay tại chỗ bạn bị húc, đối với vi điều khiển, khi xảy ra interrupt, nó sẽ nhảy về một địa chỉ cố định, và thực hiện công việc tại đó. Sau khi thực hiện xong, nó sẽ quay trở về vị trí mà từ đó nó đã thoát ra. Vị trí cố định mà nó sẽ nhảy về khi xảy ra ngắt là vị trí 0x0004.
Mọi ngắt đều quay về một vị trí (đối với PIC), khi muốn xử lý nhiều ngắt thì tại vị trí 0x0004 phải có đoạn vào ngắt, sau đó kiểm tra xem ngắt nào xảy ra. Rồi xử lý ngắt đó. Sau khi xử lý xong thì thoát khỏi ngắt.

Chúc vui

minoan 21-02-2008 02:17 PM

Cám ơn anh falleaf. Nhưng còn 1 câu hỏi nữa là data memory 368byte. Tại sao trong hình lại có tới 4 bank. Nếu như trong hình thì data memory phải là 4x128=512byte chứ?

Jerry 21-02-2008 03:29 PM

Trong 4 bank (mỗi bank 128 byte) đó có những byte sử dụng làm thanh ghi chức năng đặc biệt, không thể dùng giống như RAM (ví dụ thanh ghi STATUS, INTCON...). Chỉ còn có 368 byte là có thể sử dụng làm RAM thôi. Các byte RAM này có địa chỉ là
Code:

Bank 0: 20h đến 7Fh
Bank1: A0h đến FFh
Bank2: 110h đến 17Fh
Bank3: 190 đến 1FFh


PICKGOOD 01-07-2008 03:33 PM

MikroPascal là một phần mềm của hãng mikroElektronika sử dụng ngôn ngữ Pascal để viết chương trình cho PIC.
Địa chỉ: http://www.mikroe.com/en/compilers/mikropascal/pic/

Hướng dẫn sử dụng (Tiếng Anh):
http://www.elektroda.net/download/09...cal_manual.pdf

Tải phần mềm MikroPascal phiên bản V3.0.0.4 (có patch) tại địa chỉ:
http://www.picvietnam.com/forum//showthread.php?t=403

tallht 20-08-2008 02:31 PM

Adc!!!
 
1 Attachment(s)
Mình vừa làm xong adc bằng mplab,pót lên cho bà con xem
khi rảnh mình sẽ có 1 bài viết rõ hơn về vấn đề này! Mong bà con ủng hộ!

picpen 20-08-2008 04:18 PM

Ổn định tín hiệu vào ADC pic6f877a
 
Mình dùng 5 chân cổng chuyển đổi ADC của cổng Ra cho 5 tín hiệu cảm biến khác nhau.Nhưng trong thực tế thì khi một trong 5 tín hiệu đó có đầu vào biến đổi thì 4 đầu vào còn lại cũng bị ảnh hưởng theo ít nhiều. nói tóm lại là các tín hiệu ở các chân có ảnh hưởng lẫn nhau .Mình ko rõ nguyên nhân vì sao ? có thể là do nguồn vào ko ổn định chăng ? nếu mình lắp vào mỗi chân tín hiệu 1 tụ lá 102,103.... thì có giảm ảnh hưởng giữa các chân ín hiệu ko?
Làm thế nào để có một nguồn chuẩn và ổn định cho các tín hiệu ADC .vì các chân chuyển đổi ADC rất nhạy với sự thay đổi điện áp .......

*********** Thank *************

lam_ntd 09-10-2008 04:58 PM

chào các bác em mới nghiên cưc pic 16f877a em thay luông lep trinh led 7 thanh hay quá. Bac nao co chương trinh lap trinh cho nhieu led 7 thnh dung nut bam không co thể cho em xin 1 bản.
Em xin cam on cac bac.
Đia chi email cua em:hai_kcd@yahoo.com

trungduc 06-11-2008 02:30 PM

Chào qui vi,
Toi mới học PIC mấy ngày có 1 đọan chương trình giải không ra. Xin các bậc tiền bối chỉ giáo cho tại sao bấm nút mà không có tác dụng gì hết.
TITLE "TEST SWITCH PORTB"
PROCESSOR PIC16f877A
INCLUDE<P16f877A.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF

;--------------------------------------------------------------------------
; Program Code
;--------------------------------------------------------------------------

ORG 0x000 ;reset vector
goto MAIN
MAIN
Start call Init ;Initialise hardware

Loop btfss PORTB,0 ;Is "ON" button pressed?
bsf PORTA,0 ; Yes - LED on
btfss PORTB,1 ;Is "OFF" button pressed?
bcf PORTA,0 ; Yes - LED off
goto Loop ;



;--------------------------------------------------------------------------
; Subroutines
;--------------------------------------------------------------------------

;*****Init - set up all ports, make unused ports outputs

Init clrf PORTA ;all of porta low
clrf PORTB ;all of portb low

bsf STATUS, RP0 ;change to bank1
movlw b'00000000' ;all outputs except
movwf TRISA ;
; movlw b'11111111' ;all inputs
; movwf TRISB ;
bcf STATUS, RP0 ;back to bank0

return

END ;Stop assembling here

namqn 06-11-2008 05:55 PM

Trích:

Nguyên văn bởi trungduc (Post 20158)
Chào qui vi,
Toi mới học PIC mấy ngày có 1 đọan chương trình giải không ra. Xin các bậc tiền bối chỉ giáo cho tại sao bấm nút mà không có tác dụng gì hết.
TITLE "TEST SWITCH PORTB"
PROCESSOR PIC16f877A
INCLUDE<P16f877A.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF

;--------------------------------------------------------------------------
; Program Code
;--------------------------------------------------------------------------

ORG 0x000 ;reset vector
goto MAIN
MAIN
Start call Init ;Initialise hardware

Loop btfss PORTB,0 ;Is "ON" button pressed?
bsf PORTA,0 ; Yes - LED on
btfss PORTB,1 ;Is "OFF" button pressed?
bcf PORTA,0 ; Yes - LED off
goto Loop ;



;--------------------------------------------------------------------------
; Subroutines
;--------------------------------------------------------------------------

;*****Init - set up all ports, make unused ports outputs

Init clrf PORTA ;all of porta low
clrf PORTB ;all of portb low

bsf STATUS, RP0 ;change to bank1
movlw b'00000000' ;all outputs except
movwf TRISA ;
; movlw b'11111111' ;all inputs
; movwf TRISB ;
bcf STATUS, RP0 ;back to bank0

return

END ;Stop assembling here

Một chương trình cụ thể được viết cho một thiết kế phần cứng cụ thể. Phần cứng của bạn ra sao? Bạn thử nghiệm chương trình như thế nào mà kết luận rằng bấm nút không có tác dụng?

Thân,

trungduc 03-12-2008 11:03 AM

Thanks namqn, lâu quá mới quay lại chổ này. Vì vài ngày sau đó mình nhận ra là nút bấm thiếu chống rung. Đúng như dự đoán của bạn.
Nhân tiện hôm nay mình bị vướng ở chổ tra bảng, bảng dài quá và nằm ở 1 DC xa khi dùng lệnh: addwf PCL,1 để tra bảng thì nó nhảy đi chổ khác ( không phải bảng ), theo mình biết thì phải sử dụng thanh ghi PCLATH nhưng mình chưa biết cách này.
Rất mong được giúp đở.
Thanks !

namqn 05-12-2008 04:46 PM

Trích:

Nguyên văn bởi trungduc (Post 21101)
Thanks namqn, lâu quá mới quay lại chổ này. Vì vài ngày sau đó mình nhận ra là nút bấm thiếu chống rung. Đúng như dự đoán của bạn.
Nhân tiện hôm nay mình bị vướng ở chổ tra bảng, bảng dài quá và nằm ở 1 DC xa khi dùng lệnh: addwf PCL,1 để tra bảng thì nó nhảy đi chổ khác ( không phải bảng ), theo mình biết thì phải sử dụng thanh ghi PCLATH nhưng mình chưa biết cách này.
Rất mong được giúp đở.
Thanks !

Bạn tham khảo code ở đây:
http://www.piclist.com/techref/microchip/bigtable.htm

Thân,

trieutuduong 06-12-2008 01:15 AM

có bác nào có code c++ điều khiển động cơ không vậy cho em xin nhe ! cám ơn các bác trước à!

namqn 06-12-2008 02:02 AM

Trích:

Nguyên văn bởi trieutuduong (Post 21183)
có bác nào có code c++ điều khiển động cơ không vậy cho em xin nhe ! cám ơn các bác trước à!

Trước hết bạn xác định trình dịch của bạn đã. Bạn có biết cần dùng trình dịch nào để dịch code C++ cho PIC hay không?

Thân,

trieutuduong 07-12-2008 09:32 PM

có bác nào có code về điều khiển động cơ dc bằng c++ cho tớ xin nhé , cần lắm . cám ơn các bác trước

phandinh 11-02-2009 05:21 PM

cho em hỏi trong bài đếm ngắt ngoài chân RB0 của bác nhh có lệnh:
INCF COUNT,F
Vậy lệnh này có giống như lệnh : INCF COUNT,0 hay không
(có khi nào F---->False---->0)

namqn 11-02-2009 05:57 PM

Trích:

Nguyên văn bởi phandinh (Post 22524)
cho em hỏi trong bài đếm ngắt ngoài chân RB0 của bác nhh có lệnh:
INCF COUNT,F
Vậy lệnh này có giống như lệnh : INCF COUNT,0 hay không
(có khi nào F---->False---->0)

Không giống đâu bạn, với các lệnh thao tác trên thanh ghi, F (= 1) ở phần destination có nghĩa là đích đến của kết quả là thanh ghi toán hạng đó, còn W (= 0) ở phần destination có nghĩa là đích đến của kết quả là W.

Với lệnh INCF COUNT, F (tương đương với INCF COUNT, 1), kết quả của lệnh tăng giá trị trong thanh ghi COUNT sẽ được lưu trở lại thanh ghi COUNT.

Thân,

phandinh 11-02-2009 11:06 PM

Thanks bác nhiều nha. Em hiểu rồi.
À nếu bác rảnh thì xem dùm bài bên luồng " pic từ dễ tới khó " hộ em

ITfire 12-02-2009 12:53 PM

Cái này hay à ngen...
 
các bro giúp mình tính cái PWM Period=[(PR2+1)]*4*Tosc *TMR2 prescale. Và tương tự với cái PWM duty cycle=... luôn ngen (mình đang làm PÍC6F877A với CCS v 4.065).Thanks


Múi giờ GMT. Hiện tại là 11:11 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