LaunchPad(MSP430G2553)官方例程汉语注释_第1页
LaunchPad(MSP430G2553)官方例程汉语注释_第2页
LaunchPad(MSP430G2553)官方例程汉语注释_第3页
LaunchPad(MSP430G2553)官方例程汉语注释_第4页
LaunchPad(MSP430G2553)官方例程汉语注释_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、launchpad 官方例程(无修改)一切皆为2012ti杯电子设计大赛1./*/ launchpad lab2 - software toggle p1.0, 软件切换的p1.0,/ msp430g2xx2/ -/ /| xin|-/ | | |/ -|rst xout|-/ | |/ | p1.0|-led/*#include void main(void)wdtctl = wdtpw + wdthold; /停止看门狗定时器if (calbc1_1mhz = 0xff | caldco_1mhz = 0xff)while(1);/如果校准常数擦除,捕获的cpu!/ configure b

2、asic clockbcsctl1 = calbc1_1mhz; /设置范围dcoctl = caldco_1mhz;/集检查官步+调制bcsctl3 |= lfxt1s_2;/ 设置lfxt1p1dir = bit6; /p1.6输出(绿色led)p1out = 0; / led 关ifg1 &= ofifg; /清除oscfault标志bcsctl2 |=selm_1 + divm_0; /设置的mclkfor(;)p1out = bit6; / p1.6输出(绿色led)_delay_cycles(100);p1out = 0; /绿色led关闭_delay_cycles(5000);2

3、./*/ launchpad lab3 - software port interrupt service软件端口的中断服务/ msp430g2xx2/ -/ /| xin|-/ | | |/ -|rst xout|-/ /| | |/ -o-|p1.3 p1.0|-led/ |/*#include void main(void)wdtctl = wdtpw + wdthold; /停止看门狗定时器 p1dir |= bit0; /设定的p1.0输出方向p1ies |= bit3; / p1.3可高/低边p1ifg &= bit3; / p1.3 ifg 清除p1ie |= bit3; / p

4、1.3可中断启用_bis_sr(lpm4_bits + gie); /进入lpm4中断/ port 1 interrupt service routine端口1中断服务程序#pragma vector=port1_vector_interrupt void port_1(void)if (p1ifg & bit3)p1out = bit0; / p1.0切换p1ifg &= bit3; / p1.3 ifg清除3./*/ launchpad lab5 - adc10, sample a10 temp and convert to oc and of adc10,样品a10的温度和转换/ msp

5、430g2452/ -/ /| xin|-/ | | |/ -|rst xout|-/ | |/ |a10 |/*#include msp430g2553.hlong temp;long intdegf;long intdegc;void main(void) wdtctl = wdtpw + wdthold; / stop wdt /configure adc10 adc10ctl1 = inch_10 + adc10div_3; / 选择adc通道温度传感器 adc10ctl0 = sref_1 + adc10sht_3 + refon + adc10on + adc10ie;/选择adc

6、号源 _enable_interrupt(); /使能中断。 taccr0 = 30; / delay to allow ref to settle延迟让价解决 tacctl0 |= ccie; /比较模式中断。 tactl = tassel_2 | mc_1; / taclk= smclk,最多的模式。 lpm0; /等待延迟。 tacctl0 &= ccie; /禁用定时器中断 _disable_interrupt(); while(1) adc10ctl0 |= enc + adc10sc; /采样和转换启动 _bis_sr_register(lpm0_bits + gie); / lp

7、m0与中断功能 / of = (a10/1024)*1500mv)-923mv)*1/1.97mv = a10*761/1024 - 468 temp = adc10mem; intdegf = (temp - 630) * 761) / 1024; / oc = (a10/1024)*1500mv)-986mv)*1/3.55mv = a10*423/1024 - 278 temp = adc10mem; intdegc = (temp - 673) * 423) / 1024; _no_operation(); / set breakpoint here此设置断点 / adc10 inte

8、rrupt service routine#pragma vector=adc10_vector_interrupt void adc10_isr (void) _bic_sr_register_on_exit(lpm0_bits); /明确cpuoff位从0(sr)#pragma vector=timer0_a0_vector_interrupt void ta0_isr(void) tactl = 0; _bic_sr_register_on_exit(lpm0_bits); /明确cpuoff位从0(sr)4./*/ msp430f20xx演示 - 基本时钟,输出缓冲smclk,aclk

