MSP430单片机串口控制5路PWM频率变化程序
下面介绍一段MSP430单片机通过232串口发送0x00,0x01,0x02,0x03,0x04控制IO端口P1,P2,P4,P5,P6输出6路PWM波形变化的程序,单片机发送0x05,IO端口P1,P2,P4,P5,P6输出PWM为0。单片机的电路如下图
程序如下:链接:https://pan.baidu.com/s/1-vcBVWfkaSu8C81LeTFqmw ;
提取码:18fo
https://share.weiyun.com/IHXUku45

/***********************************************
程序功能:实现流水灯以三种流动方式和四种流动速度
的不同组合而进行点亮"流动"
通过232串口发送0x00,0x01,0x02,0x03,0x04调节P1,P2,P4,P5,P6的6个管脚输出PWM波形的频率由小变大
通过232串口发送0x05调节P1,P2,P4,P5,P6的6个管脚输出PWM波形为零
程序功能:MCU通过串口向PC机发送4X4键盘的键值

通信格式:N.8.1, 9600

拨码开关设置:将LED位拨至ON,其余拨至OFF
测试说明:观察流水灯流动顺序和速度的变化
************************************************/
#include <msp430x14x.h>
//#include “flash.h”
typedef unsigned int uint;
typedef unsigned char uchar;
//void write_flash_char();
void writeflashchar(unsigned int addr,char *array,int count) ;
void writeflashint(unsigned int addr,int *array,int count) ;
void Delay400ms();
void delay();
void Delay5ms();
uint i = 0,j = 0,dir = 0;
uint flag = 0,speed = 0; //flag–灯光流动方式,speed–灯光流动速度
uint tmp;
uint m;
// uint tmp1=12000;
// uint tmp2=1200;
// uint tmp3=12000;
// uint tmp4=1200;
// uint tmp5=12000;
uchar shuju;
int shuju1;
/主函数/
void main(void)
{

/*下面六行程序关闭所有的IO口*/
P1DIR = 0XFF;P1OUT = 0XFF;
P2DIR = 0XFF;P2OUT = 0XFF;
P3DIR = 0XFF;P3OUT = 0XFF;
P4DIR = 0XFF;P4OUT = 0XFF;
P5DIR = 0XFF;P5OUT = 0XFF;
P6DIR = 0XFF;P6OUT = 0X00;WDTCTL = WDTPW + WDTHOLD;       //关闭看门狗
P6DIR |= BIT2;P6OUT |= BIT2;    //关闭电平转换
P5OUT &= ~BIT7;CCTL0 = CCIE;                   //使能CCR0中断
CCR0 = 50000;
TACTL = TASSEL_2 + ID_3 + MC_1; //定时器A的时钟源选择SMCLK,增计数模式
P2DIR = 0xff;                   //设置P2口方向为输出
P2OUT = 0xff;

P1DIR = 0xff; //设置P2口方向为输出
P1OUT = 0xff;
P4DIR = 0xff; //设置P2口方向为输出
P4OUT = 0xff;
P5DIR = 0xff; //设置P2口方向为输出
P5OUT = 0xff;
P6DIR = 0xff; //设置P2口方向为输出
P6OUT = 0xff;
// tmp=12000;

// LPM0; //CPU进入LPM0模式/

P3SEL |= 0x30;                            // 选择P3.4和P3.5做UART通信端口
ME1 |= UTXE0 + URXE0;                     // 使能USART0的发送和接受
UCTL0 |= CHAR;                            // 选择8位字符
UTCTL0 |= SSEL0;                          // UCLK = ACLK
UBR00 = 0x03;                             // 波特率9600
UBR10 = 0x00;                             //
UMCTL0 = 0x4A;                            // Modulation
UCTL0 &= ~SWRST;                          // 初始化UART状态机
IE1 |= URXIE0;                            // 使能USART0的接收中断
_EINT();                        //使能全局中断//  LPM1;
while(1)
{//_EINT();                               //打开全局中断//进入LPM1模式// while (!(IFG1 & UTXIFG0));             //等待以前的字符发送完毕// TXBUF0 = RXBUF0;                       //将收到的字符发送出去 //  write_flash_char(0xef,*shuju,4);//write_flash_int(0xbf,shuju1,2);// void writeflashchar(0xff,0x01,2) ;

// char *Flash_ptr; //Flash pointer;
//int i;

// FCTL1=FWKEY+ERASE; //set erase bit
// FCTL3=FWKEY; //Clear Lock bit

// *Flash_ptr=0; //Dummy write to erase Flash segment
// FCTL1=FWKEY +WRT; //Set WRT bit for write operation
// Flash_ptr=0x1001; //initialize flash pointer
// for (i=0;i<count;i++)
// {
// *Flash_ptr++=array[i]; //write value to flash
// }
// FCTL1=FWKEY; //Clear WRT bit
// FCTL3=FWKEY+LOCK;// Set LOCK bit

   //switch(shuju)///  switch(RXBUF0)//{//case 0x00:// if (TXBUF0=0x00)// if (shuju==0x00)// {//tmp=12000;//      m=5;//    break;// m++;//tmp--;//  }//if (TXBUF0=0x01)// if (shuju==0x01)//{//tmp=1200;// case 0x01://m=10;//break;// tmp++;// }
//if(TXBUF0=0X02)//  if (shuju==0x02)

// {
// tmp=5000;
//tmp=tmp;
//case 0x02:
//m=25;
//break;
// }
// if(TXBUF0=0X03)
// if (shuju0x03)
// {
//tmp=20000;
//tmp=tmp;
// case 0x03:
// m=40;
// break;
// }
// if(TXBUF0=0X04)
// if (shuju0x04)
//{
// tmp=100;
//tmp=tmp;
// case 0x04:
// m=50;
// break;
// }
// if (shuju==0x05)
// {
//tmp=50000;
//tmp=tmp;
// case 0x05:
// m=100;
// break;
// default:
// m=0;
// break;
//}
//}
}
}

/*******************************************
函数名称:Timer_A
功 能:定时器A的中断服务函数,在这里通过标志
控制流水灯的流动方向和流动速度
参 数:无
返回值 :无
********************************************/
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
//if(flag == 0)
// {
//P2OUT = ~(0x80>>(i++)); //灯的点亮顺序D8 -> D1
// P2OUT =~(0x80>>4);
// while (!(IFG1 & UTXIFG0)); //等待以前的字符发送完毕
// TXBUF0 = RXBUF0; //将收到的字符发送出去

//P2OUT &= ~0x01;
P2OUT &= ~0x3F;
// P2OUT =~(0x3F);
// delay(tmp);
Delay400ms( m);
//delay(12000);
// P2OUT =~(0x00>>1);
P2OUT =~(0x00);
//delay(12000);
// delay(tmp);
Delay400ms( m);
P1OUT =~(0x3F);
// delay(12000);
//delay(tmp);
Delay400ms( m);
P1OUT =~(0x00);
//delay(12000);
// delay(tmp);
Delay400ms( m);
//delay(12000);
P4OUT =~(0x3F);
// delay(12000);
Delay400ms( m);
//delay(tmp);
P4OUT =~(0x00);
// delay(12000);
//delay(tmp);
Delay400ms( m);
P5OUT =~(0x3F);
//delay(12000);
// delay(tmp);
Delay400ms( m);
P5OUT =~(0x00);
// delay(12000);
//delay(tmp);
Delay400ms( m);
P6OUT =~(0x3F);
//delay(12000);
//delay(tmp);
Delay400ms( m);
P6OUT =~(0x00);
// delay(12000);
Delay400ms( m);
// delay(tmp);
//}
// else if(flag == 1)
// {
// P2OUT = ~(0x01<<(i++)); //灯的点亮顺序D1 -> D8
// }
// else
// {
// if(dir) //灯的点亮顺序 D8 -> D1,D1 -> D8,循环绕圈
// {
// P2OUT = ~(0x80>>(i++));
// }
// else
// {
// P2OUT = ~(0x01<<(i++));
// }
// }
//
// if(i == 8)
// {
// i = 0;
// dir = ~dir;
// }

// j++;
// if(j == 40)
// {
// i = 0;
// j = 0;
// flag++;
// if(flag == 4) flag = 0;
// switch(speed)
// {
// case 0:
// TACTL &=~ (ID0 + ID1);
// TACTL |= ID_3;
// break;
// case 1:
// TACTL &=~ (ID0 + ID1);
// TACTL |= ID_2;
// break;
// case 2:
// TACTL &=~ (ID0 + ID1);
// TACTL |= ID_1;
// break;
// case 3:
// TACTL &=~ (ID0 + ID1);
// TACTL |= ID_0;
// break;
// default:
// break;
// }
// if(flag != 3) speed++;
// if(speed == 4) speed = 0;
//}
}
/*******************************************
函数名称:Delay5ms
功 能:延时约5ms
参 数:无
返回值 :无
*/
void Delay5ms(void)
{
uint i=40000;
while (i != 0)
{
i–;
}
}
/

函数名称:Delay400ms
功 能:延时约400ms
参 数:无
返回值 :无
********************************************/
void Delay400ms(uint m)
{
//uchar i=50;
uint j;

while(m--)
{//j=7269;j=1000;while(j--);
}

}
/*******************************************
函数名称:delay
功 能:延时约15ms,完成消抖功能
参 数:无
返回值 :无
********************************************/
void delay(uint tmp)
{
// uint tmp;

// for(tmp = 12000;tmp > 0;tmp–);
for(tmp =tmp;tmp > 0;tmp–);
}
/*******************************************
函数名称:UART0_RXISR
功 能:UART0的接收中断服务函数,在这里唤醒
CPU,使它退出低功耗模式
参 数:无
返回值 :无
********************************************/
#pragma vector = UART0RX_VECTOR
__interrupt void UART0_RXISR(void)
{
while (!(IFG1 & UTXIFG0)); //等待以前的字符发送完毕
TXBUF0 = RXBUF0; //将收到的字符发送出去
shuju=RXBUF0;
switch(RXBUF0)
{
case 0x00:
// if (TXBUF0=0x00)
// if (shuju==0x00)
// {
//tmp=12000;
m=5;
break;
// m++;
//tmp–;

   //  }//if (TXBUF0=0x01)// if (shuju==0x01)//{//tmp=1200;case 0x01:m=10;break;// tmp++;// }
//if(TXBUF0=0X02)//  if (shuju==0x02)

// {
// tmp=5000;
//tmp=tmp;
case 0x02:
m=25;
break;
// }
// if(TXBUF0=0X03)
// if (shuju0x03)
// {
//tmp=20000;
//tmp=tmp;
case 0x03:
m=40;
break;
// }
// if(TXBUF0=0X04)
// if (shuju0x04)
//{
// tmp=100;
//tmp=tmp;
case 0x04:
m=50;
break;
// }
// if (shuju==0x05)
// {
//tmp=50000;
//tmp=tmp;
case 0x05:
m=100;
break;
default:
m=0;
break;
}

    // tmp=TXBUF0;

// LPM1_EXIT; //退出低功耗模式
}

图片

