📄 m16ds1302._c
字号:
/*******************************************************************
实验十三
实验名称: DS1302时钟实验
实验目的: 学习AVR单片机读写时钟芯片,综合应用定时器中断溢出,串口通信
实验现象: 每隔4SPC机得一时间,十六进制格式
环 境: ICCAVR6.31A
设 计 者:
完成日期: 2007年4月11日
*******************************************************************/
#include <iom16v.h>
#include <macros.h>
#include "..\ICC_H\SOFTWARE.H"
#include "..\ICC_H\DS1302.H"
uchar RecvFlag = 0; //串口接收到数据中断标志
uchar DispFlag = 0; //送显时间标志
uchar temp1; //暂存得串口得到的数据
/*-----------------------------------------------------------------
函数名称: void Uart0Init(void)
函数功能: 串口初始化
波特率 600 0.2% 字符长度 8bit 无奇偶校验
参 数:
返 回 值: 无
-----------------------------------------------------------------*/
void Uart0Init(void)
{
UCSRB = 0x00; //关串口
UCSRA = 0x02; //倍速模式 M16中文P151
UCSRC = BIT(URSEL) | 0x06; //写UCSRC寄存器,设定8个bit
UBRR = 12; //设定串口波特率为600
UCSRB = 0x98; //开串口
}
/*-----------------------------------------------------------------
函数名称: void UartRecvData(void)
函数功能:
参 数:
返 回 值: 无
-----------------------------------------------------------------*/
#pragma interrupt_handler UartRecvData:12
void UartRecvData(void)
{
temp1 = UDR;
RecvFlag = 1;
}
/*-----------------------------------------------------------------
函数名称: void UartTransmitData(uchar *SendData, uchar len)
函数功能: 发送字符串
参 数: SendData 发送字符串的首地址
len 发送字符串的长度
返 回 值: 无
-----------------------------------------------------------------*/
void UartTransmitData(uchar *SendData, uint len)
{
uint i;
for( i = 0; i < len; i++)
{
while(!(UCSRA&0x20)); //判断数据寄存器是否为空
UDR = SendData[i];
}
}
//TIMER1 initialize - prescale:256
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 4s
// actual value: 4s (0.0%)
void Timer1Init(void)
{
TCCR1B = 0x00; //stop
TCNT1H = 0xC2; //setup
TCNT1L = 0xF7;
OCR1AH = 0x0F;
OCR1AL = 0x42;
OCR1BH = 0x0F;
OCR1BL = 0x42;
ICR1H = 0x0F;
ICR1L = 0x42;
TCCR1A = 0x00;
TCCR1B = 0x04; //start Timer
}
#pragma interrupt_handler timer1_ovf_isr:9
void timer1_ovf_isr(void)
{
TCNT1H = 0xC2; //重计数
TCNT1L = 0xF7;
DispFlag = 1; //送显示
}
/*-----------------------------------------------------------------
函数名称: void InitDevices(void)
函数功能: 初始化各种信息
参 数:
返 回 值: 无
-----------------------------------------------------------------*/
void InitDevices(void)
{
CLI(); //关全部中断
Uart0Init();
Timer1Init();
DS1302Init();
TIMSK = 0x04;
SEI(); //开全中断
}
void main(void)
{
uchar temp[3],i;
InitDevices();
DDRD = 0xff;
DS1302SetTime(0x10,0x30,0x25);
while(1)
{
if( DispFlag)
{
// i = DS1302Read(0x83);
DS1302GetTime(temp);
UartTransmitData(temp,3);
DispFlag = 0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -