?? rtc.c
字號:
/******************************************/
/* 廣州天河雙龍電子公司 */
/* http://www.sl.com.cn */
/* 實時時鐘演示程序 */
/* 作者:ntzwq@wx88.net */
/* 2002年5月12日 */
/* 目標MCU:MEGA8 晶振:內部RC(INT) 8MHZ */
/******************************************/
//說明:ATMEGA8只有在使用內部RC振蕩器,T2使用異步時鐘的
// 情況下,外接的32.768KHZ的晶振才起作用。
#include<iom8v.h>
#include<macros.h>
#include"uart.h"
unsigned char hour;
unsigned char minute;
unsigned char second;
/* 調整時間 */
void time(void)
{
if (second<60)
return;
else
{
second-=60;
if (minute<59)
minute++;
else
{
minute=0;
if (hour<23)
hour++;
else
hour=0;
}
}
}
//初始化
void timer2_init(void)
{
TCCR2 = 0x00;
ASSR = 1<<AS2; //異步時鐘
TCNT2 = 0xE0; //定時時間1秒
TCCR2 = (1<<CS22)|(1<<CS21)|(1<<CS20); //分頻比1024,0x07
}
#pragma interrupt_handler timer2_ovf_isr:iv_TIMER2_OVF
void timer2_ovf_isr(void)
{
TCNT2 = 0xE0;
second++;
}
void put_time(void)
{
putchar(hour/10+0x30);
putchar(hour%10+0x30);
putchar(':');
putchar(minute/10+0x30);
putchar(minute%10+0x30);
putchar(':');
putchar(second/10+0x30);
putchar(second%10+0x30);
}
//UART接收中斷
#pragma interrupt_handler uart0_rx_isr:iv_USART_RXC
void uart0_rx_isr(void)
{
unsigned i;
i=UDR;
if (i=='t')
{
hour=(getchar()-0x30)*10;
hour=hour+(getchar()-0x30);
minute=(getchar()-0x30)*10;
minute=minute+(getchar()-0x30);
second=(getchar()-0x30)*10;
second=second+(getchar()-0x30);
}
}
//main程序
void main(void)
{
unsigned char second_old;
uart_init();
timer2_init();
TIMSK =1<<TOIE2;
SEI();
while(1)
{
if (second!=second_old)
{
time();
second_old=second;
put_time();
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -