- Bác nào rảnh giải thích giúp em cái hàm Delay này cái:
Code:
Delay - và lệnh "Goto Delay_0" với "Goto D1" thì có gì khác nhau? em thấy trong một số hàm Delay người ta chỉ dùng có lệnh "Goto Delay_0" Em xin cảm ơn rất nhiều. |
$ là địa chỉ lệnh hiện hành, $ + 2 là ô nhớ lệnh cách vị trí hiện hành 2 đơn vị.
Với ví dụ trên của bạn (giả sử viết cho PIC16), lệnh GOTO $ + 2 dùng để chuyển điều khiển đến lệnh GOTO Delay_0 nếu sau khi giảm biến counta kết quả vẫn khác 0 (tức là nếu sau khi giảm counta mà counta vẫn khác 0 thì bỏ qua lệnh giảm countb). Đoạn chương trình trên dùng 3 biến đếm, do đó nếu cập nhật counta, rồi countb, thì sẽ đến lượt count1 được cập nhật. Do đó cần dùng các nhãn Delay_0 hay D1 cho các lệnh GOTO một cách thích hợp. Thân, |
- Cảm ơn anh Nam đã giúp đỡ:
em viết hàm delay như này được không? và hai cái này khác nhau ở chỗ nào? Code:
Delay |
Chài khó hiểu quá mấy bác ơi
|
PIC16 thì em không biết nhưng với PIC18F4580 thì không cần lưu lại giá trị của PCLATH :
1>Bình thường nếu không có tác động trực tiếp thì thanh ghi PCLATH sẽ không thay đổi giá trị, kể cả khi PC thay đổi từ địa chỉ 0xFF đến 0x100. Lúc đó PCL=00 và PCLATH=00. ( Kết quả có được nhờ giả lập MPLAB SIM) 2>Sau lenh RETIF hoặc RET thì chương trình đọc PC từ Stack (TOSL, TOSH, TOSU). Lúc này PC sẽ được phục hồi như ngay tại thời điểm gặp ngắt, hoặc lệnh CALL. Nhưng PCLATH vẫn không bị thay đổi nếu không có lệnh tác động trực tiếp (chẳng hạn MOVWF PCLATH) 3>Thanh ghi PCLATH chỉ có tác dụng khi ta tác động ghi lên thanh ghi PCL, chẳng hạn: + với PCLATH=1 thì lệnh MOVWF PCL sẽ làm cho PC=0x100 ( với WREG=0) Nói túm lại bình thường PC không tham khảo đến thanh ghi PCLATH, chỉ khi có tác động ghi trực tiếp lên thanh ghi PCL thì PC mới tham khảo đến nó. Theo em thấy thì khi sử dụng bảng mới thực sự cần đến thanh ghi PCLATH Em là Newbie, có sai sót gì thì nhẹ nhàng chỉ bảo em ^^ |
co thể chạy chương trinh MPLAB ngay trong CCS C không
co thể vừa viết MPLAB và CCS C cung trong CCS C không |
Trích:
Bản thân CCS cũng có IDE. Tuy nhiên, IDE của CCS không hỗ trợ các trình biên dịch của Microchip (MPLAB C18, MPLAB C30, MPLAB C32). Thân, |
Code:
;============================================================================================== - Anh nào biết nó sai ở chỗ nào chỉ giúp em với. Mạch em dùng thạch anh 10Mhz, tụ gốm 33p. Cảm ơn các anh nhiếu |
không có ai giúp mình sao? đang cần quá.
|
Bạn đã khẳng định là chương trình chạy tốt rồi, chỉ có thay đổi thiết lập cấu hình từ bộ dao động nội sang thạch anh ngoài thôi. Như vậy có nhiều khả năng là thạch anh không dao động (đã có bạn gặp trường hợp là chân OSC2 bị hỏng, do đó chỉ dùng được cấu hình clock ngoài, không dùng được cấu hình thạch anh ngoài). Bạn cũng chú ý là bạn đang bật WDT, và trong code không hề có lệnh xóa WDT. Có khả năng là bạn tắt WDT khi chạy bằng bộ dao động nội, và bật WDT khi cấu hình lại để dùng thạch anh ngoài hay không?
Thân, |
Bang chủ làm ơn cho hỏi: địa chỉ cổng b của 18f4550 là gì ?, mình tìm mãi không thấy nó ghi ở chỗ nào cả. Xin cảm ơn !!!
|
Trích:
Thân, |
góp ý với bang chủ về mẫu chương trình
Trích:
theo tôi nên đặt các hàm con nằm giữa dòng lệnh goto $ và end mạn phép bang chủ có mấy lời góp ý :D xin mọi người cho ý kiến ! |
Trích:
Do đó, mệnh đề "nếu không phải là vòng lặp vô hạn" của bạn chỉ có giá trị true khi chương trình cho PIC được viết tồi. Và cấu trúc của chương trình mẫu không có gì bất hợp lý. Lệnh goto $ ngay phía trước directive end của chương trình mẫu vốn là một lệnh thừa. Việc đặt các chương trình con ở đâu trong chương trình hợp ngữ vốn không quan trọng, trừ một số trường hợp liên quan đến kỹ thuật bảng. Lập trình cho PIC có một số điểm khác biệt so với lập trình cho PC, vì sự hạn chế tài nguyên cùng cấu trúc đặc biệt của PIC so với một máy vi tính (đa dụng). Thân, |
Trích:
Tuy nhiên, theo tôi lệnh goto $ chỉ thừa trong trường hợp này thôi (trong vi dụ mẫu) còn trong một số trg hợp khác bản thân nó là một "vòng lặp vô hạn không làm gì cả " (kiểu như: while(TRUE) {}; ) thì lại không thừa. Chẳng hạn một chương trình không làm gì cả mà chỉ khởi tạo các giá trị ban đầu rồi chờ các sự kiện ngắt để phục vụ thì không thể coi đó là một chương trình tồi và lẽ đương nhiên là cần phải có một lệnh goto $ để tạo ra vòng lặp vô hạn (tất nhiên mọi người có thể nói là không cần lệnh goto $ mà dùng lệnh loop goto loop :)) Tất nhiên chương trình con thì đặt đâu mà chả được, nhưng đây là nói tới cái chương trình mẫu mà F tạo ra dành cho người mới học (như tôi chẳng hạn), cứ copy nguyên về, thay cái phần nội dung trong main và chương trình con cho phù hợp với bài toán của mình rồi biên dịch rồi chạy rồi thấy nó chạy loạn lên vì các lý do mà tôi đã đề cập ở bài trước. vì thế mới góp ý để F sửa đổi một chút chương trình mẫu để cho những người mới học khác có muốn copy về, xào xáo lại như tôi sẽ không bị nhầm lẫn nữa :D |
Trích:
Trong cấu trúc của chương trình mẫu, vòng lặp chính là vòng lặp giữa nhãn loop và lệnh goto loop. Nếu muốn biến nó thành while (true) {} thì không cần viết lệnh gì vào vòng lặp đó là xong. Do vậy, lệnh goto $ phía trước dẫn hướng end vẫn là thừa. Hơn nữa, viết theo kiểu loop goto loop hay goto $ đều dịch ra cùng kết quả. Cấu trúc của chương trình mẫu là ổn, đảm bảo không có chuyện "copy nguyên về, thay cái phần nội dung trong main và chương trình con cho phù hợp với bài toán của mình rồi biên dịch rồi chạy rồi thấy nó chạy loạn lên". Đề nghị bạn post những chương trình kiểu đó lên để minh họa cho lý luận của bạn. Về việc lệnh goto $ nằm trước dẫn hướng end: nó thừa nhưng chẳng ảnh hưởng gì đến chương trình ứng dụng (được viết đúng quy tắc) nên việc loại bỏ nó hay không vốn không phải là vấn đề. Thân, |
Trích:
Code:
;====================================== nhưng chuyển các chương trình con xuống giữa 2 dòng goto $ và end thì chạy đúng bây giờ quay trở lại chương trình mẫu: để như vậy đương nhiên vẫn chạy đúng chuyển các chương trình con xuống giữa 2 dòng goto $ và end vẫn chạy đúng lẽ đương nhiên quẳng các chương trình con ở đâu mà chẳng được, thế nhưng với tiêu chí "học pic trong một ngày" tức là dành cho người mới học thì mẫu càng tổng quát càng tốt đúng không, vậy thì tại sao lại không chỉnh sửa một chút (chẳng sai gì và chẳng thiệt hại gì) để chương trình mẫu có thể tránh thêm một lỗi có thể gặp trong thực tế. To Namqn: Từ đầu tôi vẫn nhất quán là chuyển chương trình con xuống thôi. còn những cái khác có thể là do cách diễn đạt làm bạn hiểu sai. Thế còn goto $ hay loop goto loop ai chả biết bản chất nó là một, ý tôi muốn nói ở đây là tôi thì thích dùng goto $ để làm vòng lặp while(TRUE); còn có thể ng khác lại thích dùng loop goto loop để làm vòng lặp while(TRUE); |
Bạn đã phá vỡ cấu trúc của chương trình mẫu. Trong chương trình mẫu, phần code của chương trình chính bắt đầu với các lệnh khởi tạo ban đầu, sau đó đi vào vòng lặp chính, còn các chương trình con nằm dưới vòng lặp chính.
Bạn đã bỏ mất vòng lặp chính (loop ... goto loop), dẫn đến chương trình con của bạn trở thành một phần trong đoạn mã khởi tạo, và sau đó bạn mượn lệnh goto $ thừa ngay trước dẫn hướng end để làm vòng lặp while (true) của bạn. Nếu bạn vẫn giữ vòng lặp chính loop ... goto loop nhưng không viết gì vào giữa thì cấu trúc của chương trình mẫu vẫn được giữ, và bạn đạt được mục đích của mình. Do đó, tôi xin khẳng định rằng bạn viết code không tuân theo cấu trúc của chương trình mẫu, và chương trình mẫu không có vấn đề gì cần phải sửa. Chương trình mẫu là tổng quát, đúng cho cả trường hợp bạn thích đặt cái gì vào vòng lặp chính, hay chỉ muốn có một vòng lặp vô tận ở đó. Nếu bạn thích dùng goto $ cho vòng lặp chính, thì sau khi loại bỏ hết code giữa loop và goto loop, bạn có thể viết nó lại thành goto $ (chứ không phải xóa hẳn cái vòng lặp đó đi như bạn đã làm). Thân, |
Trích:
Nhân đây cũng xin hỏi namqn (và mọi người :)) : những định nghĩa trong các tệp .inc (vd p16f84a.inc) có cần thời gian không nhỉ ? (ý tôi muốn hỏi là có cần thời gian để thực hiện như các lệnh không) mong mọi người chỉ giúp, thanks ! |
Trích:
Bạn đã nói rằng "copy nguyên về, thay cái phần nội dung trong main và chương trình con cho phù hợp với bài toán của mình rồi biên dịch rồi chạy rồi thấy nó chạy loạn lên", nhưng cái chương trình bị "chạy loạn lên" của bạn thì lại phá vỡ cấu trúc của chương trình mẫu (xóa mất vòng lặp vô tận loop ... goto loop), và dẫn đến góp ý của bạn rằng chương trình mẫu có chỗ không hợp lý. Góp ý của bạn do đó là không hợp lý. Vấn đề ở đây không phải ai đúng ai sai, mà là vấn đề bạn phá vỡ cấu trúc chương trình rồi đề nghị sửa lại chương trình mẫu để những người học sau đều phá vỡ cấu trúc giống như bạn. Đó là điều tôi không muốn xảy ra. Với câu hỏi về các tập tin .inc: những định nghĩa trong đó được trình biên dịch sử dụng khi dịch ra mã máy cho PIC, và không hề liên quan đến việc thực thi chương trình trong PIC, do đó không hề tiêu tốn một chu kỳ máy nào của PIC. Thân, |
Mình đọc luồng này và rất cảm ơn các bạn rất nhiều .
|
Mình đang làm đồ án về con PIC 16F877 , thiết lập hệ thồng tổng đài điện thoại nội bộ :
_2 trunk _8 Tel ra _Giao tiếp PC Hiện mình đang tìm tài liệu và mong các bạn hổ trợ những kiến thức kinh nghiệm trong quá trình thực hiện... . Cảm ơn rất nhiều |
Cám ơn sự nhiệt tình của bang chủ và các câu hỏi của thành viên nhiều lắm . Mình học được rất nhiều từ các bạn . Cám ơn 1 lần nữa . Chúc picvietnam năm mới phát triển hơn trước và mọi người có được sức khỏe tốt để chúng ta tiếp tục tranh luận ^^
|
Trích:
-Con U3 C78l05/TO29 là con gì vậy ? -Nguồn 9V-12V DC thì mua ở đâu ra ?Bao nhiêu ampe ? -Liệu có trực tiếp nguồn 5V-500A mà không qua mạch trên kia không? -Con thạch anh chọn bao nhiêu MHZ là tốt nhất ? Hic,câu hỏi quá newbie luôn chứ không còn hơi hơi nữa,mong mọi người giúp đỡ với !!!Thanks |
Trích:
- C78L05/TO92 là vi mạch ổn áp 5 V thuộc dòng 7805 (phiên bản 78L05 chỉ có định mức 100 mA chứ không phải 500 mA như trong sơ đồ của falleaf), có kiểu vỏ TO92 (3 chân loại nhỏ, giống như các transistor C1815 hay A1015). - Nguồn 9 - 12 VDC mua ở chợ (Ở Tp. HCM thì đến chợ Nhật Tảo), số ampe tối thiểu bằng với định mức của vi mạch ổn áp 5 V (chắc chắn có thể tìm được). - Các thạch anh 4 MHz, 10 MHz, và 20 MHz tốt như nhau. Thân, |
Như vậy là nguồn 5V-500 mA sẽ không có sẵn và mình phải làm mạch giống như trên?
|
Trích:
Thân, |
Cho tui hỏi là cái mạch ở trên đầu tiên của falleaf có thể áp dụng cho PIC 16F877a hok dzậy . Tui biết để tui ra tiệm mua linh kiện về làm liền .
|
Trích:
|
àh cho tui hỏi thêm là chân 6 của PORTA và chân 2 của PORTB có chung với nhau không , và 2 chân đó là gì vậy ( câu này có vẻ hơi ngu nhưng vì tui dở lắm nên thông cảm dùm +_+ )
Và tại sao mình phải qua 1 mạch ôn áp , mình có thể dùng PIN 5V được không 3W1 3W2 chỉ đơn thuần là tên thôi hay có ý nghĩa gì khác (tại vì tui thấy mấy nút reset chỉ cần qua 1 con điện trở tới nguồn ở trên là đủ gòi hok thấy có cái 3W) Àh nếu được thì cho tui chương trình viết MPASM luôn nha . |
T_T sao hok ai trả lời hết trơn dzậy . Kỉu này hok kịp nộp bài tập cho thầy quá
|
Trích:
Trích:
Trích:
|
Cái nguồn 9V-12V thì dòng điện vào là bao nhiêu vậy ?Nó có ảnh hưởng nhiều đến đầu ra 5V-500mA không?
|
^^ nhìn lộn , là SW chứ hok phải 3W .
Còn vụ chân số 2 của PORTB và chân số 6 của PORTA là sao vậy . Bỏ chân đó hay là sao . Àh mà tui gắn thêm PORTC , D chắc hok sao đâu ha . |
Cho hỏi cái này:công dụng của các con thạch anh trong mạch đầu thread là gì vậy?Nếu không có con thạch anh thì mạch có chạy không?
|
COn thạch anh dùng để cung cấp xung cho con PIC hoạt động . Cứ 4 nhịp động thì con PIC thực hiên 1 lệnh . Bạn hãy đọc kỹ trang 1 đi Falleaf viết rõ lắm đó
|
Cái đó thì mình đọc rồi và cũng hiểu chút ít.Nhưng do mình lắp mạch thật ở ngoài mà chạy chưa được nên mới nghĩ vậy.Trong mạch thật mình lắp không có thạch anh.Mà trong PIC cũng đã có sẵn dao động nội rồi đúng không?
|
Cam on fallaf, tôi đang tìm hiểu và bắt đầu học Pic. Bài viết của bạn rất hữu ích. Có kinh nghiệm nhiều bạn chỉ giáo cho tôi với nhé. Mail: anhlinhkn@gmail.com.
"Chuyển tải thông tin là bạn đã nhận được thông tin" |
hay quá các bác à
làm em mở rộng tầm mắt :D |
Thnaks bác Falleaf nhiều:) Bác hướngd dẫn rất cụ thể. Em mới bắt đầu học nhưng cũng hiểu so so rồi.hihi mong Bác chỉ bảo thêm
|
Múi giờ GMT. Hiện tại là 12:12 AM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam