PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 28-05-2006, 11:23 AM   #31
ntc
Đệ tử 8 túi
 
ntc's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: HCM city
Bài gửi: 264
:
Send a message via Yahoo to ntc
Trích:
mình có thể thay thanh ghi DATAOUT trong chương trình bạn viết bằng thanh ghi FSR, sau đó mình muốn truy cập đến thanh ghi nào, mình chỉ cần cấp địa chỉ lên FSR rồi chạy lại INDF lấy dữ liệu xuất ra PORTD được chứ ?
Mình viết vậy cho dễ hiểu. Bạn thử lại xem như thế nào.

Trích:
nhân đây, mình muốn hỏi bạn về PSP. Chân CS\ của P16F877A có thể dùng như chân ALE trong 8051 không ? đặt trường hợp bus dữ liệu và bus địa chỉ dùng chung như Port0 của 8051 ấy , ví dụ như mình muốn lấy data trong DS12887 ở một địa chỉ nào đó, mình phải thiết lập cho PORTD là output, rồi đưa địa chỉ ra đó, tiếp theo là kéo chân CS\ từ HIGH-->LOW để chốt địa chỉ, sau đó lại chuyển PORTD thành input rồi đọc dữ liệu? Hồi trước mình làm với 8051 nên không để ý chuyện này vì 8051 có lệnh hỗ trợ giao tiếp với bộ nhớ ngoài.PIC cũng có định địa chỉ gián tiếp, không biết nó có giúp mình trong trường hợp này không nhỉ???
Hìhì, PIC còn biết chút chút, còn 8051, phải nói là ... mù 8051. Mình không tìm hiểu thực sự nghiêm túc 8051. Với lại, gần 2 năm chưa đụng tới nó rồi.

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.

__________________

ntc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-06-2006, 05:42 PM   #32
newuser
Đệ 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
newuser vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-06-2006, 12:19 PM   #33
newuser
Đệ 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.
newuser vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-06-2006, 12:31 PM   #34
newuser
Đệ 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 ?
newuser vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-06-2006, 06:04 PM   #35
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi newuser
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 ?
Em nên viết
Code:
...
pagesel SUB_A
call SUB_A
...
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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-07-2006, 12:11 PM   #36
anhdungcan
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 ?
anhdungcan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-07-2006, 01:33 PM   #37
newuser
Đệ tử 4 túi
 
Tham gia ngày: Feb 2006
Bài gửi: 66
:
Trích:
Nguyên văn bởi namqn
Em nên viết
Code:
...
pagesel SUB_A
call SUB_A
...
Thân,
Ôi, thật đơn giản và rõ ràng !. Câu trả lời của anh giúp em lộ ra hai vấn đề, thứ nhất là em học máy móc và đơn giản quá, không tự đặt nổi một câu hỏi "đã có banksel thì sao lại không có pagesel, MPLAB có hỗ trợ biên dịch không nhỉ ?" và vấn đề thứ hai là không chịu đọc kỹ tài liệu.
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é !
newuser vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-07-2006, 05:30 PM   #38
chuthong1
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!!
chuthong1 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-08-2006, 02:33 AM   #39
leduy173
Đệ tử 2 túi
 
leduy173's Avatar
 
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
leduy173 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-10-2006, 09:57 AM   #40
Jerry
Đệ tử 5 túi
 
Jerry's Avatar
 
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
Jerry vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-10-2006, 10:30 AM   #41
newuser
Đệ tử 4 túi
 
Tham gia ngày: Feb 2006
Bài gửi: 66
:
Trích:
Nguyên văn bởi Jerry View Post
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ị đó!
newuser vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-10-2006, 11:19 AM   #42
huunam
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 .
huunam vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-10-2006, 07:03 PM   #43
nhh
Đệ tử 9 túi
 
nhh's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 174
:
Send a message via Yahoo to nhh
Trích:
Nguyên văn bởi huunam View Post
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
__________________
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
nhh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-02-2007, 05:20 PM   #44
qanhep
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.
qanhep vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-02-2007, 06:21 PM   #45
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi hungpq View Post
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,
__________________
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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến

Similar Threads
Ðề 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


Múi giờ GMT. Hiện tại là 07:17 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam