![]() |
|
Tài trợ cho PIC Vietnam |
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 |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Nhập môn đệ tử
Tham gia ngày: Nov 2009
Bài gửi: 10
: |
Mấy bác vào xem giùm em với !!!
Tình hình là có cái mạch đơn giản gồm 1 con pic6f877a đã được cấp nguồn và dao động thạch anh rồi,chân ccp2 của nó nối vào 1 đầu nút nhấn,đầu kia nút nhấn nối với nguồn 5v,chân ccp được hoạt động ở chế độ bắt xung,chân rb1 của pic được nối với 1 kon led,em lập trình cho con pic như sau :
include <16F877A.h> #use delay(clock=20000000) #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, PARITY=N, BITS =8) #bit rb1 =0x06.1 #bit ccp2if = 0x0d.0 void main() { setup_timer_1(T1_DIV_BY_4); setup_ccp2(CCP_CAPTURE_RE); //dung timer 1,khi co xung len o chan ccp thi gia tri thanh ghi trm1 se dua vao thanh ghi ccp2,co ccp2if dc set if(ccp2if) //co ccp2if = 1 output_high(PIN_B1); // ngo ra rb1 duoc set,làm led sáng } em không biết lập trình cho chức năng bắt xung như vậy đúng không mà sao khi giả lập nó không chạy.Mục tiêu của em là khi nhấn nút đèn led sáng (không quan tâm đến cờ ccp2if có được xóa hay không).Bác nào biết thì chỉ giùm em với . Ths các bác trước |
![]() |
![]() |
![]() |
#2 |
Đệ tử 3 túi
Tham gia ngày: Oct 2006
Bài gửi: 46
: |
Mình thấy bạn chưa thiết lập in/out các port theo yêu cầu chẳng hạn như nếu muốn làm led sáng thì phải thiết lập chân đó là output, nếu nối với nút nhấn thì phải đặt thành input. Nếu bạn chờ sự kiện nút nhấn xuống thì phải đặt nó trong vòng lặp chứ nhỉ?
ví dụ: Code:
while(1){ if(ccp2if) //co ccp2if = 1 output_high(PIN_B1); // ngo ra rb1 duoc set,làm led sáng }
__________________
http://www.hieunghia.info Lướt web thoải mái với USB3G của Viettel http://www.hieunghia.info/tin-cong-n...3g-vietel.html ----------------------------------------------------------------------------------- Một chút giận,hai chút tham,lận đận cả đời ri cũng khổ. Trăm điều lành,ngàn điều nhịn,thong dong tấc dạ rứa mà vui |
![]() |
![]() |
![]() |
#3 |
Nhập môn đệ tử
Tham gia ngày: Nov 2009
Bài gửi: 10
: |
ý của em là khi nhấn nút nhấn thì sẽ tạo ra sự kiện là có cạnh lên ngay chân ccp,lúc đó cờ ccpif sẽ bằng 1,sau đó lệnh if sẽ đúng và tự set chân rb1 lên mức cao làm led sáng,trên chương trình e chỉ dùng 1 chân rb1 chứ không dùng cả port nên e chỉ khai báo 1 chân.Đoạn code của anh thế vào chương trình của e củng không chạy anh à
|
![]() |
![]() |
![]() |
#4 | |
Đệ tử 3 túi
Tham gia ngày: Oct 2006
Bài gửi: 46
: |
Trích:
Code:
while(1){ if(ccp2if) //co ccp2if = 1 output_high(PIN_B1); // ngo ra rb1 duoc set,làm led sáng delay_ms(1000); //làm trễ một giây bạn phải chỉnh lại chỗ này vì minh ko nhớ cú pháp ccs(mình dùng MikroC) output_low(PIN_B1); // ngo ra rb1 duoc clear,làm led tắt delay_ms(1000); } }
__________________
http://www.hieunghia.info Lướt web thoải mái với USB3G của Viettel http://www.hieunghia.info/tin-cong-n...3g-vietel.html ----------------------------------------------------------------------------------- Một chút giận,hai chút tham,lận đận cả đời ri cũng khổ. Trăm điều lành,ngàn điều nhịn,thong dong tấc dạ rứa mà vui |
|
![]() |
![]() |
![]() |
#5 |
Nhập môn đệ tử
Tham gia ngày: Nov 2009
Bài gửi: 10
: |
chân ccp2 của em lúc này được lập trình ở chế độ bắt xung nên khi có hiện tượng ở chân ccp2 ( khi nút nhấn được nhấn) thì cờ ccp2if sẽ được set lên 1 ( đặc tính của chế độ bắt xung ).Em nghỉ là không cần vòng lặp vì led của em sáng luôn là điều mong muốn,không biết suy nghỉ đó có đúng không.Khi led sáng thì chứng tỏ chân ccp2 đã hoàn thành nhiệm vụ bắt xung
|
![]() |
![]() |
![]() |
|
|