430上机实验Word格式文档下载.docx
- 文档编号:22768113
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:61
- 大小:29.02KB
430上机实验Word格式文档下载.docx
《430上机实验Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《430上机实验Word格式文档下载.docx(61页珍藏版)》请在冰豆网上搜索。
例2:
定时器A增计数模式举例。
ACLK=32KHZ,MCLK=SMCLK=DCOCLK=800k,定时器A工作在增计数模式,利用CCR0中断在P3.1端口输出20Hz的方波。
WDTCTL=WDTPW+WDTHOLD;
//停止看门狗
P3DIR|=0x06;
//P3.1设置为输出
CCTL0=CCIE;
//CCR0中断允许
CCR0=20000;
TACTL=TASSEL_2+TACLR+MC_1;
//定时器A时钟源为SMCLK,计数器清零,增计数模式
_BIS_SR(LPM0_bits+GIE);
//EnterLPM0w/interrupt
#pragmavector=TIMERA0_VECTOR
__interruptvoidTimer_A(void)
P3OUT^=0x02;
//P3.1取反
例3:
定时器A连续计数模式举例。
ACLK=32kHZ,MCLK=SMCLK=DCOCLK=800k,定时器A工作在连续计数模式,利用CCR0中断在P3.1端口输出10Hz的方波,同时利用定时器A溢出中断在P3.2端口输出6Hz的方波。
//P3.1、P3.2设置为输出。
TACTL=TASSEL_2+TACLR+MC_2+TAIE;
//定时器A时钟源为SMCLK,计数器清零,连续计数模式,溢出中断允许。
CCR0+=20000;
//CCR0置入计数值
__interruptvoidTimer_A1(void)
switch(TAIV)
P3OUT^=0x04;
//P3.2取反
例4:
定时器A增减计数模式举例。
ACLK=32kHZ,MCLK=SMCLK=DCOCLK=800k,定时器A工作在增减计数模式,
利用CCR0中断在P3.1端口输出20Hz的方波,同时利用定时器A溢出中断在P3.2端口输出40Hz的方波
TACTL=TASSEL_2+TACLR+MC_3+TAIE;
//定时器A时钟源为SMCLK,计数器清零,增减计数模式,溢出中断允许。
P3OUT^=0X04;
__interruptvoidTimer_A(void)
例5:
捕获/比较模块之捕获模式举例。
ACLK=32KHZ,MCLK=SMCLK=DCOCLK=800k,经8分频后作为定时器A的时钟源,定时器A工作在连续计数模式。
由软件循环产生方波信号,信号同时接入P1.1(CCI0A)和P1.2(CCI1A),由CCR1获取信号周期,CCR0确定信号占空比
unsignedintlastCCR0,lastCCR1
unsignedintj;
//测得信号周期为j*(1/100K)
unsignedintk;
//测得信号占空比为:
k/j
TACTL=TASSEL_2+ID_3+MC_2+TACLR;
//MCLK,8分频,连续模式,计数器清空
CCTL0=CM_3+CCIS_0+SCS+CAP+CCIE;
//上升沿和下降沿均捕获,异步捕获,捕获模式,捕获中断允许
CCTL1=CM_1+CCIS_1+SCS+CAP+CCIE;
//上升沿,异步,捕获,捕获中断允许
j=0;
k=0;
lastCCR0=0;
lastCCR1=0;
P1DIR=0x00;
P1SEL=0xff;
P3DIR=0xFF;
P3OUT=0x00;
for(i=0;
i<
10000;
i++)
//产生捕获信号源
#pragmavector=TIMERA1_VECTOR//定时器中断捕获
P3OUT^=0x04;
j=CCR1-lastCCR1;
//两次上升沿间隔
lastCCR1=CCR1;
#pragmavector=TIMERA0_VECTOR//CCR0捕获产生中断
__interruptvoidTIMER_cc(void)
//如果输入信号为低电平,则表明是下降沿产生的捕获,前一次捕获的是上升沿,这一次捕获和上一次捕获之差即为高电平的时间。
if(SCCI0==0)
k=CCR0-lastCCR0;
//上下升沿间隔
lastCCR0=CCR0;
例6:
捕获/比较模块之比较模式举例。
ACLK=32KHZ,MCLK=SMCLK=DCOCLK=800k,经8分频后作为定时器A的时钟源。
由捕获/比较模块0产生10Hz的方波并由P3.3输出,由捕获/比较模块1输出20Hz的方波并由P3.2输出
TACTL=TASSEL_2+ID_3+MC_2+TACLR;
//MCLK,8分频,连续模式,计数器清零CCTL0=CCIE;
//比较器模式
CCTL1=CCIE;
CCR0=5000;
CCR1=10000;
);
#pragmavector=TIMERA1_VECTOR//定时器比较器中断CCR1=TAR
//P3.2
CCR1+=10000;
//改变比较条件
//P3.1
#pragmavector=TIMERA0_VECTOR//当TAR=CCR0产生中断
P3OUT^=0x08;
//P3.34.9Hz
CCR0+=20000;
//改变比较条件
例7:
定时器A输出单元实验。
ACLK=TACLK=LFXT1=32768,利用Timer_A输出周期为512/32768=15.625ms、占空比分别为75%和25%的PWM矩形波
msp430x44x.h>
WDTCTL=WDTPW+WDTHOLD;
TACTL=TASSEL0+TACLR;
//ACLK,清除TAR
CCTL0=0x00;
//默认值,比较器模式
CCTL1=0x00;
CCR0=512-1;
//PWM周期
CCTL1=OUTMOD_7;
CCR1=384;
//占空比384/512=0.75
CCTL2=OUTMOD_7;
CCR2=128;
//占空比128/512=0.25
P1DIR|=0x04;
//P1.2输出
P1SEL|=0x04;
//P1.2TA1out
P2DIR|=0x01;
//P2.0输出?
?
P2SEL|=0x01;
//P2.0TA2out
TACTL|=MC0;
//Timer_A增计数模式
for(;
_BIS_SR(LPM0_bits);
//进入LPM0
例:
FLASH模块操作举例?
信息段A、B的擦除和写入操作。
先将内存中double型数组的数据和int型数据保存到信息段A中,在将其从信息段A拷贝到信息段B中
doubledata[8];
intadd;
voidwrite_SegA(void);
voidcopy_A2B(void);
FCTL2=FWKEY+FSSEL0+FN0;
//初始化时钟
for(inti=0;
i<
8;
i++)//初始化double型数组数据
data[i]=i;
add=8;
//初始化unsignedint型数据
voidwrite_SegA(void)
double*Flash_data_ptr;
//double型Flash指针
unsignedint*Flash_int_ptr;
//unsigned型Flash指针
unsignedinti;
Flash_data_ptr=(double*)0x1080;
FCTL1=FWKEY+ERASE;
//允许擦除
FCTL3=FWKEY;
//解锁
*Flash_data_ptr=0;
//空写,启动擦除
FCTL1=FWKEY+WRT;
//允许写
for(i=0;
i<
8;
i++);
*Flash_data_ptr++=data[i];
Flash_int_ptr=(unsignedint*)Flash_data_ptr;
*Flash_int_ptr=add;
//写入unsignedint型指针
FCTL1=FWKEY;
FCTL3=FWKEY+LOCK;
//锁定
}
voidCopy_A2B(void)
double*Flash_data_ptrA,*Flash_data_ptrB;
unsignedint*Flash_int_ptrA,*Flash_int_ptrB,i;
Flash_data_ptrA=(double*)0x1080;
Flash_data_ptrB=(double*)0x1000;
*Flash_data_ptrB=0;
i++)
*Flash_data_ptrB++=*Flash_data_ptrA++;
Flash_int_ptrA=(unsignedint*)Flash_data_ptrA;
Flash_int_ptrB=(unsignedint*)Flash_data_ptrB;
*Flash_int_ptrB=*Flash_int_ptrA;
例1MSP430F149串口0实验,
实现在接收中断中将收到的字符发送出去,USART模块时钟源为32768Hz的低频时钟ACLK,波特率为2400,8位数据位
volatileunsignedinti;
P3SEL|=0x30;
//P3.4,5=USART0TXD/RXD
ME1|=UTXE0+URXE0;
//使能USART0TXD/RXD
UCTL0|=CHAR;
//8位数据位
UTCTL0|=SSEL0;
//UCLK=ACLK
UBR00=0x0D;
//32k/2400-13.65
UBR10=0x00;
//
UMCTL0=0x6B;
//波特率调整
UCTL0&
=~SWRST;
//初始化USART状态
IE1|=URXIE0;
//使能USART0RX中断
//进入低功耗模式,开中断
#pragmavector=UART0RX_VECTOR//无法进入中断?
?
__interruptvoidusart0_rx(void)
while(!
(IFG1&
UTXIFG0));
//检测USART0接收缓存是否准备好
TXBUF0=RXBUF0;
//RXBUF0→TXBUF0
例2MSP430F149串口0实现双向串口通信,
在接收中断接收一个长度为8的字符串,在整个字符串接收完成之后再将其通过串口发送出去。
UCLK0为1M的ACLK,波特率为9600,8位数据位。
staticcharstring1[8];
chari,j=0;
P3SEL=0x30;
//P3.3,4=USART0TXD/RXD
//8位数据位,SWRST=1
UBR00=0x03;
//9600from1Mhz
UMCTL0=0x4A;
//波特率调整
IE1|=URXIE0+UTXIE0;
//使能USART0RX/TX中断
IFG1&
=~UTXIFG0;
//清除POR造成的UTXIFG0置位
//UART0TXISR
#pragmavector=UART0TX_VECTOR
__interruptvoidusart0_tx(void)
if(i<
sizeof(string1))
TXBUF0=string1[i++];
//UART0RXISR
#pragmavector=UART0RX_VECTOR
string1[j++]=RXBUF0;
if(j>
sizeof(string1)-1)
i=0;
例1利用比较器A的中断,
实现当输入P2.3的电压高于0.5Vcc时,使P1.2置位,当P2.3的电压低于0.5Vcc时,使P1.2复位。
#include"
MSP430x14x.h"
P2SEL|=0x08;
//P2.3设置为比较器输入CA1
//P1.2设置为输出
P1OUT&
=~0x04;
//P1.2输出低电平
CACTL1=CARSEL+CAEX+CAREF1+CAON;
//0.5Vcc加到正端,打开比较器
CACTL2=P2CA1;
//P2.3加到比较器负端。
while
(1)
if((CAOUT&
CACTL2)<
>
CAOUT)//检查比较器输出,若为0则P1.2输出高
P1OUT|=0x40;
//电平,否则输出低电平
else
=~0x80;
MSP430intrinscis.h
/**************************************************/
#ifndef__INTRINSICS_H
#define__INTRINSICS_H
#ifndef_SYSTEM_BUILD
#pragmasystem_include
#endif
#pragmalanguage=save
#pragmalanguage=extended
/*
*Thereturnvalueof"
__get_interrupt_state"
.
*/
typedefunsignedshortistate_t;
#ifdef__cplusplus
extern"
C"
__intrinsicvoid__no_operation(void);
__intrinsicvoid__enable_interrupt(void);
__intrinsicvoid__disable_interrupt(void);
__intrinsicistate_t__get_interrupt_state(void);
__intrinsicvoid__set_interrupt_state(istate_t);
__intrinsicvoid__op_code(unsignedshort);
__intrinsicunsignedshort__swap_bytes(unsignedshort);
__intrinsicvoid__bic_SR_register(unsignedshort);
__intrinsicvoid__bis_SR_register(unsignedshort);
__intrinsicunsignedshort__get_SR_register(void);
__intrinsicvoid__bic_SR_register_on_exit(unsignedshort);
__intrinsicvoid__bis_SR_register_on_exit(unsignedshort);
__intrinsicunsignedshort__get_SR_register_on_exit(void);
__intrinsicunsignedshort__bcd_add_short(unsignedshort,
unsignedshort);
__intrinsicunsignedlong__bcd_add_long(unsignedlong,
unsignedlong);
__intrinsicunsignedlonglong__bcd_add_long_long(unsignedlonglong,
unsignedlonglong);
/*
*Supportforefficientswitch:
es.E.g.switch(__even_in_range(x,10))
*
*Notethatthevaluemustbeevenandintherangefrom0to
*__bound,inclusive.Nocodewillbegenerated
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 430 上机 实验