您当前的位置:五五电子网电子知识单片机-工控设备AVR单片机ATmega16读写EEPROM AT25256(ICC编译)程序 正文
ATmega16读写EEPROM AT25256(ICC编译)程序

ATmega16读写EEPROM AT25256(ICC编译)程序

点击数:7149 次   录入时间:03-04 11:52:37   整理:http://www.55dianzi.com   AVR单片机
  EEPROM_CSL; //使能
  SPI_MasterTransmit(0x03); //0x03为读25256的指令
  SPI_MasterTransmit(Address/256); //地址高位
  SPI_MasterTransmit(Address%256); //地址低位
  dataa=SPI_MasterTransmit(0x00);//发送任意数据
  EEPROM_CSH;
  return dataa;  //返回读到的数据
}
////////////////////////////////////eeprom  end////////////////////////////////////////


//端口初始化
void Port_Init()
{
  PORTA=0xff;
  DDRA=0x30;    //PA4,PA5输出1
  PORTB=0xbf;
  DDRB=0xb7;    //PB1输出1,PB2输出1,PB3输入0,PB4输出1,PB0输出1(用于新终端开关电源控制),PB5PB7为输出1
  PORTC=0xff;
  DDRC=0xd0;    //PC4输出1,PC6,PC7输出1
  PORTD=0xff;
  DDRD=0x26;    //PD0输入0,PD1输出1,PD5PD2输出1
}

 


void main(void)
{
 // unsigned char dataa,i,j;
  SREG=0x80;  //开放全局中断
  Port_Init();
  USART0_Init();
  USART1_Init();
//  GPRS_On();
  SPI_MasterInit();EEPROM_WRSR();
 
  while(1)
  {
      USART0_Transmit(0x22);
  USART0_Transmit(0x33);
      EEPROM_ByteWrite(0x2030,0x48); //给25256地址0x2030写入数据0x48
  USART0_Transmit(EEPROM_Read(0x2010)); 
      USART0_Transmit(EEPROM_Read(0x2030));//读出地址0x2030中数据,从串口0发送出来
  USART0_Transmit(0x44);
  USART0_Transmit(0x55);
  USART0_Transmit(EEPROM_RDSR());
  EEPROM_PageWrite(0x1001,"456789",6); //输出结果0xff,0xff,0xff,0x37,0x38,0x39
  USART0_Transmit(EEPROM_Read(0x1001));
  USART0_Transmit(EEPROM_Read(0x1002));
  USART0_Transmit(EEPROM_Read(0x1003));
  USART0_Transmit(EEPROM_Read(0x1004));
  USART0_Transmit(EEPROM_Read(0x1005));
  USART0_Transmit(EEPROM_Read(0x1006));
  USART0_Transmit(0x11);
  }
}

/* //IAR中中断的写法
#pragma vector=USART0_RXD_vect
__interrupt void Usart0Rx(void)
{
  unsigned char dataa;
  dataa=UDR0;
  usart0_transmit(dataa);
}
*/

//串行0通信接收完成中断\
//ICC中中断的写法
#pragma interrupt_handler USART0Rx:20
void USART0Rx()
{
  unsigned char data0;
  data0=UDR0;
  USART0_Transmit(data0);
}

/*串行1通信接收完成中断
分析灯不亮原因,开了串口1中断,但是没有加入中断函数,导致其他地方不能工作。
串口中断0能执行,是由于其优先级比串口中断1高
以下是书上的说法:
  接收结束标志位(RXC)用来说明接收缓冲器中是否有未读出的数据。当接收缓冲器中有未读出的
数据时,此位为1,当接收缓冲器空时为0(即不包含未读出的数据)。如果接收器被禁止(RXEN=0),
接收缓冲器会被刷新,从而使RXC清零。
  置位UCSRB的接收结束中断使能位(RXCIE)后,只要RXC标志置位(且全局中断使能)就会产生USART
接收结束中断。使用中断方式进行数据接收时,数据接收结束中断服务程序必须从UDR读取数据
以清除RXC标志,否则只要中断处理程序结束,一个新的中断就会产生。

终上所述,RXC标志未清零,导致中断一直产生。
*/
#pragma interrupt_handler USART1Rx:21
void USART1Rx()
{
  unsigned char data1;
  data1=UDR1;
//  USART1_Transmit(data1);
}



www.55dianzi.com

上一页  [1] [2] 


本文关键字:程序  AVR单片机单片机-工控设备 - AVR单片机