当前位置:首页 > 单片机 > 单片机
[导读] #include#define BAUD 9600 //波特率4800#define CRYSTAL 3686400 //晶振3M#define BAUD_set (unsigned int)( (unsigned long)CRYSTAL/(16*(unsigned long)BAUD)-1 ) //波特率计算#define BAUD_H (unsi

#include

#define BAUD 9600 //波特率4800
#define CRYSTAL 3686400 //晶振3M
#define BAUD_set (unsigned int)( (unsigned long)CRYSTAL/(16*(unsigned long)BAUD)-1 ) //波特率计算
#define BAUD_H (unsigned char)(BAUD_set>>8) //波特率寄存器
#define BAUD_L (unsigned char)(BAUD_set)

/*
//GPRS
#define GPRS_ONOFFH PORTA|=(1<#define GPRS_ONOFFL PORTA&=~(1<#define GPRS_RSTH PORTB|=(1<#define GPRS_RSTL PORTB&=~(1<


//通讯灯
#defineLED1H PORTC|=(1<#define LED1L PORTC&=~(1<#define LED2H PORTC|=(1<#define LED2L PORTC&=~(1<#define LED3H PORTC|=(1<#define LED3L PORTC&=~(1<*/

//25256
#define EEPROM_CSH PORTD|=(1<#define EEPROM_CSL PORTD&=~(1<#define EEPROM_WPH PORTD|=(1<#define EEPROM_WPL PORTD&=~(1<

#define SPIF 7


//////////////////////USRT0,USTR1 begin//////////////////////////
/////////////////////////////////////串口begin///////////////////////////////////////////
//串口0初始化
void USART0_Init()
{
UCSR0B = (1 << RXCIE0) | /*接收完成中断允许*/
// (1 << TXCIE0) | /*发送完成中断允许*/
(1 << RXEN0) | /*接收允许*/
(1 << TXEN0); /*发送允许*/
UBRR0H = BAUD_H; //设置波特率
UBRR0L = BAUD_L;
UCSR0C = (1 << URSEL0) | /*选择访问UCSRC寄存器*/
(3 << UCSZ00); /*UCSZ2 UCSZ1 UCSZ0=3 8个数据位*/
}


//串口1初始化
void USART1_Init()
{
UCSR1B = (1 << RXCIE1) | /*接收完成中断允许*/
// (1 << TXCIE1) | /*发送完成中断允许*/
(1 << RXEN0) | /*接收允许*/
(1 << TXEN0); /*发送允许*/
UBRR1H = BAUD_H; //设置波特率
UBRR1L = BAUD_L;
UCSR1C = (1 << URSEL1) | /*选择访问UCSRC寄存器*/
(3 << UCSZ10); /*UCSZ2 UCSZ1 UCSZ0=3 8个数据位*/
}


