地址译码端口以及不同端口实现的功能仿真结果如图4所示。可以看出,仿真结果符合设计要求。
5 单片机软件设计
AVR单片机固化程序采用ICC语言编写,并使用模块化的设计方法,分为初始化程序、预定义子程序、主程序、无线收发控制程序、各功能模块控制程序、读功能子模块的子程序、配置功能子模块程序、超时程序等。模块化设计使软件更加灵活,便于调用和移植,并且在错误发生的时候,可以很快找到错误,极大地提高了系统的可靠性和稳定性。
单片机中要对扩展的不同I/O端口分配相对应的不同的内存地址。例如:要对扩展的电源管理I/O端口分配单片机所映射的内存地址为Ox2000。可以写成:#deftne POWER ADDR (*(unsigned char*)0x2000)。
单片机主要完成系统的控制功能,在实现输出控制接口时需要与CPLD配合,提供CPLD需要的数据和地址及控制线。当需要某一组输出工作时,在单片机中用C语言对宏变量对应的地址进行赋值,“WR”或“RD”同时就被拉低,CPLD通过这组信号判断选择并且使能某一组输出工作,并将输出控制代码从单片机经过CPLD的相应端口输出,完成控制功能。例如对电源管理单片机中定义的I/O端口对应的内存地址为:#define POWER_ADDR(*(unsigned char*)Ox2000),当用C语言写下POWER_ADDR=Oxl2时,就会在CPLD的8个I/O口输出相应的控制信息“00010010”,从而对各功能模块进行供电或断电。
6 结 语
采用CPLD作为单片机I/O端口的扩展芯片,大大减少了单片机外围所用芯片的种类和数量,缩小了体积,降低了功耗,提高了系统的可靠性和整体性。使用单片机和CPLD结合可以有效地实现过去需要利用单片机和大量外围接口芯片才能完成的功能,而且还可以根据需要不断地扩展外围电路,只需要修改CPLD的程序就可以实现用户的需求。CPLD器件与单片机结合,可以优势互补,组成灵活的、硬软件都可现场编程的控制器,缩短开发周期,适应市场需要。