PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Giao tiếp USB, CAN, I2C, SPI, USART... (http://www.picvietnam.com/forum/forumdisplay.php?f=45)
-   -   Rs232 và Mplab không được. Nhờ bắt lỗi dùm (http://www.picvietnam.com/forum/showthread.php?t=4374)

thuongshoo 25-06-2009 05:49 PM

Rs232 và Mplab không được. Nhờ bắt lỗi dùm
 
đây là toàn bộ chương trình của mình.
Mình xài 18F4550. Xài thư viện của MCC18 thì chỉ xuất ra số 0. Còn xài cái đoạn set thanh ghi thì không thấy gì hết
chương trình us- burn nói là PIC mà mình đang xài là rev 06. Mình thấy tài liệu err v6 có nói tới phần Rs232 này. Mình đã viết lại cái union liên quan đến baudrate nhưng vẫn không được
Code:

#include <p18f4550.h>
#include <delays.h>
#include <usart.h>
//#include "SW_UART/sw_uart_18f97j60.h"
// turn off extend CPU instruction
//#pragma config XINST = OFF
 #pragma config PLLDIV  = 5        // (20 MHz crystal on PICDEM FS USB board)
        #pragma config CPUDIV  = OSC1_PLL2 
        #pragma config USBDIV  = 2        // Clock source from 96MHz PLL/2
        #pragma config FOSC    = HSPLL_HS
        #pragma config FCMEN    = OFF
        #pragma config IESO    = OFF
        #pragma config PWRT    = OFF
        #pragma config BOR      = ON
        #pragma config BORV    = 3
        #pragma config VREGEN  = ON      //USB Voltage Regulator
        #pragma config WDT      = OFF
        #pragma config WDTPS    = 32768
        #pragma config MCLRE    = ON
        #pragma config LPT1OSC  = OFF
        #pragma config PBADEN  = OFF
//      #pragma config CCP2MX  = ON
        #pragma config STVREN  = ON
        #pragma config LVP      = OFF
//      #pragma config ICPRT    = OFF      // Dedicated In-Circuit Debug/Programming
        #pragma config XINST    = OFF      // Extended Instruction Set
        #pragma config CP0      = OFF
        #pragma config CP1      = OFF
//      #pragma config CP2      = OFF
//      #pragma config CP3      = OFF
        #pragma config CPB      = OFF
//      #pragma config CPD      = OFF
        #pragma config WRT0    = OFF
        #pragma config WRT1    = OFF
//      #pragma config WRT2    = OFF
//      #pragma config WRT3    = OFF
        #pragma config WRTB    = OFF      // Boot Block Write Protection
        #pragma config WRTC    = OFF
//      #pragma config WRTD    = OFF
        #pragma config EBTR0    = OFF
        #pragma config EBTR1    = OFF
//      #pragma config EBTR2    = OFF
//      #pragma config EBTR3    = OFF
        #pragma config EBTRB    = OFF
               
volatile  union
  {
          struct
          {
                unsigned ABDEN:1;
                unsigned WUE:1;
                unsigned :1;
                unsigned BRG16:1;
                unsigned TXCKP:1;
                unsigned RXDTP:1;
                unsigned RCIDL:1;
                unsigned ABDOVF:1;
          };
          struct
          {
                unsigned :6;
                unsigned RCMT:1;
          };
  } BAUDCONbitsV6;
void main(void)
{
  char data;
  char array[5];
       
        //TRISC = 0;
        //TRISC = 0;
        //output
        TRISCbits.TRISC6 = 0 ;
        //input
        TRISCbits.TRISC7 = 1 ;
        //TRISA = 0;
#if 1       
        TXSTAbits.TX9 = 0;
        TXSTAbits.TXEN = 1;
        TXSTAbits.SYNC = 0;
        TXSTAbits.SENDB = 0;
        TXSTAbits.BRGH = 1;
        TXSTAbits.TX9D = 0;
       
        RCSTAbits.SPEN = 1;
        RCSTAbits.RX9 = 0;
        RCSTAbits.CREN = 1;
        //RCSTAbits.FERR = 1;
        //RCSTAbits.OERR = 1;
        RCSTAbits.RX9D = 0;
       
       
        BAUDCONbitsV6.ABDOVF = 0;
        BAUDCONbitsV6.RCIDL = 1;
        BAUDCONbitsV6.RXDTP = 1 ;
        BAUDCONbitsV6.TXCKP = 1 ;
        BAUDCONbitsV6.BRG16 = 0;
        BAUDCONbitsV6.WUE = 0;
        BAUDCONbitsV6.ABDEN = 0;
       
        SPBRGH = 0 ;
        SPBRG  =  0x81;//0x81;
       
        while (1)
        {
                //while( TXSTAbits.TRMT == 0  );
                                  PORTCbits.TX = 65;
                Delay10KTCYx(0 );
                Delay10KTCYx(0 );
        }                         
#endif       
#if 0
       
       
        OpenUSART (   
                        USART_TX_INT_OFF &
            USART_RX_INT_OFF &
            USART_ASYNCH_MODE &
            USART_EIGHT_BIT &
            USART_CONT_RX &
            USART_BRGH_HIGH,
                        129);//129 31 32
        baudUSART( BAUD_IDLE_CLK_HIGH &
                        BAUD_8_BIT_RATE &
                        BAUD_WAKEUP_OFF &
                        BAUD_AUTO_OFF
                    );                 

        //TRISG = 0; // RS485
        while (1)
        {
                //PORTGbits.RG5 = 1; //RS485
 
                //while(BusyUSART());
            putcUSART('a');
                //WriteUSART('a');
                Delay10KTCYx(0 );
                Delay10KTCYx(0 );
               

        }
        CloseUSART();
#endif
       
}//end main

/** EOF main.c ***************************************************************/


thuongshoo 26-06-2009 12:46 PM

chương trình mình nếu dùng thư viện mcc18 thì chỉ sai về đồng hồ.
còn viết theo kiểu thanh ghi thì chưa đúng ở chỗ putc. Cái này là 1 mớ assembly lận! :D


Múi giờ GMT. Hiện tại là 07:43 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam