MSP430单片机串口控制5路PWM频率变化程序
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频率变化程序相关推荐
- 树莓派控制16路PWM输出的PCA9685模块
树莓派控制16路PWM输出的PCA9685模块 1.PCA9685 1.1简介 采用I2C通信,内置了PWM驱动器和一个时钟,不需要不断发送信号占用单片机资源 支持16路PWM输出,每路12位分辨率( ...
- 单片机串口控制树莓派3B播放HDMI视频,omxplayer,
使用树莓派3B通过HDMI播放视频.并且使用串口去控制播放哪个视频. 1. 问题解耦 单片机串口控制树莓派3B播放视频? = 树莓派播放视频 + 单片机串口传参控制树莓派 树莓派播放视频:树莓派播放视 ...
- 基于51单片机51wifi控制4路继电器开关定时功能
项目简介: 一款基于STC89C52单片机的手机WIFI控制4路继电器的插座控制器设计.通过安装手机APP实现手机和设备的互联,只要手机发送相应的指令,继电器将会按照相关指令进行操作该设计极大的方便了 ...
- 51单片机PCA9685控制16路舵机(代码可直接使用)
51单片机PCA9685控制16路舵机 /**************************************************************************PCA96 ...
- 关于MSP430单片机串口通信数据丢失问题
研究摸索了接近一个星期,把所遇到的问题写出来以供参考. 最开始看一个官方的串口收发数据的示例,然后自己操作后收发数据老是会丢失一个数据,然后看User's Guide,取消了函数收发的方法直接用寄存器 ...
- 51单片机STC89C52控制LED闪烁(将延时程序写成子函数有形参)
/*-----------------------包含头文件区域-------------------------*/ #include<reg52.h> //单片机头文件 /*----- ...
- 控制AVR单片机5路PWM波形
控制AVR单片机5路PWM波形 控制AVR单片机5路PWM波形 现开发了单片机控制5路PWM波形,也可以同时控制15路直流三色灯板,按触摸屏顺序点亮的电路和程序,供大家参考. 电路为 单片机ATMEG ...
- 单片机拟真电路图软件_基于MSP430单片机设计的高效数控直流电源及其测试方法与流程...
本发明涉及直流电源 技术领域: ,具体涉及一种基于MSP430单片机设计的高效数控直流电源及其测试方法. 背景技术: :电压电流源是很多电子仪器设备研制的关键设计之一,电源在工作时产生的变动或误差,将 ...
- 树莓派python控制舵机_使用树莓派控制16路舵机驱动板(pca9685)
使用树莓派控制16路舵机驱动板(pca9685) 在树莓派上,可以通过RPI.GPIO方便地输出PWM进行舵机控制. 使用RPI.GPIO 创建一个 PWM 实例: 1 p =GPIO.PWM(cha ...
最新文章
- 在线作图丨高级的微生物分析——在线做Variance Partitioning Analysis(VPA分析)
- 宁波机器人餐厅需要预约吗_拍婚纱照需要预约吗 预约婚纱照需要注意哪些问题...
- 如何解决error message Data cannot be maintained for set type COM_TA_R3_ID
- 怎么在activity里面操作listView的item里的组件的点击事件
- 做咨询以来,从来坚守一个词——“系统”
- assertion: 18 { code: 18, ok: 0.0, errmsg: auth fails }
- css的checkbox样式,css自定义checkbox样式的方法总结
- Java教学视频全集,活见久
- 6、厘米换算英尺英寸
- 启动mongodb报错:waiting for connections on port 27017 解决方案
- 计算机打字多少,怎么快速练习计算机打字?
- css原地颠倒 h5_H5案例分享:CSS3 reflect倒影
- 玩转 MATLAB 附加功能/硬件支持包安装
- Centos 7 grub 菜单加密以及取消加密
- 上网行为管理_上网行为管理如何预防以及屏蔽勒索病毒攻击
- JavaWeb、前端三剑客
- 没有网络,也能上网-基于USSD技术的信息服务
- 榆熙教育电商学院:拼多多为何做“百亿补贴”?都带来了什么?
- JavaScript 高阶函数
- [转贴]LINUX新手入门及安装配置FAQ