⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 m16ds1302._c

📁 AVR程序
💻 _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 + -