?? m16ds1302._c
字號:
/*******************************************************************
實驗十三
實驗名稱: DS1302時鐘實驗
實驗?zāi)康? 學(xué)習(xí)AVR單片機讀寫時鐘芯片,綜合應(yīng)用定時器中斷溢出,串口通信
實驗現(xiàn)象: 每隔4SPC機得一時間,十六進制格式
環(huán) 境: ICCAVR6.31A
設(shè) 計 者:
完成日期: 2007年4月11日
*******************************************************************/
#include <iom16v.h>
#include <macros.h>
#include "..\ICC_H\SOFTWARE.H"
#include "..\ICC_H\DS1302.H"
uchar RecvFlag = 0; //串口接收到數(shù)據(jù)中斷標志
uchar DispFlag = 0; //送顯時間標志
uchar temp1; //暫存得串口得到的數(shù)據(jù)
/*-----------------------------------------------------------------
函數(shù)名稱: void Uart0Init(void)
函數(shù)功能: 串口初始化
波特率 600 0.2% 字符長度 8bit 無奇偶校驗
參 數(shù):
返 回 值: 無
-----------------------------------------------------------------*/
void Uart0Init(void)
{
UCSRB = 0x00; //關(guān)串口
UCSRA = 0x02; //倍速模式 M16中文P151
UCSRC = BIT(URSEL) | 0x06; //寫UCSRC寄存器,設(shè)定8個bit
UBRR = 12; //設(shè)定串口波特率為600
UCSRB = 0x98; //開串口
}
/*-----------------------------------------------------------------
函數(shù)名稱: void UartRecvData(void)
函數(shù)功能:
參 數(shù):
返 回 值: 無
-----------------------------------------------------------------*/
#pragma interrupt_handler UartRecvData:12
void UartRecvData(void)
{
temp1 = UDR;
RecvFlag = 1;
}
/*-----------------------------------------------------------------
函數(shù)名稱: void UartTransmitData(uchar *SendData, uchar len)
函數(shù)功能: 發(fā)送字符串
參 數(shù): SendData 發(fā)送字符串的首地址
len 發(fā)送字符串的長度
返 回 值: 無
-----------------------------------------------------------------*/
void UartTransmitData(uchar *SendData, uint len)
{
uint i;
for( i = 0; i < len; i++)
{
while(!(UCSRA&0x20)); //判斷數(shù)據(jù)寄存器是否為空
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; //重計數(shù)
TCNT1L = 0xF7;
DispFlag = 1; //送顯示
}
/*-----------------------------------------------------------------
函數(shù)名稱: void InitDevices(void)
函數(shù)功能: 初始化各種信息
參 數(shù):
返 回 值: 無
-----------------------------------------------------------------*/
void InitDevices(void)
{
CLI(); //關(guān)全部中斷
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;
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -