串口调试助手: 串口号;波特率 ;校验位(无校验); 数据位(8);停止位(1)(后三位默认即可)
USCI——Ax模块:UART、SPI模式
USCI——Bx模块
UART模式:
在异步模式中,USCI_Ax模块通过两个外部引脚,UCAxRXD(发送数据线)和UCAxTXD(接受数据线)(记得共地),把MSP430和一个外部系统连接起来。 当UCSYNC位被清零时就选择了UART模式
设置波特率
UCAxCTL0,USCI_Ax寄存器
UACxBR0,USCI_Ax波特率控制寄存器
定时器模式选择
计数模式
四种
向上
连续:即使时间固定值
加减:定时周期为2倍
工作模式
两种:捕捉/比较
三种用途:定时、产生PWM波(脉冲宽度调制)、测量频率(两个信号时间间隔)
<一>定时功能
1、查询实现定时功能
/*查询实现定时功能*/
#include #include "stdint.h" /* * main.c */ int main(void) { uint8_t cnt = 0; //定义一个变量 WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer /*配置DCO频率为1MHz*/ DCOCTL = CALDCO_1MHZ; BCSCTL1 = CALBC1_1MHZ; /*设置P1.6为输出*/ P1DIR |= BIT6; /*设置时钟源为SMCLK*/ TA1CTL |= TASSEL_2; // TASSEL_2为选择SMCLK /*TACLK默认为A0;A1要打出来*/ /*设置工作模式为Up Mode*/ TA1CTL |= MC_1; //Up Mode模式下,16bit Timer计数器 TAR会从0递增到TACCR0,然后回到0,重复这个过程 /*设置定时间隔*/ TA1CCR0 = 49999; //1MHz 计 50000个数,1/1MHz * 50000 20Hz 0.05s /*采用TACCR0 CCIFG标志位则产生+1个数即50000;TAIFG标志位则是本身*/ /*默认比较工作模式,捕捉模式不能用来计时*/ while(1) { if(TA1CTL & TAIFG) //TAIFG为标志位;查询方式实现计数 { cnt ++; //计数器变量 TA1CTL &= ~TAIFG; //清除标志位 if(cnt == 20) //0.05s * 20 = 1s { P1OUT ^= BIT6; cnt = 0; } } } return 0; } 2、中断法实现定时功能 #include #include "stdint.h" /* * main.c */ uint8_t flag = 0; int main(void) { WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer InitSystemClock(); InitUART(); /*设置P1.6为输出*/ P1DIR |= BIT6; /*设置时钟源为SMCLK*/ TA1CTL |= TASSEL_2; /*设置工作模式为Up Mode*/ TA1CTL |= MC_1; /*设置定时间隔*/ TA1CCR0 = 49999;// 50ms 1MHz 1/1MHz 1ns 50ms / 1ns = 50000 50000 - 1 = 49999 /*开启TAIFG中断,相当于一个溢出中断*/ TA1CTL |= TAIE; /*打开全局中断*/ __bis_SR_register(GIE); while(1) { if(flag == 1) { flag = 0; P1OUT ^= BIT6; PrintTime(currenttime); } } return 0; } <二>PWM波的输出 利用比较模式(CAP=0)TAR计数到TACCRx时,输出管脚由内部信号EQUx决定 输出单元 几种模式:输出/置位set/翻转goggle/复位reset(若为两个描述则 捕捉比较寄存器/最大值,可用于调整占空比,产生PWM波;若为一个描述则 捕捉比较寄存器) 捕捉比较寄存器TACCRx从对应管脚x输出 代码实例 /*输出产生PWM波*/ #include /* * main.c */ int main(void) { unsigned int cnt = 0; WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer /*配置DCO频率为1MHz*/ DCOCTL = CALDCO_1MHZ; BCSCTL1 = CALBC1_1MHZ; /*初始化P1.6为输入*/ P1DIR &= ~BIT6; /*设置时钟源为SMCLK*/ TA1CTL |= TASSEL1; /*设置工作模式为Up&Down*/ TA1CTL |= MC0|MC1; /*设置TA1CCR0为0x00FF*/ TA1CCR0 = 0x00FF; /*设置TA1CCR2为0x00FF*/ TA1CCR2 = 0x00FF; //占空比(TACCR0 - TACCR2) / TACCR0(由于是up/down模式,看半个周期即可);频率=SMCLK/(TACCR0+1)/2 /*改变占空比可以改变TACCR0/TACCR2,但改变前者会影响频率,故改变后者*/ /*设置为比较模式*/ TA1CCTL0 &= ~CAP; TA1CCTL2 &= ~CAP; /*设置比较输出模式*/ TA1CCTL2 |= OUTMOD_6; //模式6为Toggle/Set /*设置IO复用*/ P2SEL |= BIT5; P2DIR |= BIT5; /*到此为止输出占空比为0%*/ while(1) { for(cnt = 0;cnt < 0x00FF;cnt ++) { TA1CCR2 = cnt; __delay_cycles(5000); //值增大,占空比减小 } for(cnt = 0x00FF;cnt > 0;cnt --) { TA1CCR2 = cnt; __delay_cycles(5000); //值减小,占空比增加 } } return 0; }
上一篇:基于MSP430G2553的模拟风扇控制系统
下一篇:MSP430笔记4——定时器
推荐阅读最新更新时间:2024-11-04 17:41
设计资源 培训 开发板 精华推荐
- AM3G-4815DZ ±15V 3 瓦 DC/DC 转换器的典型应用
- MC33074ADR2G 桥式电流放大器的典型应用
- AD5347 并行接口、八路电压输出、10 位 DAC 的典型应用
- (个人-最小系统)STM32F103C8
- 使用 Analog Devices 的 LTC1261LCS8-4 的参考设计
- 大原理图
- NCD57200EVB:NCD57200 评估板
- EVAL-AD5541/42EB,AD5541A/AD5542A 16 位高精度数模转换器评估板
- 电源设计使用 HIGHCORE 引脚为低功耗、高性能应用的嵌入式 MCU 系列切换 VDD_CORE 双模态
- 较好的VC++集运动控制卡,CAD导图,手工绘图,的源代码和软件