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 19-07-2006, 04:11 PM   #1
chuchinh
Đệ tử 1 túi
 
Tham gia ngày: Apr 2006
Bài gửi: 23
:
Trích:
Nguyên văn bởi namqn
Em phải đặt trạng thái cho các chân là vào/ra số thông qua thanh ghi CMCON
Ổn rồi anh ạ, đèn đã sáng khi em ấn phím tương ứng.
Trích:
Nguyên văn bởi namqn
- Câu hỏi thứ hai của em không rõ lắm, thực sự không hiểu em định làm gì.
Trong phần code em gửi kèm trong mục 46 bài này có hằng địa chỉ d4, em đem so sánh với 1 và 2 nhưng không bằng (như anh đã chỉ ở trên là do em nạp giá trị vào địa chỉ d4 chứ bản thân d4 bằng 0x21), vậy em phải viết lệnh như thế nào thì so sánh giá trị tại d4 với 0x01? Ngoài ra câu này em không hiểu: "lệnh if ... else ... endif là lệnh hợp dịch có điều kiện, nó không dùng để thực hiện các lệnh chuyển điều khiển trong chương trình". Khi kiểm tra giá trị tại địa chỉ d4 mà bằng 1, em muốn thực hiện một số thao tác nào đó (sửa giá trị một biến nào đó chẳng hạn), còn nếu không bằng thì thực hiện các thao tác khác, điều này có được không a? Phần ngôn ngữ em có nhiều cái chưa hiểu, mong anh chỉ dùm.
Trích:
Nguyên văn bởi namqn
- Nếu em có datasheet của một LCD dùng chip tương thích HD44780 (của Hitachi), đọc phần hướng dẫn cách khởi tạo cho chế độ giao tiếp 4-bit
OK, màn hình của em đã hiển thị được dòng chữ "Cam on anh nhieu". He he, merci.
Em hỏi thêm tý: em muốn dùng ngắt bàn phím, nhưng không biết mắc thế nào. Hiện nay Port B đã dùng để cho LCD 4 bit (RB0-RB3 cho D4-D7, RB4 cho RS, RB6 cho R/W, RB7 cho E). Còn tại cổng A thì RA0-RA3 đang dùng cho đầu vào 4 phím, RA6, RA7 dùng cho CLK. Trong mạch 8051, để dùng ngắt bàn phím em thấy họ dùng con 148 và lấy đầu ra báo ngắt để đưa vào chân ngắt. Ở đây có làm tương tự được không anh?
chuchinh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-07-2006, 07:40 PM   #2
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 chuchinh
Trong phần code em gửi kèm trong mục 46 bài này có hằng địa chỉ d4, em đem so sánh với 1 và 2 nhưng không bằng (như anh đã chỉ ở trên là do em nạp giá trị vào địa chỉ d4 chứ bản thân d4 bằng 0x21), vậy em phải viết lệnh như thế nào thì so sánh giá trị tại d4 với 0x01? Ngoài ra câu này em không hiểu: "lệnh if ... else ... endif là lệnh hợp dịch có điều kiện, nó không dùng để thực hiện các lệnh chuyển điều khiển trong chương trình". Khi kiểm tra giá trị tại địa chỉ d4 mà bằng 1, em muốn thực hiện một số thao tác nào đó (sửa giá trị một biến nào đó chẳng hạn), còn nếu không bằng thì thực hiện các thao tác khác, điều này có được không a? Phần ngôn ngữ em có nhiều cái chưa hiểu, mong anh chỉ dùm.?
Việc em muốn thực thi một số lệnh ứng với d4 = 0x01 chính là sử dụng khả năng chuyển điều khiển trong chương trình, còn những lệnh hợp dịch có điều kiện, chẳng hạn như if ... else ... endif, là những lệnh cho phép em dịch một khối lệnh nào đó tùy theo điều kiện nào đó (ví dụ, lúc debug em muốn có một số lệnh chèn vào code để kiểm tra, nhưng khi chạy tốt thì không cần các lệnh đó, nếu làm bằng tay thì rất mất công, dùng lệnh hợp dịch có điều kiện thì chỉ cần define một hằng nào đó chẳng hạn là xong).

