时间控制模块—DS1302芯片的控制编程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
定时器/计数器1-TCNT1H和TCNT1L
TCNT1H和TCNT1L组成了T/C的数据寄存器TCNT1。
定时器/计数器中断标志寄存器-TIFR
T/C1输 入捕捉 标志位
T/C1输 出比较B 匹配标 志位 T/C1溢出标志 (普通模式和 CTC模式时)
如何写表 达式判断 是否有溢 出 实验板上的主控芯片AVR ATMega128:
有四个定时器/计数器 – 两个具有独立预分频器、比较器功能、PWM输出的 8位定时器/计数器(T/C0, T/C2 ) – 两个具有预分频器、比较器功能、 PWM输出、捕 捉功能的16位定时器/计数器(T/C1, T/C3 )
本堂课主要讨论 定时器/计数器1
4.中断服务函数
//外部中断函数
SIGNAL(SIG_INTERRUPT5) {
}
second=0;//中断发生后需做的事情
三、DS1302模块 1.简单介绍
时钟计数功能,年计数可达2100。
DS1302包括时钟/日历寄存器和31字节的
数据暂存寄存器。
2.如何将年月日写入DS1302中
模块电路功能编程(下)
时间控制模块—DS1302芯片的控制编程
双C工作室
复习
1.实验板的电路图 – 控制编程--针对实验板 – 所有的元器件控制--要查看电路图--确定要 它们是由哪些端口或哪些接口来控制
2.实验板上控制数码管 – 用SPI发送数据到74HC595上,PB端口的高 四位作为数码管选通通道
RST_SET; /*启动DS1302总线*/ /*写入目标地址:addr*/ IO_OUT; addr = addr & 0xFE;/*最低位置零*/ for (i = 0; i < 8; i ++) { if (addr & 0x01) IO_SET; else IO_CLR; SCK_SET; SCK_CLR; addr = addr >> 1; }
(3)如何将年月日写入DS1302
void ds1302_write_time(void) { ds1302_write_byte(ds1302_control_add,0x00); //关闭写保护 ds1302_write_byte(ds1302_sec_add,0x80); //暂停 ds1302_write_byte(ds1302_year_add,time_buf[1]);//年 ds1302_write_byte(ds1302_month_add,time_buf[2]);//月 ds1302_write_byte(ds1302_date_add,time_buf[3]);//日 ds1302_write_byte(ds1302_day_add,time_buf[7]);//周 ds1302_write_byte(ds1302_hr_add,time_buf[4]);//时 ds1302_write_byte(ds1302_min_add,time_buf[5]);//分 ds1302_write_byte(ds1302_sec_add,time_buf[6]);//秒 ds1302_write_byte(ds1302_day_add,time_buf[7]);//周 ds1302_write_byte(ds1302_control_add,0x80);//打开写保护 }
/*写入数据:d*/ IO_OUT; for (i = 0; i < 8; i ++) { if (d & 0x01) IO_SET; else IO_CLR; SCK_SET; SCK_CLR; d = d >> 1; } RST_CLR;/*停止DS1302总线*/
(3)设置定时器的模式;
TCCR1A=0X00; //与TCCR1B的WGM3:0=0确定定时器为普通模式
void TIMER1_Init() { TCCR1B=(1<<CS12)|(1<<CS10); //选择定时器时钟分频CS12:11,1024分频。 TCNT1H=(65536-977)/256; TCNT1L=(65536-977)%256; TCCR1A=0X00; //与TCCR1B的WGM3:0=0确定定时器为普通模式 }
(1)如何将数据写入DS1302(地址)
#define IO_OUT #define SCK_SET #define RST_SET
DDRD |= (1 << PD6) PORTD |= (1 << PD5) PORTD |= (1 << PD7)
ds1302_write_byte(ds1302_sec_add,time_buf[6]);//秒 ds1302_write_byte(ds1302_day_add,time_buf[7]);//周 ds1302_write_byte(ds1302_control_add,0x80); //打开写保护
定时器如何控制实现1s。
– 3.在软件中编码、调试; – 4.下载到实验板中观察现象。
电路连接
SPI总线 74HC595
数码管动态显示 (1)选通通道; (2)发送显示数据,并延时(几毫秒); (3)关闭通道; (4)消影。
参考代码:
…… PORTB &=~(1<<PB4); SPI_SN74595_7SegLed(disp[ones]); _delay_ms(6); PORTB |=(1<<PB4); SPI_SN74595_7SegLed(0XFF);//硬件中,消影效果比较好 ……
案例3:实验板实现秒表,并控制按键对秒 表清零
任务分析: – 1. 控制实验板上的数码管显示; 电路连接如何?使用的是I/O的哪个端口? 涉及到哪里其他控制模块?数码管显示时需要注 意哪些地方? – 2. 精确实现1s; 定时器如何控制实现1s。 – 3. 控制按键实现外部中断;
按键的电路连接?使用的I/O端口?如何获取按键消息?
(1)如何将数据写入DS1302;
(2)如何将秒值写入DS1302; (3)如何写入出年月日;
(1)如何将数据写入DS1302;
DS1302写时序
DS1302工作时为了对任何数据传送进行初始化,需要
将复位脚(RST)置为高电平且将8位地址和命令信息 装入移位寄存器。 数据在时钟(SCLK)的上升沿串行输入,前8位指定 访问地址,命令字装入移位寄存器后,在之后的时钟 周期,读操作时输出数据,写操作时输出数据。
(定时器模块、数码管显示模块、SPI模块)
三、案例3:实验板实现秒表,并控制按键对
秒表清零。(中断系统模块、定时器模块、数码管显示模块、
SPI模块)
四、案例4:读取时钟芯片DS1302的秒钟信息
显示在实验板的数码管上。(DS1302模块、数码管显
示模块)
案例1:控制控制LED发光二极管闪烁, 亮灭时间间隔为1s。
4.查询法判断定时时间是否到达
不断查询TIFR的TOV1位是否为1。 参考代码:
定时时间到时,即产生溢 …… 出时,TOV1被置为“1”。 while(!(TIFR&(1<<TOV1))) { } //添加代码:时间到达后所需做的事件 TCNT1H=(65536-977)/256; TCNT1L=(65536-977)%256; TIFR |=(1<<TOV1);//TOV1 Flag 强制清零。 //写1,自动清零。 …… 一定要注意:写1才会将 溢出标志位TOV1清零。
任务分析: – 1. 控制实验板上的发光二极管亮灭; 电路连接如何?使用的是I/O的哪个端口? – 2. 精确实现1s;
定时器如何控制实现1s。
– 3.在软件中编码、调试; – 4.下载到实验板中观察现象。
案例2:控制实验板的数码管实现秒表
任务分析: – 1. 控制实验板上的数码管显示; 电路连接如何?使用的是I/O的哪个端口? 涉及到哪里其他控制模块?数码管显示时需要 注意哪些地方? – 2. 精确实现1s;
二、中断模块
1. 实验板上的主控芯片AVR ATMega128:
有8个外部中断
INT0~INT7
2.与本案例外部中断有关的寄存器
状态寄存器SREG
全局中 断使能
外部中断控制寄存器B(EICRB)
外部中断5敏感 电平控制位
外部中断屏蔽寄存器(EIMSK)
外部中断请求5使 能(置“1”)
TIFR&(1<<TOV1)
3.定时器精确定时初始化流程
(1)确定定时器时钟分频;
TCCR1B=(1<<CS12)|(1<<CS10);
//选择定时器时钟分频CS12:11,1024分频。
(2)定时器初值赋值;
初值计算公式:
赋值:
TCNT1H=(65536-977)/256; TCNT1L=(65536-977)%256;
(2)如何将秒值写入DS1302;
DS1302寄存器与控制命令
为0时 为写 入
(2)如何将秒值写入DS1302
void ds1302_write_time(void)
{ ds1302_write_byte(ds1302_control_add,0x00); //关闭写保护
ds1302_write_byte(ds1302_sec_add,0x80);//暂停
3. SPI的控制流程
4. 怎么通过阅读74HC595的芯片资料,
来使用它!!!
模块三:数字传感器使用编程 part C 定时器模块、DS1302模块
一、 案例1:控制实验板上的LED发光二极管
闪烁,亮灭时间间隔为1s。(AVR ATMega128定时器
模块)
二、案例2:控制实验板的数码管实现秒表。
(1)如何将数据写入DS1302
#define SCK_CLR #define IO_CLR #define IO_SET #define SCK_OUT
PORTD &= ~(1 << PD5) PORTD &= ~(1 << PD6) PORTD |= (1 << PD6) DDRD |= (1 << PD5)
}
(2)如何将秒值写入DS1302;
#define ds1302_sec_add 0x80
• //秒数据地址
地址偶数 为写、奇 数为读
(2)如何将秒值写入DS1302
DS1302寄存器与控制命令
CH为1时,内部时钟不工作,暂停
(3)如何将年月日写入DS1302
DS1302寄存器与控制命令
电路连接
SPI总线 74HC595
实验三:时间控制模块(一)
1.控制实验板上数码管实现显示秒钟、分钟
(00:00~ 59:59)。 2.利用DS1302,来控制七段数码管显示相应的 值。(三选一,用键盘扫描实现) (1)按下PE7:显示星期几; (2)按下PE6:显示秒钟个位; (3)按下PE5:显示秒钟十位; 思考: 将题2的按键需达到的功能,用外部中断实 现(思考题)
2.T/C1精确定时所用到的相关寄存器
定时器/计数器1控制寄存器A( TCCR1A)
通道A的 比较输出 模式
波形发生器 模式(1)
定时器/计数器1控制寄存器B (TCCR1B)
输入捕 捉噪声 抑制器 输入捕捉 触发沿选 择
波形发 生器模 式(2)
时钟选择
(选择T/C 的时钟源)
波形发生器模式由TCCR1A和TCCR1B中的 WGM13:10共同确定(工作模式)。
– 4. 在软件中编码、调试; – 5.下载到实验板中观察现象。
电路连接
第二功 能: INT5
SPI总线 74HC595
案例4:读取时钟芯片DS1302的秒钟信息 显示在实验板的数码管上
任务分析: – 1. 读取时钟芯片DS1302的秒钟信息 DS1302的作用?如何读取信息?电路如何连接? – 2. 控制实验板上的数码管显示; 电路连接如何?如何控制? – 3. 在软件中编码、调试; – 4.下载到实验板中观察现象。
外部中断标志寄存器(EIFR)
外部中断标志5
(INT5引脚电平发生 跳变时触发中断请求, 并置位INTF5。)
3.外部中断初始化
(1)确定中断电平控制位; (2)使能全局中断; (3)使能当前使用的中断 参考代码 void EINT5_Init() { EICRB=0X00; //利用的是外部中断5,低电平有效 // (0<<ISC51)|0<<ISC50) SREG=0XFF;//使能所有的中断 EIMSK=(1<<INT5);//使能外部中断5 }