![]() |
Trích:
|
Bác nào có sơ đồ mạch in PG2C nạp cho PIC6F877A cho em xin với .
Em xin cảm ơn trước . |
Trích:
|
Hôm vừa rồi đã đọc ở đâu đó, hình như trong datasheet việc xác định xem địa chỉ nhảy có nằm cùng page với lệnh goto hay lệnh call hay không rồi. Đó là sử dụng lệnh của trình biên dịch để xác định địa chỉ cần gọi. Sau đó, gán địa chỉ này cho thanh ghi địa chỉ byte cao. Cụ thể lệnh thì không nhớ, vì mình không sử dụng asm mà dùng C luôn cho tiện.
Có một điều là các bạn phải chịu khó đọc datasheet, hiểu thế nào thì làm mô phỏng trên máy, quan sát kết quả. Nếu thấy kết quả đúng thì nạp vào IC để kiểm tra thực tế, nếu không đúng thì đọc lại datasheet, làm lại và mô phỏng, như thế kiến thức sẽ vững hơn. |
Trích:
Nếu dùng ngôn ngữ cấp cao thay vì hợp ngữ thì đoạn chương trình ghi vào Flash vẫn phải dùng hợp ngữ để đảm bảo đúng thứ tự thực hiện các lệnh và số lệnh được thực hiện (cho đoạn code được đánh dấu là Required Sequence trong ví dụ), đồng thời nên cấm ngắt trước đoạn code đó, và cho phép ngắt trở lại sau đoạn code đó. Thân, |
Gởi anh Nguyễn Trung Chính, Em chỉ mới biết về Pic được 15 ngày!
Em có xem vài cái tutorial do Anh viết, Em rất thích! Mong rằng Anh nhín chút thời gian viết tiếp nữa, Em ủng hộ Anh. Em biết:"Thật là khó khăn để trình bày một vấn đề cho người mới học". Em tin: "Chẳng bao lâu nữa, mọi người sẽ được phổ cập Pic" và sẽ gởi bài như Anh... Trong tutorial viết về hàm delay của Anh, có một số chỗ Em thấy khó chịu. Trước khi mọi việc được sáng tỏ, Em mong Anh cho em biết: " Có tài liệu nào trình bày thời gian thực hiện của một lệnh nào đó không ?" Nếu có được điều Em muốn, thì mới tự tin cho Anh thấy chỗ khó chịu trong tutorial viết về hàm delay. Một lần nữa, Em xin Cảm ơn mọi thành viên trong PicVietNam ( Falleaf, NHH, NTC, NamQN,..còn nhiều lắm!) đã góp phần phổ cập Pic cho Em! |
Chú anhthang chịu khó vào www.microchip.com mà load cái instruction set về mà đọc. Trong đó nói rõ, lệnh nào thực hiện hết bao nhiêu chu kỳ máy.
|
Bài viết về chương trình delay bạn download bản đã chỉnh sửa để đọc nhé. Tại đây, bài số #22:
http://www.picvietnam.com/forum//sho...p?t=238&page=2 Về thời gian thực thi lệnh, bạn đọc trong datasheet, từ khóa là "instruction cycle". Có thể dùng để search trên google để tìm hiểu thêm. |
Cảm ơn anh NTC và bạn Qanhep nhiều, chúc mọi người khỏe mạnh, hạnh phúc!
|
chao các ban,
mình có 1 vài thắc mắc muốn thỉnh giáo các bạn: 1/ minh cũng vừa mới tìm hiểu PIC mà thôi mà mình chỉ có tài liệu tiếng việt về PIC 16F84 mà thôi mà mình thì muốm tìm hiểu PIC 16F877 nen ko biết là tập lệnh (những lệnh giống giữa 2 loại này) có xài chung được hay ko (vì mình muốn học 16F877 nhưng sau nay có dùng 16F84 cung duợc). 2/ trong bank thanh ghi của PIC có phần thanh ghi mục đích chung W (G-P-R) mà mình thấy là một nhiều địa chỉ có nghĩa là nó là tập hợp của nhiều thanh ghi vậy khi minh truy xuất thì nó sẽ như thến nào. 3/ trong PIC 16F877 có tấc cả 4 bank thank ghi nhưng sao mình thấy nó có những thanh ghi cùng tên nhưng khác địa chỉ vậy là sao? 4/ mình dùng mạch nạp qua cổng COM (PGC2)mà bác falleaf upload lên có thể dùng trong mạch thí nghiệm nạp xong chạy luôn ko? vì mình thấy mạch đó ko cần cấp nguồn nuôi. 5/ giá của PIC 16F877 là bao nhiêu 1 con, để mình biết mà cẩn thận hơn (sinh viên mà). 6/ trong TP>HCM có chổ nào học PIC ko nếu có các bác chỉ mình đi học với. còn nữa mình sẽ hỏi tiếp trong lần sau (để về nghiên cứu trước đã hehe) hehe |
Thật là xui xẻo! Trung gõ cho Bạn được 30 phút tự nhiên cúp điện.
Trung nghĩ Bạn chưa xem hết các luồng trong trang Web này, tất cả các câu trả lời điều nằm trong đó hết. Pic16F877A giá 90 ngàn Lớp học Pic do PicVietNam chỉ mở ở Hà Nội! Mạch nạp PG2C không cho phép chạy trực tiếp, nhiệm vụ của nó chỉ là nạp chương trình. Còn mạch nạp Tiny Bootloader thì cho phép chạy trực tiếp để thí nghiệm. Nhưng không thể loại bỏ một trong hai mạch nạp. Trước tiên Bạn cần biết khái niệm Bootloader là gì? Bootloader là chương trình Asm dùng để nạp vào vi điều khiển Pic. Muốn nạp nó vào Pic thì Bạn dùng PG2C để nạp.Khi nạp xong, Bạn cắm Pic vào mạch chạy thử . Sau khi reset, nó sẽ đợi tín hiệu từ máy tính trong một giây,nếu nhận được tín hiệu từ máy tính thì nó sẽ nhận chương trình nạp mới vào ( nếu Bạn có kết nối với mạch Tiny Bootloader và mạch tiny bootloader có kết nối với máy tính) Còn nếu không nhận được tín hiệu từ máy tính nó sẽ thực thi chương trình cũ. Bạn thấy tiện lợi không, khi Bạn kết nối mạch chạy thử ( Test ) với Tiny Bootloader và kết nối với máy tính. Trong khoảng thời gian 1s tính từ lúc reset mạch, chương trình Bootloader sẽ thực thi, và sẵn sàng nạp chương trình mới từ máy tính vào ( nếu có tín hiệu từ máy tính ). Còn nếu không nhận được tín hiệu từ máy tín thì nó sẽ thực thi chương trình cũ. |
Biết đến đâu, chỉ đến đó!
Mạch nạp PG2C yêu cầu như sau: Bạn phải cắm Pic vào mạch nạp, và từ đó mới được phép cắm mạch nạp vào máy tính. Sau khi nạp xong bạn phải gỡ mạch nạp ra khỏi máy tính, và từ đó mới được phép lấy Pic ra. Giả sử Bạn đã viết xong một chương trình, muốn nạp nó vào Pic. Bạn phải cắm Pic vào mạch nap, và cắm mạch nạp vào máy tính. Sau khi nạp xong, Bạn phải thực hiện các thao tác: gỡ mạch nạp ra khỏi máy tình, gỡ Pic ra khỏi mạch nạp và cắm vào mạch chạy thử ( mạch test ). Không may chương trình viết sai thì sao? Bạn phải sửa chương trình và nạp lại, mệt mỏi lắm!
Mạch nạp Bootloader sẽ giúp Bạn. Vì mạch PG2C đã lấy các tín hiệu cần thiết từ cổng RS232. Trung cũng mới học Pic như Bạn, hi. Qua tết mình sẽ mua PG2C, Tiny Bootloader, và 2 con Pic16F877A về chơi, mấy hôm nay thèm quá! Mong thành viên trong PicVietNam thông cảm nếu em trình bày không đúng, vì em chỉ mới học Pic có 16 ngày thôi! Chúc mọi người năm mới hạnh Phúc! F: mọi người đều cùng học hỏi lẫn nhau, F rất cảm ơn những bài trả lời như thế này, vì những câu hỏi căn bản luôn được hỏi đi hỏi lại, vậy các bạn thành viên hãy cùng giúp các thành viên khác, và giúp đỡ diễn đàn. |
xin lỗi: vì Pic lấy tín hiệu cần thiết qua cổng RS232 nên không cần cấp nguồn.
|
Trời! mình gõ nhầm: mạch nạp PG2C lấy các tín hiệu cần thiết từ cổng RS232 của máy tính nên "không cần cấp nguồn" chứ không phải Pic lấy tín hiệu cần thiết từ cổng RS232. Thành thật xin lỗi.
namqn: vậy phiên bản gốc của bạn chỉ thiếu cụm từ "nên không cần cấp nguồn", hai post sau có thể xóa đi. Nếu bạn không biết cách sửa thì tôi sẽ sửa sau. |
các bác cho hỏi khi muốn nạp một chương trình mới vào PIC
mình có cách nào để xoá chương trình cũ đi không em nghe nói là nên xoá chương trình cũ trước khi nạp chương trình mới (em sử dụng pg2c và Icprog) Em mua con 877A có 55k ở Hà Nội (17A Hàn Thuyên) |
Nếu như bạn nạp lại mới, thì bạn nên xóa chương trình cũ trước, sau đó mới nạp, và nên đặt chế độ verify.
Trong ICPROG nó có nút xóa. Hoặc trong một số trình nạp, nó cho phép bạn đặt chết độ khi bấm nút nạp, thì nó xóa trước rồi mới nạp và verify luôn. Chúc vui |
Trích:
Thân, |
Báo cáo với các bác là tôi đã ghi được dữ liệu vào bộ nhớ Flash của con pic16f877a. Đoạn code trong datasheet của con 16f877a nó bị sai các bác ah, còn MPLAB vẫn cho mô phỏng việc ghi flash bình thường, chỉ có điều nó không cho mình xem bit WR trong thanh ghi EECON1 set lên.
|
cám ơn bác anhthang rat nhieu.
nhan tiện năm mới chúc bác cùng cả gia đình PIC Việt Nam năm mới an khang thịnh vượng nhiều niềm vui sức khoẻ để tiếp tục nghiên cứu PIC càng ngày càng chuyên nghiệp và số người sử dụng cũng tăng theo. (hơi dài dòng). bác cho mình hỏi thêm vài cài nữa nghe: 1/ khi mình muốn truy xuất bất kỳ 1 thanh ghi nào thì mình fải nhảy đếm bank chứa thanh ghi đó bằng cách set bit ớ thanh ghi status hả bác. 2/ trong PIC 16f877 co tới 4 bank thanh ghi mà nó có các thanh ghi trùng tên như status hay portB và cả thanh ghi muc đích chung mình vẫn chưa hiểu lám vì thanh ghi muc đích chung là cả 1 khoảng thanh ghi vậy khi nói đến W, hay status thì nó biết cài nào mà truy xuất chứ? thân ái and HAPPY NEW YEAR |
cho minh hoi thêm 1 câu kỹ thuật bảng là gì vậy? hồi xưa mình có sử dụng 89 nhưng chưa nghe thuật ngữ này mong anh em chỉ giáo
|
http://www.picvietnam.com/forum//showthread.php?t=5
Bạn đọc bài số 27 của F trong luồng trên, (Học PIC trong 1 ngày) và download tài liệu về kỹ thuật bảng về để tìm hiểu thêm. Chúc vui. |
cảm ơn các bác post lên toàn các thông tin bổ ích cho 1 người mới làm quen với PIC như e. 10Q
|
Chào các bạn trong diển dàn tui là một thành viên mới toan, tui rất yêu thích PIC và bắt đầu bằng con 16F84A. Tui chưa biết phần mền nào lập trình cho nó nhờ các bac chi giúp, mình có MPLAP IDE v7.50 nhung không biết sài nhờ các bác chỉ cho. Mình đang chờ tin của các bạn
|
|
Mình mới là thành viên mới của diễn đàn và cũng mới học Pic gần đây thôi. Cho mình hỏi vấn đề này với, chương trình sau khi biên dịch thành công và đã debug bằng MPLab SIM thì nạp vào chương trình có thể chắc chắn là chương trình đó đã đúng ko. Mình đã nạp vào Pic 16f877a mà không chạy được.
Mình sử dụng mạch nạp GTP-USB , chương trình nạp là WinPic800 cám ơn nhiều nhé |
Trích:
Bạn nạp chương trình vào chip rồi mà không chạy được thì không hẳn chương trình đó sai. Bạn phải kiểm tra lại các từ cấu hình có được thiết lập đúng chưa, phần cứng đã đảm bảo những yêu cầu tối thiểu để chip có thể chạy chưa. Tốt nhất là bạn post sơ đồ mạch thử nghiệm của bạn, cùng các từ cấu hình mà bạn đã dùng. Nếu những phần đó đúng thì mới cần xem xét đến code của chương trình. Thân, |
các bác chi cho mình các lệnh banksel va pagesel viết như thế nào cho dúng
co phải như vầy ko? banksel 0; chọn bank 0 pagesel 0; chọn trang 0, cho mình hỏi thêm tí nữa là khi mình dùng lệnh call hay goto mình chỉ quan tâm đến page của bộ nhớ chuơng trình thôi (nếu vượt 2k) ko quan tâm đến bank thanh ghi à còn khi thao tác các lệnh tiếp theo thì như thế nào ko cùng bank, hoặc page vd: call congviec1 ..... ..... congviec1: ............ .....; các cộng việc ở day khac bank hoặc khác page thì sau fai chọn bank hoặc page lại hả xin cac bác chỉ giúp thanks |
Tôi nhớ rõ ràng là tôi đã viết về pagesel và banksel, nhưng tìm mãi không ra (đến giờ tôi spam được gần 700 lần rồi, nên khó tìm).
Cú pháp của các directive đó rất đơn giản, bạn dùng tên của ô nhớ (thanh ghi) với banksel, và dùng nhãn với pagesel. Ví dụ, banksel PORTB, sẽ sinh ra các lệnh hợp ngữ cần thiết để chọn bank cho thanh ghi PORTB. Còn pagesel ctcon1 sẽ sinh ra các lệnh hợp ngữ cần thiết để thiết lập PCLATH thích hợp cho lệnh chuyển điều khiển đến ctcon1 nằm sau đó. pagesel liên quan đến trang bộ nhớ chương trình, còn banksel liên quan đến trang của bộ nhớ dữ liệu. Hai phần này nói chung không có liên quan gì với nhau. Tổng quát, nếu sắp chuyển điều khiển (bằng call hay goto) đến một đoạn mã lệnh nằm khác trang bộ nhớ chương trình thì phải chuyển trang, còn nếu sắp truy xuất một ô nhớ dữ liệu nằm ở bank khác với hiện tại thì phải chuyển bank. (Tôi viết vừa tiếng Anh vừa tiếng Việt để bạn dễ phân biệt) Thân, |
cám ơn bạn namqn nhiều, cho hỏi thêm tí nữa nghe
(vì mình hơi cậm tiêu hehe). lệnh pagesel ctcon1 rồi mới tới lệnh gọi chuơng trình con 1 phải ko? Code:
cd: bây giờ thì mình hiểu thêm đuợc tí, nhờ có cầu trúc banksel, pagesel mà đơn giản hơn nhiều khi chọn bank hoặc page. thanks |
Trích:
Code:
cd: |
cám ơn bạn namqn nhiều, bây giờ thì mình hiểu ra rùi.
|
Bạn namqn
cho mình hỏi 1 tí trong Datasheet PIC 16F877a trang 38 ở ví dụ EXAMPLE 3-4 ở dòng 3 từ dưới đếm lên XORLW 0X03 đúng ra nó phải là XORLW 0X04 không biết tôi nghĩ như vậy có đúng không ? xin bạn chỉ dùm sau đây là nguyên bản của Datasheet -------------------------------------------------------------------------- EXAMPLE 3-4: WRITING TO FLASH PROGRAM MEMORY -------------------------------------------------------------------------- ; This write routine assumes the following: ; ; 1. A valid starting address (the least significant bits = ‘00’)is loaded in ADDRH:ADDRL ; 2. The 8 bytes of data are loaded, starting at the address in DATADDR ; 3. ADDRH, ADDRL and DATADDR are all located in shared data memory 0x70 - 0x7f ; BSF STATUS,RP1 ; BCF STATUS,RP0 ; Bank 2 MOVF ADDRH,W ; Load initial address MOVWF EEADRH ; MOVF ADDRL,W ; MOVWF EEADR ; MOVF DATAADDR,W ; Load initial data address MOVWF FSR ; LOOP MOVF INDF,W ; Load first data byte into lower MOVWF EEDATA ; INCF FSR,F ; Next byte MOVF INDF,W ; Load second data byte into upper MOVWF EEDATH ; INCF FSR,F ; BSF STATUS,RP0 ; Bank 3 BSF EECON1,EEPGD ; Point to program memory BSF EECON1,WREN ; Enable writes BCF INTCON,GIE ; Disable interrupts (if using) MOVLW 55h ; Start of required write sequence: MOVWF EECON2 ; Write 55h MOVLW AAh ; MOVWF EECON2 ; Write AAh BSF EECON1,WR ; Set WR bit to begin write NOP ; Any instructions here are ignored as processor ; halts to begin write sequence NOP ; processor will stop here and wait for write complete ; after write processor continues with 3rd instruction BCF EECON1,WREN ; Disable writes BSF INTCON,GIE ; Enable interrupts (if using) BCF STATUS,RP0 ; Bank 2 INCF EEADR,F ; Increment address MOVF EEADR,W ; Check if lower two bits of address are ‘00’ ANDLW 0x03 ; Indicates when four words have been programmed XORLW 0x03 ; BTFSC STATUS,Z ; Exit if more than four words, GOTO LOOP ; Continue if less than four words |
Trích:
http://www.picvietnam.com/forum/showthread.php?t=934 Phần code ví dụ trong datasheet đó đã được xác định là có lỗi. Thân, |
Em có vài thắc mắc(mới học PIC được 1 buổi tối):
1/Em thấy pic16F877a PORTA chỉ có từ RA0-->RA4, em muốn dùng hết 8bit PORTA thì dùng chân nào nữa? có phải AN5-->AN7 ko? 2/Em đang viết chương trình chạy 1 dãy led (32led),chương trình thế này: có nhiều mode chạy led, khi bắt đầu thì chọn ngẫu nhiên 1 mode chạy, trong quá trình chạy nếu nhấn reset MRST thì pic reset lại và nó lại chọn ngẫu nhiên 1 mode khác... viết bằng ASM. Nhưng hiện em đang bí phần tạo số ngẫu nhiên, xin hỏi ASM cho pic có cách nào tạo được số ngẫu nhiên ko? nếu dùng C thì sao? 3/Anh nào viết 1 tut về sử dụng chức năng Analog của portA đi |
Trích:
2/ Ở www.piclist.com có các đoạn code hợp ngữ để tạo số ngẫu nhiên, trang sau đây có các đoạn code để tạo số ngẫu nhiên 8-bit: http://www.piclist.com/techref/microchip/rand8bit.htm Các trình biên dịch C thường có hàm sinh số ngẫu nhiên, nếu viết chương trình bằng C thì chỉ cần dùng hàm đó. 3/ Dưới đây là các bước thực hiện để sử dụng module A/D (được dịch và chú thích thêm từ datasheet của PIC16F877A) Trích:
Nếu cần thiết, bạn có thể tự viết đoạn code và post lên đây để các thành viên khác có thể xem xét giúp bạn. Thân, |
điều khiễn đông cơ 1 chiều kích thích quay thuận ,quay ngược
chào các bác em là dân mơi học píc 16f877a ,em đang làm đồ án về điều khiễn động cơ 1 chiều kích thích quay thuận quay ngược ,em làm được mạch nhưng về phần code thì em làm mãi mà nó vẫn ko chạy , mong các bác giúp đỡ em bác nào có code thì pots lên cho em tham khão với .
em xin cãm ơn các bác ? |
Múi giờ GMT. Hiện tại là 04:40 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