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