|
Tài trợ cho PIC Vietnam |
dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC |
|
Ðiều Chỉnh | Xếp Bài |
11-11-2010, 10:42 PM | #15 |
Đệ tử 4 túi
Tham gia ngày: Jun 2010
Bài gửi: 79
: |
uh nó chạy rồi. nhưng vẫn không tốt. mình đang tìm hiểu, cái chính là mình xóa cờ ngắt sau mõi lần gọi chương trình ngắt. nhưng 3 ngắt mình thấy chu kỳ khác nhau.
vì sao ngăt ext2 lại số vong quay nhiều hơn. #include <18f4331.h> #INCLUDE <def_4331.h> #FUSES HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT,NOPUT,NOCPD,NO DEBUG,NOFCMEN,NOCPB,STVREN,NOPWMPIN,HPOL_LOW #FUSES MCLR,NOIESO,NOWRTC,NOWRTB,NOWRTD,NOEBTR,NOWRT,NOEB TRB,EXCLKD0,T1STANDARD,NOWINEN #use delay(clock=20000000) #use fast_io(a) #use fast_io(d) #use fast_io(c) #use fast_io(e) #DEFINE GIAI_MA1 RE0 #DEFINE GIAI_MA2 RE1 #DEFINE GIAI_MA3 RE2 #DEFINE NUT_AN RA0 #DEFINE CT_HT RA4 long XUNG,XUNG1,XUNG2; int1 nut1,nut2,nut3,nut4,nut5,nut6,nut7,nut8; int1 CT_HT1,CT_HT2,CT_HT3,CT_HT4,CT_HT5,CT_HT6,CT_HT7,C T_HT8; #INT_EXT //RC3 VOID DEM_NGAT() { XUNG++; INT0IF=0; return ; } #INT_EXT1 //RC4 VOID DEM_NGAT_1() { XUNG1++; INT1IF=0; return ; } #INT_EXT2 //RC5 VOID DEM_NGAT_2() { XUNG2++; INT2IF=0; return; } VOID CT_PWM_POWER() { SET_POWER_PWM0_DUTY(100); SET_POWER_PWM2_DUTY(500); SET_POWER_PWM4_DUTY(200); SET_POWER_PWM6_DUTY(500); } VOID CT_PWM_CCP () { SET_PWM2_DUTY(250); SET_PWM1_DUTY(500); } void main() { trisa=0x00; porta=0xff; trisb=0x00; portb=0x00; trisc=0b00111000; //portC=0b00111000; trisd=0x00; portd=0xff; trise=0x00; porte=0xff; setup_power_pwm_pins( PWM_ODD_ON,PWM_ODD_ON,PWM_ODD_ON,PWM_ODD_ON); setup_power_pwm(PWM_CLOCK_DIV_4|PWM_FREE_RUN,1,0,1 24,0,1,0); set_power_pwm_override(1, false, 0); set_power_pwm_override(3, false, 0); set_power_pwm_override(5, false, 0); set_power_pwm_override(7, false, 0); SETUP_CCP1(CCP_PWM); SETUP_CCP2(CCP_PWM); setup_timer_2(T2_DIV_BY_4,124,1); enable_interrupts(GLOBAL); enable_interrupts(INT_EXT); enable_interrupts(INT_EXT1); enable_interrupts(INT_EXT2); ext_int_edge(0, L_TO_H ); ext_int_edge(1, L_TO_H ); ext_int_edge(2, L_TO_H ); xung=0; xung1=0; xung2=0; while(TRUE) { IF(xung2==100) RA0=0; else IF(XUNG2==1200) RA1=0; else IF(XUNG2==1300) RA2=0; else IF(xung2==1400) RA3=0; else IF(xung2==1500) RA4=0; else IF(xung2==1600) RA5=0; else IF(xung2==2000) CT_PWM_POWER(); else IF(xung2==3000) CT_PWM_CCP (); else IF(xung2>4000) { RD0=0; DELAY_MS(500); RD1=0; DELAY_MS(500); RD2=0; DELAY_MS(500); RD3=0; DELAY_MS(500); RD4=0; DELAY_MS(500); RD5=0; DELAY_MS(500); RD6=0; DELAY_MS(500); } } } |
|
|