来源:本站整理 作者:佚名 2009-03-25 16:27:36
DDRD=0x14;PORTD=0x00;
通常可在程序其他部分初始化完成后再调用函数usbInit (),最后再调用sei ()函数允许中断。在main.c文件中的实现代码如下:
(2)事件处理函数
用户程序的主循环中需要定期调用USB事件处理函数usbPoll ()。USB事件处理函数usbPoll ()在没有USB事件需要处理时将直接返回,否则将调用内部函数来进行相应的事件处理,最后再将数据传递到用户接口函数中。通常的方法是:
一次USB通信的超时时间是50ms。所以,在编程时应注意其他事件不要占用太长的时间,以勉usbPoll ()函数不能及时执行。
(3)事件接口函数
在用户程序中,需要编写USB用户事件接口函数,以完成USB通信。AVRUSB将用户接口简化为以下3个函数:
上述三个函数需要用户进行编程处理,它们将完成USB通信的数据处理。
为了使代码最优化,本系统只使用usbFunctionSetup函数,而屏蔽了usbFunctionWrite和usbFnctionRead函数,方法是在usbconfig.h中设置相应的位为0或1即可(参见表2)。
函数usbFunctionSetup负责传递USB请求,其参数存放在一个8字节的数组中(uchar data [8]),其含义是:
由于该系统功能只需要将测得的温度值传送到PC端,因此,该函数中只需做数据传送即可,而无须作不同指令的辨识,设计时使用如下代码来实现上述功能:
2.4编译文件的配置
在WINAVR软件环境下,还需要配置MakeFile,以用于编译编程文件:
经过上述过程的配置和编程后,即可实现下位机的数据采样和USB端口的数据传输。
3 结束语
基于AVRUSB技术的温度测量和显示系统由于使用了一体的软USB技术,其硬件电路设计更加小巧稳定。经使用和测试证明:该系统具有性能稳定、价格低廉等特点。重要的是,本系统提供了一种低成本的USB设计方案,同时较详细的提供了下位机的设计流程和部分代码,从而为中低成本的USB设备开发提供了一个较好的思路。