#include <avr/io.h>
#include <avr/interrupt.h>
#include "config.h"
#include "system.h"
// ==========================================================================================================
// 毫秒级延时
// (1). 根据不同的时钟,选择不同的参数,保证在不同时钟下的延时都是1ms
//
// (2). error这个变量没有定义,所以如果上面的几种情况都不存在,编译器会将error报错
// 以此来提醒,需要去测试对应的数值
//
// (3). 可以使用PA0引脚测试时间
// ==========================================================================================================
void delay_ms(uint16_t count)
{
volatile uint16_t i,j;
for(i = 0; i < count; i++)
{
#if SYS_OSC_FREQUENCE == 8000000
for(j = 0; j < 430; j++) {}
#elif SYS_OSC_FREQUENCE == 4000000
for(j = 0; j < error; j++) {}
#elif SYS_OSC_FREQUENCE == 2000000
for(j = 0; j < error; j++) {}
#elif SYS_OSC_FREQUENCE == 1000000
for(j = 0; j < error; j++) {}
#else
error = 0;
#endif
}
}
// ==========================================================================================================
// 系统定时器
// (1). 使用Timer0产生1ms的时标
// (2). 使用Timer0的调度各个任务
// ==========================================================================================================
void sys_init(void)
{
// 关闭全局中断
cli();
// ==========================================================================================================
// 时钟初始化
// ==========================================================================================================
// ==========================================================================================================
// IO初始化
// ==========================================================================================================
// PORTA初始化为输出低电平
DDRA = 0xFF;
PORTA = 0x00;
// PORTB初始化为输出高电平(连接了低推的LED)
DDRB = 0xFF;
PORTB = 0xFF;
// PORTC初始化为输出低电平
DDRC = 0xFF;
PORTC = 0x00;
// PORTD初始化为输出低电平
DDRD = 0xFF;
PORTD = 0x00 | (1 << 3); // PD3连接低推的红外LED
}
// ==========================================================================================================
// 系统定时器中断
// ==========================================================================================================
ISR(TIMER0_OVF_vect)
{
}
// ==========================================================================================================
// 检查复位源
// 清除复位信息,等待记录下一次复位
// ==========================================================================================================
void get_reset_source(void)
{
// 上电复位
if( MCUCSR & (1 << PORF) )
{
MCUCSR &= ~(1 << PORF);
}
// 外部复位
if( MCUCSR & (1 << EXTRF) )
{
MCUCSR &= ~(1 << EXTRF);
}
// BOD掉电复位
if( MCUCSR & (1 << BORF) )
{
MCUCSR &= ~(1 << BORF);
}
// WDT复位
if( MCUCSR & (1 << WDRF) )
{
MCUCSR &= ~(1 << WDRF);
}
// Jtag指令AVR_RESET复位
if( MCUCSR & (1 << JTRF) )
{
MCUCSR &= ~(1 << JTRF);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Atmega16-测试-WDT-noinit
共28个文件
h:5个
o:5个
c:5个
需积分: 11 8 下载量 148 浏览量
2016-06-23
18:16:04
上传
评论
收藏 25KB RAR 举报
温馨提示
这个代码包含2部分:Atmega16的看门狗的测试代码和.noinit段变量的测试代码。 可以测试看门狗的复位时间,同时记录并显示及单片机不掉电复位的次数。 编程环境:AVR Studio + avr-gcc
资源推荐
资源详情
资源评论
收起资源包目录
AVR_build-1001-WDT-noinit.rar (28个子文件)
AVR_build
avr_build.aws 1KB
AVR_build.aps 6KB
main
config.h 8KB
_noinit.h 91B
_noinit.c 961B
main.c 1KB
system.h 134B
sys_timer.c 28B
watch_dog.h 180B
sys_timer.h 91B
system.c 3KB
watch_dog.c 2KB
default
dep
sys_timer.o.d 78B
watch_dog.o.d 3KB
main.o.d 3KB
system.o.d 3KB
_noinit.o.d 3KB
sys_timer.o 928B
watch_dog.o 3KB
AVR_build.lss 13KB
AVR_build.eep 13B
system.o 4KB
AVR_build.map 13KB
AVR_build.elf 9KB
AVR_build.hex 1KB
Makefile 2KB
_noinit.o 3KB
main.o 3KB
共 28 条
- 1
资源评论
Manon_des_sources
- 粉丝: 11
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功