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)
-   -   Pic16f877a TỪ DỄ TỚi KhÓ (http://www.picvietnam.com/forum/showthread.php?t=238)

dinhthem 11-05-2008 09:22 PM

các tiền bối gửi nhiều bài tiếng việt dễ hiểu lắm mà, còn bạn thích tài liệu tiếng anh thì liên lạc với mình.

dinhthem 11-05-2008 09:29 PM

ủa, các bác up bài hướng dẫn viết bằng C đâu? sao em hok thấy vậy?

dinhthem 11-05-2008 09:34 PM

à, em biết rồi.
thì ra nãy giờ các bác viết bằng MPLAB. cho em xin phần mềm này đc ko?

dinhthem 11-05-2008 09:39 PM

các bác cho em hỏi
BANK dùng để làm gì?
tại sao mới vào ta lại chọn BANK 1
sau khi cho PORTB là cổng xuất lại chọn BANK 0
????

dinhthem 11-05-2008 11:15 PM

các anh ơi, sao ko post bài nữa vậy?
em đang cần hiển thị LCD, các anh giúp nhe.
Thanks

namqn 12-05-2008 12:47 AM

Trích:

Nguyên văn bởi dinhthem (Post 16136)
các bác cho em hỏi
BANK dùng để làm gì?
tại sao mới vào ta lại chọn BANK 1
sau khi cho PORTB là cổng xuất lại chọn BANK 0
????

Vì các PIC được chế tạo như vậy, nên chúng ta phải chọn bank của một thanh ghi để có thể truy xuất thanh ghi đó. Bạn cứ chấp nhận như vậy đi, sau này nắm rõ hơn về kỹ thuật số và vi điều khiển thì sẽ tìm hiểu thêm. Thông tin về bản đồ bộ nhớ của PIC nằm trong datasheet của PIC.

Thân,

namqn 12-05-2008 12:49 AM

Trích:

Nguyên văn bởi dinhthem (Post 16137)
các anh ơi, sao ko post bài nữa vậy?
em đang cần hiển thị LCD, các anh giúp nhe.
Thanks

Vấn đề này đã được đề cập nhiều lần ở picvietnam, bạn thử link sau nhé:
http://www.google.com/search?hl=en&q...=Google+Search

Thân,

dinhthem 12-05-2008 06:57 AM

Trích:

Nguyên văn bởi namqn (Post 16138)
Vì các PIC được chế tạo như vậy, nên chúng ta phải chọn bank của một thanh ghi để có thể truy xuất thanh ghi đó. Bạn cứ chấp nhận như vậy đi, sau này nắm rõ hơn về kỹ thuật số và vi điều khiển thì sẽ tìm hiểu thêm. Thông tin về bản đồ bộ nhớ của PIC nằm trong datasheet của PIC.

Thân,

cám ơn anh.
có phải viết bằng mikroC thì ko cần khai báo BANK?

namqn 12-05-2008 07:57 AM

Trích:

Nguyên văn bởi dinhthem (Post 16145)
cám ơn anh.
có phải viết bằng mikroC thì ko cần khai báo BANK?

Thông thường, các trình biên dịch ngôn ngữ cấp cao sẽ tự động chuyển bank khi cần thiết cho bạn. Cũng có trình biên dịch cho phép bật/tắt việc tự động chuyển bank này, và khi đó người lập trình sẽ chịu trách nhiệm chuyển bank khi cần thiết (như ý họ muốn khi chọn tắt tính năng tự động chuyển bank của trình biên dịch).

Thân,

doremino 12-05-2008 02:08 PM

!!!!nhờ các bác giải đáp giúp em!!!!!
 
Trích:

Nguyên văn bởi nhh (Post 1581)
BẬT TẮT LED 1s

Code:

;========================================
;Auhor:                NHH
;Date:                10/02/06
;Hardware:        PIC16F877A
                ;XTAL 10MHz, PORTB noi voi 8 LED qua 8 dien tro 220Ohm
;========================================
        TITLE                "ON-OFF LED 1 SECOND"
        PROCESSOR        PIC16f877A
        INCLUDE<P16f877A.inc>
        __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _CPD_OFF &_LVP_OFF
;=============================================================================       
        COUNT1 EQU 0x20
        COUNT2 EQU 0x21
        COUNT3 EQU 0x22
;=========================CHUONG TRINH CHINH=========================
        ORG 0x000
        GOTO        MAIN

MAIN
        BCF STATUS,RP1
        BSF STATUS,RP0                ; select BANK 1
        CLRF TRISB                ; PORTB output
        BCF STATUS,RP0                ;  select BANK 0

        MOVLW        d'255'
        MOVWF        COUNT1                ;<-COUNT1=255       
        MOVWF        COUNT2                ;<-COUNT2=255
NEXT       
        MOVLW        d'14'
        MOVWF        COUNT3                ;<-COUNT3=13
        MOVLW        b'11111111'        ;LED ON
        MOVWF        PORTB
        CALL        LOOP

        MOVLW        d'14'
        MOVWF        COUNT3                ;<-COUNT3=13
        MOVLW        b'00000000'        ;LED OFF
        MOVWF        PORTB       
        CALL        LOOP
       
        GOTO        NEXT               
;========================CHUONG TRINH CON====================
LOOP
        DECFSZ        COUNT1,1
        GOTO        LOOP
        DECFSZ        COUNT2,1
        GOTO        LOOP
        DECFSZ        COUNT3,1
        GOTO        LOOP               
        RETURN
               
        END


cho em hỏi đoạn _CONFIGURATION_... có tác dụng gì vậy!!!
không có thì có vấn đề gì không ạ?????Tại sao đoạn code trên không thấy khai báo tần số của thạch anh?có phải người viết quên không anh?
"CLOCK(10000000)"
Cảm ơn các bác nhiều!!!

doremino 12-05-2008 03:10 PM

các bác trao đổi với nhau thấy hấp dẫn quá!!!Cảm ơn sự nhiệt tình cũng như tâm huyết của các bác.Em tin rằng Picvietnam sẽ thành công trong việc đưa pic đến với mọi người!!
chúc may mắn

dinhthem 12-05-2008 08:23 PM

các anh ơi, mạch reset của pic có R1<40k, cụ thể là bao nhiêu?
cám ơn.
có anh nào ở tp hcm cung cấp con pic này ko? mạch nạp nữa? giá bao nhiêu vậy?
cám ơn.

namqn 12-05-2008 08:36 PM

Trích:

Nguyên văn bởi doremino (Post 16153)
cho em hỏi đoạn _CONFIGURATION_... có tác dụng gì vậy!!!
không có thì có vấn đề gì không ạ?????Tại sao đoạn code trên không thấy khai báo tần số của thạch anh?có phải người viết quên không anh?
"CLOCK(10000000)"
Cảm ơn các bác nhiều!!!

Đoạn __CONFIG ... dùng để đặt cấu hình cho PIC, nên có. Nếu không có đoạn này thì PIC sẽ chạy ở cấu hình mặc định (thông tin có trong datasheet của PIC).

Khi lập trình hợp ngữ thì thông tin tần số của thạch anh thường không cần thiết, đặc biệt là trình hợp dịch không cần thông tin này. Mọi tính toán dựa vào tần số của thạch anh đều do người viết code chịu trách nhiệm.

Thân,

namqn 12-05-2008 08:41 PM

Trích:

Nguyên văn bởi dinhthem (Post 16155)
các anh ơi, mạch reset của pic có R1<40k, cụ thể là bao nhiêu?
cám ơn.
có anh nào ở tp hcm cung cấp con pic này ko? mạch nạp nữa? giá bao nhiêu vậy?
cám ơn.

Nếu bạn cần giá trị cụ thể, hãy dùng 10 k. Câu hỏi của bạn khiến tôi nhớ lại câu chuyện sau:
Code:

Hãng Compaq thường xuyên nhận được điện thoại của các khách hàng mới,
than phiền rằng họ không thể tìm thấy phím "any" trên bàn phím (tài liệu
hướng dẫn của Compaq thường dùng cụm từ "press any key to continue").
Hãng Compaq sau đó đã quyết định đổi toàn bộ cụm từ "press any key to
continue" thành "press <Enter> key to continue".

Nếu bạn cần mua PIC và mạch nạp, hãy sang box sau:
http://www.picvietnam.com/forum/forumdisplay.php?f=17

Thân,

dinhthem 13-05-2008 08:14 AM

cám ơn anh.
em làm đc mạch hiển thị led rồi hihihi.
ko thấy anh Chính up bài hiển thị led7doan. em đọc sách tiếng anh thấy có mạch đó.
nhưng em ko biết con transitor nó tên gì, cái hình mờ quá em ko biết điện trở vào mỗi đoạn led là bao nhiêu? (110ohm hay 330ohm)
các anh chỉ giúp em với nhe
cám ơn.

doremino 13-05-2008 01:32 PM

cám ơn anh nhiều lắm!!!
anh có tài liệu về ngắt-timer cho em tham khảo với!!!!!!!!!

tamlan 13-05-2008 01:32 PM

hình như dạo này anh NTC quên mất nhiệm vụ rồi thì phải, lau quá không thấy máy cái bài mới nào cả, buòn thế

doremino 13-05-2008 02:40 PM

sao không ai trả lời bài của anh "nhong" cho em học hỏi với
 
Trích:

Nguyên văn bởi nhong (Post 14698)
Em làm bài tập pic đầu tiên với 16F877A bật tắt đèn led.

đầu tiên em cho nháy 1s một thì thấy nó nháy loạn cả lên rồi kết thúc bằng sáng trơ ra hoặc tắt ngóm(sau khoảng 4-5s) mà có lúc cả chân RB6 chân nó cũng sáng nữa(em chỉ cho nó nháy chân RB7 thôi) là sao?

sau đó em sửa cho nháy 2s một, nhưng khi nạp vào con pic rồi chạy thì thấy thằng led nó cứ sáng trơ ra chứ chẳng bật tắt gì cả là sao các bác.

với cả khi nạp cho pic mà cắm nhầm chiều vào mạch nạp thì có nguy hiểm không, rồi em cho verify trong winpic800 thì luôn bị lỗi(lúc program xong verify thì không sao cả), lại phải erase đi rồi program lại , như thế có hại ko. lỗi thế này
Error: verifying address0x000000 verified:0x3FFF Read:0x3000

cuối cùng: khi nạp mới 1 con thì phải erase hết đi rồi mới program lại hả các bác

em xin cám ơn.

code viết trong ccs như này(code trong luồng ccs for pic thôi, chỉ thay nháy 1s một thành nháy 2s một và chỉnh clock từ 10 thành 4mhz thôi)

Code:

#include<16F877A.h>
#fuses NOWDT,PUT,HS,NOPROTECT
#use delay(clock=4000000)
main()
{
while(true)
        {
        output_high(PIN_B7);
        delay_ms(2000);
        output_low(PIN_B7);
        delay_ms(2000);
        }
}

PS/ nút reset làm việc tốt ạ :D vì khi ấn reset thì nó trở về trạng thái đầu, tất nhiên là vẫn lỗi như trên^^

Trả lời giúp đi các anh!!!!!

namqn 13-05-2008 06:36 PM

Trích:

Nguyên văn bởi nhong (Post 14698)
Em làm bài tập pic đầu tiên với 16F877A bật tắt đèn led.

đầu tiên em cho nháy 1s một thì thấy nó nháy loạn cả lên rồi kết thúc bằng sáng trơ ra hoặc tắt ngóm(sau khoảng 4-5s) mà có lúc cả chân RB6 chân nó cũng sáng nữa(em chỉ cho nó nháy chân RB7 thôi) là sao?

sau đó em sửa cho nháy 2s một, nhưng khi nạp vào con pic rồi chạy thì thấy thằng led nó cứ sáng trơ ra chứ chẳng bật tắt gì cả là sao các bác.

với cả khi nạp cho pic mà cắm nhầm chiều vào mạch nạp thì có nguy hiểm không, rồi em cho verify trong winpic800 thì luôn bị lỗi(lúc program xong verify thì không sao cả), lại phải erase đi rồi program lại , như thế có hại ko. lỗi thế này
Error: verifying address0x000000 verified:0x3FFF Read:0x3000

cuối cùng: khi nạp mới 1 con thì phải erase hết đi rồi mới program lại hả các bác

em xin cám ơn.

code viết trong ccs như này(code trong luồng ccs for pic thôi, chỉ thay nháy 1s một thành nháy 2s một và chỉnh clock từ 10 thành 4mhz thôi)

Code:

#include<16F877A.h>
#fuses NOWDT,PUT,HS,NOPROTECT
#use delay(clock=4000000)
main()
{
while(true)
        {
        output_high(PIN_B7);
        delay_ms(2000);
        output_low(PIN_B7);
        delay_ms(2000);
        }
}

PS/ nút reset làm việc tốt ạ :D vì khi ấn reset thì nó trở về trạng thái đầu, tất nhiên là vẫn lỗi như trên^^

Theo hiện tượng bạn đã mô tả, có thể PIC được kích hoạt chế độ nạp chương trình ở điện áp thấp (LVP). Bạn nên thêm NOLVP vào directive #fuses.

Nếu cắm PIC ngược chiều vào socket trên mạch nạp thì còn tùy thuộc vào việc các chân của socket tại những vị trí ngược chiều đó có gây hư hại gì cho PIC hay không. Bạn chưa cho biết mạch nạp gì, socket được kết nối ra sao, thì không thể có câu trả lời chắc chắn.

Xóa chip trước khi nạp chip là thao tác cần thiết, một số phần mềm tự động thực hiện xóa chip trước khi nạp (và việc này cũng có thể được cấu hình bật/tắt), WinPic800 là phần mềm thuộc loại này.

Về lỗi verify của bạn, có lẽ mạch nạp của bạn không tốt lắm.

Thân,

doremino 13-05-2008 08:28 PM

cảm ơn anh nhiều!!em sẽ rút kinh nghiệm!!Anh có tài liệu về điều khiển ngắt -timer cho em tham khảo với!!em cảm ơn nhiều!!!

namqn 13-05-2008 08:49 PM

Trích:

Nguyên văn bởi doremino (Post 16194)
cảm ơn anh nhiều!!em sẽ rút kinh nghiệm!!Anh có tài liệu về điều khiển ngắt -timer cho em tham khảo với!!em cảm ơn nhiều!!!

Thông tin liên quan đến timer của PIC16 nằm trong datasheet của PIC. Tôi không rõ bạn cần thêm tài liệu gì. Thông thường chỉ cần đọc phần tương ứng của một timer nào đó trong datasheet và viết code khởi tạo, cùng với code xử lý ngắt cho timer, nếu sử dụng ngắt timer.

Thân,

doremino 14-05-2008 06:19 AM

Trích:

Nguyên văn bởi namqn (Post 16197)
Thông tin liên quan đến timer của PIC16 nằm trong datasheet của PIC. Tôi không rõ bạn cần thêm tài liệu gì. Thông thường chỉ cần đọc phần tương ứng của một timer nào đó trong datasheet và viết code khởi tạo, cùng với code xử lý ngắt cho timer, nếu sử dụng ngắt timer.

Thân,

anh có thể cho em biết ngắt ngoài là như thế nào?Có phải là chúng ta tác động bằng công tắt không?

bien_van_khat 16-05-2008 06:20 PM

Trích:

Nguyên văn bởi doremino (Post 16209)
anh có thể cho em biết ngắt ngoài là như thế nào?Có phải là chúng ta tác động bằng công tắt không?

Ngắt ngoài của PIC là ngắt do sự chuyển mức điện áp trên chân IO hỗ trợ ngắt ngoài (có thể lựa chọn ngắt xảy ra do chuyển từ mức cao xuống mức thấp hoặc mức thấp lên mức cao).

Bạn cũng có thể lưu ý, ngắt ngoài luôn luôn là ngắt có mức ưu tiên vật lý cao nhất (chỉ với PIC18 trở lên nhé, cấu trúc PIC16 ko có khái niệm ưu tiên ngắt).

nhatminh_happy 18-06-2008 03:43 PM

tai sao khi khai bao mang:
unsigned char dem_EEPROM[256];
thi dich binh thuong
con khi khai bao :
unsigned char dem_EEPROM[512];// lon hon 256
thi dich bao loi nhu sau:
MPLINK 4.1, Linker
Copyright (c) 2006 Microchip Technology Inc.
Error - section '.udata_BDPIC1.o' can not fit the section. Section '.udata_BDPIC1.o' length=0x00000200
Errors : 1


minh dang dung trinh dich c18 v10 full

david 18-06-2008 04:47 PM

nếu bạn dùng PIC6F877A thì SRAM của nó bé hơn 512 (hình như là 398 :D ) nên bạn không khai báo như thế được.

namqn: người hỏi đang dùng PIC18.

thuyvu 18-06-2008 09:29 PM

mình thấy có bạn nói về RS485 trong luồng này, Mình đang cần mạch chuyển RS485 sang RS232 bạn nào có mạch nguyên lý cho mình xin với mình cần lắm.
xuanvudk2@gmail.com

thuyvu 18-06-2008 09:38 PM

Trích:

Nguyên văn bởi tranvanthuong (Post 8556)
a! wên nữa chào anh_gioi anh vào các đề tài học tập dùng pic mà tìm chương trình C, hoặc trong luồng lập trình nhóm 16f877a cũng rất nhiều và anh nên bắt đầu từ đó em có 1 bài gởi cho anh ne!

Anh có tài liệu học vẽ mạch protell không cho em xin nhé:xuanvudk2@gmail.com

nguyenthinho 19-07-2008 02:24 PM

Cảm ơn bác namqn,ntc,f nhiều lắm nha.Em mới tìm hiểu về Pic thấy các bài viết của các bác rât có ích.hehehe

luuvandung 01-08-2008 11:22 AM

cam on cac anh nhe.hay pỏt nhieu tai lieu hon di

namqn: diễn đàn có quy định viết bài bằng tiếng Việt có dấu, và bạn không cần cài đặt gì thêm vào máy vì diễn đàn đã có sẵn bộ gõ, hỗ trợ các kiểu gõ thông dụng.

phamngocloi 04-08-2008 06:18 PM

anh em giup tui voi tui khong down dc cac chuong con lai
moi toi chuong 4 ah
co j goi qua visaokhongten1608@yahoo.com
cam on tuoc nha

minoan 19-09-2008 10:36 AM

Tại sao lại thế?

Code:

Delay
movlw 0xFF
movwf giatri1  ; dia chi 0x80
movwf giatri2        ; dia chi 0x81
movwf giatri3        ; dia chi 0x82

loop1
loop2
loop3

decfsz giatri3
goto loop3

decfsz giatri2
goto loop2

decfsz giatri1
goto loop1

return

Mình viết chương trình con để tạo trễ, không hiểu tại sao lúc mô phỏng MPLAB 8.0 thì được nhưng khi đổ vào PIC lại không chạy, hình như nó cứ đứng ì luôn không thoát ra được chương trình con đó, mình dùng cà 16F877A và 16F84A cũng thấy thế. Không hiểu tại sao cả? Ai biết thì chỉ dùm nhé.

namqn 19-09-2008 05:16 PM

Trích:

Nguyên văn bởi minoan (Post 18928)
Tại sao lại thế?

...

Mình viết chương trình con để tạo trễ, không hiểu tại sao lúc mô phỏng MPLAB 8.0 thì được nhưng khi đổ vào PIC lại không chạy, hình như nó cứ đứng ì luôn không thoát ra được chương trình con đó, mình dùng cà 16F877A và 16F84A cũng thấy thế. Không hiểu tại sao cả? Ai biết thì chỉ dùm nhé.

Việc PIC chạy như thế nào còn tùy thuộc vào cách cấu hình của bạn. Bạn chưa cho biết các cấu hình của PIC16F877A và PIC16F84A mà bạn đã dùng ra sao.

Thân,

kiwi 20-09-2008 12:16 AM

Em mới vừa học PIC ,bác nào có bài tập hay ví dụ về Pic thì cho em xin, đọc lý thuyết nhiều mà nhiều lúc ko hiểu j hết. Thank!

chiataytuday 29-09-2008 10:45 AM

sao không thấy tài liệu về ngắt mấy anh em. Tập tài liệu cuối cùng mình download về giải nén bị lỗi mất. cho mình lại cái link đi.

sevenlove_1001 30-09-2008 02:14 PM

Cảm ơn Bác cho Bọn em tài lệu hay nhé! bác chuẩn bị post bài 3 đi em chờ dài cổ rùi

nutiepthi4 30-09-2008 02:38 PM

Lập trình PIC 16f877a trên Linux với SDCC
 
SDCC là trình biên dịch nhỏ gọn, ban đầu được phát triển trên Linux để biên dịch chương trình viết bằng C cho vi xử lý. Đối tượng ban đầu của SDCC là các vi xử lý họ 8051, vế sau được phát triển cho các vi điều khiển. Hiện nay SDCC lả trình biên dịch khá mạnh cho PIC chạy trên Linux (mặc dù đã có bản chạy trên MS Windows). Đi kèm với SDCC là trình mô phỏng GPSIM, và các chương trình hỗ trợ khác như gputils,...
Tôi giới thiệu giới thiệu trình biên dịch này bởi vì cấu trúc chương trinh viết bằng SDCC đơn giản, các file header (*.h) mô tả các vi điều khiển rất sát với Dataset của vi điều khiển. Ví dụ: trên Dataset của Microchip PIC 16f877a, mô ghi tên các chân cổng A là RA0, RÁ, ..., thanh ghi điều khiển vào ra cổng A là TRISA thì
trên SDCC muốn xuất mức 1 cho chân RA0, bạn chỉ cần viết:
TRISA0 = 0;
RA0 = 1;
Trông có vẻ đơn giản phải không? Vì vậy để điều khiển PIC bằng SDCC, gần như bạn chỉ cần học Dataset, bởi vì SDCC quá đơn giản và sát với Dataset!
Kiến thức về vi điều khiển của mình còn co hạn. Mong các bạn chỉ giáo thêm, Cảm ơn!

chiataytuday 03-10-2008 09:22 AM

sao mà càng về sau các admin lại không nhiệt tình thế này?

Sangdth 03-10-2008 12:58 PM

Trích:

Nguyên văn bởi minoan (Post 18928)
Mình viết chương trình con để tạo trễ, không hiểu tại sao lúc mô phỏng MPLAB 8.0 thì được nhưng khi đổ vào PIC lại không chạy, hình như nó cứ đứng ì luôn không thoát ra được chương trình con đó, mình dùng cà 16F877A và 16F84A cũng thấy thế. Không hiểu tại sao cả? Ai biết thì chỉ dùm nhé.

Mình cũng có cùng câu hỏi như minoan, nhưng lại cố mò mẫm theo hướng khác.

Làm theo hướng dẫn trong tut "Học PIC trong một ngày" của trưởng lão falleaf, cũng đến đoạn tạo trễ thì rối lên. Mình cũng viết 3 vòng loop, nhưng không gọi theo cách của bạn, mà lồng nó vào nhau,

Code:

DELAY1        DECFSZ        COUNT_1,        F
        GOTO        DELAY2
        RETURN

DELAY2        DECFSZ        COUNT_2,        F
        GOTO        DELAY3
        RETURN

DELAY3        DECFSZ        COUNT_3,        F
        GOTO        DELAY3
        RETURN

Không hiểu lồng như thế thì đúng hay sai? Mong mọi người xem giúp, sau cái này còn cái khác nữa ^^

Cảm ơn mọi người.

nguyencuong4988 04-10-2008 12:37 AM

thank anh ^^

luongnhut 09-10-2008 10:23 AM

reset cho pic16f877a
 
em đọc thấy cách mắc cho chân MCLR nhu hình dưới, mình co thể tạo thời gian trễ cho nút reset bang cách nối song song một tụ điện với nut nhấn dc ko, mún tạo thời gian reset cho pic khoảng 500ms thi giá trị của tụ điên là bao nhiêu


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