维库电子市场网
登录 免费注册 首页 | 行业黑名单 | 委托交易 | 帮助 | English
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

程序请教

作者:txshcumt 栏目:单片机
程序请教
我刚开始接触ATMEGA16L,现在在做毕业设计,有几段程序看不懂,请大家指导。
1.芯片使用内部的频率时,默认是8M么?还是1M,怎么设置。
2.TIMSK=(1<<TOIE1)是设置定时器1中断使能,ADCSRA|=(1<<ADSC)是开始A/D转换,这两句话写法不同,但是功能都是将等号前面寄存器里的位置1,是么?为什么?
3 WDTCR=(1<<WDCE)|(1<<WDE)|(1<<WDP2)|(1<<WDP0);//看门狗开始。这句话里WDCE是不是写错了?
4.大家看看这个延时对么?
/*定时器0中断*/
#pragma interrupt_handler timer0_relay:iv_TIMER0_OVF
  void timer0_relay(void)
{
  TCCR0=0X00;
  TIMSK=(1<<TOIE0);//定时器中断使能
  TCNT0=0X9B;//定时器1初值  8M时分频1/8=1MS
}

2楼: >>参与讨论
apn172
暗暗啊
1. 你使用的是什么开发软件,在软件中修改熔丝位即可.
默认为1mhz 
2.你可以去看看头文件的定义就很明白了.
3.去看说明书.


3楼: >>参与讨论
terrence
Ans2
Ans2:TIMSK=(1<<TOIE1)是把TIMSK寄存器的TOIE1位置1,但是有个顺带的副作用是把TIMSK寄存器的其它位清零。
    解释:你打开ICCAVR中的iom16v.h文件,可以看到#define  TOIE1    2, 所以1<<TOIE1就是1左移2位,变成0b00000100,这个数将被直接赋给TIMSK;
    TIMSK|=(1<<TOIE1)是TIMSK寄存器与0b00000100相或,它会把TIMSK寄存器的TOIE1位置1,但是不会改变TIMSK的其它位;
    我们不推荐用第一种写法,而希望用“Reg |= (1<<BIT)”这种写法来置1。




4楼: >>参与讨论
terrence
Ans3
Ans3:这个问题主要是看你用的C编译器的m16头文件里面有没有WDCE的定义,比如我习惯用ICCAVR,里面的对Watchdog的定义:
#define WDTCR    (*(volatile unsigned CHAR *)0x41)
#define  WDTOE    4
#define  WDE      3
#define  WDP2     2
#define  WDP1     1
#define  WDP0     0
显然,没有WDCE,所以,我用的编译器不支持这个语句。


5楼: >>参与讨论
terrence
Ans4
    这个程序有个小小的问题,主要是理解TCCR0=0X00;这条语句的作用。
解释:在写中断服务程序(不仅是定时器中断)的时候,我们常常在重新配置该硬件前,习惯先把这个硬件“关”掉,这样会安全许多。TCCR0=0X00;即是关掉Timer0,这样你可以放心的重新配置Timer0,配置完成后,别忘了重新启动该硬件哦~~~~~^_^
    最后还应该加一句 TCCR0 = 0x03; //启动timer0

    楼主虽然刚开始学习,但是你能不僻开那些看似细小无知的问题,并主动去探索,这样的学习态度是要赞的!希望你继续保持这样的治学态度,这样下午,你一定会有很大的成就的!


参与讨论
昵称:
讨论内容:
 
 
相关帖子
iccavr下的wdt函数问题
请教,如何在ICCAVR中实现睡眠?
空前迷惑,Jtag的10芯连接线对长度也敏感?
请问ATMEGA系列芯片的编程允许指令是什么?
谁能告诉我UCOSII移植到mega128上以后还用不用写bootloader呀?
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号