9、和mclk/10/ /说明:缓冲区aclk从p2.0,p1.4脚和mclk/10默认smclk(dco)/ / p1.5的。/ aclk= lfxt1= vlo的,个mclk= smclk=默认的dco/ / / /*安装辛xout之间的外部晶体需要aclk* / / msp430f20xx/ -/ /| xin|-/ | | | / -|rst xout|-/ | |/ | p1.4/smclk|-smclk = default dco/ | p1.5|-mclk/10 = dco/10/ | p1.0/aclk|-aclk = vlo/*#include unsigned char s;v

10、oid main(void) wdtctl = wdtpw +wdthold; / 关闭看门狗 bcsctl3 |= lfxt1s_2; / lfxt1 = vlo /dcoctl = 0; /bcsctl1 = calbc1_16mhz; /dcoctl = calbc1_16mhz; p1dir |= 0x31; / p1.0,和p1.4输出 p1sel |= 0x11; / p1.0,4 aclk/ vlo的,smclk/ dco输出 /smclk sub-system main clk, aclk和smclk可以通过复用引脚输出,mclk不能直接输出体现, mclk可以配置为vlo或者

11、dco while(1) p1out |= 0x20; / p1.5 = 1, 通过开关p1.5来体现mclk,这两条指令的周期大概为smclk的1/10 p1out &= 0x20;/20; 5./*/ msp430xg46x演示 - fll的内部运行,在8mhz检查官/说明:此程序演示设置内部dco运行/ /为8mhz由fll+自动校准。/ aclk= lfxt1=32768hz的,个mclk= smclk=检查官=(121+1)2aclk=7995392hz/ / / /*辛与xout之间的外部钟晶振需要aclk* / / msp430xg461x/ -/ /| xin|-/ | | |

12、 32khz/ -|rst xout|-/ | |/ | p1.1|- mclk = 8mhz/ | |/ | p1.5|- aclk = 32khz/ | |/*#include void main(void) wdtctl = wdtpw + wdthold; /停止看门狗定时器 fll_ctl0 |= dcoplus + xcap18pf; / dco+ set, 频率 = xtal x d x n+1 scfi0 |= fn_4; / x2 dco freq, 8mhz nominal dco scfqctl = 121; / (121+1) x 32768 x 2 = 7.99 mh

13、z p1dir = 0x22; / p1.1口和p1.5的输出方向 p1sel = 0x22; / p1.1口和p1.5的输出mclk和aclk while(1); /循环到此6./*/ msp430xg46x演示 - flash在系统编程,复制世嘉segb/ / /说明:此程序首先擦除闪烁赛格a,那么它的增量/ /赛格一个值,然后擦除赛格b,然后复制赛格一个赛格b。/假设的mclk的550khz - 900khz的。/ / / /* nop指令集在主循环中断点,以避免强调的flash */ msp430xg461x/ -/ /| xin|-/ | | |/ -|rst xout|-/ | |

