![]() |
Hỏi về ngắt nhận INT_RDA trong PIC 16f877a!
Em có vài chỗ thắc mắc về giao tiếp mong mọi người giúp đỡ:
khi khởi động hay reset pic thì có byte nào trong bọ đệm nhận không? Bởi vì khi em vừa enable_interrupts(INT_RDA); thì có ngắt xảy ra và lặp lại liên tục? đây là code của em Code:
#include <16F877A.h> Code:
data = Còn khi em thay lệnh gets(str) băng lệnh b=getc(); trong ngắt nhận thì chương trình cứ lặp lại liên tục. đây là dữ liệu nhận được: Code:
data = Mong mọi người giúp đỡ. Em cảm ơn nhiều. |
Trích:
Thứ hai là việc cho phép ngắt nhận truyền nối tiếp, nếu cờ nhận đã phất lên, có nghĩa là khi cho phép nó sẽ chạy đến ngắt luôn, bạn xem đã post đủ chương trình chưa, chẳng hạn ngắt INT_TBE, khi bạn dùng hàm printf thì khi phát xong mỗi ký tự trong chuỗi cũng đều xảy ra ngắt TBE nếu như bạn cho phép nó... |
Trích:
Code:
data = Mong mọi người giúp đỡ |
Nhập môn đệ tử Xin chào các bác!
Các bác cho em hỏi làm thế nào mà ta có thể cấu hình thêm một chân giống như RB0 để sử dụng 2 ngắt ngoài trong PIC6F77A được không.em đang làm để tài về vấn đề này nhưng chưa giải quyết được.Mong các bác giúp đỡ cho em với nhé! cảm ơn các bác nhiều!!! |
Cái này thuộc phần cứng, cấu hình thế nào được...
|
Trích:
. bạn thiết lập counter0 ---> RA4 là ngõ vào counter0. . giá trị ban đầu cho counter0 là 255. . khi RA 4 thay đổi trạng thái thì counter đếm lên 1 ---> tràn ---> ngắt . lặp lại bước 2 |
Code thu GPS
Chào mọi người. Mình đang làm đề tài xử lú bản tin GPS. Nhưng mà code vẫn chưa chạy không biết sai ở đâu? Mong mọi người chỉ giúp dùm. Thanks nhiều!
#include "C:\Documents and Settings\FangFang\My Documents\code.h" #define LCD_ENABLE_PIN PIN_D0 #define LCD_RS_PIN PIN_D1 #define LCD_RW_PIN PIN_D2 #define LCD_DATA_PORT D #define LCD_TYPE 2 #include <lcd.c> #byte SPBRG =0x99 #byte RCSTA =0x18 #byte PIR1 =0x0C #byte RCREG =0x1A #bit RCIF = 0x0c.5 #bit SPEN =0x18.7 #bit CREN =0x18.4 unsigned char GPSbuffer[70]; int8 position[11]; int8 check=0,i; unsigned char GPRMC[7]="$GPRMC"; void find_comma() { int8 couter=0; for(i=0;i<70;i++) { if(GPSbuffer[i]==',') { position[couter]=i; couter++; } } } #INT_RDA void receive_GPSbuffer() { char c; c=getc(); if(check==69) return; GPSbuffer[check++]=getc(); if(check<7) if(GPSbuffer[check-1]!=GPRMC[check-1]) check=0; } void time() { int8 i; i=position[0]; printf(lcd_putc,"TIME: %c%c:%c%c:%c%c",GPSbuffer[i+1],GPSbuffer[i+2], GPSbuffer[i+3],GPSbuffer[i+4],GPSbuffer[i+5],GPSbuffer[i+6]); delay_ms(1000); } void latitude() { int8 i; i=position[2]; if ((GPSbuffer[i+11]=='N') || (GPSbuffer[i+11]=='S')) printf(lcd_putc,"LAT: %c%c.%c%c %c",GPSbuffer[i+1],GPSbuffer[i+2],GPSbuffer[i +3],GPSbuffer[i+4],GPSbuffer[i+11]); else printf(lcd_putc,"LAT: %c.%c%c %c",GPSbuffer[i+1],GPSbuffer[i+2],GPSbuffer[i +3],GPSbuffer[i+10]); delay_ms(1000); } void longtitude() { int8 i; i=position[4]; if ((GPSbuffer[i+12]=='W') || (GPSbuffer[i+12]=='E')) printf(lcd_putc,"LONG: %c%c%c.%c%c %c",GPSbuffer[i+1],GPSbuffer[i+2],GPSbuffer[i +3],GPSbuffer[i+4],GPSbuffer[i+5],GPSbuffer[i+12]); else printf(lcd_putc,"LONG:%c%c.%c%c %c",GPSbuffer[i+1],GPSbuffer[i+2],GPSbuffer[i +3],GPSbuffer[i+4],GPSbuffer[i+11]); delay_ms(1000); } void main() { lcd_init(); setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_spi(SPI_SS_DISABLED); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); set_tris_b(0x00); // Set Port B as output port set_tris_a(0x00); enable_interrupts(INT_RDA); enable_interrupts(GLOBAL); while (1) { //receive_GPSbuffer(); if (check==69) { find_comma(); time(); lcd_putc("\f"); longtitude(); lcd_putc("\f"); latitude(); lcd_putc("\f"); check=0; } } SPBRG=spbrg_value; // Fill SPBRG register to set the baud rate SPEN=1; // To activate serial port (Tx and Rx pins) CREN=1; // To enable continuous reception } |
Mình chuyển qua dùng HitechC lâu rồi nên CCS cũng không nhớ rõ. Tuy nhiên bao giờ thì khi trong isr của ngắt nào đó, bạn cũng phải clear cờ ngắt của nó đi. Ví dụng trong ngắt RDA thì phải có lệnh RXIF = 0, nếu không ngắt sẽ xảy ra liên tục.
Bạn kiểm tra xem đã clear cờ chưa nhé |
Trích:
bản thân mình đã là giao tiếp qua RS232 với CCS và thấy không có vấn đề gì cả,nhưng có nhiều chương trình trên PC thì rất là dở,chủ yếu là tự viết bằng VB hoặc VC với trình độ còn khá hạn chế |
Múi giờ GMT. Hiện tại là 02:43 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam