历史上的今天
返回首页

历史上的今天

今天是:2025年03月28日(星期五)

正在发生

2020年03月28日 | 基于msp430单片机的方波发生器

2020-03-28 来源:eefocus

这个题目的要求是用msp430f149模拟一个信号发生器,信号发生器的频率在100-1000hz,通过按键可以实现每次加减100hz,另外加入串口通信,还可以通过pc机发送来的数值,将频率调整为相应的频率值。


信号的产生用到的是timerA 来产生pwm波,通过控制周期从而达到控制频率的目的。


以下是代码:


#include "msp430x14x.h"

#include "Config.h"

#include

#include

int flag=0;

uchar key;

unsigned int a=5;

//unsigned int b=5;

uchar string[3], j = 0;

void TIMERA_Init(void)                                   //连续计数模式,计数到0XFFFF产生中断

{

    TACTL |= TASSEL1 + TACLR + ID0 + ID1 + MC0 + TAIE;     //SMCLK做时钟源,8分频,增加计数模式 

    

}

void set(){

   switch(a)

       {

      

       case 1:  {

               TACCR0=9999;

               CCR1=5000;

               

                }

               break;

       case 2:  {

               TACCR0=4999;

               CCR1=2500;

               

                }

               break; 

       case 3: {

               TACCR0=3332;

               CCR1=1500;

              

                }

               break;

       case 4:  {

               TACCR0=2499;

               

                }

               break;

       case 10: {

               TACCR0=999;

              

                }

               break;

       case 9 : {

               TACCR0=1111;

              

                }

               break;

       case 8:  {

               TACCR0=1250;

                 

                }

               break;

       case 7:  {

               TACCR0=1428;

              

                }

               break;  

       case 6: {

               TACCR0=1666;

              

                }

               break;

       case 5: {

               TACCR0=2000;

               

                }

               break;

       /*default:{

               TACCR0=2000;

               a = 5;

       }break; */ 

       }

}

void UART_Init()

{

  U0CTL|=SWRST + CHAR;                //复位SWRST,8位数据模式

  U0TCTL|=SSEL1;                      //SMCLK为串口时钟

  U0BR1=baud_h;                       //BRCLK=8MHZ,Baud=BRCLK/N

  U0BR0=baud_l;                       //N=UBR+(UxMCTL)/8

  U0MCTL=0x00;                        //微调寄存器为0,波特率9600bps

  ME1|=UTXE0;                         //UART0发送使能

  ME1|=URXE0;                         //UART0接收使能

  U0CTL&=~SWRST;

  IE1|=URXIE0;                        //接收中断使能位

  

  P3SEL|= BIT4 + BIT5;                //设置IO口为第二功能模式,启用UART功能

  P3DIR|= BIT4;                       //设置TXD0口方向为输出

}

#pragma vector=UART0RX_VECTOR

__interrupt void UART0_RX_ISR(void)

{

  uchar data;

  data=U0RXBUF;  

  if(data == 'a')

    P6OUT = 0x00;

  a = data-0x30;

  if(a != 0)

    set();

}

 

#pragma vector = TIMERA1_VECTOR

__interrupt void Timer_A(void)

{

  switch(TAIV)                                  //需要判断中断的类型

  {

  case 2:break;

  case 4:break;

  case 10:flag++;break;

  }

}

void KeyPort_init()

{

 

  P1SEL = 0x04;                   //P1普通IO功能

  P1DIR = 0x04;                   //P10~P13输入模式,外部电路已接上拉电阻

 

}

 

uchar Key_Scan(void) 

{

  uchar key_check;

  uchar key_checkin;

  key_checkin=KeyPort;          //读取IO口状态,判断是否有键按下

  key_checkin&= 0x0F;          //读取IO口状态,判断是否有键按下

    if(key_checkin!=0x0F)            //IO口值发生变化则表示有键按下

      { 

        delay_ms(10); 

        key_check=KeyPort ;

        switch (key_check & 0x0F)

              {

                case 0x0E: 

                  {                   

                    key=1;

                  }

                  break;

                case 0x0D:{  

                    key=2;

                  }

                  break;

              }      

      }

    else

     {

       key=0xFF;        

     }

  return key;

}

void main(void)

{

      WDTCTL = WDTPW + WDTHOLD;

      TIMERA_Init(); 

      Clock_Init();

      UART_Init();

      KeyPort_init();

      P6DIR=0xff;

      TACCTL1 = OUTMOD_7;

       _EINT();

      CCR1=500;

      TACCR0 = 2000;

      while(1)

      {

       Key_Scan(); 

          if(key!=0xff)

       {     

        

         switch(key)

        {

        case 1:

          {  

            while((P1IN & 0x01)!=0)

             {

             

             }

            delay_ms(300); 

            a--;

            set();

          }

          break;

        case 2:

          {

            

            while((P1IN & 0x02)!=0)

             {

                

             }

             delay_ms(300); 

             a++;   

             set();

          }

          break;        

        }

       

       }

      

      }

}

推荐阅读

史海拾趣

Everbuild公司的发展小趣事

随着公司的逐步发展,Everbuild开始注重技术研发和品牌建设。公司投入大量资金引进先进的生产设备和技术人才,不断推出具有创新性的电子产品。其中,一款高性能的智能手机处理器在市场上引起了热烈反响,成为公司的明星产品。同时,Everbuild还加强了品牌宣传和推广,提高了品牌的知名度和美誉度。

EIC [EIC discrete Semiconductors]公司的发展小趣事

在竞争激烈的电子行业中,EIC公司深知供应链管理和成本控制的重要性。公司建立了完善的供应链管理体系,与供应商建立了长期稳定的合作关系,确保了原材料的稳定供应和质量的可靠性。同时,EIC还通过优化生产流程、提高生产效率等措施,不断降低生产成本,提升产品的竞争力。

Chemtronics公司的发展小趣事

1999年,Chemtronics迎来了一个重要的转折点,成为Illinois Tool Works Inc的全资子公司。这一变化为Chemtronics带来了更多的资源和支持,使其能够进一步扩大生产规模、提升研发能力,并在全球范围内拓展业务。

Holt Integrated Circuits公司的发展小趣事

Holt在CAN控制器领域也取得了重要突破。作为世界上第一家将CAN控制器和收发器集成在同一紧凑塑料封装中的公司,Holt的ARINC 825(CAN)数据总线产品为用户提供了极大的便利。这种集成设计不仅减小了产品的体积和重量,还提高了系统的可靠性和稳定性。Holt的这一创新成果,不仅推动了CAN总线技术在航空航天领域的广泛应用,也为其他行业的自动化控制提供了有力支持。

以上五个故事,从不同角度展现了Holt Integrated Circuits公司在电子行业中的发展历程和卓越成就。这些事实不仅证明了Holt在技术创新和市场拓展方面的实力,也为其在未来的发展中奠定了坚实的基础。

Gennum ( Semtech )公司的发展小趣事
在确认电路能正常工作后,可以进一步调整元件参数或优化电路结构,以提高电路的性能和稳定性。
E-T-A [E-T-A Circuit Breakers]公司的发展小趣事

进入1950年代,E-T-A公司开始关注固态远程电源控制器(SSRPCs)的研发。这一创新技术为电气系统提供了更加可靠和高效的电源管理方案。公司投入大量资源进行研发,成功推出了多款固态远程电源控制器产品,这些产品在市场上获得了广泛认可,并为公司带来了可观的收益。

问答坊 | AI 解惑

音乐集成FD9300是什么样的芯片?

请教音乐集成FD9300是什么样的芯片?有谁知道管脚排列及功能?…

查看全部问答>

最小系统

做个最小系统,当地不作显示,通过线缆或无线系统联至计算机系统进行各类处理(显示\\控制\\分析\\存档等….),       本处目的只是想做功能性实验: 将传感头置于不同有害气体环境中(主要为磷\\氢\\锌\\硫,3—10%不同浓度不同 ...…

查看全部问答>

请问ROM/bin文件的格式是什么如何被执行处理的?

请问ROM/bin文件的格式是什么如何执行处理的? 例如在【显示设置】中的 1234512345,在手机/MP4的ROM中发现是DF5FBBB9BA的,请问做了那些处理?变换的方式是什么? 二进制的: 1234512345 0001 0010 0011 0100 0101 0001 0010 0011 0100 01 ...…

查看全部问答>

想找个兼职,VC、单片机、arm嵌入式开发

想找个兼职,VC、单片机、arm嵌入式开发 作过基于microchip系列、msp430系列、S3C44B0、AT91RM9200、ST710等mcu的项目, 包括电力系统监控、税控等行业. 可承担四层板电路设计,底层嵌入式程序设计及上位机配套程序编写。 13816950690 msn:xh_du ...…

查看全部问答>

请问能否可以实现让windows xp支持硬关机!?

本人相当的菜鸟,也不知道我形容的清楚不清楚. 就是说想象机顶盒那样的直接按电源开关进行关机操作,是不是需要预先将windows xp嵌入到主板上呢??…

查看全部问答>

安捷伦武汉招聘销售工程师!

安捷伦武汉招聘销售工程师! Job Title                         Sales Engineer Type                &n ...…

查看全部问答>

初学者请教个中断的问题,谢谢!

电平触发方式的中断不是应该保持中断状态么?咋我这个接地之后只是变化的慢了而不是完全不动呢? #include void delay(unsigned int z); //延迟子程序声明 sbit dula=P1^0; //段锁位 sbit A1=P2^2; sbit B1=P2^3; sbit C1=P2^4; ...…

查看全部问答>

有没有做过1G采样系统的PCB

有没有做过1G采样系统的PCB啊?不知道现在做的这样高频的人多不多?技术怎么样啊?…

查看全部问答>

MSP430开发板用途

我学习这款单片机主要的用途是用了调试CC2500模块,学会怎么调试和配置那个模块,主要用来传输DMX512信号数据;…

查看全部问答>