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 Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc 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

Ðề tài đã khoá
 
Ðiều Chỉnh Xếp Bài
Old 16-04-2006, 12:54 PM   #1
picpicpic
Đệ tử 2 túi
 
picpicpic's Avatar
 
Tham gia ngày: Jan 2006
Bài gửi: 36
:
hihi....Đợi mãi vẫn chưa thấy bài mới....
__________________
************************************************** **
The only wrong thing would be to deny what your heart truly feels!
************************************************** **
picpicpic vẫn chưa có mặt trong diễn đàn  
Old 18-04-2006, 02:49 PM   #2
nguyenan
Đệ tử 1 túi
 
Tham gia ngày: Nov 2005
Bài gửi: 11
:
cac bac xem dum em sao no lai bao noi vay,co can phai bo phan khai bao khong vay:

Code:
MPASM  5.02                         TEXT3.ASM   4-18-2006  12:05:38         PAGE  1


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00001    ;CHUONG TRINH HIEN THI RA PORTB
                      00002         processor  16f877a
                      00003 
                      00004     include  <p16f877a.inc>
                      00001         LIST
                      00002 ; P16F877A.INC  Standard Header File, Version 1.00    Microchip Technology, Inc.
                      00400         LIST
                      00005  
Warning[207]:  Found label after column 1. (_config)
Error[122]  :     Illegal opcode (_cp_off)
                      00006  _config  _cp_off &_wdt_off &_pwrte_on &_xt_osc &_lvp_off 
                       00007 
0000                00008  org 0x000
                       00009 ;bat dau chuong trinh   
0000   2801       00010    goto START
0001                 00011 START
0001   1303           00012    bcf STATUS,RP1
0002   1283           00013    bcf STATUS,RP0
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
0003   0186           00014    clrf TRISB
0004   1283           00015    bcf STATUS,RP0
0005   308F           00016    movlw B'10001111'
0006   0086           00017    movwf PORTB
0007                  00018 lop
0007   2807           00019    goto lop
Warning[205]: Found directive in column 1. (end)
                      00020 end ;ket thuc chuong trinh

thay đổi nội dung bởi: falleaf, 18-04-2006 lúc 03:55 PM.
nguyenan vẫn chưa có mặt trong diễn đàn  
Old 20-04-2006, 11:59 PM   #3
newuser
Đệ tử 4 túi
 
Tham gia ngày: Feb 2006
Bài gửi: 66
:
uhm...chán quá, gõ bài gửi cho bạn,đến khi gửi thì chẳng hiểu sao mình lại bị log out. Mình trả lời bạn ngắn gọn thôi vậy, ngại gõ lại quá...
bạn thấy dòng thông báo rồi đó, nó nói rằng bạn không thể tác động lên thanh ghi TRISB vì đơn giản là thanh ghi này không nằm ở bank0, nó nằm ở bank1/bank3 bạn à, vì thế bạn phải sửa lại đoạn code như sau:
BSF STATUS,RP0;chọn bank 1
BCF STATUS,RP1
bạn nên viết macro cho việc chọn bank thanh ghi cho tiện vì nếu bạn viết chương trình bằng asm thì phải nhảy qua nhảy lại các bank thanh ghi rất nhiều. Ví dụ như:
bank0 macro
bcf STATUS,RP0
bcf STATUS,RP1
endm
bank1 macro
bsf STATUS,RP0
bcf STATUS,RP1
endm
....
lưu lại với đuôi *.inc trong cùng thư mục với file *.asm
đặt dòng include *.inc vào đầu chương trình bạn nhé.
newuser vẫn chưa có mặt trong diễn đàn  
Old 21-04-2006, 01:08 PM   #4
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
Một số vấn đề về các thông báo, cảnh báo và lỗi khi biên dịch dùng MPASM. Mấy cái này, trong mấy cái Tutorial, mình đã rất cẩn trọng khi viết, để tránh được những thông báo không cần thiết của trình biên dịch, nhưng chắc có một số bạn không để ý.

Trích:
Error[122] : Illegal opcode (_cp_off)
Cái "config" phải có tới hai dấu gạch ở đằng trước nó lận. Viết như thế này nó mới hiểu "__config". Nếu chỉ có một dấu gạch ở đằng trước, trình biên dịch sẽ không hiểu được đó là một derective, mà chỉ hiểu là một cái label bình thường.

