|
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 |
12-04-2014, 11:49 PM | #1 |
Nhập môn đệ tử
Tham gia ngày: Mar 2014
Bài gửi: 2
: |
GẶp vẤn ĐỀ vỀ giao tiẾp usb!
Không hiểu sao em làm mô phỏng như trong hướng dẫn nhưng gặp tình trạng các chân hình như không có tín hiệu trong khi trong tài liệu vẫn làm được, lỗi này là gì và cách khác phục là gì mong anh chị giúp em với.
Lỗi như trong file hình của em đấy ạ. Còn đây là code của em: unsigned char Read_Buffer[16] absolute 0x500; unsigned char Write_Buffer[16]absolute 0x510; unsigned char num,flag; void interrupt() { USB_Interrupt_Proc(); TMR0L = 100; //Reload Value INTCON.TMR0IF = 0; //Re-Enable Timer-0 Interrupt } //LCD 8-bit Mode Connection sbit LCD8_RS at RC1_bit; sbit LCD8_RW at RC0_bit; sbit LCD8_EN at RC2_bit; sbit LCD8_D7 at RD7_bit; sbit LCD8_D6 at RD6_bit; sbit LCD8_D5 at RD5_bit; sbit LCD8_D4 at RD4_bit; sbit LCD8_D3 at RD3_bit; sbit LCD8_D2 at RD2_bit; sbit LCD8_D1 at RD1_bit; sbit LCD8_D0 at RD0_bit; sbit LCD8_RS_Direction at TRISC1_bit; sbit LCD8_RW_Direction at TRISC0_bit; sbit LCD8_EN_Direction at TRISC2_bit; sbit LCD8_D7_Direction at TRISD7_bit; sbit LCD8_D6_Direction at TRISD6_bit; sbit LCD8_D5_Direction at TRISD5_bit; sbit LCD8_D4_Direction at TRISD4_bit; sbit LCD8_D3_Direction at TRISD3_bit; sbit LCD8_D2_Direction at TRISD2_bit; sbit LCD8_D1_Direction at TRISD1_bit; sbit LCD8_D0_Direction at TRISD0_bit; // End Lcd8 module connections char i; // Loop variable void UART1_Write_Text_Newline(unsigned char msg[]) { UART1_Write_Text(msg); UART1_Write(10); UART1_Write(13); } void clear_buffer(unsigned char buffer[]) { unsigned int i = 0; while(buffer[i] != '\0') { buffer[i] = '\0'; i++; } } // void main() { UART1_Init(9600); Delay_ms(100); UART1_Write_Text("USB Test Program"); ADCON1 |= 0x0F; // Configure AN pins as digital CMCON |= 7; // Disable comparators TRISB = 0x00; TRISC = 0x80; Lcd8_Init(); // Initialize Lcd8 Delay_ms(100); Lcd8_Cmd(_LCD_CLEAR); // Clear display Delay_ms(100); Lcd8_Cmd(_LCD_CURSOR_OFF); // Cursor off Delay_ms(100); Lcd8_Out(1,3,"PIC18F4550"); // Write text in first row Delay_ms(100); Lcd8_Out(2,3,"USB Example!"); // Write text in second row Delay_ms(2000); INTCON = 0; INTCON2 = 0xF5; INTCON3 = 0xC0; RCON.IPEN = 0; PIE1 = 0; PIE2 = 0; PIR1 = 0; PIR2 = 0; // // Configure TIMER 0 for 3.3ms interrupts. Set prescaler to 256 // and load TMR0L to 100 so that the time interval for timer // interrupts at 48MHz is 256.(256-100).0.083 = 3.3ms // // The timer is in 8-bit mode by default T0CON = 0x47; // Prescaler = 256 TMR0L = 100; // Timer count is 256-156 = 100 INTCON.TMR0IE = 1; // Enable T0IE T0CON.TMR0ON = 1; // Turn Timer 0 ON INTCON = 0xE0; // Enable interrupts // // Enable USB port // UART1_Write(10); UART1_Write(13); UART1_Write_Text_Newline("Data is Ready to be Received from the PC"); Hid_Enable(&Read_Buffer,&Write_Buffer); Delay_ms(2000); // Read from the USB port. Number of bytes read is in num start: while(Hid_Read() == 0); //Stay Here if Data is Not Coming from Serial Port //If Some Data is Coming then move forward and check whether the keyword start is coming or not if(strncmp(Read_Buffer,"S",1) == 0) { Lcd8_Cmd(_LCD_CLEAR); Lcd8_Out(1,2,"Authentication"); Lcd8_Out(2,8,"OK"); goto loop; } else { Lcd8_Cmd(_LCD_CLEAR); Lcd8_Out(1,2,"Authentication"); Lcd8_Out(2,5,"Fails!"); goto start; } loop: //Now Authentication is Successfull Lets Try Something else //Lets Display the Data Coming from the USB HID Port to the LCD Delay_ms(1000); Lcd8_Cmd(_LCD_CLEAR); Lcd8_Out(1,1,"Received Data:-"); flag = 0; loop_second: clear_buffer(Read_Buffer); while(Hid_Read() == 0) { if(flag == 0) { Lcd8_Out(2,1,"No Data"); flag = 1; } } Lcd8_Cmd(_LCD_CLEAR); Lcd8_Out(1,1,"Received Data:-"); Lcd8_Out(2,1,Read_Buffer); goto loop_second; Delay_ms(1000); Hid_Disable(); Lcd8_Out(1,1,"HID DISABLE"); } |
|
|