ATT衰减和通信协议

今天把昨天没有解决的问题给解决了,在子函数check()里设置每一种通信错误对应的flag,在主函数里调用check(),根据flag的不同,实现不同的操作。

感觉今天改程序的方法和昨天改的方法是差不多的,就是不知道为什么今天成功了昨天不行,可能是今天人品比较好大笑。然后也把几个子函数修改了一下,看着稍微好看一点不那么山寨了。

现在在调那个不通的SPI程序,不知道是不是因为芯片x5043有一套操作方法(就像以前调RS485那样),我漏了什么,所以spi发送过去的数据用串口调试助手读回来的不是原来的SPI发送的值,是00 、05之类的乱七八糟的值, 程序如下:

 

思路:用串口调试助手发送一字节数据0x30,用SPI向x5043发送这一字节数据,并读回数据return(SPI_SPDR) ,将SPI读回的数据又发送回串口调试助手

 

 

 

 

 

#include "config.h"
#define BPS 9600

uint32 SP485_DE=1<<17; //rs485使能
uint32 SPI_CS=1<<24; //x5043使能
uint8 SPI_rcv,Uart_rcv;


void InitSPI(void);
void InitUart(void);
uint8 MSPI_SendByte(uint8 data);

int main (void)
{// add user source code
 InitSPI();
 InitUart();
 
    while(1)
    {
     while((U0LSR & 0x01) == 0);//串口调试助手发送一字节数据0x03
     Uart_rcv=U0RBR;
    
     SPI_rcv=MSPI_SendByte(Uart_rcv);//SPI发送这一字节数据0x03,并读回(具体见子函数)
    
     IO0SET|=SP485_DE;
     U0THR = SPI_rcv;             //用串口调试助手接收 SPI读回的数据
     while((U0LSR & 0x40) == 0);
    
     IO0CLR|=SP485_DE;
    }
    return 0;
}

void InitSPI(void)
{
 PINSEL0=(PINSEL0&(~(0xff<<8)))|(0x55<<8);//管脚功能选择
 SPCCR=0x52;  //设置SPI时钟分频
 SPCR=(0<<3)|(1<<4)|(1<<5)|(0<<6)|(0<<7);
 IO1DIR|=SPI_CS;
 IO1CLR|=SPI_CS;
}

uint8 MSPI_SendByte(uint8 data)
{
 SPI_SPDR=data;
 while(0==(SPI_SPSR&0x80));
 return(SPI_SPDR);
}

void InitUart(void)
{
 uint16 Fdiv;
   
    PINSEL0=(PINSEL0&(~0x0f))|0x05;
    IO0DIR|=SP485_DE;
    IO0CLR|=SP485_DE;
  
    U0LCR = 0x83 ;//允许设置波特率
    Fdiv = (Fpclk / 16) /BPS;
    U0DLM = Fdiv /256;
    U0DLL = Fdiv % 256;
    U0LCR = 0x03;
   
   }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值