Cong810 ! mình đã load bài của bạn về và chỉnh sửa 1 chút xíu, và giờ thì nó chạy ngon lành rùi, bạn bị mắc một lỗi rất nhỏ lên khó phát hiện ra khi chỉnh sửa.
Khi chương trình nhảy đến trình phục vụ ngắt Rb,nó sẽ thực hiện các câu lệnh trong đó,bạn dùng chân Rb4 để thực hiện phục vụ ngắt,nếu trong trình phục vụ ngắt bạn kiểm tra xem Rb4 có =1 ko, nếu =1 thì thực hiện việc thay đổi giá trị biến " percent " ,nếu ko thoát khỏi trình phục vụ ngắt ,như vậy chương trình sẽ chạy ngon lành
đây là chương trình mình đã sử và cho chạy mo fong được rồi
Code:
...#include<16f877a.h>
#fuses XT,NOPROTECT,NOLVP,NOWDT
#use delay(clock=4000000)
#byte portb=0x06
int8 value=0,period=200,percent=0;
#int_RB
void inter_RB()
{
if( rb4 =1) // phai kiem tra Rb4 nhe
{
if(percent==100)percent=100;
else percent=percent+5;
}
}
main()
{
set_tris_c(0x00);
set_tris_b(0b00010000);
portb=0x00;
enable_interrupts(INT_RB);
enable_interrupts(global);
ext_int_edge(l_to_h);
setup_CCP1(CCP_PWM);
setup_timer_2(t2_div_by_1,199,1);
while(1)
{
value=percent*period/100;
set_pwm1_duty(value);
}
}