14、/*#include char value; / 8位值写段/ function prototypesvoid write_sega (char value);void copy_a2b (void);void main(void) wdtctl = wdtpw + wdthold; /停止看门狗定时器 fctl2 = fwkey + fssel0 + fn0; /的mclk/2闪存时序发生器 value = 0; /初始化值 while(1) /永远重复 write_sega(value+); /写段,增量值 copy_a2b(); / 复制段a到b _nop(); /此设置断点 void

15、write_sega (char value) char *flash_ptr; /闪存的指针 unsigned int i; flash_ptr = (char *) 0x1080; /初始化闪存的指针 fctl1 = fwkey + erase; /设置擦除位 fctl3 = fwkey; /清除锁定位 *flash_ptr = 0; /空写,擦除闪存段 fctl1 = fwkey + wrt; /为写操作的wrt位 for (i=0; i128; i+) *flash_ptr+ = value; /写入值闪烁 fctl1 = fwkey; /清除wrt的位 fctl3 = fwkey +

16、 lock; /设置锁定位void copy_a2b (void) char *flash_ptra; /段指针 char *flash_ptrb; / b段指针 unsigned int i; flash_ptra = (char *) 0x1080; /初始化闪存段a指针 flash_ptrb = (char *) 0x1000; /初始化闪存段b指针 fctl1 = fwkey + erase; /设置擦除位 fctl3 = fwkey; /清除锁定位 *flash_ptrb = 0; /空写,擦除闪存段b fctl1 = fwkey + wrt; /为写操作的wrt位 for (i=0

17、; iled/ |/*#include void main(void) wdtctl = wdtpw + wdthold; /停止看门狗 fll_ctl0 |= xcap14pf; /配置负载帽 p2dir = bit1; /设置p2.1为输出方向 p1ies = bit0; / h-l过渡 p1ie = bit0; /使能中断 _bis_sr(lpm4_bits + gie); / lpm4,使中断/ port 1 interrupt service routine端口1中断服务程序#pragma vector=port1_vector_interrupt void port1_isr (v

18、oid) unsigned volatile int i; for (i=10000; i0; i-); /防抖动延时 p1ifg &= bit0; /清除p1ifg if (p1in & 0x01) = 0) p2out = 0x02; /使用专用或切换p2.18./*/ msp430xg46x演示 - 软件p1.0口从lpm4中断/ / /说明:p1.0的高/低的过渡会引发p1_isr/ /切换p2.1。正常模式lpm40.1ua。 lpm4电流可测/ /与led删除所有未使用的p1.x/p2.x配置为输出或输入/ /拉高或低,确保p2.0的中断输入不浮动。/ aclk=32.768khz

19、的,个mclk= smclk=默认的dco/ msp430xg461x/ -/ /| |/ | | |/ -|rst |/ /| | |/ -o-|p1.0 p2.1|-led/ |/*#include void main(void) wdtctl = wdtpw + wdthold; /停止看门狗 fll_ctl0 |= xcap14pf; /配置负载帽 p2dir = bit1; /设置p2.1为输出方向 p1ies = bit0; / h-l过渡 p1ie = bit0; /使能中断 _bis_sr(lpm4_bits + gie); / lpm4,使中断/ port 1 interru

20、pt service routine端口1中断服务程序#pragma vector=port1_vector_interrupt void port1_isr (void) unsigned volatile int i; for (i=10000; i0; i-); /防抖动延时 p1ifg &= bit0; /清除p1ifg if (p1in & 0x01) = 0) p2out = 0x02; /使用专用或切换p2.19./*/ msp430xg46x演示 - usci_a0,uart isr的回声,检查官smclk115200/ /(修改后的代码示例“msp430xg46x_uscia

21、0_uart_01_115k.c”)/ /说明:回声一个接收到的字符,接收的isr使用。正常模式lpm0。/ / usci_a0 rx中断触发的tx回声。(01h009h)/1048576hz= 1048576/115200=9.1波特率分频器/ aclk= lfxt1=32768hz的,个mclk= smclk=默认的dco=32aclk=1048576hz/ / / /*辛与xout之间的外部钟晶振需要aclk* / / msp430fg4619/ -/ /| xin|-/ | | | 32khz/ -|rst xout|-/ | |/ | p2.5/uca0rxd|/*#include

22、msp430xg46x.hvoid main(void) volatile unsigned int i; wdtctl = wdtpw+wdthold; /停止看门狗 fll_ctl0 |= xcap14pf; /配置负载帽 do ifg1 &= ofifg; /清除oscfault标志 for (i = 0x47ff; i 0; i-); /标志设置时间 while (ifg1 & ofifg); / oscfault flag still set? p2sel |= 0x030; / p2.4,5 = usci_a0 rxd/txd uca0ctl1 |= ucssel_2; / smc

23、lk uca0br0 = 18;0x09; / 1mhz 115200 uca0br1 = 0;0x00; / 1mhz 115200 uca0mctl = 0;0x02; /调制 uca0ctl1 &= ucswrst; / *初始化usci状态机* ie2 |= uca0rxie; /启用usci_a0 rx中断 _bis_sr(lpm0_bits + gie); /进入lpm0,启用中断/ 回显rxed字符,确认tx缓冲区是准备先#pragma vector=usciab0rx_vector_interrupt void uscia0rx_isr (void) while(!(ifg2&

24、uca0txifg); uca0txbuf = uca0rxbuf; / tx - rxed character10./* msp-exp430g2-launchpad软件用户的应用体验* 1。设备开始在lpm3模式+闪烁的led显示设备是活着*后的第一个按钮记者,设备过渡到应用模式* 2。应用模式*+连续采样adc的温度传感器通道,比较的结果,对*初始值*+设为pwm基于测量adc偏移:红色的led积极偏移,绿* led为负偏移*通过timera的uart发送温度值到pc*+按钮按下 - 校准使用当前温度*发送字符“,通知pc机通过uart* #include msp430g2553.h#d

25、efine led0 bit0#define led1 bit6#define led_dir p1dir#define led_out p1out #define button bit3#define button_out p1out#define button_dir p1dir#define button_in p1in#define button_ie p1ie#define button_ies p1ies#define button_ifg p1ifg#define button_ren p1ren#define txd bit1 / p1.2上的txd#define rxd bi

26、t2 /p1.2上的rxd#define app_standby_mode 0#define app_application_mode 1#define timer_pwm_mode 0 #define timer_uart_mode 1#define timer_pwm_period 2000 #define timer_pwm_offset 20#define temp_same 0#define temp_hot 1#define temp_cold 2#define temp_threshold 5 / conditions for 9600/4=2400 baud sw uart,

27、smclk = 1mhz#define bitime_5 0x05*4 / 0.5位长度+小调整#define bitime 13*4/0x0d #define uart_update_interval 1000unsigned char bitcnt;unsigned char applicationmode = app_standby_mode;unsigned char timermode = timer_pwm_mode;unsigned char tempmode;unsigned char calibrateupdate = 0;unsigned char temppolarity

28、 = temp_same;unsigned int txbyte; /*使用8值,采样adc值的移动平均滤波器*/ long tempmeasured8;unsigned char tempmeasuredposition=0;long tempaverage;long tempcalibrated, tempdifference; void initializeleds(void);void initializebutton(void);void preapplicationmode(void); /闪烁的led,等待按下按钮void configureadctempsensor(void)

