Transcript 单片机部分
MSP340 LaunchPad介绍
LaunchPad 是一款
适用于TI的
MSP430G2xx 系列
产品的完整开发解
决方案,可支持多
达20 个引脚,提供
板上Flash 仿真工
具,以直接连接至
PC 轻松进行编程、
调试和评估。
目录
一、基本时钟系统
二、通用IO
三、中断
四、定时器
五、ADC10
六、课程软件任务介绍
一、时钟系统
LAUNCHPAD时钟系统包括:VLO、LFXT、DCO
• 超低功耗/低频振荡器 (VLO)
– 4 – 20kHz (典型值12kHz)
– 500nA 待机流耗
– 0.5%/°C and 4%/V 漂移
• 外接晶体振荡器(LFXT1)
– 片内可编程负载电容
– 故障保护 OSC_Fault
– 脉冲滤波器
• 数字控制振荡器(DCO)
– 0-to-16MHz
– + 3% 容差
– 出厂校准(Flash I.M.)
VLO
Min. Puls
Filter
ACLK
Peripherals
辅助时钟
32768Hz
OSC_Fault
MCLK
CPU
主系统时钟
16MHz
DCO
SMCLK
Peripherals
子系统时钟
上电后:
MCLK 和 SMCLK 由DCOCLK 提
供(约1.1 MHz)
ACLK 由 LFXT1CLK 提供(LF
模式,6pF内部负载电容)
设置时钟涉及到寄存器BCSCTL1、BCSCTL2的设置,具
体见用户说明说,下面举例设置DOC为1MHz及系统主时
钟MCLK。
// 设置DCO为1MHz
BCSCTL1 = CALBC1_1MHZ;
DCOCTL
= CALDCO_1MHZ;
// 设定 MCLK
BCSCTL2 |= SELM_1
+ DIVM_3; // 设置 MCLK
对MCLK的时钟源进行选择
SELM_0: MCLK选择DCOCLK
对MCLK,即指令运行的时钟源进行分频
SELM_1 : MCLK选择DCOCLK
DIVM_1: MCLK=1M/2
SELM_2 : MCLK选择XT2CLK/LFXTCLK
DIVM_2: MCLK=1M/4
SELM_3: MCLK选择LFXTCLK
DIVM_3: MCLK=1M/8
DIVM_0: MCLK=1M
二、通用IO
1、P口端口寄存器:
(1)、PxDIR 输入/输出方向寄存器
(0:输入模式 1:输出模式)
(2)、PxIN 输入寄存器
输入寄存器是只读寄存器,用户不能对其写入,只能通过读取该寄存器的
内容知道I/O口的输入信号。
(3)、PxOUT 输出寄存器
寄存器内的内容不会受引脚方向改变的影响。
(4)、PxIFG 中断标志寄存器
(0:没有中断请求 1:有中断请求)
该寄存器有8个标志位,对应相应的引脚是否有待处理的中断请求;
这8个中断标志共用一个中断向量,中断标志不会自动复位,必须软件复
位;
外部中断事件的时间必须>=1.5倍的MCLK的时间,以保证中断请求被接
受;
(5)、PxIES 中断触发沿选择寄存器
(0:上升沿中断
1:下降沿中断)
(6)、PxSEL 功能选择寄存器
(0:选择引脚为I/O端口 1:选择引脚为外围模块功能)
(7)、PxREN 上拉/下拉电阻使能寄存器
(0:禁止 1:使能)
2、P口端口功能示意图:
3、基本操作:
(1)、所有P口都可作为通用IO口使用
(2)、所有P口都可进行字节操作和位操作
按字节操作:
例:
P1DIR=0xff; //将P1口作为输出口
PIOUT=0x20; // P1口输出0x20
P1DIR=0x00; //将P1口作为输入口
data=P1IN
//读取P1口外部输入值
按位操作:
例: P1DIR=BIT0;
//将P1.0作为输出口
P1OUT|=BIT0; //P1.0输出1
P1OUT&=~BIT0; //P1.0输出0
P1DIR&=~BIT0 //将P1.0口作为输入
data=P1IN&BIT0 //读取P1.0口外部输入值
三、中断
1、中断源:
外部中断:P1、P2、定时器中断、看门狗定时器中断、串口中断、A/D转换
中断、比较器中断。
2、中断的 一般设置:
(1)、打开、关闭局部中断:
打开局部中断一般是给想关的特殊功能寄存器相关位置1
以P1口外部中断为例:
打开局部中断:
P1IE|=BIT0;//打开P1.0外部中断 ,BIT0的值为0x01,即把P1IE的第一位置1
关闭局部中断一般是给想关的特殊功能寄存器相关位置0
同样以P1口外部中断为例:
关闭局部中断:
P1IE&=~BIT0;//关闭P1.0外部中断
(2)、打开、关闭全局中断:
_EINT();//打开总中断,相当于51的EA=1;
_DINT();//关闭总中断,相当于51的EA=0;
(3)、各中断向量Interrupt Vectors:
•
•
•
•
•
•
•
•
•
PORT1_VECTOR
PORT2_VECTOR
ADC10_VECTOR
TIMER0_VECTOR
TIMER0_A0_VECTOR
TIMER0_A1_VECTOR
TIMER1_A0_VECTOR
TIMER1_A1_VECTOR
WDT_VECTOR
(4)、中断应用程序举例(外部中断):
void interrupt_initial()
{
P1DIR&=~BIT7;
//P1.7为输入
P1IE|=0x80;
//P1.7中断允许
P1IES|=0x00; //P1.7上升沿触发
P1IFG=0;
//P1.7中断标志清除,对于多源中断必须先清中断标志再打开中断
_EINT();
//总中断允许
}
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
P1IFG&=~BIT7; //P1.7中断标志清除
/*在此写中断服务子程序*/
}
•
#pragma vector - 下面的函数是一个用于所列矢量的中断
• __interrupt void - 识别中断名称
四、定时器
异步16位定时器/计数器
连续、递增-递减、递增计
数模式
3个捕获/比较寄存器
PWM 输出
中断向量寄存器,实现快速
中断响应
可触发DMA
多个时钟源可选
所有430均有Timer_A
16-bit Timer
TAR
TACLK
ACLK
SMCLK
INCLK
Count
Mode
Set
TAIFG
CCR0
CCR1
CCR2
Capture
Mode
CCI2A
CCI2B
GND
VCC
TACCR2
Compararator 2
CCI
SCCI
Y
A
EN
Set
CCIFG2
Output
Unit2
本次课程设计中,采用增计数模式产生PWM波
增计数模式:
捕获/比较寄存器CCR0用作Timer_A增计数模式的周
期寄存器,因为CCR0为16位寄存器,所以该模式
适用于定时周期小于65536的连续计数情况。计数器
TAR可以增计数到CCR0的值,当计数值与CCR0的
值相等时,定时器复位,并从0开始重新计数。
增计数模式:
增计数模式
0FFFFh
例程:
0h
void zengjishu()
{
TACTL=TASSEL1+TACLR; //选择计数时钟为ACLK,将计数器TAR清零
CCTL0=CCIE;
//使能中断
CCR0=200;
//计数终值,方波频率为:32768/200/2
TACTL|=MC_1;
//选择Timer_A为增计数模式
P1DIR|=BIT0;
//P1.0作为输出
_EINT();
//使能总中断
}
#pragma vertor =TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
P1OUT^=0X01; //P1.0取反
}
例程
#include"in430.h"
#include "msp430g2553.h"
static unsigned char temp = 0xaa;
void main( void )
{
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
P1DIR = 0xff;
//设定P1口为输出方式
P1OUT = 0xff;
//给P1口赋初始值
TA0CCTL0 = CCIE; //打开中断 (Timer0_A3 Capture/Compare Control 0 )
TA0CCR0 = 50000;
//设定计数变量
TA0CTL = TASSEL_2 + MC_2; //定时器选择时钟SMCLK,使用模式二连续计数方式
_EINT();
//开总中断
while(1)
{ LPM0;
} //开启低功耗模式0,进入低功耗模式,等待中断唤醒
}
#pragma vector = TIMER0_A0_VECTOR
__interrupt void time1(void)
{
temp = ~temp;
//取反
P1OUT = temp;
//P1口赋值
}
五、ADC10
一、主要特点:
1、 10位转换精度。
2、有多种时钟源可供选择,内带时钟发生器。
3、配有6个外部通道和2个内部通道。
4、内置参考电源,并且参考电压Vref有8种组合。
5、采样速度快,最快200Ks/s。
6、四种工作模式:
1、单通道单次转换模式: CONSEQ_0。
2、单通道多次转换模式: CONSEQ_2。
3、序列通道单次转换模式:CONSEQ_1 。
4、序列通道多次转换模式:CONSEQ_3。
例程:
P1SEL&=0x20;
//使能A/D通道A5;
ADC10CTL0 = ADC10SHT_1+ ADC10ON+SREF_1+REF2_5V+REFON+MSC;
// 打开ADC10内核,确定采样周期为8*ADC10OSC/2,选择内部参考电压为2.5v;
ADC10CTL1 = INCH_5+ADC10DIV_1+CONSEQ_2;
// input A5模拟信号输入选择通道A5即P1.5,设置为单通道多次转换模式,分频因子为2
ADC10AE0 |= BIT5;
// 使P1.5允许AD模拟输入信号
ADC10CTL0|=ENC;
//使能转换;
ADC10CTL0|=ADC10SC;
//开始转换;
单片机系统
本课程设计是把输入电压通过buck电路降压给锂电池充电,锂电池电压输出
端通过boost电路升压输入到逆变桥得到交流电。有三处用到单片机的地方:
buck电路降压、boost电路升压和逆变桥触发输入信号。前两者通过闭环调节
取得给定电压,逆变桥触发输入信号则是由单片机输出SPWM波。
充电部分
软件设计
定时器中断模块
设置定时器中断TIMER_A
(1) 它的工作方式和周期,此处设为使用 32位的周期定时器
TIMER1_A0,周期为 1ms。
(2) 使能定时器中断。
(3) 使能定时器
在定时器中断中,对单片机原始频率8MHz 进行8 分频,再
乘以1000 成为TIMER1-A0
的周期1ms,每触发一次中断就计数加1,当计数500 下,即
500ms 后,对转换好的采
样值进行一次处理,进行PI 调节控制输出PWM 波的占空比。
三段式充电:
SPWM
输出SPWM则通过SPWM数组表实现,数组表有足够多的数值,按照正弦
规律变化,实现正弦波的近似输出。当数字表的元素越多,精度越高。