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 仿真错误

Guru**** 2582405 points
Other Parts Discussed in Thread: MSP430G2553

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/612337/msp430g2553-proteus-simulation-error

器件型号:MSP430G2553

大家好,我正在尝试模拟 msp430g2553和 OLED 显示屏(由 ssd1306供电)之间的接口,我已经附加了以下代码: 有人能告诉我为什么端口1设置为低电平,即使 PINSEL 函数为 I2C 设置了 p1.6和 p1.7?

#include 

/*
0xAE、//显示关闭
0x81、//设置对比度控制寄存器
0x7F、//对比度 Wert 127 ok

0x20、//设置存储器地址模式
0x01、//垂直地址模式

0x21、//设置列地址
0x00、//开始地址0
0x7F、//结束地址127

0x22、//设置页面地址
0x00 //开始地址0
0x07,//结束地址7

0x40,//设置开始行地址0

0xA0,//列地址映射到 SEG0

0xA8,//设置比率
0x3F,//最大

值0xC0,//将 COM 输出扫描方向设置为正常模式

0xD3,//设置显示偏移
0x00,// 0

0x8D,多路复用 //设置电荷泵设置
0x14,//在

0xDA 上,//设置 COM 引脚硬件配置
0x12,//替代+禁用重映射

0xD5,//设置显示时钟分频+频率
0x80,//除以1和中等频率

0xD9,//设置预充电预发布器
0x22,//中等(复位值)

0xDB, //设置 vcomh
0x20,// 0.77 x Vcc

0xA4,//输出跟随 RAM 内容

0xAF //显示 on*/


const unsigned char Init[]={0xAE,0x81,0x20,0x01,0x21,0x00,0x7,0x20




,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20




void printC (const unsigned char*数组、unsigned int length){

UCB0CTL1 = UCSWRST;
UCB0CTL0 = UCMODE_3 + UCMST + UCSYNC;// I2C 主模式
UCB0CTL1 = UCSSEL_2 + UCSWRST;//使用 SMCLK、保持 SW 复位
UCB0BR0 = 0x40; //< 100kHz
UCB0I2CSA = 0x3C; //地址
UCB0CTL1 &=~UCSWRST;
IE2 |= UCB0TXIE;//启用 TX 就绪中断
__DISABLE_INTERRUPT ();
UCB0CTL1 |= UCTR + UCTXSTT;// I2C TX,启动条件


__bis_register (LPM3_bits + GIE);UCB0+






= UCB0bis_t = UCB0+= UCB0bis += UCTXCC_t;// UPM3+= UCB0+= UCB0BIS_R+寄存器= UCB0+= UCB0+= UCB0+= UCB0BIS_BIT_BIT_CLB = UCB0+
_bis_SR_register (LPM3_bits + GIE);
}

UCB0CTL1 |= UCTXSTP;
IE2 &=~UCB0TXIE;

}

void prints (void){
UCB0CTL1 = UCSWRST;
UCB0CTL0 = UCMODE_3 + UCMST + UCSYNC;// I2C 主模式
UCB0CTL1 = UCSBREL_2 + UCSWRST
;使用0x40 SW /复位 //< 100kHz
UCB0I2CSA = 0x3C; //地址
UCB0CTL1 &=~UCSWRST;
IE2 |= UCB0TXIE;//启用 TX 就绪中断
__DISABLE_INTERRUPT ();
UCB0CTL1 |= UCTR + UCTXSTT;// I2C TX,开始条件

__bis_register (LPM3_bits + GIE);UCB0CTL




+ UCTL void + UCTL = UCTL void + UCTL (void);// I2C TX void + UCB0CCTRI + UCTL = UCTL = UCTL = UCTL = UCTL + UCTL void + UCTL = UCTL = UCTL void + UCTL void + UCTL = UCTL = UCTL = UCT








WDTCTL = WDTPW + WDTHOLD;

DCOCTL = CALDCO_8MHZ;//DCO 设置= 8MHz
BCSCTL1 = CALBC1_8MHZ;//DCO 设置= 8MHz

//为 I2C 配置引脚
P1SEL |= BIT6 + BIT7; //引脚初始化
P1SEL2 |= BIT6 + BIT7; //引脚初始化


printC (Init、31);

_delay_cycles (8000000);

printC (Mod、1);

/*
prints();



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


unsigned int i;
对于(i = 500;i > 0;i--){
printD (0xFF);
printD (0x00);
}
Printe();*/

while (1);

}


// USCI_B0数据 ISR
#pragma vector = USCIAB0TX_vector
__interrupt void USCIAB0TX_ISR (void){
IFG2 &&=~UCB0TXIFG;
__BIC_SR_REGISTER_ON_EXIT (LPM3_BITS); //唤醒主代码
} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Deepanshu、您好!

    如果您使用的是 I2C 功能、则必须将 I2C 总线上拉至 Vcc。

    就像这样、

    此致、

    现金 Hao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我进行了连接、仍然无法正常工作、您能检查我的代码吗?如果那里有任何问题、请告诉我。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Deepanshu、您好!

    您是否将 P1.0至 P1.5设置为 LCD 的通信总线?

    如果要设置这些引脚、必须配置这些寄存器(PINDIR、引脚排列)。

    您可以参考此代码示例以输出数据(msp430g2xx3.c)。

    //
    // MSP430G2xx3演示-软件切换 P1.0
    //
    //说明;通过对软件循环内的 P1.0执行异或操作来切换 P1.0。
    // ACLK = n/a、MCLK = SMCLK =默认 DCO
    //
    // MSP430G2xx3
    //------------
    ///|\| XIN|-
    //|||
    //-|RST XOUT|-
    //||
    //| P1.0|--> LED
    //
    // D. Dang
    // Texas Instruments、Inc
    /2010年12月
    //使用 CCS 版本4.2.0和 IAR Embedded Workbench 版本:5.10构建
    //

    #include

    int main (空)

    WDTCTL = WDTPW + WDTHOLD;//停止看门狗计时器
    P1DIR |= 0x01;//将 P1.0设置为输出方向

    对于(;)

    volatile unsigned int i;

    P1OUT ^= 0x01;//使用异或切换 P1.0

    I = 50000;//延迟
    执行(i -);
    while (i!= 0);

    此致、

    现金 Hao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Deepanshu、您好!
    您是否解决了该问题? 还有什么可以为你效劳的?
    如果一切都正确、请单击"验证答案"按钮。 谢谢!

    此致、
    现金 Hao
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我尝试过它、但它仍然不起作用
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Deepanshu、您好!
    您是否有要测试的真实板? 您可以使用真实的板捕获 I2C 数据。

    此致、
    现金 Hao