手册上有,不代表编译平台就认识。 你要告诉编译平台CMPO_S是什么? |
仔细看手册, CMPO_S = 0; 是非法的,要用 P_SW2 &= 0xF7; //CMPO_S: P3.4 P_SW2 |= 0x08; //CMPO_S: P4.1 |
P_SW2 |= 0x80; |
有的寄存器不支持位操作的,去看看头文件有没有声明吧。 |
原因很简单,因为CMPCR1、CMPCR2都是不可位寻址的,CMPO_S也不可位寻址,应该用逻辑操作: P_SW2 |= (1<<3); //选择P4.1做比较器输出脚 P_SW2 &= ~(1<<3); //选择P3.4做比较器输出脚 CMPCR1 |= 0x80; //允许比较器 |
没有包含相关的头文件,c语言自身没有定义过任何一个位,都是在头文件里面定义的。 |