//串口0查询方式发送数据
void USART0_Transmit(unsigned char data)
{
while(!(UCSR0A&(1< /*等待发送缓冲器为空。UDRE数据寄存器空标志位,
当发送缓冲器空时被置1;发送缓冲器包含需要发送的数据时清零*/
UDR0=data; //将数据放入缓冲器,发送数据
}


//串口1查询方式发送数据
void USART1_Transmit(unsigned char data)
{
while(!(UCSR1A&(1< /*等待发送缓冲器为空。UDRE数据寄存器空标志位,
当发送缓冲器空时被置1;发送缓冲器包含需要发送的数据时清零*/
UDR1=data; //将数据放入缓冲器,发送数据
}

/*
//发送GPRS命令给手机模块
void USART1_Tx_Str(char *s,unsigned char cnt)
{
while(cnt--)
{
USART1_Transmit(*s);
s++;
}
}
*/
/////////////////////////////////////////////串口end/////////////////////////////////////


/*
unsigned char usart0_receive(void)
{
while(!(UCSR0A&(1<return UDR0; //从缓冲器中获取并返回数据
}
*/

////////////////////////USRT1,USRT2 end///////////////////////


///////////////////////////////////////////GPRS begin////////////////////////////////////
//延时ms
/*
void delayms(unsigned int ms)
{
unsigned int i,j;
for(i=0;i for(j=0;j<3500;j++) ;
}


//GPRS开机
void GPRS_On()
{
GPRS_RSTH; GPRS_ONOFFH; delayms(20);
GPRS_RSTL; delayms(10);
GPRS_ONOFFL;LED1L;LED2L;LED3L;delayms(1800);
GPRS_ONOFFH;LED1H;LED2H;LED3H;delayms(200);
LED1L;LED2L;
}


//GPRS关机
void GPRS_Off()
{
GPRS_ONOFFL;delayms(1800);
GPRS_ONOFFH;delayms(5000);
GPRS_RSTL;
}


//GPRS复位
void GPRS_Rst()
{
GPRS_Off();
GPRS_On();
}
*/
////////////////////////////////////////GPRS end/////////////////////////////////////////


////////////////////////////////////eeprom begin//////////////////////////////////////
void SPI_MasterInit(void)
{
EEPROM_WPH;
delayms(20);
SPCR =(1</*
使能SPI,选择主机模式,SCK=fosc/128,选择SPI模式CPOL=0,CPHA=0
*/
}

unsigned char SPI_MasterTransmit(unsigned char cData)
{
//启动数据传输
SPDR = cData;
//等待数据传输结束
while(!(SPSR&(1<//发送完成后,清除发送标志
// SPSR&=~(1< return SPDR;
//每次发送数据的同时,也会接收到数据。
}

//EEPROM写使能
void EEPROM_WREN()
{
EEPROM_CSL; //拉低片选端
SPI_MasterTransmit(0x06); //0x06为写使能的指令
EEPROM_CSH; //抬高片选端,结束
}

//EEPROM写禁止
void EEPROM_WRDI()
{
EEPROM_CSL;//delayms(20);
SPI_MasterTransmit(0x04); //0x04为写禁止的指令
EEPROM_CSH;//delayms(20);
}

//写状态寄存器
void EEPROM_WRSR()
{
EEPROM_WREN();
EEPROM_CSL; //使能
SPI_MasterTransmit(0x01); //0x01为写状态寄存器的指令
SPI_MasterTransmit(0x82); //把0x82写入状态寄存器
EEPROM_CSH; //抬高片选,结束
}

/*
读状态寄存器。读SPI从机数据时,主机要给从机发送任意数据,才能收到从机返回的数据.
即0x00可以是任何数据(但是不能是25256的指令,例如0x01,0x04之类的)
*/
unsigned char EEPROM_RDSR()
{
unsigned char StatusReg;
EEPROM_WREN();
// EEPROM_WRDI(); //如使用此句,不使用EEPROM_WREN(),则读出0x80
EEPROM_CSL; //使能
SPI_MasterTransmit(0x05); //0x05为读状态寄存器指令
StatusReg=SPI_MasterTransmit(0x00); //给25256发送任意数据
/*
此处原为:
SPDR = 0x00;
while(!(SPSR&(1<StatusReg=SPDR;
时出错,读出数据都为0xff。想不清楚为什么
*/
EEPROM_CSH;
return StatusReg;
}

//25256字节写
void EEPROM_ByteWrite(unsigned int Address,unsigned char Data)
{
EEPROM_WREN();
EEPROM_CSL; //使能
SPI_MasterTransmit(0x02); //0x02为写指令
SPI_MasterTransmit(Address/256); //地址高位
SPI_MasterTransmit(Address%256); //地址低位
SPI_MasterTransmit(Data); //写入数据
EEPROM_CSH;delayms(50);
}

//25256页写。试验结果,只能连续写入三个字节
void EEPROM_PageWrite(unsigned int Address,unsigned char *Data,unsigned char NData)
{
unsigned char i;
EEPROM_WREN();
EEPROM_CSL;
SPI_MasterTransmit(0x02);//页写指令
SPI_MasterTransmit(Address/256); //地址高位
SPI_MasterTransmit(Address%256); //地址低位
for(i=0;i {
SPI_MasterTransmit(*Data); //写入数据
Data++;
}
EEPROM_CSH;
}

//25256读
unsigned char EEPROM_Read(unsigned int Address)
{
unsigned char dataa;
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);
}
}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

特朗普集团近日取消了其新推出的T1智能手机“将在美国制造”的宣传标语,此举源于外界对这款手机能否以当前定价在美国本土生产的质疑。

关键字: 特朗普 苹果 AI

美国总统特朗普在公开场合表示,他已要求苹果公司CEO蒂姆·库克停止在印度建厂,矛头直指该公司生产多元化的计划。

关键字: 特朗普 苹果 AI

4月10日消息,据媒体报道,美国总统特朗普宣布,美国对部分贸易伙伴暂停90天执行新关税政策,同时对中国的关税提高到125%,该消息公布后苹果股价飙升了15%。这次反弹使苹果市值增加了4000多亿美元,目前苹果市值接近3万...

关键字: 特朗普 AI 人工智能 特斯拉

3月25日消息,据报道,当地时间3月20日,美国总统特朗普在社交媒体平台“真实社交”上发文写道:“那些被抓到破坏特斯拉的人,将有很大可能被判入狱长达20年,这包括资助(破坏特斯拉汽车)者,我们正在寻找你。”

关键字: 特朗普 AI 人工智能 特斯拉

1月22日消息,刚刚,新任美国总统特朗普放出重磅消息,将全力支持美国AI发展。

关键字: 特朗普 AI 人工智能

特朗普先生有两件事一定会载入史册,一个是筑墙,一个是挖坑。在美墨边境筑墙的口号确保边境安全,降低因非法移民引起的犯罪率过高问题;在中美科技产业之间挖坑的口号也是安全,美国企业不得使用对美国国家安全构成威胁的电信设备,总统...

关键字: 特朗普 孤立主义 科技产业

据路透社1月17日消息显示,知情人士透露,特朗普已通知英特尔、铠侠在内的几家华为供应商,将要撤销其对华为的出货的部分许可证,同时将拒绝其他数十个向华为供货的申请。据透露,共有4家公司的8份许可被撤销。另外,相关公司收到撤...

关键字: 华为 芯片 特朗普

曾在2018年时被美国总统特朗普称作“世界第八奇迹”的富士康集团在美国威斯康星州投资建设的LCD显示屏工厂项目,如今却因为富士康将项目大幅缩水并拒绝签订新的合同而陷入了僵局。这也导致富士康无法从当地政府那里获得约40亿美...

关键字: 特朗普 富士康

今年5月,因自己发布的推文被贴上“无确凿依据”标签而与推特发生激烈争执后,美国总统特朗普签署了一项行政令,下令要求重审《通信规范法》第230条。

关键字: 谷歌 facebook 特朗普

众所周知,寄往白宫的所有邮件在到达白宫之前都会在他地进行分类和筛选。9月19日,根据美国相关执法官员的通报,本周早些时候,执法人员截获了一个寄给特朗普总统的包裹,该包裹内包含蓖麻毒蛋白。

关键字: 美国 白宫 特朗普
关闭