MSP430全部程序学习.docx
- 文档编号:9917493
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:14
- 大小:16.76KB
MSP430全部程序学习.docx
《MSP430全部程序学习.docx》由会员分享,可在线阅读,更多相关《MSP430全部程序学习.docx(14页珍藏版)》请在冰豆网上搜索。
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(); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MSP430 全部 程序 学习