29、;void configuretimerpwm(void);void configuretimeruart(void); void transmit(void);void initializeclocks(void);void main(void) unsigned int uartupdatetimer = uart_update_interval; unsigned char i; wdtctl = wdtpw + wdthold; /停止看门狗 initializeclocks(); initializebutton(); initializeleds(); preapplication

30、mode(); /闪烁发光二极管,等待按下按钮 /* application mode begins */ applicationmode = app_application_mode; configureadctempsensor(); configuretimerpwm(); _enable_interrupt(); /使能中断。 /* main application loop */ while(1) adc10ctl0 |= enc + adc10sc; /采样和转换启动 _bis_sr_register(cpuoff + gie); / lpm0与中断功能 /* 8个值的移动平均滤波

31、器,有些稳定采样的adc */ tempmeasuredtempmeasuredposition+ = adc10mem; if (tempmeasuredposition = 8) tempmeasuredposition = 0; tempaverage = 0; for (i = 0; i = 3; /除以8得到的平均 if (-uartupdatetimer = 0) | calibrateupdate ) configuretimeruart(); if (calibrateupdate) txbyte = 248; /具有高价值以外的字符 of temp range transmi

32、t(); calibrateupdate = 0; txbyte = (unsigned char)( (tempaverage - 630) * 761) / 1024 ); transmit(); uartupdatetimer = uart_update_interval; configuretimerpwm(); tempdifference = tempaverage - tempcalibrated; if (tempdifference temp_threshold) temppolarity = temp_hot; led_out &= led0; else temppolar

33、ity = temp_same; tacctl0 &= ccie; tacctl1 &= ccie; led_out &= (led0 + led1); if (temppolarity != temp_same) tempdifference = 3; tempdifference += timer_pwm_offset; taccr1 = ( (tempdifference) (timer_pwm_period-1) ? (tempdifference) : (timer_pwm_period-1) ); tacctl0 |= ccie; tacctl1 |= ccie; void preapplicationmode(void) led_dir |= led0 + led1;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论