![]() |
|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#31 | ||
Đệ tử 8 túi
|
Trích:
Trích:
![]() Còn về DS12887, nó có 2 chế độ giao tiếp BUS, đó là giao tiếp BUS theo Motorola hoặc Intel. Nếu theo cách giao tiếp BUS của Intel, nó chỉ xem chân CS là chân để chọn chip (Chip Select), ngoài ra không có chức năng nào khác. Nếu chọn cách giao tiếp của Motorola, chân CS (của DS12887) tương ứng với chân ALE thì phải. Mình không để ý kĩ lắm, vì cứ dựa vào giản đồ xung mà viết chương trình thôi. Chọn đại một cái (Motorola hay Intel), rồi dựa vào cái giản đồ xung tương ứng mà "chế" code thôi. Cái này gọi là "vô chiêu thắng hữu chiêu" phải không nhẩy. Bản thân chức năng cái chân CS của PSP trong PIC chỉ dùng để chọn chip thôi. Bạn cứ thử những ý tưởng của mình, rồi thông báo kết quả cho mọi người biết nhá. Cũng có thể ứng dụng PSP để giao tiếp với DS12887. Bạn thử xem sao. ![]() |
||
![]() |
![]() |
![]() |
#32 |
Đệ tử 4 túi
Tham gia ngày: Feb 2006
Bài gửi: 66
: |
Đây là đoạn chương trình kiểm tra cờ bận BF cho chương trình giao tiếp LCD mà mình đã post,nếu bạn nào nạp thử chương trình trước chạy không được thì chỉ cần thế đoạn mã kiểm tra cờ BF này là xong.
; KIEM TRA CO BF TEST_BF BANK1 MOVLW H'FF' MOVWF TRISD ;PORTD NHAP/XUAT DATA BANK0 ; HIEN TAI LA PORT INPUT BSF EN BCF RS ; DOC TRANG THAI BANG CACH CHO RS=0 BSF RW ; BIT0 DEN 6 LA DIA CHI HIEN TAI CUA CON TRO-> KO QUAN TAM NOP ; BIT 7 = BF BSF EN NOP NOP BUSY_BF BSF EN RLF PORTD,W ; C = BF = PORTB<7> BTFSC STATUS,C GOTO BUSY_BF ; NEU BF = 1 THI TIEP TUC KIEM TRA BANK1 CLRF TRISD ; PORTD = OUTPUT BANK0 RETURN |
![]() |
![]() |
![]() |
#33 |
Đệ tử 4 túi
Tham gia ngày: Feb 2006
Bài gửi: 66
: |
có bạn nào giải thích dùm mình về cách định trang chương trình trong P16F877A không? ví dụ như chương trình con SUB_A của mình đang nằm ở trang0, trong khi chương trình phục vụ ngắt nằm ở trang 1, vậy nếu trong chương trình ngắt có gọi chương trình SUB_A này thì phải làm sao ?
mình đang viết một chương trình, khi dung lượng còn nhỏ hơn 2K thì không sao, nhưng khi chương trình vượt qua ngưỡng 2K thì một số chương trình con không thực thi được, mình đọc datasheet rồi nhưng vẫn chưa thông lắm. |
![]() |
![]() |
![]() |
#34 |
Đệ tử 4 túi
Tham gia ngày: Feb 2006
Bài gửi: 66
: |
ORG 0X7F ;nằm ở trang 0
SUB_A ... ... ... RETURN ... ORG 0X800 ;trang 1 INT_ISR PAGE0 CALL SUB_A .... RETFIE trước lệnh gọi mình đã chọn trang 0 như vậy có đúng không ? |
![]() |
![]() |
![]() |
#35 | |
Trưởng lão PIC bang
|
Trích:
Code:
... pagesel SUB_A call SUB_A ...
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#36 |
Nhập môn đệ tử
Tham gia ngày: Jun 2006
Bài gửi: 1
: |
cac bac noi ro nguyen nhan hong con PIC de em con chanh. Hong mot con la di mot lit chu it dau, nhi ?
|
![]() |
![]() |
![]() |
#37 | |
Đệ tử 4 túi
Tham gia ngày: Feb 2006
Bài gửi: 66
: |
Trích:
trước khi đọc bài trả lời của anh em đã viết chương trình lại rồi, nó đã chạy tốt. Em đã làm theo cách củ chuối là vào file.LST để xem đoạn chương trình đó thuộc trang nào rồi cứ mỗi khi gọi chương trình đó, em lại chọn trang một lần theo kiểu em đã viết ở trên, tuy chương trình chạy được nhưng ... củ chuối quá đi thôi ! các bạn mới học rút kinh nghiệm từ mình nhé ! |
|
![]() |
![]() |
![]() |
#38 |
Nhập môn đệ tử
Tham gia ngày: Mar 2006
Bài gửi: 7
: |
hay wa'!!
Đề nghị anh NTC tiếp tục post bài tiếp lên đi !! Hi!! |
![]() |
![]() |
![]() |
#39 |
Đệ tử 2 túi
Tham gia ngày: Jun 2006
Bài gửi: 28
: |
ủa như newuser làm thí chỉ có cách củ chuối đó thui sao buộc lòng fai vô file .lis để kiếm coi nó nằm ở trang mấy ha?thấy bất tiện quá có cách nào khác ko?
Làm thế nào đề bít khi thực hiện lênh gọi chương trình con mà nó bị vươt quá 2k, khi dịch MP nó có báo lỗi cho mình bít là ko nhảy tới đó được ko!em chưa viết chương trinh nao wa dài nen ko bit.MOng được học hỏi thêm |
![]() |
![]() |
![]() |
#40 |
Đệ tử 5 túi
Tham gia ngày: Sep 2006
Bài gửi: 100
: |
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 |
![]() |
![]() |
![]() |
#41 | |
Đệ tử 4 túi
Tham gia ngày: Feb 2006
Bài gửi: 66
: |
Trích:
|
|
![]() |
![]() |
![]() |
#42 |
Nhập môn đệ tử
Tham gia ngày: Jul 2006
Bài gửi: 6
: |
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 . |
![]() |
![]() |
![]() |
#43 | |
Đệ tử 9 túi
|
Trích:
__________________
Ngày mai bắt đầu từ ngày hôm nay Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này: http://www.picvietnam.com/forum//showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#44 |
Nhập môn đệ tử
Tham gia ngày: Jan 2007
Bài gửi: 9
: |
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. |
![]() |
![]() |
![]() |
#45 | |
Trưởng lão PIC bang
|
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,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
|
|
![]() |
||||
Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
bác fall cho em hỏi tý về CCSC tại sao lại "Out of ROM" sớm thế? | MoH | Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) | 12 | 20-10-2006 11:31 AM |
Hội thảo: "Tầm nhìn dientuvietnam 2006" | falleaf | Đóng góp ý kiến | 2 | 03-08-2006 06:48 PM |
Ý kiến về "Tài liệu hướng dẫn PIC - Tiếng Việt" | baoquyen | Đóng góp ý kiến | 8 | 04-12-2005 10:04 PM |
"Mechatronics handbook " | elecminh | Điều khiển | 3 | 07-09-2005 12:42 AM |
Nộp bài tập "Hoc PIC trong 1 ngày" | teo | Cơ bản về vi điều khiển và PIC | 5 | 02-06-2005 01:11 AM |