AVR MEGA8 通过 SPI 总线读写 93C46

发布者:温暖心情最新更新时间:2016-07-15 来源: eefocus关键字:AVRMEGA8  SPI总线  读写93C46 手机看文章 扫描二维码
随时随地手机看文章
       AVR MEGA8 通过 SPI 总线读写 93C46,主要是练习SPI总线的使用而已,93C46的驱动相当的简单,这个代码也很好写,调试也不难,冷藏了一段时间的代码了,也懒得整理,copy出来就算了,随便看看就算了。

 
 
/*
 * 项目:SPI总线驱动93C46
 * 平台:AVR MEGA8 + WinAVR
 * 作者:Etual / Etual@163.com
 * 日期:2008-8-18
 */
 

SPI访问部分代码:

/////////////////////////////////////////////////

// pin assignment

#define SS PB2 //chip select

#define SCK PB5 //clock

#define MOSI PB3 //input

#define MISO PB4 //output


#define SS_SET (PORTB|=(1<
#define SCK_SET (PORTB|=(1<
#define MOSI_SET (PORTB|=(1<< P>

#define SS_CLR (PORTB &= ~(1<
#define SCK_CLR (PORTB &= ~(1<
#define MOSI_CLR (PORTB &= ~(1<< P>


void spi_init(void)
{
    DDRB |= (1<< SSBR >< MOSI >    DDRB &=~(1<
    
    SPCR = 0x53;
    SPSR = 0x00;        
}


void SendByte(u8 sData)
{
    SPDR = sData;
    while(!(SPSR & (1<
}

 

u8 spi_read(void)
{
    SPDR = 0x00;
    while(!(SPSR & (1<
    return SPDR;
}

//////////////////////////////////////////////////

//start and stop condition of 93C46


void Start(void)
{
    u8 temp;

    temp = SPCR;
    SPCR = 0; // 禁止SPI功能

//-----------------------------------------------

    SCK_CLR; // 手工产生一个起始位,93C46特殊的地方

    MOSI_SET; // 所以要特殊处理

    SS_SET;
    SCK_SET;
//-----------------------------------------------

    SPCR = temp; // 使能SPI功能

}

void Stop(void)
{
    SS_CLR;
}

//////////////////////////////////////////////////

// write enable / diable

void EWEN(void)
{
    Start();
    SendByte(0x30); // EWEN command

    Stop();
}

void EWDS(void)
{
    Start();
    SendByte(0x00); // EWDS command

    Stop();
}


//////////////////////////////////////////////////

// read word

u16 ReadWord(u8 addr)
{
    u16 temp=0;
    u8 hig,low;
    
    Start();
    SendByte(addr | 0x80); // read command

    //------------------------ 切换到SPI模式1

    SPCR = 0x5b;
    hig = spi_read();
    low = spi_read(); 
       //------------------------ 切换回SPI模式0

    SPCR = 0x53;
    Stop();
    temp = (hig<<8) + low ;
    return temp;
}

//////////////////////////////////////////////////

// write a word

void WriteWord(u16 data,u8 addr)
{
    EWEN();
    Start();
    SendByte(addr | 0x40); // write command

    SendByte((u8)(data>>8)); // send hig byte

    SendByte((u8)data); // send low byte

    Stop(); // wait at lease 2ms

}

void WriteAll(u16 data)
{
    EWEN(); // write enable

    Start();
    SendByte(0x10); // write command

    SendByte((u8)(data>>8)); // send hig byte

    SendByte((u8)data); // send low byte

    Stop(); // wait at lease 10MS

}

关键字:AVRMEGA8  SPI总线  读写93C46 引用地址:AVR MEGA8 通过 SPI 总线读写 93C46

上一篇:ICC AVR精确定时的编程实验
下一篇:PC和ATMEGA128串口通信

推荐阅读最新更新时间:2024-03-16 15:00

51单片机入门 - SPI总线
UART、 I2C 和 SPI 是单片机系统中最常用的三种通信协议。 1、初步介绍 SPI 是一种高速的、全双工、同步通信总线,标准的 SPI 也仅仅使用 4 个引脚,常用于单片机和 EEPROM、FLASH、实时时钟、数字信号处理器等器件的通信。 SPI 通信原理比 I2C要简单,它主要是主从方式通信,这种模式通常只有一个主机和一个或者多个从机,标准的 SPI 是 4 根线,分别是 SSEL( 片选,也写作 SCS)、 SCLK( 时钟,也写作 SCK)、 MOSI( 主机输出从机输入Master Output/Slave Input) 和 MISO( 主机输入从机输出 Master Input/Slave O
[单片机]
SPI总线初体验
SPI是当前用的比较多的硬件总线,结构很简单,一共只要4根线就可以了。 其中两根是数据线,名字等会说,一根时钟线,叫SCK; 一根是片选线(CS)。4根线的连接见下面: SPI的典型应用中,通信的双方一个是主(Master),一个是从(slave)。区别是由主设备提供通信时钟信号SCK给从设备,此外主设备还需要提供一个引脚来驱动Slave的片选信号CS。主从设备的SO和SI是交叉连接的, 主的SO是数据输出口要接在从设备的SI上,反之依然。根据这样的设计,能做SPI的设备往往是单片机, ARM芯片或者更强一些的CPU什么,而flash, 网络芯片或者声音A/D 和D/A转换芯片就扮演从设备的角色。主设备提供片选信号来选中
[嵌入式]
74HC595使用SPI总线连接51单片机的驱动程序
函数名称: HC595SendData //8位串行输入/输出,并行输出 功能描述: 向SPI总线发送数据 这里只说明并行输入的一般情况 管脚描述:请参考相关的芯片资料 void HC595SendData(unsigned int SendVal) { unsigned char i; for(i=0;i 8;i++) { if((SendVal i)&0x80) MOSIO=1; // set dataline high //若输入最高位为1,则令串行输入为1,反之输入0 else MOSIO=0; S_CLK=0; //上升沿输入每一位 NOP(); //datasheet给
[单片机]
SPI总线协议使用与原理
SPI ,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。   SCSPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(用于单向传输时,也
[嵌入式]
嵌入式系统中可配置式GPIO模拟SPI总线方法
在嵌入式系统处理器中有相当一部分处理器不带SPI接口,但基丁SPI接口的设备非常丰富,此外,SPI设备的不同以及处理器对GPIO口位寻址是否支持各处理器各有不同,因而不同处理器中软件模拟GPIO也各不相同。若能提供一种通用可配置可移植的GPIO模拟SPI总线的驱动则能很方便快捷的访问SPI设备,从而提高整个嵌入式系统的开发效率。本文针对GPIO口位寻址与否给出方面,给出了一种可配置GPIO模拟SPI总线的方法并详细介绍了其设计与实现过程,且具有代码小可移植性强使用方便等特点。 1 GPIO规范 SPI是一个全双工的串行接口。它设计成可以在一个给定总线上处理多个互联的主机和从机。在一定数据传输过程中,接口上只能有一个丰机和一个从
[嵌入式]
SPI总线协议的通信原理及应用举例
SPI的通信原理 很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)。   (1)SDO – 主设备数据输出,从设备数据输入   (2)SDI – 主设备数据输入,从设备数据输出   (3)SCLK – 时钟信号,由主设备产生   (4)CS – 从设备使能信号,由主设备控制   其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。这就允许在同一总线上连接多个SPI设备成为可能。   
[模拟电子]
基于SPI总线的电能计量芯片ATT7022及其在配电监测终端的应用
摘要:介绍了高精度电能计量芯片ATT7022的主要功能、性能比较、内部结构、接口方式及校表方法等,同时对ATT7022在电能配电监控终端的应用作了简要阐述。 关键词:SPI总线 ATT7022 电能计量 W77E58 配电监控终端 1 概述 ATT7022是珠海炬力集成电路设计有限公司生产的一款高精度三相电能计量芯片,该芯片对有功、无功功率的测量精度分别达到0.2s和0.5s,所能测量的电参数包括有功、无功、视在功率、双向有功和四角限无功电能;电压和电流有效值;相位、频率等。ATT7022具有计量参数齐全、校表功率完善等优点,简化了软件设计,缩短了软件开发周期。特别是AT7022可支持全数字校表,即软件校表。软件校表可提高
[应用]
嵌入式系统中可配置式GPIO模拟SPI总线方法
在嵌入式系统处理器中有相当一部分处理器不带SPI接口,但基丁SPI接口的设备非常丰富,此外,SPI设备的不同以及处理器对GPIO口位寻址是否支持各处理器各有不同,因而不同处理器中软件模拟GPIO也各不相同。若能提供一种通用可配置可移植的GPIO模拟SPI总线的驱动则能很方便快捷的访问SPI设备,从而提高整个嵌入式系统的开发效率。本文针对GPIO口位寻址与否给出方面,给出了一种可配置GPIO模拟SPI总线的方法并详细介绍了其设计与实现过程,且具有代码小可移植性强使用方便等特点。 1 GPIO规范 SPI是一个全双工的串行接口。它设计成可以在一个给定总线上处理多个互联的主机和从机。在一定数据传输过程中,接口上只能有一个丰机和一个从
[工业控制]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved