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!NÀO TA CÙNG CHAT!" (http://www.picvietnam.com/forum/showthread.php?t=239)

newuser 03-10-2006 10:30 AM

Trích:

Nguyên văn bởi Jerry (Post 5217)
Theo mình biết thì còn có 1 cách để kiểm tra 1 chương trình có vượt quá 1 page hay không, bạn vào trang www.microchip.com, search dòng chữ "Crossing Page Boundary Detection", trong đó nói rất rõ.
MPLAB không báo lỗi cho bạn biết là không nhảy được tới chương trình con khác Page đâu. Bình thường mỗi khi viết chương trình, mình luôn để chương trình chính và chương trình xử lý ngắt ở Page0, các loại chương trình con khác thì để ở Page 1 hoặc 2 hoặc 3. Để nhảy tới chương trình con khác Page mình hay dùng lệnh LCALL hoặc LGOTO. Dùng PAGESEL cũng được, nhưng như vậy lại phải viết thêm 1 lệnh nên mình thường không dùng
(PAGESEL Subroutine
Call Subroutine)
Tuy nhiên khi dùng Lcall và Lgoto phải chú ý đến bit 4 và bit 3 trong thanh ghi PCLATH. Nếu đang ở Page0, bạn muốn gọi Subroutine ở Page1 thì trong Subroutine đó bạn phải dùng lệnh CLRF PCLATH để sau khi gọi Subroutine, chương trình có thể xử lý được lệnh tiếp theo ở Page0.
Cụ thể :
; Page 0
....
lcall Subroutine
......
; Page 1
Subroutine:
; thực hiện các công việc cần thiết ở đây
clrf PCLATH
return

ừ, mình mới post bài xong thì gặp bài của bạn ở đây. Thú vị đó!

huunam 03-10-2006 11:19 AM

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 .

nhh 03-10-2006 07:03 PM

Trích:

Nguyên văn bởi huunam (Post 5223)
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 .

Ở đây: http://www.picvietnam.com/forum//showthread.php?t=19

qanhep 02-02-2007 05:20 PM

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.

namqn 02-02-2007 06:21 PM

Trích:

Nguyên văn bởi hungpq (Post 7189)
Các bác ơi giúp tôi với. Tôi muốn ghi dữ liệu vào bộ nhớ Flash của con 16f877a mà không sao ghi được. Tôi đã làm theo hướng dẫn trong datasheet nhưng vẫn không được. Mong các cao thủ giúp đỡ.

Bạn nói cụ thể hơn, làm theo hướng dẫn là bạn đã làm những gì?

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,

anhthang 09-02-2007 08:09 AM

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!

qanhep 09-02-2007 08:37 AM

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.

ntc 09-02-2007 12:41 PM

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.

anhthang 09-02-2007 07:48 PM

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!

hieulongan039 09-02-2007 10:24 PM

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

anhthang 10-02-2007 08:39 AM

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ũ.

anhthang 10-02-2007 08:55 AM

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.

anhthang 10-02-2007 08:57 AM

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.

anhthang 10-02-2007 06:51 PM

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.

hawinter 10-02-2007 07:12 PM

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)

falleaf 10-02-2007 08:08 PM

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

namqn 10-02-2007 09:46 PM

Trích:

Nguyên văn bởi anhthang (Post 7321)
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ũ.

Nói tổng quát hơn, bootloader là một chương trình (viết bằng bất cứ ngôn ngữ gì) dùng để nạp code mới vào chip thông qua một phương tiện truyền thông nào đó (thường dùng RS-232, hay USB). Một điều kiện cần là chip phải có khả năng tự nạp chương trình, đây là lưu ý quan trọng vì nhiều bạn vẫn dùng PIC1F84(A) hay PIC16F628(A) để bắt đầu học PIC, và các chip này không dùng với bootloader được.

Thân,

hungpq 12-02-2007 09:35 AM

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.

hieulongan039 13-02-2007 06:00 PM

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

hieulongan039 14-02-2007 06:26 PM

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

falleaf 15-02-2007 02:21 PM

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.

manofpic 11-03-2007 10:14 PM

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

tranvanthuong 15-03-2007 09:35 AM

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

ntc 15-03-2007 02:29 PM

Bạn tham khảo trong luồng này:

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