Trích:
Warning[207]: Found label after column 1. (_config)
Do trình biên dịch chỉ hiểu cái derective "_config" của bạn là một label khi bạn viết sai, nên mới xuất hiện thông báo này. Các label phải được đặt ở cột đầu tiên khi soạn thảo các file asm. Khi đó các thông báo tương tự sẽ không xuất hiện nữa.

Trích:
Warning[205]: Found directive in column 1. (end)
Các lệnh phải được đặt ở các cột tiếp theo, mà không viết ở đầu hàng như các label. Nếu bạn cho lệnh "END" thụt vào bên trong hàng đầu tiên (trở về đầu dòng và nhấn "tab" một cái cho cái lệnh "END" nó thụt vô bên trong, khi đó, nếu biên dịch lại, dòng thông báo này sẽ không xuất hiện nữa. Các lệnh khác cũng vậy, bạn nên viết thụt vào trong một cột.

Trích:
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
Đây không phải là một thông báo lỗi, mà chỉ là một cảnh báo để bạn xem lại việc truy xuất thanh ghi đó có nằm trong bank hiện hành hay không. Trình biên dịch không kiểm tra các thao tác này cho bạn, mà chỉ đưa ra một thông báo như vậy để bạn kiểm tra lại thôi. Xin nhắc lại, đây không phải là một thông báo lỗi. Bằng chứng là, mặc dù các thông báo này xuất hiện rất nhiều khi biên dịch, nhưng nếu không có lỗi nào khác ngoài các thông báo này, thì việc build vẫn "success".

Trong chương trình của bạn, bạn truy xuất thanh ghi TRISB ở BANK 1 trong khi vẫn đang ở BANK 0. Như vậy là không đúng, và giả sử, không còn lỗi nào khác, thì trình biên dịch vẫn báo "build success", nhưng chương trình khi thực thi sẽ không đúng. Phải sửa dòng lệnh 00013 thành "bsf STATUS,RP0" mới đúng.

Trích:
Error[122] : Illegal opcode (_cp_off)
Phải có thêm dấu "&" ở đằng trước mới được.

Vạn sự khởi đầu nan hả.

Như vậy, có một số điểm cần lưu ý khi soạn thảo chương trình asm cho trình biên dịch MPASM như sau:

Các label nên được viết ở cột đầu tiên của trình soạn thảo. Như vậy các cảnh báo "warning[207]" sẽ không xuất hiện khi biên dịch.

Các lệnh, kể cả lệnh END nên được viết ở các cột tiếp theo (nên cách một khoảng tab từ đầu dòng rồi viết lệnh). Khi đó các "warning[205]" sẽ không xuất hiện khi biên dịch.

Các thông báo (message) và cảnh báo (warning) không phải là lỗi. Trình biên dịch chỉ đưa ra các thông điệp này để lưu ý bạn rằng các chỗ này đã được kiểm tra chưa, đã bảo đảm đúng hay chưa, và không gây ảnh hưởng đến việc build chương trình có "successed" hay "failed".

Các thông báo lỗi (error) mới là những lỗi thực sự. Nếu không sửa lại cho đúng thì biên dịch không thành công (failed).

Vậy đó.

__________________


thay đổi nội dung bởi: ntc, 22-04-2006 lúc 12:00 PM.
ntc vẫn chưa có mặt trong diễn đàn  
Old 24-05-2006, 05:50 PM   #5
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
Parallel Slave Port _ Một phương pháp khá đơn giản để giao tiếp giữa các vi điều khiển PIC cũng như giữa PIC và các thiết bị ngoại vi.

Mọi người đọc rồi cho biết ý kiến nhá.



Cái này chủ yếu mang tính ... academic nhiều hơn. Mình xây dựng một số module cơ bản cho giao tiếp này dựa trên 2 vi điều khiển PIC16F877A.
File Kèm Theo
File Type: pdf TUT04.02.PVN.NTCR.200406.pdf (449.6 KB, 12195 lần tải)
__________________


thay đổi nội dung bởi: ntc, 24-05-2006 lúc 05:56 PM.
ntc vẫn chưa có mặt trong diễn đàn  
Old 29-05-2006, 02:12 PM   #6
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Trích:
Nguyên văn bởi ntc
Parallel Slave Port _ Một phương pháp khá đơn giản để giao tiếp giữa các vi điều khiển PIC cũng như giữa PIC và các thiết bị ngoại vi.

Mọi người đọc rồi cho biết ý kiến nhá.
F đặt ra vấn đề này cho mọi người suy nghĩ để giải quyết, và mong rằng có thể đưa ra những giải pháp tốt.

Giả sử, có một mạng 16 con vi điều khiển nằm chung với nhau. Bây giờ, chúng ta có một con master, chỉ làm nhiệm vụ truyền dữ liệu xuống cho 16 con kia. Hãy thiết kế mạch nguyên lý, và đưa ra giải pháp firmware cho mạng các vi điều khiển này.

Bài toán cụ thể đơn giản hơn:

Có 4 con slave, và 1 con master, tất cả đều là 16F877A. Cho một giá trị khởi tạo là b'11111111' đặt trong thanh ghi GIATRI của con master. Giảm đi 1 đơn vị sau mỗi lần thực hiện:

- Nếu GIATRI chia hết cho 4, gửi giá trị của GIATRI vào con slave 1 và hiển thị ra LED.
- Nếu GIATRI chia 4 dư 1, gửi giá trị của GIATRI vào slave 2 và hiển thị ra LED
- Nếu GIATRI chia 4 dư 2, gửi giá trị của GIATRI vào slave 3 và hiển thị ra LED
- Nếu GIATRI chia 4 dư 3, gửi giá trị của GIATRI vào slave 4 và hiển thị ra LED.

Hay nói cách khác, thực ra là cứ giảm GIATRI đi một đơn vị, rồi gửi theo thứ tự đến các slave, cứ lặp lại, cho đến khi GIATRI = 0.

Chú ý, thử dùng PSP để giao tiếp, và thử không dùng PSP mà chỉ nối port với port. Có nghĩa là tất cả các portD của các master và slave được nối chung với nhau, portD của master là ngõ xuất, portD của các slave là nhập.

Như vậy, chúng ta thử tìm giải pháp dùng giao tiếp PSP và giao tiếp song song giống như giao tiếp với cổng LPT của máy tính vậy.

Từ bài học này, chúng ta sắp nhấn một bước tới việc thực hành giao tiếp LPT, và một số thuật toán xử lý tín hiệu song song.

Mong rằng các bạn đầu tư thời gian để đưa ra một giải pháp tốt, phân tích tốc độ tính toán của giải pháp.

Chúc vui.
falleaf vẫn chưa có mặt trong diễn đàn  
Old 29-05-2006, 02:43 PM   #7
hungnp
Đệ tử 1 túi
 
Tham gia ngày: May 2006
Bài gửi: 15
:
Chao ban nhh. ban co cong nhan voi toi la loi viet bai nhu cua ban ntc thi da co qua nhieu bai viet trong nuoc va nuoc ngoai roi khong? co can toi chi ra mot it khong?. ban doc lai tu dau den cuoi cai forum nay di. co bao nhieu ban cho bai moi cua ban ntc. nhu the chang qua cac bai viet truoc chang co y nghia gi nhieu voi ho ca. Con van de toi co viet bai hay khong con tuy thuoc trinh do cua toi den muc do nao nua. Toi cam thay minh chua the du nang luc de viet nhung bai co chat luong that su nen toi chua viet duoc.
hungnp vẫn chưa có mặt trong diễn đàn  
Old 29-05-2006, 03:01 PM   #8
hungnp
Đệ tử 1 túi
 
Tham gia ngày: May 2006
Bài gửi: 15
:
De thuc hien duoc mot mang nhu cua bac F co the su dung mang 485. cho phan cung va giao thuc master/slave cho phan mem. giao tiep uart

giao thuc master/slave co the tuy bien theo ý thich cua nguoi dung.

Uu diem cua mang nay la: co the ket noi duoc nhieu slave tren mang(tat nhien con tuy thuoc vao mach chuyen hoi 232-485). truoc day toi da lam den 6 slave bang 89c51 ma chua co van de gi ca.

co kha nang tuyen data di xa do tin hieu truyen di va nhan ve cua VĐk la hieu cua tin hieu tren 2 day cua 485. do vay khi bi nhieu thi nhieu tren 2 day la dong deu nhu nhau nen khi lay hieu cua chung thi nhieu do bi triet tieu.

thoi dang ban khi khac noi tiep neu nhu co ai quan tam den cai mang nay cua toi.

thay đổi nội dung bởi: hungnp, 29-05-2006 lúc 04:57 PM.
hungnp vẫn chưa có mặt trong diễn đàn  
Old 31-05-2006, 06:26 PM   #9
hungnp
Đệ tử 1 túi
 
Tham gia ngày: May 2006
Bài gửi: 15
:
Sao không ai nói tiếp chuyện của bác F thế. Buồn Wá. Tôi đưa ra thuật toán thế này nhé. thuật toán này chỉ dùng cho mạng 485 của tôi.
hungnp vẫn chưa có mặt trong diễn đàn  
Old 31-05-2006, 06:29 PM   #10
hungnp
Đệ tử 1 túi
 
Tham gia ngày: May 2006
Bài gửi: 15
:
mạng 485

Các bác tham khảo và cho ý kiến nhé.
File Kèm Theo
File Type: pdf giao thuc 485.pdf (27.1 KB, 3179 lần tải)
hungnp vẫn chưa có mặt trong diễn đàn  
Old 31-05-2006, 09:41 PM   #11
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:
Chao ban nhh. ban co cong nhan voi toi la loi viet bai nhu cua ban ntc thi da co qua nhieu bai viet trong nuoc va nuoc ngoai roi khong? co can toi chi ra mot it khong?. ban doc lai tu dau den cuoi cai forum nay di. co bao nhieu ban cho bai moi cua ban ntc. nhu the chang qua cac bai viet truoc chang co y nghia gi nhieu voi ho ca. Con van de toi co viet bai hay khong con tuy thuoc trinh do cua toi den muc do nao nua. Toi cam thay minh chua the du nang luc de viet nhung bai co chat luong that su nen toi chua viet duoc.
Ý nghĩa của bài viết có thể không quan trọng với những thành viên đã rành về vi điều khiển PIC, nhưng mình tin rằng nó sẽ rất bổ ích cho những ai mới chập chững làm quen với nó, vì đó là những vấn đề rất cơ bản, được viết rất cơ bản, chi tiết và có trách nhiệm với cộng đồng quan tâm đến PIC.

Mình không có tham vọng biên soạn tất cả các vấn đề liên quan đến vi điều khiển PIC, và không thể viết với tốc độ nhanh để đáp ứng yêu cầu của cộng đồng, nhưng mình sẽ xây dựng nó theo tiêu chí "chậm mà chắc", từ dễ tới khó, rồi đây nó sẽ đầy đủ hơn, nhiều vấn đề hơn và có tác dụng tham khảo, ứng dụng nhiều hơn.

Tất nhiên một người không thể làm hết được tất cả, sự giới hạn về thời gian cũng như kiến thức không cho phép mình thực hiện điều đó. Mình vẫn luôn hy vọng có nhiều thành viên tham gia vào công việc này hơn, để cùng xây dựng một cái gì đó có ích cho cộng đồng, đồng thời tiết kiệm được nhiều thời gian và công sức hơn cho những thành viên muốn làm chủ công cụ PIC.

Vấn đề về năng lực có quan trọng hay không trong trường hợp này. Quan trọng là bạn muốn làm một cái gì đó thực sự có ích hay không. TÙy theo năng lực mà có được những đóng góp thích hợp. Bản thân mình cũng không thể khẳng định là có năng lực, nhưng tinh thần trách nhiệm và nỗ lực đóng góp đã thúc đẩy mình làm điều đó.

Mình tin rằng bạn hoàn toàn có thể có những bài viết có chất lượng cho diễn đàn, quan trọng là có muốn làm hay không thôi.

Đâu có cái gì hoàn toàn mới mẻ, vì mình đâu có phát minh ra con PIC, sử dụng nó không đã mệt lắm rồi. Bạn không nên dựa vào việc đã có nhiều bài viết trong nước và nước ngoài viết về các vấn đề tương tự mà đưa ra các nhận định rằng các bài viết của mình là không cần thiết như vậy. Mình tin rằng vẫn có nhiều thành viên cần đến nó, vì người mới học PIC bao giờ cũng có, và luôn hy vọng rằng những đóng góp của mình sẽ giúp ích được cho những thành viên đó.

Rất mong bạn đóng góp những tài liệu trong nước và nước ngoài đó. Chỉ nó ra để mọi người cùng tham khảo đi.

Một vài góp ý như vậy.

__________________

ntc vẫn chưa có mặt trong diễn đàn  
Old 08-11-2006, 10:23 AM   #12
ppthaidpp
Nhập môn đệ tử
 
Tham gia ngày: Oct 2006
Bài gửi: 1
:
Trích:
Nguyên văn bởi ntc View Post



Đồng ý hoàn toàn, các bài viết dẫu sao cũng tốn nhiều công sức của người viết và post lên để hướng dẫn lại cho những người mới dễ dàng hơn trong việc tìm hiểu và tự học.
Cám ơn nhiều.
ppthaidpp vẫn chưa có mặt trong diễn đàn  
Old 31-05-2006, 10:02 PM   #13
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:
Sao không ai nói tiếp chuyện của bác F thế. Buồn Wá. Tôi đưa ra thuật toán thế này nhé. thuật toán này chỉ dùng cho mạng 485 của tôi.
Hìhì. Bác Falleaf đang đặt ra các vấn đề về giao tiếp song song mà.

Mạo muội đưa ra một giải pháp về giao tiếp nhiều PIC qua PSP như sau:

Module PSP có chân CS*, ta có thể chọn chân này làm giải pháp để giao tiếp nhiều PIC qua PSP. Các PIC sẽ được nối với nhau theo dạng BUS (nối tất cả các chân data của Slave và Master lại với nhau). Muốn giao tiếp với chip nào chỉ cần đưa chân CS* của chip đó xuống mức logic thấp (tất nhiên, bàn đầu đưa tất cả các chân CS* lên cao). Đại khái cách nối giống như nối nhiều LED 7 đoạn. Các chân RD* và WR* cũng được nối chung với nhau.

Trong trường hợp có nhiều PSP Slave, có thể dùng thêm các IC ghi dịch hoặc giải mã để tiết kiệm chân điều khiển cho PIC, ngõ ra các IC ghi dịch và giải mã sẽ được nối với các chân CS* của PIC.

PSP Master không nhất thiết phải sử dụng module PSP, mà có thể sử dụng bất cứ port 8 chân nào để làm ngõ data và một số chân để điều khiển việc chọn chip. PSP Slave nên sử dụng module PSP để việc truyền nhận dữ liệu đơn giản hơn.

Về firmware, cách đọc và ghi dữ liệu có thể dùng ngắt, và cách điều khiển cũng tương tự như giao tiếp giữa 2 PSP, các vấn đề phát sinh cần xử lí là chọn chip và xử lí thuật toán chia lấy phần dư.

Tuy nhiên cần tối ưu code xử lí ngắt để cải thiện thời gian truyền. Vì cứ mỗi lần phát sinh ngắt, phải mất một số chu kì lệnh phát sinh để vào ngắt và thoát ngắt.
__________________

ntc vẫn chưa có mặt trong diễn đàn  
Old 31-05-2006, 10:06 PM   #14
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
À, quên nữa. Cái TUT của mình phân tích quá trình hoạt động của PSP dựa vào giản đồ xung. Nếu vừa đọc bài của mình, vừa nhìn vào giản đồ xung của PSP trong cái datasheet của PIC thì sẽ dễ hiểu hơn rất nhiều.

__________________

ntc vẫn chưa có mặt trong diễn đàn  
Old 02-06-2006, 05:08 PM   #15
hungnp
Đệ tử 1 túi
 
Tham gia ngày: May 2006
Bài gửi: 15
:
bạn có khẳng định được là PSP hay hơn 485 không?. Nếu bạn khẳng định được điều này thì hãy sử dụng PSP.
hungnp vẫn chưa có mặt trong diễn đàn  
Ðề tài đã khoá

Ðiều Chỉnh
Xếp Bà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
TUT về USART trong PIC16F877A mafd_47a MPASM 16 19-02-2025 05:32 AM
TUT ve I2C ( pic16f877a ) mafd_47a MPASM 28 28-01-2025 10:45 PM
Lập nhóm PIC16F877A nhh Cơ bản về vi điều khiển và PIC 285 08-03-2017 11:08 PM
Bộ so sánh và PWM cho PIC16F877A anhquangngai Cơ bản về vi điều khiển và PIC 24 08-09-2012 09:00 AM
CCS C for PIC16F877A nhh Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) 405 24-04-2008 12:00 PM


Múi giờ GMT. Hiện tại là 10:31 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