Anda di halaman 1dari 3

#include "p33FJ64GS606.

h"
Pada pengaturan UARTX terdapat 2 mode yaitu mode
#include "init_peripherals.h"
#include "global_variables.h" Register dan mode Control.
#include "uart_funcs.h"
#include "bms_funcs.h" Fungsi #include adalah sebuah prosesor pengarah
yang mengatakan kepada kompiler untuk meletakan
void uart1_xmit(unsigned char data) kode dari header file kedalam program.
{
U1TXREG = (unsigned char)data;
Mode 20-2
while (U1STAbits.UTXBF){}
} bit 9 UTXBF: UARTx Transmit Buffer Full Status bit
(hanya dapat membaca tidak dapat mengirm atau
void Send_Data_to_GUI (unsigned int data) menerima karakter buffer)
{ 1 = Transmit buffer penuh
0 = Transmit buffer tidak penuh;
U1TXREG = (unsigned char)(data & 0x00ff); Setidaknya satu karakter lagi bisa ditulis
while (U1STAbits.UTXBF){}
Pada program yang digunakan adalah mode “0”.
U1TXREG = (unsigned char)((data >> 8) & 0xff);
while (U1STAbits.UTXBF){} Sehingga dapat menambahkan satu karakter dalam
} pengiriman maupun penerimaan data dari angka yang
disetting.
void send3byte(unsigned long int data)
{
U1TXREG = (unsigned char)(data & 0x00ff);
while (U1STAbits.UTXBF){}
U1TXREG = (unsigned char)((data >> 8) & 0xff);
while (U1STAbits.UTXBF){}
U1TXREG = (unsigned char)((data >> 16) & 0xff);
while (U1STAbits.UTXBF){}
}

void uart16bit (short buff)


{
unsigned char a, b, c;

a = ((buff&0xC000)>>14)|0x80;
b = ((buff&0x3F80)>>7)|0x80;
c = ((buff&0x007F))|0x80;

uart1_xmit(a);
uart1_xmit(b);
uart1_xmit(c);
}

void send_string(unsigned char* string)


