This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430G2553: PROTEUS SIMULATION ERROR

Part Number: MSP430G2553

Hi I m trying to simulate an interface between msp430g2553 and an OLED display (powered by ssd1306 ) I have attached the code below , can anyone tell me why is it that the port one is set to low even though the PINSEL function sets p1.6 and p1.7 for I2C ?

#include <msp430.h>

/*
0xAE,  // Display off
0x81,  // set contrast controll register
0x7F,  // contrast Wert 127 ok

0x20,  // Set Memory Adress Mode
0x01,  // Vertical Adressing Mode

0x21,  // Set Column Adress
0x00,  // Start Adress 0
0x7F,  // End Adress 127

0x22,  // Set Page Adress
0x00,  // Start Adress 0
0x07,  // End Adress 7

0x40,  // set start line adress 0

0xA0,  // Column Adress mapped to SEG0

0xA8,  // set multiplex ratio
0x3F,  // maximum

0xC0,  // Set COM Output Scan Direction to normal mode

0xD3,  // set display offset
0x00,  // 0

0x8D,  // Set Charge Pump Setting
0x14,  // ON

0xDA,  // set com pins hardware conf
0x12,  // alternative + disable remap

0xD5,  // set display clock divide + freq
0x80,  // divide by 1 and medium freq

0xD9,  // set pre charge preriod
0x22,  // medium (reset value)

0xDB,  // set vcomh
0x20,  // 0.77 x Vcc

0xA4,  // Output follows RAM Content

0xAF  // Display on*/


const unsigned char Init[] = {0xAE,0x81,0x07,0x20,0x01,0x21,0x00,0x7F,0x22,0x00,0x07,0x40,0xA0,0xA8,0x3F,0xC0,0xD3,0x00,0x8D,0x14,0xDA,0x12,0xD5,0x80,0xD9,0x22,0xDB,0x20,0xA6,0xA4,0xAF};

//const unsigned char Init[] = {0xAE,0x81,0x07,0x20,0x01,0x21,0x00,0x7F,0x22,0x00,0x07,0x40,0xA0,0xA8,0x3F,0xD3,0x00,0x8D,0x14,0xD5,0x80,0xD9,0x22,0xDB,0x20,0xA6,0xA4,0xAF};


const unsigned char Mod[] = {0xA5};

unsigned int i = 0;
//unsigned int I = 0;

void printC(const unsigned char* Array, unsigned int length){

	UCB0CTL1 = UCSWRST;
	UCB0CTL0 = UCMODE_3 + UCMST + UCSYNC;			// I2C master mode
	UCB0CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK, keep SW reset
	UCB0BR0 = 0x40;                          // < 100 kHz
	UCB0I2CSA = 0x3C;                       // address
	UCB0CTL1 &= ~UCSWRST;
	IE2 |= UCB0TXIE;				// Enable TX ready interrupt
	__disable_interrupt();
	UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX, start condition


	__bis_SR_register(LPM3_bits + GIE);

	unsigned int c;
	for(c = 0; c < length; c++){
		//__bis_SR_register(LPM3_bits + GIE);
		UCB0TXBUF = 0x80;
		__bis_SR_register(LPM3_bits + GIE);
		UCB0TXBUF = Array[c];
		__bis_SR_register(LPM3_bits + GIE);
	}

	UCB0CTL1 |= UCTXSTP;
	IE2 &= ~UCB0TXIE;

}

void printS(void){
	UCB0CTL1 = UCSWRST;
	UCB0CTL0 = UCMODE_3 + UCMST + UCSYNC;			// I2C master mode
	UCB0CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK, keep SW reset
	UCB0BR0 = 0x40;                          // < 100 kHz
	UCB0I2CSA = 0x3C;                       // address
	UCB0CTL1 &= ~UCSWRST;
	IE2 |= UCB0TXIE;				// Enable TX ready interrupt
	__disable_interrupt();
	UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX, start condition

	__bis_SR_register(LPM3_bits + GIE);;
}

void printD(const unsigned char Data){
	UCB0TXBUF = Data;
	__bis_SR_register(LPM3_bits + GIE);
}

void printE(void){
	UCB0CTL1 |= UCTR + UCTXSTP;
}


void main(void){
    WDTCTL = WDTPW + WDTHOLD;

    DCOCTL = CALDCO_8MHZ;				//DCO setting = 8MHz
    BCSCTL1 = CALBC1_8MHZ;				//DCO setting = 8MHz

    // Configure Pins for I2C
    P1SEL |= BIT6 + BIT7;                  // Pin init
    P1SEL2 |= BIT6 + BIT7;                  // Pin init


    printC(Init,31);

    __delay_cycles(8000000);

    printC(Mod,1);

    /*
    printS();



    UCB0TXBUF = 0x00;
    __bis_SR_register(LPM3_bits + GIE);


    unsigned int i;
    for(i = 500; i > 0; i--){
    	printD(0xFF);
    	printD(0x00);
    }
    printE();*/

    while(1);

}


// USCI_B0 Data ISR
#pragma vector = USCIAB0TX_VECTOR
__interrupt void USCIAB0TX_ISR(void){
	IFG2 &= ~UCB0TXIFG;
	__bic_SR_register_on_exit(LPM3_bits);               // Wakeup main code
}

**Attention** This is a public forum