![]() |
|
Tài trợ cho PIC Vietnam |
Giao tiếp USB, CAN, I2C, SPI, USART... Những giao tiếp được tích hợp trên PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
|
![]() |
#1 |
Đệ tử 1 túi
Tham gia ngày: Sep 2010
Bài gửi: 17
: |
USART đơn giản
Chào các anh em có chương trình đơn giản viết bằng Htpic với pic 18f24j10 như sau
int k; void interrupt Myint(void) { if(RCIF==1) { k=RCREG; RCIF=0; } } ........ void main(void) { init(); while(1) { PORTB =k; } } khi em hiển thị trên led 7 thanh thì chỉ nhận được số 0 nhưng khi em viết thành int k; void interrupt Myint(void) { if(RCIF==1) { k=RCREG; PORTB =k; RCIF=0; } } ........ void main(void) { init(); while(1) { } } thì led 7 thanh lại hiển thị đúng giá trị vậy là biến k không lưu được giá trị khi nhảy ra khỏi ngắt hay chương trình em viết có vấn đề ạ? mong các anh giúp đỡ Thanks |
![]() |
![]() |
![]() |
#2 | |
Đệ tử 6 túi
Tham gia ngày: Feb 2009
Bài gửi: 127
: |
Trích:
|
|
![]() |
![]() |
![]() |
#3 |
Đệ tử 1 túi
Tham gia ngày: Sep 2010
Bài gửi: 17
: |
vẫn không được bác ạ, có lẽ phải tính toán ngay trong hàm ngắt thì mới được, em sợ ra khỏi hàm ngắt mà biến không lưu được giá trị thì các hàm khác sẽ không sử dụng được các biến đó nữa
|
![]() |
![]() |
![]() |
#4 |
Đệ tử 6 túi
Tham gia ngày: Feb 2009
Bài gửi: 127
: |
void interrupt Myint(void)
{ } là ngắt gì thế bạn, nếu là ngắt USART thì bạn bỏ lệnh này đi : if(RCIF==1) |
![]() |
![]() |
![]() |
#5 | |
Đệ tử 1 túi
Tham gia ngày: Sep 2010
Bài gửi: 17
: |
Trích:
if(RCIF==1) đây là ngắt nhận, khi cờ ngắt RCIF lên 1 thì nhấy tới hàm ngắt và đọc giá trị em nghĩ câu lênh này không vấn đề gì |
|
![]() |
![]() |
![]() |
#6 |
Đệ tử 1 túi
Tham gia ngày: Sep 2010
Bài gửi: 17
: |
em vẫn đang chờ mọi người trả lời!!!!
|
![]() |
![]() |
![]() |
#7 |
Nhập môn đệ tử
Tham gia ngày: Mar 2010
Bài gửi: 3
: |
cho e hoi ve pic 18f4550
em co doan code nay sau chi build thi no cu bao la A device required before the line ma e ko biet sua nhu the nao.mong anh em trong dien dan giup do
// Program to Interface GPS with PIC18F4550 Microcontroller #define FREQ 12000000 #define baud 4800 #define spbrg_value (((FREQ/64)/baud)-1) #define rs LATA.F0 #define rw LATA.F1 #define en LATA.F2 #define lcdport LATB unsigned char rx_data(); void lcd_ini(); void lcdcmd(unsigned char); void lcddata(unsigned char); unsigned char longi_data[12]; unsigned char lati_data[12]; unsigned char data,value=0; unsigned int i=0,pos; void main() { TRISB=0; // Set Port B as output port LATB=0; TRISA=0; LATA=0; SPBRG=spbrg_value; // Fill SPBRG register to set the baud rate RCSTA.SPEN=1; // To activate serial port (Tx and Rx pins) RCSTA.CREN=1; // To enable continuous reception lcd_ini(); while(1) { data=rx_data(); // Check the string '$GPGGA,' if(data=='$') { data=rx_data(); if(data=='G') { data=rx_data(); if(data=='P'); { data=rx_data(); if(data=='G'); { data=rx_data(); if(data=='G') { data=rx_data(); if(data=='A') { data=rx_data(); if(data==',') { data=rx_data(); while(data!=',') data=rx_data(); for(i=0;data!='N';i++) data=rx_data(); lati_data[i]=data; // Store the Latitude data } data=rx_data(); if(data==',') { for(i=0;data!='E';i++) { data=rx_data(); longi_data[i]=data; // Store the Longitude data } } i=0; lcdcmd(0x80); while(i<11) { lcddata(lati_data[i]); // Print the Latitude data i++; } i=0; lcdcmd(0xC0); while(i<12) { lcddata(longi_data[i]); // Print the Longitude data i++; } } } } } } } } Delay_ms(1000); for(i=0;i<12;i++) { data=0; lati_data[i]=0; longi_data[i]=0; } } } unsigned char rx_data(void) { while(PIR1.RCIF==0); // Wait until RCIF gets low return RCREG; // Store data in Reception register } void lcd_ini() { lcdcmd(0x38); // Configure the LCD in 8-bit mode, 2 line and 5x7 font lcdcmd(0x0C); // Display On and Cursor Off lcdcmd(0x01); // Clear display screen lcdcmd(0x06); // Increment cursor lcdcmd(0x80); // Set cursor position to 1st line, 1st column } void lcdcmd(unsigned char cmdout) { lcdport=cmdout; //Send command to lcdport=PORTB rs=0; rw=0; en=1; Delay_ms(10); en=0; } void lcddata(unsigned char dataout) { lcdport=dataout; //Send data to lcdport=PORTB rs=1; rw=0; en=1; Delay_ms(10); en=0; } |
![]() |
![]() |
![]() |
#8 |
Đệ tử 1 túi
Tham gia ngày: Sep 2010
Bài gửi: 17
: |
Hình như bạn thiếu các dòng config thì phải và không thấy hàm main của bạn đâu
Bạn dùng trình dịch gì vậy thay đổi nội dung bởi: vakk, 25-03-2012 lúc 12:08 AM. |
![]() |
![]() |
![]() |
#9 | |
Đệ tử 5 túi
Tham gia ngày: Jul 2010
Nơi Cư Ngụ: Hà Nội, VIE
Bài gửi: 114
: |
Trích:
volatile char k;
__________________
Vì sao nên đọc tài liệu tiếng Anh? http://www.picvietnam.com/forum/showthread.php?t=6819 Nguồn xung các loại: www.semitech.vn |
|
![]() |
![]() |
![]() |
Ðiều Chỉnh | |
Xếp Bài | |
|
|