EDN首页   博客首页

1

关于投票
用_at_绝对寻址
用_at_定义后一直不能用,找了好些资料,一直没有答案。我可是把原句弄上去的啊!现在也没想清楚是为什么,再想!
系统分类: 单片机
用户分类: Keil c51
标签: 51 用_at_定义
来源: 原创
发表评论 阅读全文(161) | 回复(0)

4

关于投票
关于Keil 51的绝对寻圵
一直不明白怎么用C进行外部总线操作,问了老师,他竟然说用程序去实现总线操作的时序!吓了我一跳。
还好,今天晚上就找到了答案,这还要多谢互联网啊!当然也要谢谢那些把自己的心得写出来的仁兄了!
总的说来,有三种方式:
a:直接定义直接地圵的指针。
   eg:aaa=*((volatile int xdata *) 0x000a);//从0x000a起定义了一个INT型变   量,当然,它是在外部数据区定义的。其中volatile用来说明这个变量是会随时间变的,用之前必须读一次数值。这样做的原因是为了防止编译器优化时出问题。举个例子:XWORD[0x0001]=0x01;XWORD[0x0002]=0x02;这两句编译出来是什么样子的呢?有点多,只写重点了。(XWORD在下面说)
                      mov dptr,#0002h
                      mov a,#00h
                      movx @dptr,a
                      inc dptr
                      mov a,#01h
                      movx @dptr,a
                      inc dptr
                      mov a,#00h
                      movx @dptr,a
                      inc dptr
                      mov a,#02h
                      movx @dptr,a
看出来了吧,第二次并没有往DPTR里写0002H。这也行,但是如果把DPTR换成IO口,那就不行了吧。所以,要加上volatile!
b:通过加入absacc.h。定义方式如上:XWORD[0x0001]=0x01。别的不说了,自己找下吧,里面都很清楚的。对了,要说一下都有什么类型的:XBYTE,PBYTE,CBYTE,DBYTE,XWORD,PWORD,CWORD,DWORD.
c:用_at_定义。
  这个还没弄清楚,总是通不过编译,会了再补充吧。
睡觉了!
再加个链接吧,这个很有用:http://www.guangdongdz.com.cn/special_column/techarticle/20065/610111432244.html
系统分类: 单片机
用户分类: Keil c51
标签: 51,keil,c
来源: 原创
发表评论 阅读全文(324) | 回复(2)
总共 , 当前 /