三、应广单片机 I/O 设定

2019-04-15 17:28发布

【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 的内容,否则,会造成组译的错误。