|
我用MSP430联的NRF24L01,通信距离只有1M,丢包率几乎80%,y有人说是程序的原因,哪位大哥能帮我看看啊
接收:
#include "msp430x14x.h"
#include"api.h"
#define TX_ADR_WIDTH 5 // 5 bytes TX(RX) 地址长度
#define RX_ADR_WIDTH 5 // 5 bytes TX(RX) 地址长度
#define TX_PLOAD_WIDTH 5 // 20 bytes TX 有效载荷
#define RX_PLOAD_WIDTH 5 // 20 bytes TX 有效载荷
//********延时段***************
#define CPU_F ((double)6000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
//**********************************数据的定义*********************************************
typedef unsigned char uchar; //数据类型
typedef unsigned int uint;
uchar TX_ADDRESS[TX_ADR_WIDTH] = {0x34,0x43,0x10,0x10,0x01}; // Define a static TX address
uchar RX_ADDRESS[RX_ADR_WIDTH] = {0x34,0x43,0x10,0x10,0x01};
uchar TEST[TX_ADR_WIDTH];
uchar rx_buf[TX_PLOAD_WIDTH]; //接收缓存数组
uchar tx_buf[RX_PLOAD_WIDTH]={0x01,0x02,0x03,0x04,0x05};//发送缓存数组
uchar flag; //
char sta;//状态寄存器
uchar cfcs=0;
uchar faci=0;
uchar jscs=0;
uchar receive[5];
uchar data[5]={0x01,0x02,0x02,0x01,0x01};
//********************************按键定义*************************
#define CSN_HIGH P1OUT|=BIT2//P1.2控制SPI使能
#define CSN_LOW P1OUT&=~BIT2
#define CE_HIGH P1OUT|=BIT1//P1.1控制芯片发射使能
#define CE_LOW P1OUT&=~BIT1
#define IRQ P1IN&BIT0//读取P1.0的值*/
//*****************************声明子函数**************************************************
void int_clk();//初始化时钟
void int_spi0();//初始化SPI接口
void init_io();//初始化IO
//uchar delay_us(uint i);//延时
uchar SPI_RW(uchar byte);//通过SPI往nRF24L01写一个字节数据,接收nRF24L01的状态寄存器的值
uchar SPI_RW_Reg(uchar reg,uchar value);//通过SPI往nRF24L01将一个字节数据”value“写到寄存器”reg“里
uchar SPI_Read(uchar reg);//读nRF24L01 中寄存器”reg“里的值
uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar bytes);//从寄存器”reg“读取“bytes”个字节数据存放在数组pBuf里
uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bytes);//将存放在数组pBuf里“bytes”个字节数据写到寄存器”reg“中
uchar nRF24L01_RxPacket(uchar *rx_buf);//初始化nRF24L01为接收模式
uchar nRF24L01_TxPacket(uchar *tx_buf);//初始化nRF24L01为发送模式
void SetRX_Mode();
void nRF24L01_Config();//nRF24L01配置
//*********************************主函数**********************************************
int main( void )
{
WDTCTL=WDTPW+WDTHOLD;
delay_us(10);
int_clk();
init_io();
int_spi0();
nRF24L01_Config();
_EINT();
while(1)
{
SetRX_Mode();
while(1)
{
while(P1IN&BIT0)
{
flag=SPI_Read(STATUS);
cfcs=SPI_Read(CD);
delay_ms(10);
}
SPI_RW_Reg(WRITE_REG+STATUS,0X7E);
}
//while(1);
/*while(1)
{
SPI_RW_Reg(WRITE_REG+STATUS,0x0E);
while(sta&0x10);
delay_us(10000);
}*/
}
}
/***********************************延时********************************************
uchar delay_us(uint i)
{
while(i--)
_NOP();
}*/
//***********************************初始化时钟********************************************
void int_clk()//MCLK=6MHZ,SMCLK=3MHZ,//ACLK=32768HZ,
{
uchar i;
//P5SEL=0X70;
BCSCTL1&=~XT2OFF;//开高晶振
BCSCTL2|=SELM1+SELS+DIVS0;
do
{
IFG1&=~OFIFG;
for(i=0xFF;i>0;i--);
}
while((IFG1&OFIFG)!=0);
IFG1&=~OFIFG;
}
//*************************初始化io端口******************************************
void init_io()
{
P1SEL=0X00;
P1DIR|=BIT1+BIT2;//单片机对nRF24L01的控制管脚P1.0(IRQ)P1.1(CE)P1.2(CSN)
P1OUT&=~BIT1;//CE低
P1OUT|=BIT2;//CSN高
P1IE|=BIT0;
P1IES|=BIT0;
P1IE|=BIT0;
//P5SEL=0X70;//时钟信号检测口
}
//********************************初始化SPI0***********************************************
void int_spi0()//6;1;N;9600
{
P3SEL|=0X0E;
P3DIR|=BIT1+BIT3;
U0CTL|=SWRST;
U0CTL|=CHAR+SYNC+MM;
U0TCTL|=SSEL1+STC;
U0TCTL|=CKPH;
U0TCTL&=~CKPL;
U0BR0 = 0X38;
U0BR1 = 0X01;
U0MCTL = 0X40;
ME1|=USPIE0;
U0CTL&=~SWRST;
IE1&=~UTXIE0;
IE1&=~URXIE0;//禁止中断
}
//***********使用命令字*****************************
uchar SPI_WORD(uchar word)
{
P1OUT&=~BIT2;
U0TXBUF=word;
while(IFG1&URXIFG0);
while((IFG1&UTXIFG0)==0);
IFG1&=~UTXIFG0;
delay_ms(1);
P1OUT|=BIT2;
return(U0RXBUF);
}
//*******************************SPI发送一个字节数据,**************************************************
uchar SPI_RW(uchar byte) //
{
U0TXBUF=byte;
// 输出 'byte',从高位到低位
while(IFG1&URXIFG0);
while((IFG1&UTXIFG0)==0);
IFG1&=~UTXIFG0;
delay_us(1000);
return(U0RXBUF); // 返回接收的状态字节
}
//*************************往寄存器reg中写值'value',返回状态寄存器值*******************************************************
uchar SPI_RW_Reg(uchar reg,uchar value)
{
uchar status;
P1OUT&=~BIT2; // CSN 低, 初始化SPI通信
status = SPI_RW(reg); // 选择寄存器
SPI_RW(value); // 写值.
P1OUT|=BIT2; // CSN 高
delay_us(1);
return(status); // 返回nRF24L01状态值
}
//*****************************读寄存器的值****************************************************
uchar SPI_Read(uchar reg)
{
char reg_val;
P1OUT&=~BIT2; // CSN 低, 初始化SPI通信
SPI_RW(reg); // 选择寄存器
reg_val=SPI_RW(0x00); // 写寄存器
P1OUT|=BIT2; // CSN 高, 停止通信
delay_us(1);
return(reg_val); // 返回寄存器值
}
//********************************读出byte字节数据*************************************************
uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar bytes)
{
uchar status,byte_ctr;
P1OUT&=~BIT2; // P1.2 CSN 低, 初始化SPI通信
status = SPI_RW(reg); // 选择寄存器去读,并且读状态寄存器的值
for(byte_ctr=0;byte_ctr<bytes;byte_ctr++)
pBuf[byte_ctr] = SPI_RW(0x00); // 从 nRF24L01读字节
P1OUT|=BIT2; // CSN 高, 停止通信
delay_us(1);
return(status); // 返回NRF24L01的状态值
}
//*******************************写入BYTE字节数**************************************************
uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bytes)
{
uchar status,byte_ctr;
P1OUT&=~BIT2; // P1.2 CSN 低, 初始化SPI通信
status = SPI_RW(reg); // 选择寄存器去写,并且读状态寄存器的值
for(byte_ctr=0; byte_ctr<bytes; byte_ctr++) // 将字几个节写到 buffer(*pBuf)
SPI_RW(*pBuf++);
P1OUT|=BIT2; // CSN 高, 停止通信
delay_us(1);
return(status); // 返回NRF24L01的状态值
}
/****************************************************************************************************/
/*函数:void SetRX_Mode(void)
/*功能:数据接收配置
/****************************************************************************************************/
void SetRX_Mode()
{
delay_ms(1.5);
P1OUT&=~BIT1;
SPI_RW_Reg(WRITE_REG+CONFIG, 0x0F);
SPI_RW_Reg(WRITE_REG+STATUS,0X7E);
SPI_WORD(FLUSH_RX);//清空RXFIFRO
//SPI_WORD(FLUSH_TX);
SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);
//给发送寄存器写入地址,宽度为TX_ADR_WIDTH
SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);
// flag=SPI_Read(CD);
P1OUT|=BIT1;
delay_us(500);
}
//*********************************************************************************
//接收函数,接收返回1表示有数据收到
uchar nRF24L01_RxPacket(uchar *rx_buf)
{
delay_ms(1.5);
//P1OUT&=~BIT1; //CE_LOW进入闲置模式
uchar revale=0;
//SPI_WORD(FLUSH_RX);
//SPI_WORD(FLUSH_TX);
sta=SPI_Read(STATUS);
if(sta&0x40)
{
SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);//读数据
revale =1;
jscs++;//读取数据完成标志
//SPI_RW_Reg(WRITE_REG+STATUS,0x1E);//接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志
}
return revale;
}
//************************发送函数******************************
uchar nRF24L01_TxPacket(uchar *tx_buf)
{
//stand by 模式
delay_ms(1.5);
P1OUT&=~BIT1;//CE置低
SPI_RW_Reg(WRITE_REG+CONFIG,0X0F);
//给发送寄存器写入地址,宽度为TX_ADR_WIDTH
SPI_WORD(FLUSH_TX);
SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);
//给发送寄存器写入地址,宽度为TX_ADR_WIDTH
SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);
//给接收寄存器写入地址,宽度也为TX_ADR_WIDTH
//SPI_Read_Buf(RX_ADDR_P0,rx_buf,TX_ADR_WIDTH);
SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH);
//向发送寄存器写入TX_PLOAD_WIDTH宽度的数据,
//SPI_RW_Reg(WRITE_REG+CONFIG,0X0E);
//SPI_Read(CONFIG);
//配置为PWR_UP位,使能CRC,16位校验,发送模式
P1OUT|=BIT1; // CE 管脚置高
delay_ms(1.5);
//P1OUT&=~BIT1;//CE置低
}
//***********nRF24L01的配置函数*************************
void nRF24L01_Config()
{
P1OUT&=~BIT1;//CE为低,待机
P1OUT|=BIT2;//CSN置高,SPI复位
delay_ms(1.5);
SPI_RW_Reg(WRITE_REG+STATUS,0X7E);
SPI_RW_Reg(WRITE_REG+CONFIG,0X0F);
SPI_Read(CONFIG);
//数据通道0自动应答
SPI_RW_Reg(WRITE_REG+EN_AA,0X01);
//数据通道0自动应答
SPI_RW_Reg(WRITE_REG+EN_RXADDR,0X01);
//通道0允许
SPI_RW_Reg(WRITE_REG+SETUP_AW,0X03);
//设置地址宽度为5字节
SPI_RW_Reg(WRITE_REG+SETUP_RETR,0X0A);
//建立自动重发,500+86us,10次重发
SPI_RW_Reg(WRITE_REG+RF_CH,0x02);
//设置工作通道频率
SPI_RW_Reg(WRITE_REG+RF_SETUP,0X07);
//设置工作通道传输速率为1Mbps,发射功率为0dBm
SPI_RW_Reg(WRITE_REG+RX_PW_P0,TX_PLOAD_WIDTH);
//SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);
// 写本地地址
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS,TX_ADR_WIDTH);
SPI_Write_Buf(WRITE_REG + RX_ADDR_P1, TX_ADDRESS,TX_ADR_WIDTH);
// 写接收端地址
}
//***********中断***************
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_ISR(void)
{
//P1OUT&=~BIT1;//CE为低,待机
sta=SPI_Read(STATUS);
int i;
if(sta&0x40)
{
nRF24L01_RxPacket(rx_buf);
for(i=0;i<5;i++)
{
receive=rx_buf;
}
}
if (sta&0x10)
{
while(1);
cfcs++;
}
if (sta&0x20)
{
}
//while(1);
P1IFG&=~BIT0;
}
发送
#include "msp430x14x.h"
#include"api.h"
#define TX_ADR_WIDTH 5 // 5 bytes TX(RX) 地址长度
#define TX_PLOAD_WIDTH 5 // 20 bytes TX 有效载荷
//********延时段***************
#define CPU_F ((double)6000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
//**********************************数据的定义*********************************************
typedef unsigned char uchar; //数据类型
typedef unsigned int uint;
uchar TX_ADDRESS[TX_ADR_WIDTH] = {0x34,0x43,0x10,0x10,0x01}; // Define a static TX address
uchar TEST[TX_ADR_WIDTH];
uchar rx_buf[TX_PLOAD_WIDTH]; //接收缓存数组
uchar tx_buf[TX_PLOAD_WIDTH]={0x01,0x02,0x03,0x04,0x05};//发送缓存数组
uchar flag; //
uchar sta;//状态寄存器
uchar cfcs=0;
uchar faci=0;
uchar receive[5];
uchar data[5]={0x01,0x02,0x02,0x01,0x01};
//********************************按键定义*************************
#define CSN_HIGH P1OUT|=BIT2//P1.2控制SPI使能
#define CSN_LOW P1OUT&=~BIT2
#define CE_HIGH P1OUT|=BIT1//P1.1控制芯片发射使能
#define CE_LOW P1OUT&=~BIT1
#define IRQ P1IN&BIT0//读取P1.0的值*/
//*****************************声明子函数**************************************************
void int_clk();//初始化时钟
void int_spi0();//初始化SPI接口
void init_io();//初始化IO
//uchar delay_us(uint i);//延时
uchar SPI_RW(uchar byte);//通过SPI往nRF24L01写一个字节数据,接收nRF24L01的状态寄存器的值
uchar SPI_RW_Reg(uchar reg,uchar value);//通过SPI往nRF24L01将一个字节数据”value“写到寄存器”reg“里
uchar SPI_Read(uchar reg);//读nRF24L01 中寄存器”reg“里的值
uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar bytes);//从寄存器”reg“读取“bytes”个字节数据存放在数组pBuf里
uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bytes);//将存放在数组pBuf里“bytes”个字节数据写到寄存器”reg“中
uchar nRF24L01_RxPacket(uchar *rx_buf);//初始化nRF24L01为接收模式
uchar nRF24L01_TxPacket(uchar *tx_buf);//初始化nRF24L01为发送模式
void nRF24L01_Config();//nRF24L01配置
//*********************************主函数**********************************************
int main( void )
{
WDTCTL=WDTPW+WDTHOLD;
delay_us(10);
int_clk();
init_io();
int_spi0();
nRF24L01_Config();
_EINT();
while(1)
{
SPI_RW_Reg(WRITE_REG+STATUS,0X1E);
nRF24L01_TxPacket(data);
//sta=SPI_Read(STATUS);
while(P1IN&BIT0)
{flag=SPI_Read(CONFIG);
//cfcs=SPI_Read(OBSERVE_TX);
delay_ms(10);
}
//while(1);
/*while(1)
{
SPI_RW_Reg(WRITE_REG+STATUS,0x0E);
while(sta&0x10);
delay_us(10000);
}*/
}
}
/***********************************延时********************************************
uchar delay_us(uint i)
{
while(i--)
_NOP();
}*/
//***********************************初始化时钟********************************************
void int_clk()//MCLK=6MHZ,SMCLK=3MHZ,//ACLK=32768HZ,
{
uchar i;
//P5SEL=0X70;
BCSCTL1&=~XT2OFF;//开高晶振
BCSCTL2|=SELM1+SELS+DIVS0;
do
{
IFG1&=~OFIFG;
for(i=0xFF;i>0;i--);
}
while((IFG1&OFIFG)!=0);
IFG1&=~OFIFG;
}
//*************************初始化io端口******************************************
void init_io()
{
P1SEL=0X00;
P1DIR|=BIT1+BIT2;//单片机对nRF24L01的控制管脚P1.0(IRQ)P1.1(CE)P1.2(CSN)
P1OUT&=~BIT1;//CE低
P1OUT|=BIT2;//CSN高
P1IE|=BIT0;
P1IES|=BIT0;
// P1IE|=BIT0;
//P5SEL=0X70;//时钟信号检测口
}
//********************************初始化SPI0***********************************************
void int_spi0()//6;1;N;9600
{
P3SEL|=0X0E;
P3DIR|=BIT1+BIT3;
U0CTL|=SWRST;
U0CTL|=CHAR+SYNC+MM;
U0TCTL|=SSEL1+STC;
U0TCTL|=CKPH;
U0TCTL&=~CKPL;
U0BR0 = 0X38;
U0BR1 = 0X01;
U0MCTL = 0X40;
ME1|=USPIE0;
U0CTL&=~SWRST;
IE1&=~UTXIE0;
IE1&=~URXIE0;//禁止中断
}
//***********使用命令字*****************************
uchar SPI_WORD(uchar word)
{
P1OUT&=~BIT2;
U0TXBUF=word;
while(IFG1&URXIFG0);
while((IFG1&UTXIFG0)==0);
IFG1&=~UTXIFG0;
delay_us(1500);
return(U0RXBUF);
P1OUT|=BIT2;
}
//*******************************SPI发送一个字节数据,**************************************************
uchar SPI_RW(uchar byte) //
{
U0TXBUF=byte;
// 输出 'byte',从高位到低位
while(IFG1&URXIFG0);
while((IFG1&UTXIFG0)==0);
IFG1&=~UTXIFG0;
delay_us(1500);
return(U0RXBUF); // 返回接收的状态字节
}
//*************************往寄存器reg中写值'value',返回状态寄存器值*******************************************************
uchar SPI_RW_Reg(uchar reg,uchar value)
{
uchar status;
P1OUT&=~BIT2; // CSN 低, 初始化SPI通信
status = SPI_RW(reg); // 选择寄存器
SPI_RW(value); // 写值.
P1OUT|=BIT2; // CSN 高
delay_us(1);
return(status); // 返回nRF24L01状态值
}
//*****************************读寄存器的值****************************************************
uchar SPI_Read(uchar reg)
{
char reg_val;
P1OUT&=~BIT2; // CSN 低, 初始化SPI通信
SPI_RW(reg); // 选择寄存器
reg_val=SPI_RW(0x00); // 写寄存器
P1OUT|=BIT2; // CSN 高, 停止通信
delay_us(1);
return(reg_val); // 返回寄存器值
}
//********************************读出byte字节数据*************************************************
uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar bytes)
{
uchar status,byte_ctr;
P1OUT&=~BIT2; // P1.2 CSN 低, 初始化SPI通信
status = SPI_RW(reg); // 选择寄存器去读,并且读状态寄存器的值
for(byte_ctr=0;byte_ctr<bytes;byte_ctr++)
pBuf[byte_ctr] = SPI_RW(0x00); // 从 nRF24L01读字节
P1OUT|=BIT2; // CSN 高, 停止通信
delay_us(1);
return(status); // 返回NRF24L01的状态值
}
//*******************************写入BYTE字节数**************************************************
uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bytes)
{
uchar status,byte_ctr;
P1OUT&=~BIT2; // P1.2 CSN 低, 初始化SPI通信
status = SPI_RW(reg); // 选择寄存器去写,并且读状态寄存器的值
for(byte_ctr=0; byte_ctr<bytes; byte_ctr++) // 将字几个节写到 buffer(*pBuf)
SPI_RW(*pBuf++);
P1OUT|=BIT2; // CSN 高, 停止通信
delay_us(1);
return(status); // 返回NRF24L01的状态值
}
//*********************************************************************************
//接收函数,接收返回1表示有数据收到
uchar nRF24L01_RxPacket(uchar *rx_buf)
{
uchar sta;
uchar revale=0;
SPI_RW_Reg(WRITE_REG+CONFIG,0X0F);
P1OUT|=BIT1; // CE 管脚置高去使能接收设备
delay_us(130);
sta=SPI_Read(READ_REG+STATUS);
while(sta&0x40)
{
P1OUT&=~BIT1;
//CE_LOW进入闲置模式
SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);/*数据宽度未定义*/
//RD_RX_PLOAD=指令字读RX中有效数据,完成后清空FIFO
//完成后SPIrxbuff里是RX到得数据
// revale="0xff";//如果有数据收到,则点亮led
}
SPI_RW_Reg(WRITE_REG+STATUS,sta);
return revale;
}
//************************发送函数******************************
uchar nRF24L01_TxPacket(uchar *tx_buf)
{
P1OUT&=~BIT1;//CE置低
SPI_RW_Reg(WRITE_REG+CONFIG,0X0E);
SPI_WORD(FLUSH_TX);//清空TXFIFO
SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);
//给发送寄存器写入地址,宽度为TX_ADR_WIDTH
SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);
//给接收寄存器写入地址,宽度也为TX_ADR_WIDTH
SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH);
//向发送寄存器写入TX_PLOAD_WIDTH宽度的数据,
//配置为PWR_UP位,使能CRC,16位校验,发送模式
P1OUT|=BIT1; // CE 管脚置高
delay_ms(1.5);
}
//***********nRF24L01的配置函数*************************
void nRF24L01_Config()
{
P1OUT&=~BIT1;//CE为低,待机
P1OUT|=BIT2;//CSN置高,SPI复位
delay_ms(1.5);
//SPI_RW_Reg(WRITE_REG+STATUS,0X7E);
SPI_RW_Reg(WRITE_REG+CONFIG,0X0E);
SPI_RW_Reg(WRITE_REG+EN_AA,0X01);
//数据通道0自动应答
SPI_RW_Reg(WRITE_REG+EN_RXADDR,0X01);
//通道0允许
SPI_RW_Reg(WRITE_REG+SETUP_AW,0X03);
//设置地址宽度为5字节
SPI_RW_Reg(WRITE_REG+SETUP_RETR,0X1A);
//建立自动重发,500+86us,10次重发
SPI_RW_Reg(WRITE_REG+RF_CH,0x02);
//设置工作通道频率
SPI_RW_Reg(WRITE_REG+RF_SETUP,0X07);
//设置工作通道传输速率为1Mbps,发射功率为0dBm
SPI_RW_Reg(WRITE_REG+RX_PW_P0,TX_PLOAD_WIDTH);
}
//***********中断***************
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_ISR(void)
{
P1OUT&=~BIT1;//CE为低,待机
sta=SPI_Read(STATUS);
if(sta&0x10)
{
cfcs++;
}
else if(sta&0x20)
{
faci++;
}
P1IFG&=~BIT0;
} |
|