The lastest 26-03-2007 09:33 PM

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é

namqn 27-03-2007 12:00 AM

Trích:

Nguyên văn bởi The lastest (Post 7961)
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é

Khi đã mô phỏng bằng MPLAB SIM thì vẫn chưa hoàn toàn chắc chắn là chương trình đã đúng.

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,

hieulongan039 01-05-2007 11:54 PM

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

namqn 02-05-2007 12:16 AM

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,

hieulongan039 02-05-2007 01:37 PM

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:
              ............
          call ctcon1
          ........
          ............
            call ctcon2
            .........

            pagesel ctcon1
    ctcon1:
          ..........
            .......
              ret          ;dừng ct con 1

            pagesel ctcon2
      ctcon2:
            ..........
            ..........
            ret                    ;dừng ct con 2

; cú pháp vậy dúng ko bạn namqn

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

namqn 04-05-2007 01:41 AM

Trích:

Nguyên văn bởi hieulongan039 (Post 8490)
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:
              ............
          call ctcon1
          ........
          ............
            call ctcon2
            .........

            pagesel ctcon1
    ctcon1:
          ..........
            .......
              ret          ;dừng ct con 1

            pagesel ctcon2
      ctcon2:
            ..........
            ..........
            ret                    ;dừng ct con 2

; cú pháp vậy dúng ko bạn namqn

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

Bạn phát biểu đúng nhưng viết code sai, phải viết như sau:
Code:

cd:
              ............
            pagesel ctcon1
          call ctcon1
          ........
          ............
            pagesel ctcon2
            call ctcon2
            .........

    ctcon1:
          ..........
            .......
              ret          ;dừng ct con 1

      ctcon2:
            ..........
            ..........
            ret                    ;dừng ct con 2


hieulongan039 04-05-2007 07:22 PM

cám ơn bạn namqn nhiều, bây giờ thì mình hiểu ra rùi.

phamthanhkhuyen 20-05-2007 08:34 PM

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

namqn 20-05-2007 09:01 PM

Trích:

Nguyên văn bởi phamthanhkhuyen (Post 8800)
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
...

Bạn đọc post #17 của luồng này về cách sửa:
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,

mgdaubo 15-06-2007 05:45 PM

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

namqn 15-06-2007 08:24 PM

Trích:

Nguyên văn bởi mgdaubo (Post 9374)
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

1/ PIC16F877A được thiết kế PORTA như vậy, không có các chân RA6 và RA7. Các bit 6 và 7 không được sử dụng trong các thanh ghi PORTA và TRISA. Do đó bạn không thể dùng PORTA như một port 8-bit, bạn chỉ có thể dùng nó như một port 6-bit.

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:

1. Cấu hình module A/D
- Cấu hình các chân analog/điện áp chuẩn (tham chiếu) và các chân digital (dùng thanh ghi ADCON1)
- Chọn kênh ngõ vào A/D (thanh ghi ADCON0)
- Chọn nguồn xung chuyển đổi A/D (thanh ghi ADCON0)
- Bật module A/D (thanh ghi ADCON0)

2. Cấu hình ngắt A/D (nếu cần)
- Xóa bit ADIF (thanh ghi PIR1)
- Bật bit ADIE (thanh ghi PIE1)
- Bật bit PEIE (thanh ghi INTCON)
- Bật bit GIE (thanh ghi INTCON)

3. Chờ đủ thời gian lấy mẫu

4. Bắt đầu chuyển đổi: bật bit GO/DONE (thanh ghi ADCON0)

5. Chờ cho việc chuyển đổi hoàn tất bằng 1 trong 2 cách sau:
- Hỏi vòng bit GO/DONE để phát hiện nó bị xóa (đã cấm ngắt)
- Chờ ngắt A/D

6. Đọc cặp thanh ghi kết quả (ADRESH:ADRESL), xóa bit ADIF nếu cần

7. Với phép chuyển đổi tiếp theo, quay trở về bước 1 hay 2 tùy trường hợp.

TAD là thời gian chuyển đổi 1 bit.
Datasheet của PIC16F877A đã giải thích chi tiết về các thanh ghi liên quan đến module A/D. Bạn hãy đọc những phần đó.

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,

dhtd 27-12-2010 05:32 PM

đ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