历史上的今天
返回首页

历史上的今天

今天是:2025年01月14日(星期二)

正在发生

2021年01月14日 | MSP430F249 IIC write and Uart send

2021-01-14 来源:eefocus

//******************************************************************************/
#include


//注意:两次发送间隔必须要有延时,否则不能再次发送,串口发送格式:


unsigned char PTxData[250];                     // Pointer to TX data
unsigned char pHead;
unsigned char pTail;


unsigned char TXByteCtr;
const unsigned char TxData[] =              // Table of data to transmit
{
  0x01,
  0x02,
  0x03,
  0x04,
  0x05
};
void UartInit(void)
{
  if (CALBC1_1MHZ==0xFF)  // If calibration constant erased
  { 
    while(1);                               // do not load, trap CPU!! 
  } 
  DCOCTL = 0;                               // Select lowest DCOx and MODx settings
  BCSCTL1 = CALBC1_1MHZ;                    // Set DCO
  DCOCTL = CALDCO_1MHZ;
  P3SEL |= 0x30;                             // P3.4,5 = USCI_A0 TXD/RXD
  UCA0CTL1 |= UCSSEL_2;                     // SMCLK
  UCA0BR0 = 104;                            // 1MHz 9600; (104)decimal = 0x068h
  UCA0BR1 = 0;                              // 1MHz 9600
  UCA0MCTL = UCBRS0;                        // Modulation UCBRSx = 1
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
}
void UartSend( unsigned char Data )
{
      UCA0TXBUF = Data;                    // TX -> RXed character
      while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?,发送缓冲区空
 
}
void IICInit(void)
{
  UCB0CTL1 |= UCSWRST;                      // Enable SW reset
  UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC;     // I2C Master, synchronous mode
  UCB0CTL1 = UCSSEL_2 + UCSWRST;            // Use SMCLK, keep SW reset
  UCB0BR0 = 12;                             // fSCL = SMCLK/12 = ~100kHz
  UCB0BR1 = 0;
  UCB0I2CSA = 0xA0>>1;                         // Slave Address is ,注意地址需要右移一位,24C02地址为0XA0,故要写入0X50
                                            // 7位地址模式,器件会发送一位读写位,正好8位。
  UCB0CTL1 &= ~UCSWRST;                     // Clear SW reset, resume operation
  IE2 |= UCB0TXIE;                          // Enable TX interrupt


}
void IICSend( void )
{       
    int i;
    
    for(i=3000;i>0;i--);                   //两次发送间隔必须要有延时,否则不能再次发送


    while (UCB0CTL1 & UCTXSTP);             // Ensure stop condition got sent


    UCB0CTL1 |= UCTR + UCTXSTT;             // I2C TX, start condition
   
    __bis_SR_register(CPUOFF + GIE);        // Enter LPM0 w/ interrupts


}


int main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P3SEL |= 0x06;                            // Assign I2C pins to USCI_B0
  
  IICInit();
  
  UartInit();


  while (1)
  {
      UartSend('A');
      
      PTxData[0] = 0;
      PTxData[1] = 2;
      PTxData[2] = 3;
      PTxData[3] = 4;
      PTxData[4] = 5;
      pTail = 5;
      
      IICSend();
        
      PTxData[0] = 0X10;
      PTxData[1] = 2;
      PTxData[2] = 3;
      PTxData[3] = 4;
      PTxData[4] = 5;
      pTail = 5;


      IICSend();
      
      PTxData[0] = 0x20;
      PTxData[1] = 2;
      PTxData[2] = 3;
      PTxData[3] = 4;
      PTxData[4] = 5;
      pTail = 5;
      
      IICSend();
        
      PTxData[0] = 0X30;
      PTxData[1] = 2;
      PTxData[2] = 3;
      PTxData[3] = 4;
      PTxData[4] = 5;
      pTail = 5;


      IICSend();
      
      while(1);


  }
}


//------------------------------------------------------------------------------
// The USCIAB0TX_ISR is structured such that it can be used to transmit any
// number of bytes by pre-loading TXByteCtr with the byte count. Also, TXData
// points to the next byte to transmit.
//------------------------------------------------------------------------------
#pragma vector = USCIAB0TX_VECTOR
__interrupt void USCIAB0TX_ISR(void)
{
  if ( pHead < pTail )                            // Check TX byte counter
  {


      UCB0TXBUF = PTxData [pHead++ ];                 // Load TX buffer
        
  }
  else
  {
     pHead = 0; 
      
    UCB0CTL1 |= UCTXSTP;                    // I2C stop condition
    IFG2 &= ~UCB0TXIFG;                     // Clear USCI_B0 TX int flag
    __bic_SR_register_on_exit(CPUOFF);      // Exit LPM0
       
  }
}

推荐阅读

史海拾趣

Daniels Manufacturing公司的发展小趣事

在当今社会,绿色环保和可持续发展已成为全球共识。作为一家具有社会责任感的企业,DMC积极践行绿色环保理念,致力于实现可持续发展。在生产过程中,DMC采用环保材料和清洁能源,减少废弃物和污染物的排放。同时,DMC还注重产品的环保性能设计,推出了一系列符合环保标准的产品。此外,DMC还积极参与社会公益活动,支持环保事业和社区建设。

DURABLE公司的发展小趣事

