原创 应广单片机 I/O 设定

2019-12-2 15:00 2475 16 3 分类: MCU/ 嵌入式
【IO的设定】
    在设定 T16M、ADCC、ADCM、INTEN、INTRQ 等缓存器时,有些人使用如下语法。



        $ ADCM  /16, 12BIT;         //  ADCM    =   100_0100_0b;
        $ ADCC  Enable, PB0;        //  ADCC    =   1_0_000_00b;
        $ T16M  EOSC, /1, BIT15;    //  T16M    =   0xA7;
    显然,就方便性和可读性来看,$ IO xx, xx 的语法似乎也是不错的选择。
你可从 Include files:xxx.INC 中,得到更多语法的了解,如下例。


    T16M        IO_RW       0x06
        $ 7 ~ 5 :   STOP, SYSCLK, X, X, IHRC, EOSC, ILRC, PA0
        $ 4 ~ 3 :   /1, /4, /16, /64
        $ 2 ~ 0 :   BIT8, BIT9, BIT10, BIT11, BIT12, BIT13, BIT14, BIT15
    ADCM        IO_RW       0x21
        $ 7 ~ 5 :   8BIT, 9BIT, 10BIT, 11BIT, 12BIT
        $ 3 ~ 1 :   /1, /2, /4, /8, /16, /32, /64, /128
    INTEN       IO_RW       0x04
        $ 3 :   X, AD
        $ 2 :   X, T16
        $ 1 :   X, PB0
        $ 0 :   X, PA0

    在 T16M 的定义中,可以知道 T16M 由 3 种字段组成,
而关键词 STOP、SYSCLK、IHRC、EOSC、ILRC、PA0 皆可用在 $ T16M 的语法中。
而 X 表示不存在的状态,如 $ 7 ~ 5  :  STOP, SYSCLK, X, X, IHRC, EOSC, ILRC, PA0,
相同的,/1, /4, /16, /64,BIT8 ~ BIT15 等关键词,也皆可用在 $ T16M 的语法中。

如果不想使用某种中断来源,只要不去宣告使用,????缺少的字段,组译器将以 0 取代该字段。

    在 INTEN 的定义中,有数种中断来源,如 AD、T16、PB0、PA0。
你可以将想设定为 1 的中断来源填入,没有填入的中断来源,组译器将以 0 取代该字段。
如下例:
        $ INTEN     PA0;        // INTEN = 0001B,只有 INTEN.PA0 = 1,其余为 0。
        $ INTEN     PB0, AD;    // INTEN = 1010B,只有 INTEN.PB0/AD = 1,其余为 0。
    当然,如果你只想改变 INTEN 中的某一项中断来源,也可以用如下语法:

        INTEN.PA0   =   1;      //  等同于  set1    INTEN.0
        INTRQ.T16   =   0;      //  等同于  set0    INTRQ.2
    在 $ IO  xx, yy 的语法中,如果少了某些字段,组译器将以默认值 (通常是 0)
设定该字段。如下例:



        $ T16M      SYSCLK, /16;    // 等同于 $ T16M    SYSCLK, /16, BIT8;
        $ T16M      STOP;           // T16M =   0; 或  $ T16M  STOP, /1, BIT8
    请不要自行更改 Include files:xxx.INC 的内容,否则,会造成组译的错误。

作者: 自强不息的波波, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3899055.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论2条评论)

登录后参与讨论

curton 2019-12-4 21:34

学习了

eeNick 2019-12-4 09:38

感谢分享
相关推荐阅读
我要评论
2
16
关闭 站长推荐上一条 /2 下一条