热度 3
2019-12-2 15:00
2472 次阅读|
2 个评论
【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 的内容,否则,会造成组译的错误。