Về chuyển điều khiển dựa vào giá trị tại d4, sau đây là một ví dụ
Code:
    movf d4, w    ;Đặt d4 vào W
    sublw 0x01    ;So sánh với 0x01
    skpz    ;Nếu bằng thì bỏ lệnh kế tiếp
    goto sosanh2
    incf d4    ;Đây là khối lệnh sẽ được thực thi nếu W = d4 = 0x01
    movlw '1'
    goto xong
sosanh2
    movf d4, w    ;Đặt d4 vào W
    sublw 0x02    ;So sánh với 0x02
    skpz    ;Nếu bằng thì bỏ lệnh kế tiếp
    goto xong
    decf d4    ;Đây là khối lệnh sẽ được thực thi nếu W = d4 = 0x02
    movlw '2'
xong
Trích:
Nguyên văn bởi chuchinh
Em hỏi thêm tý: em muốn dùng ngắt bàn phím, nhưng không biết mắc thế nào. Hiện nay Port B đã dùng để cho LCD 4 bit (RB0-RB3 cho D4-D7, RB4 cho RS, RB6 cho R/W, RB7 cho E). Còn tại cổng A thì RA0-RA3 đang dùng cho đầu vào 4 phím, RA6, RA7 dùng cho CLK. Trong mạch 8051, để dùng ngắt bàn phím em thấy họ dùng con 148 và lấy đầu ra báo ngắt để đưa vào chân ngắt. Ở đây có làm tương tự được không anh?
PIC16F628A có một số chân để dùng với ngắt ngoài, chẳng hạn RB0/INT cho phép chọn cạnh tạo ngắt, còn RB4..RB7 thì sẽ tạo ngắt khi có thay đổi (tất nhiên là phải thiết lập một cách thích hợp, và cho phép ngắt tương ứng). Vậy em có thể theo cách tương tự như với 8051, lấy đầu ra báo ngắt để đưa vào RB0/INT chẳng hạn, để thực hiện ngắt bàn phím.

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 26-07-2006, 08:53 PM   #3
briantk_1988
Đệ tử 2 túi
 
Tham gia ngày: May 2006
Nơi Cư Ngụ: Princeton University, NJ, US
Bài gửi: 42
:
Send a message via Yahoo to briantk_1988
Em la lính mới, lâu nay chỉ quen viết code bằng C và Basic, hôm nay mới xêm căn bản của MPAsm. Từ thread Hoc pic trong 1 ngay, em copy doan code sau

[QUOTE] TITLE "Mach test LED_1"
PROCESSOR P16F628A
INCLUDE <P16F628A.inc>
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF &_HS_OSC
ORG 0x0000
GOTO MAIN
ORG 0x0005
MAIN
BANKSEL TRISB ; bank select
CLRF TRISB ; trisb = 00000000
; portb = output
BANKSEL PORTB
BSF PORTB, 0 ; rb0 = 1
; RB0 = 5V
GOTO $ ; dung chuong trinh tai day
; vong lap tai cho^~
; khong bao gio ket thuc
END ; lenh bat buoc de ket thuc
[\QUOTE]


nhung den khi dich thi MPasm lai báo:

Error[132] temp.ASM 2 : Unknown processor (P16F628A)
Message[301] P16F628A.INC 35 : MESSAGE: (Processor-header file mismatch. Verify selected processor.)
Error[131] temp.ASM 4 : Processor type is undefined
Warning[207] ASD.ASM 7 : Found label after column 1. (GOTO)
Error[122] temp.ASM 7 : Illegal opcode (MAIN)
Message[312] temp.ASM 13 : Page or Bank selection not needed for this device. No code generated.
Warning[207] temp.ASM 14 : Found label after column 1. (CLRF)
Error[122] temp.ASM 14 : Illegal opcode (TRISB)
Message[312] temp.ASM 16 : Page or Bank selection not needed for this device. No code generated.
Warning[207] temp.ASM 17 : Found label after column 1. (BSF)
Error[122] temp.ASM 17 : Illegal opcode (PORTB)
Warning[207] temp.ASM 19 : Found label after column 1. (GOTO)
Error[108] temp.ASM 19 : Illegal character ($)
Error[131] temp.ASM 23 : Processor type is undefined


