查看: 2172|回复: 3

教你如何看懂数据手册?

[复制链接]
  • TA的每日心情
    开心
    2013-12-17 13:39
  • 签到天数: 48 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2013-12-27 10:25:35 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 wuwei 于 2013-12-27 10:26 编辑

    首先声明一点,真正的新手是看不懂数据手册的,如果你能,说明你已经入门了。所以,当你看到数据手册头疼的时候,不要灰心,其实别人和你一样。

    但是数据手册是AVR最好的书,你又必须得看懂数据手册,看数据手册不能急于求成,要一遍一遍的多看,应该说每次看都有不同的收获。

    新手看第一遍,迷迷糊糊。

    看第二遍,大体了解AVR有哪些模块。

    第三次看,知道AVR的部分寄存器,但是仍然不知道如何使用,如何编程。

    在这里就要发挥ICC AVR的优势了,使用ICC avr的程序生成向导(使用方法会在新手入门里面介绍),你使用哪一个模块,就生成哪一个模块的程序,然后再去看程序中使用到了哪写寄存器,再到数据手册里面去搜索相应词语,查看寄存器各个位的介绍和意义,以及设置方法。多这样几次,你就能够熟悉起来了,也就能看明白数据手册了。

    一个精通单片机的人,无论拿来一个什么芯片,看看数据手册,很快就可以使用。

    这里以定时器的数据手册为例:

    //ICC-AVR application builder : 2007-3-22 10:17:15// Target : M16// Crystal: 7.3728Mhz#include#includevoid port_init(void){PORTA = 0x00;DDRA = 0x00    PORTB = 0x00;DDRB = 0x00   PORTC = 0x00  //m103 output onlyDDRC = 0x00   PORTD = 0x00   DDRD = 0x00;}//TIMER0 initialize - prescale:1024// WGM: Normal// desired value: 10mSec// actual value: 9.861mSec (1.4%)void timer0_init(void){TCCR0 = 0x00; //stopTCNT0 = 0xB9; //set countOCR0 = 0x47; //set compareTCCR0 = 0x05; //start timer}#pragma interrupt_handler timer0_ovf_isr:10void timer0_ovf_isr(void){TCNT0 = 0xB9; //reload counter value}//call this routine to initialize all peripheralsvoid init_devices(void){//stop errant interrupts until set upCLI(); //disable all interruptsport_init();timer0_init();MCUCR = 0x00;GICR = 0x00;TIMSK = 0x01; //timer interrupt sourcesSEI(); //re-enable interrupts//all peripherals are now initialized}

    上面的程序是由ICC的程序生成向导自动生成的,红色部分是和定时器0相关的,那么现在你可以去查数据手册,TCCR0,TCNT0,OCR0,TCCR0,TIMSK你就可以充分了解定时器的工作原理及控制方法了。

    比如:查看TIMSK,描述为

    中断屏蔽寄存器- TIMSK

    Bit 1 – OCIE0: T/C0 输出比较匹配中断使能

    当OCIE0 和状态寄存器的全局中断使能位I 都为”1” 时,T/C0 的输出比较匹配中断使能。 当T/C0 的比较匹配发生,即TIFR 中的OCF0 置位时,中断服务程序得以执行。

    Bit 0 – TOIE0: T/C0 溢出中断使能

    当TOIE0 和状态寄存器的全局中断使能位I 都为”1” 时,T/C0 的溢出中断使能。当T/C0 发生溢出,即TIFR 中的TOV0 位置位时,中断服务程序得以执行。

    可以看出TIMSK = 0x01;说明T/C0 溢出中断使能了,允许寄存器定时溢出中断,这就使得下面这段程序可以运行。

    #pragma interrupt_handler timer0_ovf_isr:10void timer0_ovf_isr(void){TCNT0 = 0xB9; //reload counter value}

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2021-3-15 10:18
  • 签到天数: 1027 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2013-12-27 10:34:12 | 显示全部楼层
    楼主的题目起的,哈哈,挺吸引人的~~~~~~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-4-18 09:29
  • 签到天数: 76 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2013-12-27 11:20:20 | 显示全部楼层
    看数据手册不能急于求成,要一遍一遍的多看,应该说每次看都有不同的收获。这句话很受用。一口吃不成胖子。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-7-24 09:21
  • 签到天数: 25 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2014-1-23 16:47:17 | 显示全部楼层
    楼主说的有点意思
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-25 18:48 , Processed in 0.130190 second(s), 20 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.