⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eeprom._c

📁 //实验板的AVR程序
💻 _C
字号:
//******************************************************************************
//                                                                             *
//    FileName   : 实验板eeprom片内.c           ICCAVR V6.31A编译              *
//    Function   : 片内eeprom操作练习                                          *
//    Date       : 2006-11-14                                                  *
//    Version    : 1.0                                                         *
//                                                                             *
//    Author     : 开关电源              hongtusy@163.com                      *
//    Company    : 电子信息技术咨询网    http://www.itsn.cn                    *
//                                                                             *
//***************************描述与记事*****************************************
//实验板的AVR程序,片内eeprom操作练习,和计算机通讯,上电后首先发送保存在片内的数据
//然后接收PC发送的数据并保存起来,然后读取数据返回给pc,断电后数据不丢失。
//接线定义:将串口经rs232连接pc机  即PW6-7/8.
//记事:本程序旨在对片内eeprom使用的理解与演示,程序适合初学者使用.
//使用8MHz晶体。
//******************************************************************************

#include <iom8535v.h>             //头文件,ATmega8535单片机的寄存器定义
#include <macros.h>               //

typedef unsigned char uchar;
typedef unsigned int uint;

#define BAUDRATE        9600	 //波特率
#define F_CPU			8000000  //系统晶体频率

/************************************************
函 数 名:    DelaymS()
功    能:    毫秒级延时函数
输入参数:     延迟时间/系统晶体
输出参数:    做相应的延迟处理
描    述:    /
***********************************************/
void DelaymS (uint i)            //延时函数,参数i为延时时间
{
    uint j,k;                        //双重延时
	for (j=0;j<i;j++)
	{
	    for (k=0;k<=500;k++);
	}
}
/********************************************************
  子程序名:   Send_word()
  功    能:   串口发送一个字节
  输入参数:   /
  输出参数:   /
  描    述:   把数据发送出去先发送再检测,发完后,才离开
********************************************************/
void Send_word(uchar h)
{
 	 UDR = h;                     //发送一个字符数据
 	 while(!(UCSRA&(1<<UDRE)))     //1字节发送完毕?
	 ;
}
/********************************************************
  子程序名:   receive_word()
  功    能:   串口接收一个字节数据
  输入参数:   /
  输出参数:   /
  描    述:   /
********************************************************/
uchar receive_word (void)
{
 	 while(!(UCSRA&(1<<RXC)))          //1字节接收完成?
	 ;
	 return  UDR;                  //输出接收到的数据
}
/************************************************
函 数 名:    Init_port()
功    能:    单片机初始化函数
输入参数:     /
输出参数:    /
描    述:    相关口方向的设置等
***********************************************/
void mcu_Init(void)
{
	DDRD = 0xff;                      //PD口为推挽1输出,位码,PD7为485DE脚。
}
/********************************************************
  子程序名:   usart_Init()
  功    能:   串口初始化
  输入参数:   /
  输出参数:   /
  描    述:   /
********************************************************/
void usart_Init (void)
{
	 CLI();    //关闭中断
	 UBRRL= (F_CPU/BAUDRATE/16-1)%256;
     UBRRH= (F_CPU/BAUDRATE/16-1)/256;
	 //UBRRL=51; //波特率寄存器,UART:9600bps,8.000MHz
	 UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);  //接收结束中断使能,RXD&TXD使能
	 UCSRC = (1<<URSEL)|(1<<UPM1)|(1<<UCSZ0)|(1<<UCSZ1);
	  //访问UCSRC寄存器,偶校验,8个数据位,默认一个停止位,
	 //SEI();      //开全局中断使能
}
/********************************************************
  子程序名:   EEPROM_write
  功    能:   写一字节数据到片内指定地址单元
  输入参数:   /
  输出参数:   /
  描    述:   /
********************************************************/
void EEPROM_write(uint uAddr,uchar uData)
{
	 EEAR = uAddr;              //写操作的16位地址寄存器
	 EEDR = uData;              //写数据到数据寄存器
	 EECR |= (1<<EEMWE);        //允许EEPROM操作
	 EECR |= (1<<EEWE);         //开始写操作
	 while (EECR & (1<<EEWE))   //等待写操作完成
	 ;
}
/********************************************************
  子程序名:   EEPROM_read
  功    能:   从片内指定地址单元读一字节数据
  输入参数:   /
  输出参数:   /
  描    述:   /
********************************************************/
uchar EEPROM_read(uint uAddr)
{
     while (EECR & (1<<EEWE))   //等待前一次写操作完成
	 ;
	 EEAR = uAddr;              //写操作的16位地址寄存器
	 EECR |= (1<<EERE);         //开始读操作
	 return EEDR;               //输出读出的数据
}
//*****************主程序**********************************
void main (void)
{
     uchar temp,i,j,k;
     mcu_Init();       //单片机初始化
	 usart_Init();   //串口初始化
	 i=EEPROM_read(0x10);     //读片内EEPROM地址为0x10的数据,
	 Send_word(i);           //发送数据到PC,这个数是掉电前保存的。
	 while(1)                      //无限循环执行
	 {
		   j=receive_word();       //串口接收一字节数据
		   EEPROM_write(0x10,j);    //写片内地址为0x10EEPROM的
		   //DelaymS(1000);          //延迟
		   k=EEPROM_read(0x10);     //读片内EEPROM地址为0x10的数据
		   Send_word(k);           //发送数据到PC
	 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -