EDN首页   博客首页

日志档案

发表于 2008-6-5 0:17:27

4

标签: 51,keil,c  

关于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   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(325)    回复(2)  

投一票您将和博主都有获奖机会!