这个程序呢?

[复制链接]
2696|4
 楼主| ty118 发表于 2008-1-3 17:04 | 显示全部楼层 |阅读模式
下面的程序画圈的部分是这样子定义的:<br />#ifdef_C51_<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;SWAP(x)((((x)&0xff)&lt&lt8)|(((x)&gt&gt8)&0xff))<br />#else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;SWAP(X)(X)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;code<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;idata<br />SWAP是调换X的高位和低位的?<br />这个是为什么呀.<br />还有就是上面的为什么要这样定义呢?请大侠指点.<br />谢谢拉
 楼主| ty118 发表于 2008-1-3 21:05 | 显示全部楼层

在补充一个问题?

unsigned&nbsp;char&nbsp;D12_ReadEndpoint(unsigned&nbsp;char&nbsp;endp,&nbsp;unsigned&nbsp;char&nbsp;len,unsigned&nbsp;char&nbsp;*&nbsp;buf)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i,&nbsp;j;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(bEPPflags.bits.in_isr&nbsp;==&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DISABLE;<br />&nbsp;&nbsp;&nbsp;&nbsp;outportb(D12_COMMAND,&nbsp;endp);<br />&nbsp;&nbsp;&nbsp;&nbsp;if((inportb(D12_DATA)&nbsp;&&nbsp;D12_FULLEMPTY)&nbsp;==&nbsp;0)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(bEPPflags.bits.in_isr&nbsp;==&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENABLE;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;outportb(D12_COMMAND,&nbsp;0xF0);<br />&nbsp;&nbsp;&nbsp;&nbsp;j&nbsp;=&nbsp;inportb(D12_DATA);<br />&nbsp;&nbsp;&nbsp;&nbsp;j&nbsp;=&nbsp;inportb(D12_DATA);<br />&nbsp;&nbsp;&nbsp;&nbsp;if(j&nbsp;&gt&nbsp;len)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j&nbsp;=&nbsp;len;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;&nbsp;i&ltj;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(buf+i)&nbsp;=&nbsp;inportb(D12_DATA);<br />&nbsp;&nbsp;&nbsp;&nbsp;outportb(D12_COMMAND,&nbsp;0xF2);<br />&nbsp;&nbsp;&nbsp;&nbsp;if(bEPPflags.bits.in_isr&nbsp;==&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENABLE;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;j;<br />}<br /><br />这个程序中的if((inportb(D12_DATA)&nbsp;&&nbsp;D12_FULLEMPTY)&nbsp;==&nbsp;0)<br />说是判断缓冲区是否为空,如果为空返回,<br />它的定义是这样子的<br />#define&nbsp;D12_FULLEMPTY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x01<br />这个0x01是随便的一个数呢?还是PDIUSBD12内部必须的,<br />outportb(D12_COMMAND,&nbsp;0xF0);<br />&nbsp;&nbsp;&nbsp;&nbsp;j&nbsp;=&nbsp;inportb(D12_DATA);<br />&nbsp;&nbsp;&nbsp;&nbsp;j&nbsp;=&nbsp;inportb(D12_DATA);<br />这个为什么要对j进行两次的赋值呢?<br />谢谢大侠的回答!
 楼主| ty118 发表于 2008-1-5 09:05 | 显示全部楼层

谢谢各位拉!

谢谢大家帮忙解释一下上面的程序拉!
wlsui 发表于 2008-1-5 13:40 | 显示全部楼层

re:

第一个swap应该是避免大小端的问题,说白了,就是高8位和代8位的存储顺序问题<br /><br />第二个#define&nbsp;D12_FULLEMPTY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x01,0x01是最低位的掩码,表示只取最低位,其余屏蔽,当然也就不是随便取的了<br /><br />j&nbsp;=&nbsp;inportb(D12_DATA);<br />j&nbsp;=&nbsp;inportb(D12_DATA);<br />那是读了两次D12的端口数据,相当于读了高8位和低8位,但最后只取低8位(如果高8位在前低8位在后的话,具体是哪个在前不太清楚,因为没玩过D12)
 楼主| ty118 发表于 2008-1-5 14:11 | 显示全部楼层

谢wlsui 拉!

谢wlsui大侠&nbsp;拉!<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

69

主题

209

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部