MSP430全部程序学习.docx

上传人:b****7 文档编号:9917493 上传时间:2023-02-07 格式:DOCX 页数:14 大小:16.76KB
下载 相关 举报
MSP430全部程序学习.docx_第1页
第1页 / 共14页
MSP430全部程序学习.docx_第2页
第2页 / 共14页
MSP430全部程序学习.docx_第3页
第3页 / 共14页
MSP430全部程序学习.docx_第4页
第4页 / 共14页
MSP430全部程序学习.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

MSP430全部程序学习.docx

《MSP430全部程序学习.docx》由会员分享,可在线阅读,更多相关《MSP430全部程序学习.docx(14页珍藏版)》请在冰豆网上搜索。

MSP430全部程序学习.docx

MSP430全部程序学习

一:

基础实验

功能:

控制IO口实现流水灯的一次点亮并循环下去

#include""

voiddelay(unsignedinta)

{

unsignedinti,j;

for(j=a;j>0;j--)

for(i=80;i>0;i--);

}

voidmain(void)

{

WDTCTL=WDTPW+WDTHOLD;

P2DIR|=0XF0;段码1选通

位码0导通

Timer_Aisconfigured

Inthis

NoCPUorsoftware

NormaloperatingmodeisLPM3.

Timer_Bis

Inthisexample,CCR0isloadedwith1000-1.

Thoughnotrequired,

Thoughnotrequired,

ADC12internaloscillatortimessample(16x)

InMainloopMSP430waitsinLPM0tosavepoweruntilADC12

IfA0>*AVcc,set,elsereset.

//

//MSP430F149

//-----------------

///|\|XIN|-

//|||

//--|RSTXOUT|-

//||

//Vin-->|A7P2|-->LED

//

//****************************************************************

#include<>

 

#defineled5_poutP2DIR|=BIT4//通讯状态指示灯设置为输出口

#defineled5_highP2OUT|=BIT4//通讯状态指示灯输出高点亮指示灯

#defineled5_lowP2OUT&=~BIT4//通讯状态指示灯输出低关闭指示灯

#defineled6_poutP2DIR|=BIT5//通讯状态指示灯设置为输出口

#defineled6_highP2OUT|=BIT5//通讯状态指示灯输出高点亮指示灯

#defineled6_lowP2OUT&=~BIT5//通讯状态指示灯输出低关闭指示灯

#defineled7_poutP2DIR|=BIT6//通讯状态指示灯设置为输出口

#defineled7_highP2OUT|=BIT6//通讯状态指示灯输出高点亮指示灯

#defineled7_lowP2OUT&=~BIT6//通讯状态指示灯输出低关闭指示灯

#defineled8_poutP2DIR|=BIT7//通讯状态指示灯设置为输出口

#defineled8_highP2OUT|=BIT7//通讯状态指示灯输出高点亮指示灯

#defineled8_lowP2OUT&=~BIT7//通讯状态指示灯输出低关闭指示灯

voiddelay(unsignedinta)

{

unsignedinti,j;

for(j=a;j>0;j--)

for(i=8;i>0;i--);

}

voidmain(void)

{

WDTCTL=WDTPW+WDTHOLD;//StopWDT

_EINT();

ADC12CTL0=SHT0_2+ADC12ON;//Setsamplingtime,turnonADC12

//上面语句是打开ADC12电源,并设置采样时间=2^2*(4*clk)=16clk即为16个时钟

ADC12CTL1=CSTARTADD_7+SHP;//Usesamplingtimer

ADC12MCTL7|=INCH_7;

ADC12IE=0x0080;//Enableinterrupt使能中断对应于ADC12MEM0

ADC12CTL0|=ENC;//Conversionenabled使能转换

P6SEL|=0x80;//ADCoptionselect定义为模拟输入通道0

led5_pout;

led6_pout;

led7_pout;

led8_pout;

led5_low;

led6_low;

led7_low;

led8_low;

for(;;)

{

ADC12CTL0|=ADC12SC;//Samplingopen开始启动转换

_NOP();

//_BIS_SR(CPUOFF+GIE);//LPM0,ADC12_ISRwillforceexit

}

}

//ADC12interruptserviceroutine

#pragmavector=ADC_VECTOR

__interruptvoidADC12_ISR(void)

{

if(ADC12MEM7<0x3FF)

led5_low;//ClearLEDoff

else

led5_high;//SetLEDon

if(ADC12MEM7<0x6FF)

led6_low;//ClearLEDoff

else

led6_high;

if(ADC12MEM7<0x9FF)

led7_low;//ClearLEDoff

else

led7_high;

if(ADC12MEM7<0xCFF)

led8_low;//ClearLEDoff

else

led8_high;

//_BIC_SR_IRQ(CPUOFF);//ClearCPUOFFbitfrom0(SR)

}

 

十二:

IIC总线与24c16综合实验

主程序

//***************************************************************

//描述:

//开机发送数给24C16,然后将数据读出,并通过串口工具显示;

//

//跳线:

P6P8P9

//***************************************************************

#include""

#include""

#include""

#defineucharunsignedchar

 

unsignedchar*D,*M,add,ACK_FLAG,flag;

unsignedcharMPM[32];

//unsignedcharDDT[32]=

//{

//0xf3,0x16,0x69,0x21,0xd3,0x15,0xc5,0x23,

//0xb6,0x28,0x85,0x25,0xc3,0x24,0xd7,0x16,

//0xf3,0x16,0x69,0x21,0xd3,0x15,0xc5,0x23,

//0xb6,0x28,0x85,0x25,0xc3,0x24,0xd7,0x16

//};

unsignedcharDDT[32]=

{

0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,//01234567

0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46,//89ABCDEF

0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,//GHIJKLMN

0x4F,0x50,0x51,0x52,0x53,0x54,0x55,0x56,//OPQRSTUV

};

voidmain(void)

{

unsignedinti;

WDTCTL=WDTPW+WDTHOLD;

uart_org();

UartStr("开机测试成功!

\r\t\n");

D=(unsignedchar*)DDT;

add=0;//24C01内数据读写首地址

M=(unsignedchar*)MPM;

delay(100);

for(i=0;i<4;i++)

{

send_word();

delay(1000);

add+=8;

}

add=10;

for(i=0;i<32;i++)

receive_word(i);

Uart_Str(32,&MPM[0]);

TXBUF0=MPM[7];

}

子程序24C16

#include<>

#include""

#defineucharunsignedchar

externucharACK_FLAG,add,*D,MPM[32];

voiddelay(unsignedinti)

{

while(i-->0);

}

voidstart(void)

{

SDA_OUT;

SCL_OUT;

SDA_0;

SCL_0;

delay

(2);

SDA_1;

SCL_1;

delay

(2);

SDA_0;

delay

(2);

SCL_0;

delay(3);

SDA_1;

}

voidstop(void)

{

SDA_OUT;

SCL_OUT;

SDA_0;

SCL_1;

delay

(2);

SDA_1;

}

voidsend_byte(uchardata)

{

ucharbi,i;

bi=0x80;

SDA_OUT;

SCL_OUT;

for(i=0;i<8;i++)

{

if((data&bi)==bi)SDA_1;

elseSDA_0;

SCL_1;

delay(50);

SCL_0;

bi>>=1;

}

}

ucharreceive_byte(void)

{

uchari,temp=0x80,tempdata;

tempdata=0;

SDA_IN;

SCL_OUT;

for(i=0;i<8;i++)

{

SCL_1;

if((P5IN&BIT1)==BIT1)tempdata|=temp;

temp>>=1;

SCL_0;

}

return(tempdata);

}

voidack(void)

{

SCL_OUT;

SDA_IN;

SCL_1;

ACK_FLAG=0;

if((P5IN&BIT1))ACK_FLAG=1;

SCL_0;

delay(10);

}

voidi2c_ack(uchartm)

{

SDA_OUT;

SCL_OUT;

if(tm==0)SDA_1;

elseSDA_0;

delay(10);

SCL_1;

delay(10);

SCL_0;

delay(10);

}

voidsend_word(void)

{

uchari=0;

while

(1)

{

start();

delay(20);

send_byte(0xa0);

ack();

if(ACK_FLAG)continue;

send_byte(add);

ack();

if(ACK_FLAG)continue;

for(i=0;i<8;i++)

{

send_byte(*D++);

ack();

if(ACK_FLAG)continue;

}

if(!

ACK_FLAG)break;

}

stop();

}

voidreceive_word(ucharadd)

{

uchari;

while

(1)

{

start();

send_byte(0xa0);

ack();

if(ACK_FLAG)continue;

send_byte(add);

ack();

if(ACK_FLAG)continue;

start();

send_byte(0xa1);

ack();

if(ACK_FLAG)continue;

MPM[i++]=receive_byte();

delay(5);

i2c_ack

(1);

if(!

ACK_FLAG)break;

}

stop();

}

子程序:

uart

#include<>

#include""

/*****************串口初试化设置********************/

voiduart_org(void)

{

ME1|=UTXE0+URXE0;//EnableUSART0TXD/RXD

UCTL0|=CHAR;//8-bitcharacter

UTCTL0|=SSEL0;//UCLK=ACLK

UBR00=0x03;//32768/9600

UBR10=0x00;

UMCTL0=0x4a;

P3SEL|=0x30;//,5=USART0TXD/RXD

P3DIR|=0x10;

UCTL0&=~SWRST;//InitializeUSARTstatemachine

IE1|=URXIE0;//EnableUSART0RXinterrupt

}

/*****************串口发送字符串程序*****************/

voidUartStr(unsignedchar*p)

{

unsignedchari;

for(i=0;*p!

=0;i++)//准备要发送的数据

{

while(!

(IFG1&UTXIFG0));//USART0TXbufferready

TXBUF0=*p++;//RXBUF0toTXBUF0

while((UTCTL0&TXEPT)==0);

}

_NOP();

}

/*****************串口发送字符串程序*****************/

voidUart_Str(unsignedcharnumber,unsignedchar*p)

{

unsignedchari;

for(i=0;i

{

while(!

(IFG1&UTXIFG0));//USART0TXbufferready

TXBUF0=*p++;//RXBUF0toTXBUF0

while((UTCTL0&TXEPT)==0);

}

_NOP();

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1