PDA

View Full Version : Rs232 và Mplab không được. Nhờ bắt lỗi dùm


thuongshoo
25-06-2009, 05:49 PM
đâ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

#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