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 15-02-2007, 02:21 PM   #61
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
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.
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-03-2007, 10:14 PM   #62
manofpic
Nhập môn đệ tử
 
Tham gia ngày: Mar 2007
Bài gửi: 2
:
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
manofpic vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-03-2007, 09:35 AM   #63
tranvanthuong
Đệ tử 2 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 45
:
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
tranvanthuong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-03-2007, 02:29 PM   #64
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
Bạn tham khảo trong luồng này:

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

ntc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-03-2007, 09:33 PM   #65
The lastest
Nhập môn đệ tử
 
Tham gia ngày: Mar 2007
Bài gửi: 5
:
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é
The lastest vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-03-2007, 12:00 AM   #66
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 The lastest View Post
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,
__________________
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 01-05-2007, 11:54 PM   #67
hieulongan039
Đệ tử 1 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 17
:
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
hieulongan039 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-05-2007, 12:16 AM   #68
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
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,
__________________
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-05-2007, 01:37 PM   #69
hieulongan039
Đệ tử 1 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 17
:
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

thay đổi nội dung bởi: namqn, 04-05-2007 lúc 01:39 AM.
hieulongan039 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-05-2007, 01:41 AM   #70
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 hieulongan039 View Post
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
__________________
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 04-05-2007, 07:22 PM   #71
hieulongan039
Đệ tử 1 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 17
:
cám ơn bạn namqn nhiều, bây giờ thì mình hiểu ra rùi.
hieulongan039 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-05-2007, 08:34 PM   #72
phamthanhkhuyen
Đệ tử 1 túi
 
Tham gia ngày: Nov 2006
Bài gửi: 25
:
Arrow

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
phamthanhkhuyen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-05-2007, 09:01 PM   #73
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 phamthanhkhuyen View Post
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,
__________________
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 15-06-2007, 05:45 PM   #74
mgdaubo
Đệ tử 1 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 19
:
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
mgdaubo vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-06-2007, 08:24 PM   #75
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 mgdaubo View Post
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,
__________________
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à 08:28 AM.


Đượ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