面对电子行业的快速变化和技术更新,DURABLE公司始终保持着敏锐的洞察力和创新精神。公司不断加大对新技术和新产品的研发力度,积极探索物联网、人工智能等前沿技术在电子行业的应用。通过一系列的技术创新和产品升级,DURABLE成功实现了从传统电子材料供应商向智能电子解决方案提供商的转型升级。这一转型不仅提升了公司的核心竞争力,还为公司的未来发展奠定了坚实基础。

ENPIRION公司的发展小趣事

在经历了几年的快速发展后,ENPIRION公司被Altera公司收购。这一收购标志着ENPIRION公司进入了一个新的发展阶段。在Altera公司的支持下,ENPIRION公司得以继续扩大其研发和生产能力,推出更多创新的产品和服务。同时,随着人工智能、物联网和大数据技术的不断发展,ENPIRION公司也积极探索新的应用领域和市场机会,为其未来发展奠定了坚实的基础。

以上五个故事概述了ENPIRION公司在电子行业中的发展历程和关键里程碑。通过这些故事,我们可以看到ENPIRION公司凭借技术创新、市场扩展和合作伙伴关系等关键因素取得了显著的成功。

DMS Electronic Components, Inc公司的发展小趣事

DMS深知品质对于企业的重要性,因此从一开始就建立了严格的质量管理体系。公司采用先进的生产设备和工艺,对每一个环节都进行严格把关,确保产品质量符合国际标准。DMS还积极参与国际认证,通过ISO9001、CE、UL等认证,进一步提升了品牌的国际竞争力。

CTC [Compact Technology Corp.]公司的发展小趣事

作为一家有社会责任感的企业,CTC公司积极参与社会公益事业。公司不仅捐款支持教育、环保等公益事业,还利用自身的技术优势为社区提供技术支持和解决方案。这些行为使得CTC公司在社会中树立了良好的形象,赢得了公众的信任和尊重。同时,通过履行社会责任,CTC公司也提升了自身的品牌价值和市场竞争力。

请注意,以上故事是基于假设和虚构的,并非真实发生的事件。它们旨在展示一个电子行业中公司发展可能经历的一些典型情境和挑战,以及应对这些情境和挑战的可能策略。在现实中,每个公司的发展都有其独特性和复杂性,因此这些故事仅供参考,不能作为CTC公司或任何其他公司实际发展情况的依据。

雅特力(Artery)公司的发展小趣事

在发展过程中,雅特力积极寻求与其他企业的战略合作,以实现共赢发展。通过与上下游企业建立紧密的合作关系,雅特力不仅确保了供应链的稳定性和高效性,还获得了更多的技术支持和市场资源。同时,雅特力还注重与同行业企业的交流与合作,共同推动电子行业的进步与发展。这些战略合作不仅增强了雅特力的综合实力和市场竞争力,也为整个电子行业的繁荣做出了积极贡献。

综上所述,雅特力公司通过技术创新、全球市场布局、企业社会责任、人才培养和战略合作等多个方面的努力,实现了从初创企业到行业领军者的华丽转身。这些故事不仅展现了雅特力的发展历程和成就,也揭示了其在电子行业中的重要地位和影响力。

问答坊 | AI 解惑

请大家分析一下这个驱动电路。

如下图,电路是从别人的资料里看到的,输入信号幅度应该是10-15V吧,不知道怎么工作。 …

查看全部问答>

关于SCSIOP_READ命令的一些疑问.

在我对U盘做过滤的时候,得到当我在访问U盘的时候, 用到的是SCSIOP_READ命令,也就是说我是通过他来 访问U盘的,但是我U盘是通过什么方式或者说是哪个 命令把我要访问的内容返回给我的呀.??? 请大家给解释一下.^_^…

查看全部问答>

中九复活

中九如何复活,短接bl,vcc无效…

查看全部问答>

紧急招聘DSP人才(欢迎来电咨询15812809535曹先生)

工作地点:广州 招聘通讯行业DSP工程师, 任职要求:本科或硕士研究生,电子、通信、信号处理、计算机或相关专业,2年以上相关工作经验;         熟悉通信信号处理常用算法和理论基础;     &n ...…

查看全部问答>

【设计工具】大话FPGA

一直以来都想写点什么,关于 FPGA 设计,因为有点不太服气。为什么同样是设计,有些人可以好像玩一样的摆弄,photoshop,很时尚,很跩。有些人可以用所谓的广告创意玩弄人们的智商。而硬件工程师则一律的被人以为呆板没有创意。我是说,为什么我们 ...…

查看全部问答>

困扰很长时间了 求大家帮忙

#include <msp430x14x.h>#define keyin    (P3IN&BIT4)void led_flash(void);char key(void){  if(keyin==0)    return 1;    else   return 0;   }void main(void){  &nb ...…

查看全部问答>

锂电池——三菱的PHEV事故

转 三菱的电池问题,算是告一段落了,在这里总结一下这次的事情。 1.事件的开端 Mitsubishi reports fire in i-MiEV battery pack, melting in Outlander PHEV pack     Mitsubishi Motors reported two separate incidents with ...…

查看全部问答>

【飞凌OK210开发板】【UBOOT】【移植】步骤

在飞凌S5PV210开发板上移植U-Boot 的过程主要包括以下四个步骤:1.下载U-Boot源码2.修改相应的文件代码 3.编译U-Boot4.烧写到开发板上,运行U-Boot是universal bootloader,也就是通用的bootloader。它存在于nandflash或者SD卡中,它是在开机上点 ...…

查看全部问答>

dsp做电源控制的问题

做电源的话功耗不是很重要的一部分么,那dsp功耗不是很大么,他还有什么优势呢…

查看全部问答>