📄 msp430sgtz.c
字号:
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
P4OUT&=~SDA64; //SDA=0;
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
P4OUT&=~SCL64; //SCL=0
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
}
void stopb64(void)
{
P4OUT&=~SDA64; //SDA=0
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
P4OUT|=SCL64; //SCL=1
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
P4OUT|=SDA64; //SDA=1
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
}
void byte_tx(uchar shu) /* 发送一个字节 */
{
uchar i,temp,temp1;
temp=shu;
for (i=0;i<8;i++)
{
P4OUT&=~SCL64; //SCL=0;
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
//P3OUT&=~SDA430;
nop();
nop();
temp1=(temp&0x80);
if(temp1==0) P4OUT&=~SDA64;
else P4OUT|=SDA64;
/*P3OUT|=((temp&0x80)/32); //sda=temp的最高位*/
temp=temp<<1;
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
P4OUT|=SCL64; //SCL=1;
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
}
P4OUT&=~SCL64; //SCL=0
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
P4OUT|=SDA64; //SDA=1
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
}
uchar byte_rx(void) /* 接收一个字节 */
{
uchar i,j,k=0;
P4OUT&=~SCL64; ///SCL=0;
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
P4DIR&=~SDA64; //SDA为输入状态
for (i=0;i<8;i++)
{
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
P4OUT|=SCL64; //SCL=1;
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
if((P4IN&SDA64)==0) j=0;
else j=1;
k=(k<<1)|j;
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
P4OUT&=~SCL64; //SCL=0
}
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
P4DIR|=SDA64; //SDA为输出状态
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
return(k);
}
void judg_ack(void)
{
P4DIR&=~SDA64; //SDA为输入状态
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
P4OUT|=SCL64; //SCL=1;
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
for(i=0;i<99;i++)
{
if((P4IN&SDA64)==0)
break;
nop();
}
P4OUT&=~SCL64; //SCL=0
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
P4DIR|=SDA64; //SDA为输出状态
P4OUT|=SDA64; //SDA=1
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
}
void wr1byte(uint addr,uchar shu)
{
uchar buf;
_DINT();
startb64();
byte_tx(0xa0);
judg_ack();
buf=(uchar)(addr/0x100);
byte_tx(buf);
judg_ack();
buf=(uchar)(addr%0x100);
byte_tx(buf);
judg_ack();
byte_tx(shu);
judg_ack();
stopb64();
delay(100);
_EINT();
}
uchar re1byte(uint addr)
{
uchar buf;
_DINT();
startb64();
byte_tx(0xa0);judg_ack();
buf=(uchar)(addr/0x100);
byte_tx(buf);judg_ack();
buf=(uchar)(addr%0x100);
byte_tx(buf);judg_ack();
startb64();
byte_tx(0xa1);judg_ack();
buf=byte_rx();
nop();
nop();
nop();
nop();
P4OUT|=SDA64; //sda=1;
nop();
nop();
nop();
nop();
P4OUT|=SCL64; //scl=1;
nop();
nop();
nop();
nop();
P4OUT&=~SCL64; //scl=0;
nop();
nop();
nop();
nop();
stopb64();
_EINT();
return(buf);
}
void readicid(void) /*************读取卡号****************/
{
a=0x55; //卡号存在0X55单元开始处
for(i=0;i<8;i++)
{
icidbuf[i] = IC_read(a);
a++;
}
}
/******************串行通信处理程序***************************/
void r232cl(void)
{
///
///
///进行预处理
if((FLAG1&BIT1)!=0) //如果接收数据完毕则进行相应的处理
{
if((FLAG1&BIT2)!=0)
{
if((FLAG2&BIT0)!=0) //正在测试过程中
{
}
else
{
}
//上位机进行读操作命令的处理
}
if((FLAG1&BIT3)!=0)
{
/// //下位机进行写操作命令的处理
}
}
}
/***************读取串口的数据,通过查询方式********/
/***************数据放到r232buf里******************/
/***************需要关闭中断***********************/
void readuart(void)
{
uchar temp;
P4OUT|=BIT3; // P4.3=1打开电源
r232buf[0]=0; //首先附于初值
for(r232buf[0]=0;r232buf[0]<39;r232buf[0]++)
{
while((IFG2&URXIFG1)==0); //如果没有接收到数据时,等待
temp=r232buf[0]+1;
r232buf[temp]=RXBUF1; //读取接收缓存区的数据
}
delay(255);
delay(255);
r232buf[40]=RXBUF1; //为了将接收缓冲区清空,清除接收标志位
}
void readuart1(void)
{
//uchar temp;
//P4OUT|=BIT3; // P4.3=1打开电源
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x43; //将信道1发送出去
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x48; //将信道1发送出去
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x0d;
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x0a; //发送确认键
for(r232buf[0]=0;r232buf[0]<5;r232buf[0]++)
{
while((IFG2&URXIFG1)==0); //如果没有接收到数据时,等待
r232buf[r232buf[0]+1]=RXBUF1; //读取接收缓存区的数据
}
delay(255);
delay(255);
r232buf[40]=RXBUF1; //为了将接收缓冲区清空,清除接收标志位
}
void readuart2(void)
{
//uchar temp;
//P4OUT|=BIT3; // P4.3=1打开电源
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x52; //将信道1发送出去
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x53; //将信道1发送出去
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x0d;
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -