23-03-2010, 02:34 PM | #1 |
Đệ tử 1 túi
Tham gia ngày: Oct 2009
Bài gửi: 25
: |
Lấy số liệu sau khi có ngắt ngoài
Mình mới học về PIC, đã thử đưa xung vào để test ngắt INT_EXT được rồi. Giờ còn thuật toán là đếm bằng timer1 và khi có xung sườn âm thì sẽ xảy ra ngắt ngoài rồi lấy số đếm đó gửi ra máy tính và cho đếm tiếp. Các anh, các bạn có thể gợi ý giúp mình thuật toán đó không. Mình dùng ccs, đây là code của mình đã viết và sơ đồ nguyên lý.
http://www.mediafire.com/?ojrlbntwnyn #include "G:\Electronics\CCS C\Cac bai thuc hanh tu lam\Easiest\v2.h" #include <def_877a.h> //#include <math.h> //#include <ctype.h> #fuses XT,NOWDT,NOPUT,NOPROTECT,NOLVP //XT: thach anh <= 4MHz #include <lcd_lib_4bit.c> // Thu vien ham cho LCD //void delay(int16 N); // Khai bao ham delay //void tre_ms(unsigned int time); int16 i=0,second=0,tseconds=0,tpreset=10; unsigned int16 value; //char c; ///////////////////////////////// /* void delay(int16 N) { int16 j=0,i=0; for(i=0;i<=200;i++) if(j<N)j++; }*/ ///////////////////////////////// #INT_TIMER0 void time() { i++; if(i>=2000){second++; i =0; tseconds++;} if(tseconds>=tpreset){tseconds=0; value = get_timer1(); set_timer1(0); } } ///////////////////////////////// #INT_EXT void get_data() { printf("ok"); //test khi có ngat se in ra man hinh } ///////////////////////////////// void main() { setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_spi(SPI_SS_DISABLED); setup_timer_0(RTCC_DIV_2|RTCC_INTERNAL); //Timer0 lam bo dem thoi gian setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1); //Timer1 dem xung ngoai (lay tu dau ghi) setup_timer_2(T2_DISABLED,0,1); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); enable_interrupts(GLOBAL); //Khoi tao cho ngat toan cuc enable_interrupts(INT_TIMER0); //Khoi tao cho ngat timer0 enable_interrupts(INT_TIMER1); //Khoi tao cho ngat timer1 enable_interrupts(INT_EXT); //Khoi tao cho ngat ngoai ext_int_edge(H_TO_L); //Chon suon am de xay ra ngat ngoai /* lcd_init(); lcd_putcmd(0x01); lcd_putcmd(0x80); printf(LCD_putchar,"OK"); lcd_putcmd(0xC0); printf(LCD_putchar,"Hello"); */ // TODO: USER CODE!! set_timer0(5); tpreset=10; TRISB=0XFF; TRISC=0x00; PORTC=0XFF; //i =0; while(TRUE) { //value=get_timer1(); delay_ms(50); //Thoi gian tre la 50ms printf("%5ld %5ld \n",second,value); PORTC=0; } } thay đổi nội dung bởi: vanlv, 23-03-2010 lúc 02:38 PM. Lý do: Không up được file |