Mong các tiền bối giúp đỡ

Cám ơn
briantk_1988 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-07-2006, 09:29 PM   #4
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
Bộ xử lý được chọn trong MPLAB khác với PIC16F628A mà bạn đang định dùng. Bạn vào mênu Configure của MPLAB, chọn lệnh Select Device ..., sau đó chọn PIC16F628A trong danh sách thả xuống Device, sau đó nhấn nút OK.

Biên dịch lại xem còn có thông báo lỗi nào không. Các warning là để nhắc nhở, đôi khi bạn viết tập tin nguồn không đúng khuôn dạng đã định trước (nhãn nằm sau cột 1, các directive hay lệnh mnemonic nằm ở cột 1, ...)

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 27-07-2006, 04:17 PM   #5
briantk_1988
Đệ tử 2 túi
 
Tham gia ngày: May 2006
Nơi Cư Ngụ: Princeton University, NJ, US
Bài gửi: 42
:
Send a message via Yahoo to briantk_1988
Cám ơn rất nhiều

Mình đã gỡ rối được rồi

Thân
briantk_1988 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-08-2006, 04:56 PM   #6
chuchinh
Đệ tử 1 túi
 
Tham gia ngày: Apr 2006
Bài gửi: 23
:
Sao chưa thấy anh falleaf viết tiếp nhỉ?

Qua bài học pic trong một ngày, cùng với sự giúp đỡ của anh Nam, em đã làm được những việc sau: hiển thị led chạy vòng ở PortB, hiển thị LCD (cũng ở PortB), nhận phím bấm từ PortA và thay đổi hiển thị tương ứng trên LCD.

Chỉ còn chưa tìm ra nguyên nhân tại sao khi hiển thị lên LCD, các ký tự hiển thị lần lượt và cách nhau một lúc chứ không tạo ra được cảm giác hiện đồng thời, dù rằng trong chương trình hiển thị có delay sau khi đưa ký tự nhưng là delay tối thiểu (nhỏ nữa thì cứ hai ký tự nó lại hiện một). Bác Namqn có thể giải thích hộ em không (Data LCD của em là 4 bit, và các chân Port B dùng chung cho cả LCD và các LED hiển thị).

Cũng coi như tạm ổn phần vào ra, bàn phím và hiển thị, bây giờ đang muốn giao tiếp với máy tính nhưng chưa thấy chủ đề nào của anh falleaf cả. Rất mong anh viết tiếp nhé.

Nếu có thể anh cho luôn mạch giao tiếp giữa PIC và cổng COM luôn.

thay đổi nội dung bởi: chuchinh, 01-08-2006 lúc 05:07 PM.
chuchinh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-08-2006, 06:23 PM   #7
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 chuchinh
Chỉ còn chưa tìm ra nguyên nhân tại sao khi hiển thị lên LCD, các ký tự hiển thị lần lượt và cách nhau một lúc chứ không tạo ra được cảm giác hiện đồng thời, dù rằng trong chương trình hiển thị có delay sau khi đưa ký tự nhưng là delay tối thiểu (nhỏ nữa thì cứ hai ký tự nó lại hiện một). Bác Namqn có thể giải thích hộ em không (Data LCD của em là 4 bit, và các chân Port B dùng chung cho cả LCD và các LED hiển thị).

Cũng coi như tạm ổn phần vào ra, bàn phím và hiển thị, bây giờ đang muốn giao tiếp với máy tính nhưng chưa thấy chủ đề nào của anh falleaf cả. Rất mong anh viết tiếp nhé.

Nếu có thể anh cho luôn mạch giao tiếp giữa PIC và cổng COM luôn.
Bạn nên post phần code của bạn lên, cùng với cách kết nối phần cứng nữa thì mới có thể biết tại sao mạch chạy như vậy.

Về phần giao tiếp giữa PIC và cổng nối tiếp, bạn đọc thêm trong luồng về bootloader, và các luồng nói về PIC16F877A.

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
Cho mình hỏi cách tạo xung mV hoặc microvon trungnnd PIC - Thiết kế và Ứng dụng 1 22-03-2013 02:30 PM


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