m430源码库.docx
《m430源码库.docx》由会员分享,可在线阅读,更多相关《m430源码库.docx(49页珍藏版)》请在冰豆网上搜索。
m430源码库
MP430共享】冒死分享公司内部源码库(SPI读铁电,RFID,单总线18B20,I2C读时钟等)
冒死分享公司项目外设驱动代码(SPI读取铁电,RFID驱动,单总线18B20,I2C读SD2000时钟等),绝对的实用,做产品必备,进来的请回帖支持一下
第一个读取铁电的代码:
//对铁电的操作不采用中断的方式,而是在需要对数据进行存储或读取时,采用查询中断标志位。
/***************************************************
*函数名称:
FM_init
*功能描述:
对铁电进行初始化,包括对于之接口的单片机SPI口的初始化
*入口参数:
无
*出口参数:
无
***************************************************/
voidFM_init(void)
{
UCB2CTL1|=UCSWRST;//先对此位置1
UCB2CTL0=UCCKPH+UCMSB+UCMST+UCSYNC;//模式3,MSBfirst,8-bitdata,Mastermode,3-pinSPI,Synchronousmode
UCB2CTL1|=UCSSEL_2;//SMCLK作为SPI的时钟
UCB2BR0=0x01;//SPI采用16M的辅助主时钟
UCB2BR1=0x00;
UCB2CTL1&=~UCSWRST;//清零
}
/***************************************************
*函数名称:
Fram_Read_char
*功能描述:
读取铁电的内容,返回一个8位的数
*入口参数:
pab铁电的地址
*出口参数:
返回一个char型数据
***************************************************/
unsignedcharFM_read_char(unsignedintpab)
{
unsignedcharj,k=0;
j=(unsignedchar)pab;
FM_CS_0;//选中铁电
FM_WP_1;//不进行写保护
UCB2TXBUF=0x03;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
UCB2TXBUF=(unsignedchar)(pab>>8);//当数据写入TXBUF后,UCTXIFG标志自动清零;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
UCB2TXBUF=j;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
UCB2TXBUF=0;
while((UCB2STAT&UCBUSY)==1);//等待SPI不忙
k=UCB2RXBUF;
FM_CS_1; //不选中铁电
returnk;
}
/***************************************************
*函数名称:
Fram_Read_int
*功能描述:
读取铁电的内容,返回一个16位的数
*入口参数:
pab铁电的地址
*出口参数:
返回一个int型数据
***************************************************/
unsignedintFM_read_int(unsignedintpab)
{
unsignedcharj;
unsignedintt;
j=(unsignedchar)pab;
FM_CS_0;//选中铁电
FM_WP_1;//不进行写保护
UCB2TXBUF=0x03;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
UCB2TXBUF=(unsignedchar)(pab>>8);//当数据写入TXBUF后,UCTXIFG标志自动清零;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
UCB2TXBUF=j;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
UCB2TXBUF=0;
while((UCB2STAT&UCBUSY)==1);//等待发送完成标志的产生
j=UCB2RXBUF;
UCB2TXBUF=0;
while((UCB2STAT&UCBUSY)==1);//等待SPI不忙
t=UCB2RXBUF;
t<<=8;
t|=j;
FM_CS_1; //不选中铁电
returnt;
}
/***************************************************
*函数名称:
FM_write_char
*功能描述:
向铁电写入一个8位的数据
*入口参数:
pab铁电的地址,date:
写入的数据
*出口参数:
无
***************************************************/
voidFM_write_char(unsignedintpab,unsignedchardate)
{
unsignedcharj;
j=(unsignedchar)pab;
//_DINT();
FM_CS_0;//选中铁电
FM_WP_1;//不进行写保护
UCB2TXBUF=0x06;
while((UCB2STAT&UCBUSY)==1);//等待SPI不忙
FM_CS_1; //不选中铁电
FM_CS_0;//选中铁电
FM_WP_1;//不进行写保护
UCB2TXBUF=0x02;
while((UCB2STAT&UCBUSY)==1);//等待SPI不忙
UCB2TXBUF=(unsignedchar)(pab>>8);//i;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
UCB2TXBUF=j;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
UCB2TXBUF=date;
while((UCB2STAT&UCBUSY)==1);//等待SPI不忙
FM_CS_1; //不选中铁电
//_EINT();
}
/***************************************************
*函数名称:
FM_write_int
*功能描述:
向铁电写入一个16位的数据
*入口参数:
pab铁电的地址,date:
写入的数据
*出口参数:
无
***************************************************/
voidFM_write_int(unsignedintpab,unsignedintdate)
{
unsignedcharj;
j=(unsignedchar)pab;
FM_CS_0;//选中铁电
FM_WP_1;//不进行写保护
UCB2TXBUF=0x06;
while((UCB2STAT&UCBUSY)==1);//等待SPI不忙
FM_CS_1; //不选中铁电
FM_CS_0;//选中铁电
FM_WP_1;//不进行写保护
UCB2TXBUF=0x02;
while((UCB2STAT&UCBUSY)==1);//等待SPI不忙
UCB2TXBUF=(unsignedchar)(pab>>8);//i;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
UCB2TXBUF=j;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
j=(unsignedchar)(date>>8);
UCB2TXBUF=(unsignedchar)date;//j;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
UCB2TXBUF=j;
while((UCB2STAT&UCBUSY)==1);//等待SPI不忙
FM_CS_1; //不选中铁电
}
/***************************************************
*函数名称:
tx_write_int
*功能描述:
向铁电写入一个8位的数据
*入口参数:
pab铁电的地址,date:
写入的数据
*出口参数:
无
***************************************************/
voidtx_write_int(unsignedintpab,unsignedintdate)
{
unsignedcharj;
j=(unsignedchar)pab;
FM_CS_0;//选中铁电
FM_WP_1;//不进行写保护
UCB2TXBUF=0x06;
while((UCB2STAT&UCBUSY)==1);//等待SPI不忙
FM_CS_1; //不选中铁电
FM_CS_0;//选中铁电
FM_WP_1;//不进行写保护
UCB2TXBUF=0x02;
while((UCB2STAT&UCBUSY)==1);//等待SPI不忙
UCB2TXBUF=(unsignedchar)(pab>>8);//i;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
UCB2TXBUF=j;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
j=(unsignedchar)(date>>8);
UCB2TXBUF=(unsignedchar)date;//j;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
UCB2TXBUF=j;
while((UCB2STAT&UCBUSY)==1);//等待SPI不忙
FM_CS_1; //不选中铁电
}
/***************************************************
*函数名称:
FM_write_jg_tou_gs
*功能描述:
向铁电写入结构头的个数
*入口参数:
无
*出口参数:
无
***************************************************/
voidFM_write_jg_tou_gs(void)
{
//_DINT();
FM_CS_0;//选中铁电
FM_WP_1;//不进行写保护
UCB2TXBUF=0x06;
while((UCB2STAT&UCBUSY)==1);//等待SPI不忙
FM_CS_1; //不选中铁电
FM_CS_0;//选中铁电
FM_WP_1;//不进行写保护
UCB2TXBUF=0x02;
while((UCB2STAT&UCBUSY)==1);//等待SPI不忙
UCB2TXBUF=0;//i;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
UCB2TXBUF=10;//10;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
UCB2TXBUF=0x5a;
while((UCB2IFG&UCTXIFG)==0);
UCB2TXBUF=id_jg.gs;
while((UCB2STAT&UCBUSY)==1);//等待SPI不忙
FM_CS_1; //不选中铁电
}
/***************************************************
*函数名称:
FM_write_bt
*功能描述:
向铁电写入表头,
*入口参数:
pab:
表头的起始地址,djg:
第几个表头,0表示第一个
*出口参数:
无
***************************************************/
voidFM_write_bt(unsignedintpab,unsignedintdjg)
{
unsignedcharj;
j=(unsignedchar)pab;
FM_CS_0;//选中铁电
FM_WP_1;//不进行写保护
UCB2TXBUF=0x06;
while((UCB2STAT&UCBUSY)==1);//等待SPI不忙
FM_CS_1; //不选中铁电
FM_CS_0;//选中铁电
FM_WP_1;//不进行写保护
UCB2TXBUF=0x02;
while((UCB2STAT&UCBUSY)==1);//等待SPI不忙
UCB2TXBUF=(unsignedchar)(pab>>8);//i;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
UCB2TXBUF=j;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
UCB2TXBUF=id_jg.lbt[djg].year;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
UCB2TXBUF=id_jg.lbt[djg].month;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
UCB2TXBUF=id_jg.lbt[djg].day;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
UCB2TXBUF=id_jg.lbt[djg].hour;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
UCB2TXBUF=(unsignedchar)id_jg.lbt[djg].hour_id_gs;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
UCB2TXBUF=(unsignedchar)(id_jg.lbt[djg].hour_id_gs>>8);
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
UCB2TXBUF=(unsignedchar)id_jg.lbt[djg].hour_td_begin;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
UCB2TXBUF=(unsignedchar)(id_jg.lbt[djg].hour_td_begin>>8);
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
UCB2TXBUF=(unsignedchar)id_jg.lbt[djg].hour_tx_tran_ok_gs;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
UCB2TXBUF=(unsignedchar)(id_jg.lbt[djg].hour_tx_tran_ok_gs>>8);
while((UCB2STAT&UCBUSY)==1);//等待SPI不忙
FM_CS_1; //不选中铁电
}
/***************************************************
*函数名称:
FM_clr0_32768
*功能描述:
清除铁电中的所有数据
*入口参数:
无
*出口参数:
无
***************************************************/
voidFM_clr0_32768(void)
{
unsignedinti;
//_DINT();
FM_CS_0;//选中铁电
FM_WP_1;//不进行写保护
UCB2TXBUF=0x06;
while((UCB2STAT&UCBUSY)==1);//等待SPI不忙
FM_CS_1; //不选中铁电
//////////////////
FM_CS_0;//选中铁电
FM_WP_1;//不进行写保护
UCB2TXBUF=0x02;
while((UCB2STAT&UCBUSY)==1);//等待SPI不忙
for(i=0;i<32768;i++)
{
UCB2TXBUF=0;//(unsignedchar)pab;
while((UCB2IFG&UCTXIFG)==0);//等待发送完成标志的产生
}
while((UCB2STAT&UCBUSY)==1);//等待SPI不忙
FM_CS_1; //不选中铁电
}
/***************************************************
*函数名称:
FM_read_bt
*功能描述:
读取铁电中的相关信息参数
*入口参数:
无
*出口参数:
无
***************************************************/
voidFM_read_bt(void)
{
unsignedchari,j;//,k=0;
FM_CS_0;//选中铁电
FM_WP_1;//不进行写保护
UCB0TXBUF=0x03;
while((UCB2IFG&UCTXIFG)==0);
UCB2TXBUF=0;//
while((UCB2IFG&UCTXIFG)==0);
UCB2TXBUF=12;
while((UCB2IFG&UCTXIFG)==0);
for(i=0;i<24;i++)//macheng连续性的把所有参数全部读取出来
{
UCB2TXBUF=0;
while((UCB2STAT&UCBUSY)==1);
id_jg.lbt.year=UCB0RXBUF;
UCB2TXBUF=0;
while((UCB2STAT&UCBUSY)==1);
id_jg.lbt.month=UCB0RXBUF;
UCB2TXBUF=0;
while((UCB2STAT&UCBUSY)==1);
id_jg.lbt.day=UCB0RXBUF;
UCB2TXBUF=0;
while((UCB2STAT&UCBUSY)==1);
id_jg.lbt.hour=UCB0RXBUF;
UCB2TXBUF=0;
while((UCB2STAT&UCBUSY)==1);
j=UCB2RXBUF;
UCB2TXBUF=0;
while((UCB2STAT&UCBUSY)==1);
id_jg.lbt.hour_id_gs=UCB2RXBUF;
id_jg.lbt.hour_id_gs<<=8;
id_jg.lbt.hour_id_gs|=j;
UCB2TXBUF=0;
while((UCB0STAT&UCBUSY)==1);
j=UCB2RXBUF;
UCB2TXBUF=0;
while((UCB0STAT&UCBUSY)==1);
id_jg.lbt.hour_td_begin=UCB0RXBUF;
id_jg.lbt.hour_td_begin<<=8;
id_jg.lbt.hour_td_begin|=j;
UCB0TXBUF=0;
while((UCB0STAT&UCBUSY)==1);
j=UCB2RXBUF;
UCB2TXBUF=0;
while((UCB2STAT&UCBUSY)==1);
id_jg.lbt.hour_tx_tran_ok_gs=UCB2RXBUF;
id_jg.lbt.hour_tx_tran_ok_gs<<=8;
id_jg.lbt.hour_tx_tran_ok_gs|=j;
}
FM_CS_1; //不选中铁电
}
/***************************************************
*函数名称:
write_clr10_32768
*功能描述:
把铁电中从第十字节开始到32768字节结束的内容清除
*入口参数:
无
*出口参数:
无
***************************************************/
voidwrite_clr10_32768(void)
{
unsignedinti;
//_DINT();
FM_CS_0;//选中铁电
FM_WP_1;//不进行写保护
UCB2TXBUF=0x06;
while((UCB2IFG&UCTXIFG)==0);
FM_CS_1;//不选中铁电
//////////////////
FM_CS_0;//选中铁电
FM_WP_1;//不进行写保护
UCB2TXBUF=0x02;
while((UCB2STAT&UCBUSY)==1);
UCB2TXBUF=0;//(unsignedchar)(pab>>8);
while((UCB2IFG&UCTXIFG)==0);
UCB2TXBUF=10;//(unsignedchar)pab;
while((UCB2STAT&UCBUSY)==1) WDTCTL=WDTPW+WDTCNTCL+WDTSSEL_1;
for(i=10;i<32768;i++)
{
UCB2TXBUF=0;//(unsignedchar)pab;
while((UCB2IFG&UCTXIFG)==0);
}
WDTCTL=WDTPW+WDTCNTCL+WDTSSEL_1;
while((UCB2STAT&UCBUSY)==1);
FM_CS_1; //不选中铁电
}
/**