|
|
| | -文章搜索 - 最新文章 - | |
用MSP430F1121设计电子产品的心得,与大家探讨 |
| 发布时间:2001年9月10日 点击次数:6057 |
| 来源: 作者: |
思路: 1.用两节电池供电,接上电池后F1121复位,设置好端口立即进入低功耗状态。 2.将on/off按钮接在 P2.0,利用端口的中断使电路进入工作状态。 3.当按着on/off超过几秒后电路进入低功耗状态。 4.利用WDT,当一段时间没有任何操作后电路进入低功耗状态。 程序如下: #include "msp430x11x1.h" #define uint unsigned int #define uchar unsigned char unsigned short *sptr; // Stack pointer extern void getsptr (void); // Get Stack Pointer uchar interrupt_flag; uint times; interrupt[PORT2_VECTOR] void P2_ISR(void); interrupt[WDT_VECTOR] void watchdog_timer(void); void delay(uchar k) { uchar i; for(i=0;i } void beep(void) { P1OUT |= BIT3; // beep on delay(120); P1OUT &= ~BIT3; // beep off } void reset_port(void) { P1OUT &= ~BIT0; P1OUT &= ~BIT1; P1OUT &= ~BIT2; P1OUT &= ~BIT3; P2OUT &= ~BIT1; P2OUT &= ~BIT2; } void sleep(void) { P2IES |= BIT0; //P2.0 interrupt hi->low edge P2IFG &= ~BIT0; //P2.0 IFG cleared P2IE |= BIT0; //P2.0 interrupt enabled getsptr(); // Get the current stack pointer - 2 sptr-=1; IE1 &= ~WDTIE; // disable WDT interrupt reset_port(); LPM4; } void main(void) { uchar i; WDTCTL = WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1; // Set Watchdog Timer interval to 0.5ms P1DIR |= BIT0; P1DIR |= BIT1; P1DIR |= BIT2; P1DIR |= BIT3; P2DIR &= ~BIT0; //设为on/off按钮输入 P2DIR |= BIT1; P2DIR |= BIT2; reset_port(); P2IES |= BIT0; //P2.0 interrupt hi->low edge P2IFG &= ~BIT0; //P2.0 IFG cleared P2IE |= BIT0; //P2.0 interrupt enabled delay(250); _EINT(); // Enable Interrupts sleep(); //进入低功耗 beep(); //提示 times=0; IE1 |= WDTIE; // Enable WDT interrupt interrupt_flag=0; if((P2IN&BIT0) != BIT0 ) //当on/off按钮按着超过5秒后进入低功耗 { times=0; while((P2IN&BIT0) != BIT0 ) { if( times>6000 ) //5s { beep(); sleep(); break; } } } while(1) { IE1 |= WDTIE; // Enable WDT interrupt interrupt_flag=0; ....... if( times > 12000 ) { beep(); sleep(); } } } interrupt[PORT2_VECTOR] void P2_ISR(void) { // Exit LPM4, disable P2.0 interrupt P2IE &= ~BIT0; //P2.0 interrupt disabled P2IFG &= ~BIT0; //P2.0 IFG cleared interrupt_flag=1; *sptr &= ~(SCG1+SCG0+OSCOFF+CPUOFF); // Clear LPM4 from the stacked status register beep(); } interrupt[WDT_VECTOR] void watchdog_timer(void) { times++; } 程序getsptr.s43摘自安装目录下FET_examples的fet_9目录 NAME getsptr PUBLIC getsptr EXTERN sptr ;Stack pointer variable declared in C file RSEG CODE getsptr: mov SP,&sptr ;Copy the current stack pointer. ret END |
|
|
|
|
[PIC MSP430 ] 相关文章: 3V与5V混合系统中逻辑器接口问题简介:
3V与5V混合系统中逻辑器接口问题1 引言近年来,随着便携式数字电子产品棗笔记本计算 机、数字式移动电话、寻呼机、手持式测试仪表等的迅速发展,要求使用体积小、功耗低、 电池耗电小的器件,数字系统的工作电压已经从5V降至3V甚至更低(例如2.5V和1.8V标准的 引进)。但是目前仍有许多5V电源的逻辑器件和数字器件可用,因此在许多设计中3V(含 3.3V)逻辑系统和5V逻辑系统共存,而且不同的电源电压在同一电路板中混用。随着更低电 压标准的引进,不同电源电压逻辑器件间的接口问题会在很长一段时间内存在。本文讨论的 是使用TTL和CMOS的3V和5V系统中逻辑器件间接口的基本...... MSP430都是贴片的,如何焊接 ?
MSP430 十六位单片机中有5伏电压的型号吗?
关于MSP430FLASH(13X/14X)芯片的在线仿真,调试,下载程序的接线
MSP430F13X系列的单片机ADC要外加电阻、电容?
430电源电压一般为3v左右,外部设备电压要求为5V驱动,如何解决,请指教。
如何用软件实现奇偶位的快速计算?
请问PIC系列的单片机能否用C编程
PIC系列的单片机有中断系统吗?
PIC的价格如何? |
|
|
|