打印
[AVR单片机]

avr中某端口,既有输出又有输入,如何处理呢?

[复制链接]
2054|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
如对一芯片 例如MAX1241,无论是采用spi方式还是串行读取方式,如果B口的PB4,PB6,PB7用于片选CS, MISO,SCK;由于该芯片的特殊在进行数据转换时需要对数据输入口MISO判断是否为高电平,再进行后面操作。

那么在前面又是要设置CS, SCK为输出;另外又要对MISO进行读。
请问如何处理呢?

按照我的方式一致不能对芯片正常操作。
//以下是采用串行数据读取,非SPI
uint Max1241convent()
{
  uint getdata=0;
  uchar i=0;
        DDRCON|=Max1241CLK|Max1241CS ;   //定义输出

  PORTCON&=~(Max1241CLK|Max1241CS);
   asm("nop"); asm("nop"); asm("nop");
//  DDRCON=0X00;
  while(~(PINCON & 0X40));//等待转换
DDRCON|= Max1241CLK ; asm("nop"); asm("nop");
  DDRCON&=~Max1241CLK; asm("nop");asm("nop");
  
  for(i=0;i<12;i++)
  {
   DDRCON|= Max1241CLK ; asm("nop");asm("nop");
  DDRCON&=~Max1241CLK;asm("nop");asm("nop");
        getdata=getdata<<1;
        if (PINCON & 0X40)
        getdata=getdata|0x01;
  }
        DDRCON|=Max1241CS ;
  return getdata;
}

max1241-1.jpg (59.76 KB )

max1241-1.jpg

max1241-2.jpg (16.11 KB )

max1241-2.jpg

相关帖子

沙发
selfstudy|  楼主 | 2011-7-28 18:03 | 只看该作者
采用SPI的方式也不行,主主要是等待1241DOUT变为高电平,但读不到啊。
以下是SPI的方式

void MAX1241_Init()
{
//根据其时序,需要拉低SCK,拉低CS,这时DOUT为低电平,等待DOUT 转换成功变为高电平后开始接受SPI的AD数据
        DDR_SPI&=~MISO_AD;//将MISO为输入
        //PORT_SPI|=MISO_AD;//上拉
        DDR_SPI|=CS_AD|SCK_AD;//输出
        PORT_SPI&=~SCK_AD;//先拉低SCK
        PORT_SPI|=CS_AD;//CS先拉高
        _delay_ms(1);
        PORT_SPI&=~(CS_AD );//拉低片选和时钟芯片
        //DDR_SPI=0x00;//转为输入
while(!(PIN_SPI & 0x40));//等待转换为高电平,
//                _delay_ms(8);
}

void SPI_Init()
{
        DDR_SPI|=CS_AD|SCK_AD;//输出
        SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);//使能SPI,16分频;MSB在前
        PORT_SPI&=~CS_AD;//拉低CS
}

uchar Max1241_AD()
{
        uint ad_data;
        while(!(SPSR & (1<<SPIF)));//等待中断响应
        ad_data=SPDR<<4;
        ad_data=ad_data|(SPDR>>3);         
//        PORT_SPI|=CS_AD;//先拉高
        return ad_data;
}

使用特权

评论回复
板凳
selfstudy|  楼主 | 2011-7-28 18:07 | 只看该作者
请问:这样先输出,再读取的方式可行吗??
      
PORT_SPI&=~(CS_AD );//拉低片选和时钟芯片
        
while(!(PIN_SPI & 0x40));//等待转换为高电平,

使用特权

评论回复
地板
chenczy| | 2011-8-3 15:35 | 只看该作者
做输出时设为输出,做输入时设为输入就行了

使用特权

评论回复
5
qin552011373| | 2011-8-27 22:45 | 只看该作者
看看

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

84

帖子

2

粉丝