一直不明白怎么用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
关闭
站长推荐
/3
用户403611 2011-10-10 17:33
用户754892 2011-9-29 00:09
Cybershu 2008-6-5 23:51