{
int i;

for(i=0; string[i]!='\0'; i++)


{
uart1_xmit(string[i]);
}

// uart1_xmit('\n');
}
void loadData(void)
{
int i = 41;
dataPack [0] = V_pack1; //V1 __5
dataPack [1] = V_pack2; //V2 __5 a= (unsigned char)((hex_data>>8)&0xf);
dataPack [2] = V_pack3; //V3 __5 b =(unsigned char)((hex_data>>4)&0xf);
dataPack [3] = V_pack4; //V4 __5 c= (unsigned char)( hex_data&0xf);
dataPack [4] = V_pack5; //V5 __5
dataPack [5] = V_pack6; //V6 __5 if ((a>=0)&&(a<=9))
dataPack [6] = V_pack7; //V7 __5 {
dataPack [7] = V_BAT; //Vt __5 ascii_data[0]=a+0x30;
dataPack [8] = V_HVDC; //Vhc __5 }
dataPack [9] = iSystem; //It __5
dataPack [10] = pSystem; //P __5 else
dataPack [11] = T_pack1; //t1 __2 {
dataPack [12] = T_pack2; //t2 __2 ascii_data[0]=a+0x37;
dataPack [13] = T_pack3; //t3 __2 }
dataPack [14] = T_pack4; //t4 __2
dataPack [15] = T_pack5; //t5 __2 if ((b>=0)&&(b<=9))
dataPack [16] = T_pack6; //t6 __2 {
dataPack [17] = T_pack7; //t7 __2 ascii_data[1]=b+0x30;
dataPack [18] = FV_pack1; //Fv1 __1 }
dataPack [19] = FV_pack2; //Fv2 __1
dataPack [20] = FV_pack3; //Fv3 __1 else
dataPack [21] = FV_pack4; //Fv4 __1 {
dataPack [22] = FV_pack5; //Fv5 __1 ascii_data[1]=b+0x37;
dataPack [23] = FV_pack6; //Fv6 __1 }
dataPack [24] = FV_pack7; //Fv7 __1
dataPack [25] = FT_pack1; //Ft1 __1 if ((c>=0)&&(c<=9))
dataPack [26] = FT_pack2; //Ft2 __1 {
dataPack [27] = FT_pack3; //Ft3 __1 ascii_data[2]=c+0x30;
dataPack [28] = FT_pack4; //Ft4 __1 }
dataPack [29] = FT_pack5; //Ft5 __1
dataPack [30] = FT_pack6; //Ft6 __1 else
dataPack [31] = FT_pack7 ; //Ft7 __1 {
dataPack [32] = vSystemStat; //Vstat __1 ascii_data[2]=c+0x37;
dataPack [33] = iSystemStat; //Istat __1 }
dataPack [34] = SOC; //SOC __3
dataPack [35] = DOD; //DOD __3 }

//(((buffrxData[5]-'0')*100)+((buffrxData[6]-'0')*10)+((buffrxData[7]-'0')*1)); void buat_delay(void)


//XSOC __3 {
dataPack [36] = feedB_MAXSOC; unsigned long int buat_delay_counter = 0;
//(((buffrxData[9]-'0')*100)+((buffrxData[10]-'0')*10)+((buffrxData[11]-'0')*1));
//NSOC __3 while (buat_delay_counter < 20000)
dataPack [37] = feedB_MINSOC; {
//(((buffrxData[13]-'0')*100)+((buffrxData[14]-'0')*10)+((buffrxData[15]-'0')*1)); buat_delay_counter++;
//XDOD __3 }
dataPack [38] = feedB_MAXDOD;
/(((buffrxData[17]-'0')*100)+((buffrxData[18]-'0')*10)+((buffrxData[19]-'0')*1)); buat_delay_counter = 0;
//NDOD __3 }
dataPack [39] = feedB_MINDOD;/
dataPack [40] = statusMaster;

//spare
for (i = 41; i < 63; i++) {
dataPack [i] = 0;
}

void hex2ascii(unsigned int hex_data, unsigned char* ascii_data)


{
unsigned int a,b,c;
void init_uart(void) Mode 20-1 Mode 20-2
{ bit 0 STSEL: Bit Bit Bit Bit bit 15,13 UTXISEL <1: 0>: Pemilihan Interval Mode
//[Setting UART]-------------------------------------------------------------- 1 = Dua bit berhenti
U1MODEbits.STSEL = 0; // 1 Stop bit Interval UARTx bit
0 = Satu bit berhenti 11 = Reserved; jangan gunakan
U1MODEbits.PDSEL = 0; // No Parity, 8 data bits
U1MODEbits.ABAUD = 0; // Auto-Baud Disabled Hal ini menjelaskan tentang perhitungan bit saat 10 = Interrupt ketika karakter dipindahkan
U1MODEbits.BRGH = 0; // Low Speed mode proses pengiriman maupun penerimaan. ke Register Transmit Shift (TSR), dan
sebagai hasilnya, buffer pengiriman
Mode 20-1 menjadi kosong
U1BRG = BRGVAL; // BAUD Rate Setting for 9600 bit 2-1 PDSEL <1: 0>: Bit Paritas dan Seleksi Data 01 = Interrupt ketika karakter terakhir
U1STAbits.UTXISEL0 = 0; // Interrupt after one TX Character is transmitted 11 = data 9-bit, tidak ada paritas
U1STAbits.UTXISEL1 = 0; dialihkan dari Register Transmit Shift;
U1MODEbits.UARTEN = 1; // Enable UART 10 = data 8-bit, paritas ganjil semua mengirimkan operasi selesai
U1STAbits.UTXEN = 1; // Enable UART TX 01 = data 8-bit, bahkan paritas 00 = Interrupt ketika karakter dipindahkan
//wait at least 104 usec (1/9600) before sending first char 00 = data 8-bit, tidak ada paritas ke Register Transmit Shift (ini berarti ada
IFS0bits.U1RXIF = 0; //Clear UART RX 1 interrupt flag Sedangkan parity atau paritas adalah bilangan biner pada paling sedikit satu karakter terbuka
IPC2bits.U1RXIP = 6; //Set UART RX 1 interrupt priority yang ditambahkan saat pengiriman maupun dalam buffer pengiriman)
IEC0bits.U1RXIE = 1; //Enable the UART RX 1 interrupt penerimaan dalam bentuk angka 1. Terdapat 2 parity
IEC0bits.U1TXIE = 1; Mode 20-2
yaitu odd dan event parity. Odd parity adalah bilangan
IPC3bits.U1TXIP = 7; bit 10 UTXEN: UARTx Transmit Aktifkan sedikit (1)
U1STAbits.URXISEL = 0b00; biner yang ditambahkan jumlahnya ganjil. Contoh:
10001010. Sedangkan event parit adalah bilangan 1 = Transmit diaktifkan, pin UxTX
U1TXREG = 'a';
biner yan ditambahkan jumlahnya genap. Contoh: dikendalikan oleh UARTx
rx1_data = U1RXREG&0x00FF;
10001000. 0 = Transmit dinonaktifkan, transmisi yang
IFS0bits.U1TXIF = 0; . tertunda dibatalkan dan buffer di-reset; Pin
Mode 20-1 UxTX adalah dikendalikan oleh pelabuhan
//---------------------------------------------------------------------------- bit 3 BRGH: Tingkat Baud (Baud rate)Tinggi
////[Setting UART2]--------------------------------------------------------------- Aktifkan sedikit Mode 20-2
// U2MODEbits.STSEL = 0; 1 = BRG menghasilkan 4 jam per periode
// U2MODEbits.PDSEL = 0; bit 7-6 URXISEL <1: 0>: UARTx Menerima Seleksi
bit (4x baud clock, mode High-Speed) Mode Interupsi bit
// U2MODEbits.ABAUD = 0;
// U2MODEbits.BRGH = 0; 0 = BRG menghasilkan 16 jam per periode 11 = Interrupt diatur pada transfer UxRSR,
// bit (16x baud clock, mode standar) membuat buffer menerima penuh (yaitu,
// U2BRG = BRGVAL; memiliki 4 karakter data)
// U2STAbits.UTXISEL0 = 0; Mode 20-1 10 = Interrupt diatur pada transfer UxRSR,
// U2STAbits.UTXISEL1 = 0;
bit 5 ABAUD: Auto-Baud Aktifkan sedikit membuat buffer menerima 3/4 penuh
// U2MODEbits.UARTEN = 1;
// U2STAbits.UTXEN = 1; 1 = Mengaktifkan pengukuran baud rate (yaitu, memiliki 3 karakter data)
// //wait at least 104 usec (1/9600) before sending first char pada karakter berikutnya - memerlukan 0x = Interrupt diatur saat karakter diterima
// IFS1bits.U2RXIF = 0; penerimaan bidang Sync (55h) sebelum dan ditransfer dari UxRSR ke receive
// IPC7bits.U2RXIP = 4; data lain; dibersihkan di perangkat keras penyangga; menerima buffer memiliki satu
// IEC1bits.U2RXIE = 1; setelah selesai atau lebih karakter
// IEC1bits.U2TXIE = 1; 0 = Pengukuran tingkat Baud
// IPC7bits.U2TXIP = 4;
// //-------------------------------------------------------------------------- dinonaktifkan atau diselesaikan
// U2TXREG = 'b';
// rx2_data = U2RXREG&0xFF; Mode 20-1
// bit 15 UARTEN: UARTx Aktifkan sedikit (1)
// IFS1bits.U2RXIF = 0;
1 = UARTx diaktifkan; semua pin UARTx
//
// clear TX interrupt flag dikendalikan oleh UARTx seperti yang
didefinisikan oleh UEN <1: 0>
0 = UARTx dinonaktifkan; semua pin
UARTx dikendalikan oleh port latches,
} konsumsi daya UARTx adalah minimal
Menjelaskan tentang kendali pusat dari UARTX

Anda mungkin juga menyukai