完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
相关推荐
1个回答
|
|
硬件及功能
MSP430F149 详细对LED中断闪烁灯解释 #include void main(void) { /*下面六行程序关闭所有的IO口*/ P1DIR = 0XFF;P1OUT = 0XFF; // P1DIR是P1端口的方向寄存器,DIR:direction register 当他为0的时候表示输入模式 P2DIR = 0XFF;P2OUT = 0XFF; // 0xff表示二进制的1111 1111,正好对应八个I/O口 P3DIR = 0XFF;P3OUT = 0XFF; // P1OUT是输出寄存器,OUT:output register 当他为0的时候表示输出低电平,1的时候为输出高电平 P4DIR = 0XFF;P4OUT = 0XFF; P5DIR = 0XFF;P5OUT = 0XFF; P6DIR = 0XFF;P6OUT = 0XFF; // 以上是对板子的初始化,没有具体功能,在32中我们没有都进行配置是因为32最开始就是默认输出高电平 WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 // MSP430板子是默认开启看门狗的,那为什么要关掉它呢? // 因为开启看门狗后,你要不定时的喂狗(计数清零),如果不喂狗,程序就会间隔着复位。 // WDTCTL是看门狗定时器寄存器,watch dog timer control register // WDTHOLD 是看门狗停止位,当为0的时候是激活的,为1的时候是关闭的 // WDTHOLD在头文件中是0x0080,低八位是1000 0000,所以就关闭了看门狗 P6DIR |= BIT2;P6OUT |= BIT2; //关闭电平转换 CCTL0 = CCIE; //使能CCR0中断 // CCTL0是比较/捕获寄存器的控制器(capture control register),当是0禁止中断,1开启中断, CCR0 = 2047; //设定周期0.5S // 这个是设置中断时长的,因为下边这个语句用的ACLK(辅助时钟且经过了八分频) // 本来是32768HZ,经过八分频,就是4096HZ // 4096HZ的意思就是计数器每加1所需要的时间就是1/4096秒,如果CCR0等于4096,那么就是1s产生一个中断 TACTL = TASSEL_1 + ID_3 + MC_1; // 定时器A的时钟源选择ACLK,增计数模式 // TACTL指的是timer a这个计数器寄存器的控制器,timer A control register 然后有多种模式可以选择。 // TASSEL:timer A source select 时钟源的选择,这里选择的是ACLK(辅助时钟源:Auxillary Cloclk) // ID: input divider 分频器,,可以是1,2,4,8分频,这里选择的八分频 // MC:mode control 模式选择,这里选择的模式是从0开始计数,计到CCR0就会产生一次中断,然后继续从零开始 P2DIR = 0xff; //设置P2口方向为输出 P2OUT = 0xff; _EINT(); //使能全局中断 // EINT : enable interrupt 使能中断,与他对应的是_DINT: disable interrupt LPM3; //CPU进入LPM3模式 // LPM: low power mode 进入低功耗模式,现在只有ACLK时钟可以用 } /******************************************* 函数名称:Timer_A 功 能:定时器A的中断服务函数 参 数:无 返回值 :无 ********************************************/ #pragma vector = TIMERA0_VECTOR __interrupt void Timer_A (void) { P2OUT ^= 0xff; //P2口输出取反 // ^表示异或,这里0 xor 1=1; 1 xor 1=0;可以起到取反。 } 下边是我自己写的,其实都差不多,不过我喜欢32那种,把初始化都独立起来 main.c #include #include "led.h" void main( void ) { LED_Init(); CCTL0=CCIE;//turn on the interrupt CCR0=4096;// 1s TACTL=TASSEL_1+ID_3+MC_1;//TASSEL: timer A source select //ID: input divider //MC: mode control _EINT(); LPM3; } /**@brief timer A CCR0 interrupt *@param no *@retval no */ #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A_CCR0 (void) { P2OUT ^= 0xff; //XOR } led.c #include "led.h" #include void LED_Init() { //make fority eight general-purpose i/o output high level P1DIR=0xff; P1OUT=0xff;//DIR:direction register -- 0:input mode --1:output mode P2DIR=0xff; P2OUT=0xff;//OUT:low or high output level --0:low --1:high P3DIR=0xff; P3OUT=0xff;//eight bits represent eight pin P4DIR=0xff; P4OUT=0xff; P5DIR=0xff; P5OUT=0xff; P6DIR=0xff; P6OUT=0xff; // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD;//WDTCTL:watch dog timer register --16 bits //the 8th bit: --0: proper function --1:stop work P6DIR |= BIT2;P6OUT |= BIT2; } led.h #ifndef _LED_H #define _LED_H void LED_Init(void); #endif |
|
|
|
只有小组成员才能发言,加入小组>>
2513 浏览 0 评论
1083浏览 2评论
700浏览 1评论
452浏览 0评论
193浏览 0评论
329浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 04:56 , Processed in 1.166306 second(s), Total 81, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号