首先在51中P1的物理地址是90H,如果我不通过用《reg51.h》或者sfr之类的直接用指针,应该
也是可以对P1口进行操作的。
代码如下
void main()
{
unsigned char*p;
p=( volatile unsigned char *)(0x90);
*p=0xf0;
while(1);
}
如果上面的代码正确的话,那么8个led是一半亮一半不亮啊,纳闷的是这个程序运行的时候没一点反应,望各位大侠多多指教!!十分感谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
另外,51是哈佛结构。是哈佛结构的原因并不仅仅因为他不是统一编址的,而主要是程序和内存在内部是采用分开的总线实现的。
更高级的单片机比如ARM,外部表现全部都是统一编址,但CM0就是冯诺依曼结构,CM3就是哈佛结构。
sfr IOA = 0x80;
如果要使用SFR位寻址,则为
sbit IOA0 = 0x80+0;
或者
sbit IOA0 = IOA ^ 0;
这是Keil的定义,只要你这样声明,Keil会自动用SFR寻址。
能不用汇编尽量不要使用汇编,有大炮了何必再换鸟枪?怀旧?而且你能保证你的所有函数的调用和返回都符合Keil定义?
一周热门 更多>