📄 avr16spi.c
字号:
/***********************************************
**** AVR SPI接口使用范例 ***
**** ***
**** 作者: HJJourAVR ***
**** 编译器:WINAVR20050214 ***
**** ***
**** www.OurAVR.com 2005.9.26 ***
***********************************************/
/*
本程序简单的示范了如何使用AVR ATMEGA16的SPI接口来访问DS1302 RTC实时时钟芯片
串行外设接口-SPI
DS1302的读写控制
USART跟PC连接,实现显示和控制
*/
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include <avr/delay.h>
//时钟定为外部晶振 7.3728MHz,F_CPU=7372800
#include "main.h"
unsigned char DS1302_EXIST;
unsigned char INITDATE[8]={0x50, //59秒
0x59, //59分
0x23, //23时 24小时制
0x06, //06日
0x10, //10月
0x04, //星期四
0x05, //2005年
0x80 //写保护
};
unsigned char CURDATE[7];
unsigned char sCURDATE[]="20xx年xx月xx日xx时xx分xx秒 星期xx";
unsigned char sWEEK[]="错一二三四五六日";
//注意 汉字要占用2个字节的空间
int main(void)
{
//上电默认DDRx=0x00,PORTx=0x00 输入,无上拉电阻
PORTA=0xFF; //不用的管脚使能内部上拉电阻。
PORTC=0xFF;
PORTD=0xFF;
DDRD=(1<<1); //串口的输出
PORTB=~((1<<DS1302_CE)|(1<<DS1302_MOSI)|(1<<DS1302_MISO)|(1<<DS1302_SCK));
//DS1302带内部下拉电阻
DDRB =(1<<DS1302_CE)|(1<<DS1302_SCK)|(1<<DS1302_MOSI);
//设定SPI接口
init_USART();
init_SPI();
put_s("这是个简单的SPI接口访问DS1302实时时钟(RTC)的程序");
DS1302_EXIST=check_RTC(); //检测DS1302的存在
if(DS1302_EXIST)
{
put_s("按下[I]键可以初始化RTC时间,默认为2005年10月06日23时59分50秒 星期四");
put_s("按下[R]键可以读取当前时间");
put_s("用户可以自行开发其他功能");
put_s(" www.ouravr.com");
}
else
put_s("RTC找不到!");
sei(); //使能全局中断
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -