【IO的设定】 在设定 T16M、ADCC、ADCM、INTEN、INTRQ 等缓存器时,有些人使用如下语法。

  1. $ ADCM /16, 12BIT; // ADCM = 100_0100_0b;
  2. $ ADCC Enable, PB0; // ADCC = 1_0_000_00b;
  3. $ T16M EOSC, /1, BIT15; // T16M = 0xA7;

显然,就方便性和可读性来看,$ IO xx, xx 的语法似乎也是不错的选择。 你可从 Include files:xxx.INC 中,得到更多语法的了解,如下例。

  1. T16M IO_RW 0x06
  2. $ 7 ~ 5 : STOP, SYSCLK, X, X, IHRC, EOSC, ILRC, PA0
  3. $ 4 ~ 3 : /1, /4, /16, /64
  4. $ 2 ~ 0 : BIT8, BIT9, BIT10, BIT11, BIT12, BIT13, BIT14, BIT15
  5. ADCM IO_RW 0x21
  6. $ 7 ~ 5 : 8BIT, 9BIT, 10BIT, 11BIT, 12BIT
  7. $ 3 ~ 1 : /1, /2, /4, /8, /16, /32, /64, /128
  8. INTEN IO_RW 0x04
  9. $ 3 : X, AD
  10. $ 2 : X, T16
  11. $ 1 : X, PB0
  12. $ 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 取代该字段。 如下例:

  1. $ INTEN PA0; // INTEN = 0001B,只有 INTEN.PA0 = 1,其余为 0。
  2. $ INTEN PB0, AD; // INTEN = 1010B,只有 INTEN.PB0/AD = 1,其余为 0。

当然,如果你只想改变 INTEN 中的某一项中断来源,也可以用如下语法:

  1. INTEN.PA0 = 1; // 等同于 set1 INTEN.0
  2. INTRQ.T16 = 0; // 等同于 set0 INTRQ.2

在 $ IO xx, yy 的语法中,如果少了某些字段,组译器将以默认值 (通常是 0) 设定该字段。如下例:

  1. $ T16M SYSCLK, /16; // 等同于 $ T16M SYSCLK, /16, BIT8;
  2. $ T16M STOP; // T16M = 0; 或 $ T16M STOP, /1, BIT8

请不要自行更改 Include files:xxx.INC 的内容,否则,会造成组译的错误。