MSP430单片机串口控制5路PWM频率变化程序相关推荐

  1. 树莓派控制16路PWM输出的PCA9685模块

    树莓派控制16路PWM输出的PCA9685模块 1.PCA9685 1.1简介 采用I2C通信,内置了PWM驱动器和一个时钟,不需要不断发送信号占用单片机资源 支持16路PWM输出,每路12位分辨率( ...

  2. 单片机串口控制树莓派3B播放HDMI视频,omxplayer,

    使用树莓派3B通过HDMI播放视频.并且使用串口去控制播放哪个视频. 1. 问题解耦 单片机串口控制树莓派3B播放视频? = 树莓派播放视频 + 单片机串口传参控制树莓派 树莓派播放视频:树莓派播放视 ...

  3. 基于51单片机51wifi控制4路继电器开关定时功能

    项目简介: 一款基于STC89C52单片机的手机WIFI控制4路继电器的插座控制器设计.通过安装手机APP实现手机和设备的互联,只要手机发送相应的指令,继电器将会按照相关指令进行操作该设计极大的方便了 ...

  4. 51单片机PCA9685控制16路舵机(代码可直接使用)

    51单片机PCA9685控制16路舵机 /**************************************************************************PCA96 ...

  5. 关于MSP430单片机串口通信数据丢失问题

    研究摸索了接近一个星期,把所遇到的问题写出来以供参考. 最开始看一个官方的串口收发数据的示例,然后自己操作后收发数据老是会丢失一个数据,然后看User's Guide,取消了函数收发的方法直接用寄存器 ...

  6. 51单片机STC89C52控制LED闪烁(将延时程序写成子函数有形参)

    /*-----------------------包含头文件区域-------------------------*/ #include<reg52.h> //单片机头文件 /*----- ...

  7. 控制AVR单片机5路PWM波形

    控制AVR单片机5路PWM波形 控制AVR单片机5路PWM波形 现开发了单片机控制5路PWM波形,也可以同时控制15路直流三色灯板,按触摸屏顺序点亮的电路和程序,供大家参考. 电路为 单片机ATMEG ...

  8. 单片机拟真电路图软件_基于MSP430单片机设计的高效数控直流电源及其测试方法与流程...

    本发明涉及直流电源 技术领域: ,具体涉及一种基于MSP430单片机设计的高效数控直流电源及其测试方法. 背景技术: :电压电流源是很多电子仪器设备研制的关键设计之一,电源在工作时产生的变动或误差,将 ...

  9. 树莓派python控制舵机_使用树莓派控制16路舵机驱动板(pca9685)

    使用树莓派控制16路舵机驱动板(pca9685) 在树莓派上,可以通过RPI.GPIO方便地输出PWM进行舵机控制. 使用RPI.GPIO 创建一个 PWM 实例: 1 p =GPIO.PWM(cha ...

最新文章

  1. 在线作图丨高级的微生物分析——在线做Variance Partitioning Analysis(VPA分析)
  2. 宁波机器人餐厅需要预约吗_拍婚纱照需要预约吗 预约婚纱照需要注意哪些问题...
  3. 如何解决error message Data cannot be maintained for set type COM_TA_R3_ID
  4. 怎么在activity里面操作listView的item里的组件的点击事件
  5. 做咨询以来,从来坚守一个词——“系统”
  6. assertion: 18 { code: 18, ok: 0.0, errmsg: auth fails }
  7. css的checkbox样式,css自定义checkbox样式的方法总结
  8. Java教学视频全集,活见久
  9. 6、厘米换算英尺英寸
  10. 启动mongodb报错:waiting for connections on port 27017 解决方案
  11. 计算机打字多少,怎么快速练习计算机打字?
  12. css原地颠倒 h5_H5案例分享:CSS3 reflect倒影
  13. 玩转 MATLAB 附加功能/硬件支持包安装
  14. Centos 7 grub 菜单加密以及取消加密
  15. 上网行为管理_上网行为管理如何预防以及屏蔽勒索病毒攻击
  16. JavaWeb、前端三剑客
  17. 没有网络,也能上网-基于USSD技术的信息服务
  18. 榆熙教育电商学院:拼多多为何做“百亿补贴”?都带来了什么?
  19. JavaScript 高阶函数
  20. [转贴]LINUX新手入门及安装配置FAQ

热门文章

  1. cesium实现给三维建筑物贴图
  2. 项目管理:硬件类项目完整开发流程
  3. Linux系统中计划任务及其相关命令操作(at和crontab)
  4. 莫烦pytorch学习之问题记录与总结
  5. linux下清理信号量,Linux下进程间通信方式——信号量(Semaphore)
  6. ubuntu下安装和配置Qt5.12.8
  7. amchart使用总结
  8. R-概率统计与模拟(三)变换均匀分布对特定分布进行抽样
  9. goZero入门使用及注意事项
  10. 网络计划--时间参数的计算和优化