MSP430考试复习代码.docx
- 文档编号:25997976
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:35
- 大小:19.27KB
MSP430考试复习代码.docx
《MSP430考试复习代码.docx》由会员分享,可在线阅读,更多相关《MSP430考试复习代码.docx(35页珍藏版)》请在冰豆网上搜索。
MSP430考试复习代码
1、EEPROM代码
iic.c
#include
#include"iic.h"
voidiic_delay(void)
{
inti;
for(i=0;i<200;i++);
}
voidI2C_Start(void)
{
SET_IIC_SCL;
iic_delay();
SET_IIC_SDA;
iic_delay();
CLR_IIC_SDA;
iic_delay();
CLR_IIC_SCL;
iic_delay();
return;
}
voidI2C_Stop(void)
{
CLR_IIC_SDA;
iic_delay();
SET_IIC_SCL;
iic_delay();
SET_IIC_SDA;
iic_delay();
return;
}
UCHARI2C_ReadACK(void)
{
UCHARucData;
SET_IIC_SDA;
iic_delay();
SET_IIC_SCL;
iic_delay();
IIC_SDA_IN;
iic_delay();
ucData=GET_IIC_SDA;
iic_delay();
IIC_SDA_OUT;
iic_delay();
CLR_IIC_SCL;
iic_delay();
returnucData;
}
voidI2C_ACK(void)
{
CLR_IIC_SDA;
iic_delay();
SET_IIC_SCL;
iic_delay();
CLR_IIC_SCL;
iic_delay();
SET_IIC_SDA;
iic_delay();
return;
}
voidI2C_NoACK(void)
{
SET_IIC_SDA;
iic_delay();
SET_IIC_SCL;
iic_delay();
CLR_IIC_SCL;
iic_delay();
return;
}
voidI2C_SendChar(UCHARucData)
{
UCHARn;
for(n=0;n<8;n++)
{
if(ucData&0x80)
{
SET_IIC_SDA;
}
else
{
CLR_IIC_SDA;
}
iic_delay();
SET_IIC_SCL;
iic_delay();
CLR_IIC_SCL;
iic_delay();
ucData<<=1;
}
I2C_ReadACK();
return;
}
UCHARI2C_RecChar(void)
{
UCHARn,ucData;
IIC_SDA_IN;
iic_delay();
for(n=0;n<8;n++)
{
SET_IIC_SCL;
iic_delay();
ucData=(ucData<<1)|GET_IIC_SDA;
iic_delay();
CLR_IIC_SCL;
iic_delay();
}
iic_delay();
IIC_SDA_OUT;
returnucData;
}
//写一个字节到EEPROM
voidI2C_WriteByte(USHORTusAddr,UCHARucData)
{
I2C_Start();
I2C_SendChar(0xa0);
I2C_SendChar(usAddr);
I2C_SendChar(ucData);
I2C_Stop();
return;
}
/*写多个字节到EEPROM,对于24C01和24C02,cBytes不能大于8;对于24C04~24C16,cBytes不能大于16;*/
voidI2C_WriteBuf(USHORTusAddr,UCHAR*p,UCHARucBytes)
{
I2C_Start();
I2C_SendChar(0xa0);
I2C_SendChar(usAddr);
for(;ucBytes>0;ucBytes--)
{
I2C_SendChar(*p++);
}
I2C_Stop();
return;
}
//读一个字节
UCHARI2C_ReadByte(USHORTusAddr)
{
UCHARucData;
I2C_Start();
I2C_SendChar(0xa0);
I2C_SendChar(usAddr);
I2C_Start();
I2C_SendChar(0xa1);
ucData=I2C_RecChar();
I2C_NoACK();
I2C_Stop();
returnucData;
}
//读多个字节,对于24C01和24C02,cBytes不能大于8;对于24C04~24C16,cBytes不能大于16;
voidI2C_ReadToBuf(USHORTusAddr,UCHAR*p,UCHARucBytes)
{
I2C_Start();
I2C_SendChar(0xa0);
I2C_SendChar(usAddr);
I2C_Start();
I2C_SendChar(0xa1);
for(;ucBytes>0;ucBytes--)
{
*p++=I2C_RecChar();
if(ucBytes>1)
{
I2C_ACK();
}
else
{
I2C_NoACK();
}
}
I2C_Stop();
return;
}
main.c
#include
#include"iic.h"
#include"uart.h"
#defineucharunsignedchar
#defineuintunsignedint
uchartem=0;
voiddelay_ms(void)//毫秒延时
{
unsignedinti;
for(i=0;i<1500;i++)
{
_NOP();
}
}
voiddelay_nms(unsignedintn)//延时周期
{
unsignedinti;
for(i=0;i { delay_ms(); } } voidmain(void) { WDTCTL=WDTPW+WDTHOLD; P1DIR|=0x03; P2DIR|=0xff; while (1) { I2C_WriteByte(0x01,0xaa); delay_nms(50); } //tem=I2C_ReadByte(4); //delay_nms(50); } 2、SPI通信 #include charMST_Data=0x00,SLV_Data=0xFF; voidmain(void) { unsignedinti; WDTCTL=WDTPW+WDTHOLD;//StopWDT P1OUT=0x000;//SetupP1.0forLEDoutput P1DIR|=0x001; P3SEL=0x00E;//SetupP3forSPImode P3OUT=0x020;//SetupP3.4forScopetriggerand P3DIR|=0x030;//P3.5forslaveinitialization U0CTL=CHAR+SYNC+MM+SWRST;//8-bit,SPI,Master U0TCTL=CKPL+SSEL1+STC;//Polarity,SMCLK,3-wire U0BR0=0x002;//SPICLK=SMCLK/2 U0BR1=0x000; U0MCTL=0x000; ME1=USPIE0;//Moduleenable U0CTL&=~SWRST;//SPIenable IE1|=URXIE0;//Recieveinterruptenable _EINT();//Enableinterrupts P3OUT&=~0x020;//ToggleP3.5: slavereset P3OUT|=0x020; i=50000;//Delay do(i--); while(i! =0); while (1) { TXBUF0=MST_Data;//Transmitfirstcharacter LPM0;//CPUoff } }//EndMain #pragmavector=USART0RX_VECTOR __interruptvoidSPI0_rx(void) { P3OUT^=0x010;//XORP3.4forscopetrigger while((IFG1&UTXIFG0)==0);//USART0TXbufferready? if(U0RXBUF==SLV_Data)//TestforcorrectcharacterRX'd { SLV_Data=SLV_Data-1;//Decrementincomingdatamask MST_Data=MST_Data+1;//Incrementout-goingdata TXBUF0=MST_Data; P1OUT|=0x001;//PulseP1.0indicatingvaliddata P1OUT&=~0x001; } else { TXBUF0=MST_Data; P1OUT|=0x001;//SetP1.0indicatingdataerror } } #include charMST_Data=0x00,SLV_Data=0xFF; voidmain(void) { WDTCTL=WDTPW+WDTHOLD;//StopWDT P3SEL=0x0E;//SetupP3forSPImode U0CTL=CHAR+SYNC+SWRST;//8-bit,SPI,Slave U0TCTL=CKPL+STC;//Polarity,UCLK,3-wire ME1=USPIE0;//Moduleenable U0CTL&=~SWRST;//SPIenable IE1|=URXIE0;//Recieveinterruptenable _EINT();//Enableinterrupts while (1) { TXBUF0=SLV_Data;//ReadyTXBUF0w/1stcharacter LPM4;//EnterLPM4 } }//EndMain #pragmavector=USART0RX_VECTOR __interruptvoidSPI0_rx(void) { while((IFG1&UTXIFG0)==0);//USART0TXbufferready? if(U0RXBUF==MST_Data)//TestforcorrectcharacterRX'd { SLV_Data=SLV_Data-1;//Decrementincomingdatamask MST_Data=MST_Data+1;//Incrementout-goingdata TXBUF0=SLV_Data; } else TXBUF0=SLV_Data; } 3、串口 #include voidmain(void) { WDTCTL=WDTPW+WDTHOLD;//StopWDT P3SEL|=0x30;//P3.4,5=USART0TXD/RXD ME1|=UTXE0+URXE0;//EnableUSART0TXD/RXD UCTL0|=CHAR;//8-bitcharacter UTCTL0|=SSEL0;//UCLK=ACLK UBR00=0x0D;//32k/2400-13.65 UBR10=0x00;// UMCTL0=0x6B;//Modulation UCTL0&=~SWRST;//InitializeUSARTstatemachine IE1|=URXIE0;//EnableUSART0RXinterrupt //Mainloop for(;;) { _BIS_SR(LPM3_bits+GIE);//EnterLPM3w/interrupt while(! (IFG1&UTXIFG0));//USART0TXbufferready? TXBUF0=RXBUF0;//RXBUF0toTXBUF0 } } //UART0RXISRwillforexitfromLPM3inMainloop #pragmavector=UART0RX_VECTOR __interruptvoidusart0_rx(void) { _BIC_SR_IRQ(LPM3_bits);//ClearLPM3bitsfrom0(SR) } #include voidmain(void) { volatileunsignedinti; WDTCTL=WDTPW+WDTHOLD;//StopWDT P3SEL|=0x30;//P3.4,5=USART0TXD/RXD BCSCTL1|=XTS;//ACLK=LFXT1=HFXTAL do { IFG1&=~OFIFG;//ClearOSCFaultflag for(i=0xFF;i>0;i--);//Timeforflagtoset } while((IFG1&OFIFG));//OSCFaultflagstillset? BCSCTL2|=SELM_3;//MCLK=LFXT1(safe) ME1|=UTXE0+URXE0;//EnableUSART0TXD/RXD UCTL0|=CHAR;//8-bitcharacter UTCTL0|=SSEL0;//UCLK=ACLK UBR00=0x74;//3.58Mhz/9600-372 UBR10=0x01;// UMCTL0=0x00;//nomodulation UCTL0&=~SWRST;//InitializeUSARTstatemachine IE1|=URXIE0;//EnableUSART0RXinterrupt _BIS_SR(LPM0_bits+GIE);//EnterLPM0w/interrupt } #pragmavector=UART0RX_VECTOR __interruptvoidusart0_rx(void) { while(! (IFG1&UTXIFG0));//USART0TXbufferready? TXBUF0=RXBUF0;//RXBUF0toTXBUF0 } #include voidmain(void) { WDTCTL=WDTPW+WDTHOLD;//StopWDT P3SEL|=0x30;//P3.4,5=USART0TXD/RXD ME1|=UTXE0+URXE0;//EnableUSART0TXD/RXD UCTL0|=CHAR;//8-bitcharacter UTCTL0|=SSEL0;//UCLK=ACLK UBR00=0x03;//32k/9600-3.41 UBR10=0x00;// UMCTL0=0x4A;//Modulation UCTL0&=~SWRST;//InitializeUSARTstatemachine IE1|=URXIE0;//EnableUSART0RXinterrupt //Mainloop for(;;) { _BIS_SR(LPM3_bits+GIE);//EnterLPM3w/interrupt while(! (IFG1&UTXIFG0));//USART0TXbufferready? TXBUF0=RXBUF0;//RXBUF0toTXBUF0 } } //UART0RXISRwillforexitfromLPM3inMainloop #pragmavector=UART0RX_VECTOR __interruptvoidusart0_rx(void) { _BIC_SR_IRQ(LPM3_bits);//ClearLPM3bitsfrom0(SR) } 4、定时器 #include voidmain(void) { WDTCTL=WDTPW+WDTHOLD;//StopWDT P1DIR|=0x01;//P1.0output CCTL0=CCIE;//CCR0interruptenabled CCR0=20000; TACTL=TASSEL_2+MC_1;//SMCLK,upmode _BIS_SR(LPM0_bits+GIE);//EnterLPM0w/interrupt } //TimerA0interruptserviceroutine #pragmavector=TIMERA0_VECTOR __interruptvoidTimer_A(void) { P1OUT^=0x01;//ToggleP1.0 } #include voidmain(void) { WDTCTL=WDTPW+WDTHOLD;//StopWDT P1DIR|=0x01;//P1.0output TACTL=TASSEL_2+MC_2+TAIE;//SMCLK,contmode,interrupt _BIS_SR(LPM0_bits+GIE);//EnterLPM0w/interrupt } //Timer_A3InterruptVector(TAIV)handler #pragmavector=TIMERA1_VECTOR __interruptvoidTimer_A(void) { switch(TAIV) { case2: break;//CCR1notused case4: break;//CCR2notused case10: P1OUT^=0x01;//overflow break; } } #include voidmain(void) { WDTCTL=WDTPW+WDTHOLD;//StopWDT P1DIR|=0x01;//P1.0output CCTL1=CCIE;//CCR1interruptenabled CCR1=50000; TACTL=TASSEL_2+MC_2;//SMCLK,Contmode _BIS_SR(LPM0_bits+GIE);//EnterLPM0w/interrupt } //Timer_A3InterruptVector(TAIV)handler #pragmavector=TIMERA1_VECTOR __interruptvoidTimer_A(void) { switch(TAIV) { case2: //CCR1 { P1OUT^=0x01;//ToggleP1.0 CCR1+=50000;//AddOffsettoCCR1 } break; case4: break;//CCR2notused case10: break;//overflownotused } } #include voidmain(void) { WDTCTL=WDTPW+WDTHOLD;//StopWDT P1SEL|=0x0E;//P1.1-P1.4optionselect P1DIR|=0x0F;//P1.0-P1.4outputs CCTL0=OUTMOD_4+CCIE;//CCR0toggle,interruptenabled CCTL1=OUTMOD_4+CCIE;//CCR1toggle,interruptenabled CCTL2=OUTMOD_4+CCIE;//CCR2toggle,interruptenabled TACTL=TASSEL_2+MC_2+TAIE;//SMCLK,Contmode,intenabled _BIS_SR(LPM0_bits+GIE);//Enter
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MSP430 考试 复习 代码
![提示](https://static.bdocx.com/images/bang_tan.gif)