PDA

View Full Version : Mấy bác vào xem giùm em với !!!


yingkui
30-12-2009, 03:59 PM
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

nghia_tdh21
30-12-2009, 05:04 PM
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ụ:

while(1){
if(ccp2if) //co ccp2if = 1
output_high(PIN_B1); // ngo ra rb1 duoc set,làm led sáng
}

yingkui
30-12-2009, 06:29 PM
ý 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 à

nghia_tdh21
30-12-2009, 10:36 PM
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
Bạn phải thêm con trở kéo xuống ở ccp2, bạn phải thử trên mạch thật. Tuy nhiên chương trình của bạn như vậy khó mà biết được cờ CCP2IF có được bật hay không, bạn nên đặt một đoạn chương trình như sau: (mình ko dùng ccs nên nếu sai bạn phải chỉnh lại cho đúng)

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);
}
}

Khi cờ CCP2IF được set thì sẽ làm nhấp nháy led.

yingkui
31-12-2009, 11:27 AM
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