|
前面看到很多大侠讨论单片机扩展端口的方法,我这里也插一嘴,将我们习惯使用的一种利用595和165配对扩展输入输出端口的方法拿出来和大家交流。
其实,思路很简单,595和165在时钟极性上非常相似,都是上升沿采样/置数,同时也都需要一个控制信号的上升沿来锁存并行数据,很自然的,我们就想到利用硬件SPI的主机模式配合对SS引脚的控制来实现一次数据交换同时读取和置数的操作,并且利用595和165的可级联特性,特别适合端口扩展。
以下是扩展模块的原理图
以下是驱动该结构的头文件(测试通过 外部16M,1/4分频)
#ifndef _USE_VIRTUAL_PORT_H_
#define _USE_VIRTUAL_PORT_H_
/***********************************************************
* 函数说明:硬件SPI虚拟端口底层驱动函数库 *
* 版本: v1.00 *
* 作者: 傻孩子 *
* 创建日期:2006年7月30日 *
* -------------------------------------------------------- *
* [支持库] *
* 支持库名称:RD_MacroAndConst.h *
* 需要版本: v0.04 &abv *
* 函数库说明:系统常用宏定义库 *
* -------------------------------------------------------- *
* [版本更新] *
* -------------------------------------------------------- *
* [版本历史] *
* v1.00 支持595和165成队及联,支持硬件SPI传输模式, *
* 支持通过宏定义设定虚拟端口数量;虚拟端口同 *
* 时支持读取和写两种模式,并且兼容AVR普通端 *
* 口的操作方式,支持虚拟端口位操作。 *
* -------------------------------------------------------- *
* [使用说明] *
* 1、调用该头文件之前,可以通过宏VP_PORT_COUNT *
* 来设定虚拟端口的数目,这里的数目8个引脚算 *
* 一个端口。 *
* 2、通过宏VP_SS来设定SS脚,这里需要位操作支持。 *
* 3、将宏VIRTUALPORT_INSERT_SPI_STC_ISR_CODE插 *
* 入到SPI通讯完成中断处理程序中。 *
* 4、虚拟端口从PORTH和PINH开始,每次需要刷新端 *
* 口时只需要调用宏REFRESH_VIRTUAL_PORT,特别 *
* 说明,在中断处理程序里面调用该宏时要打开全 *
* 局中断SEI(); *
***********************************************************/
# include <RD_MacroAndConst.h>
/********************
* 系 统 宏 定 义 *
********************/
/*------------------*
* 常 数 宏 定 义 *
*------------------*/
#ifndef VP_PORT_COUNT
#define VP_PORT_COUNT 2
#endif
#if VP_PORT_COUNT-1 >= 0
# define PORTH (*((volatile unsigned char *)&VP_PORTx[0]))
# define PINH (*((volatile unsigned char *)&VP_PINx[0]))
#endif
#if VP_PORT_COUNT-2 >= 0
# define PORTI (*((volatile unsigned char *)&VP_PORTx[1]))
# define PINI (*((volatile unsigned char *)&VP_PINx[1]))
#endif
#if VP_PORT_COUNT-3 >= 0
# define PORTJ (*((volatile unsigned char *)&VP_PORTx[2]))
# define PINJ (*((volatile unsigned char *)&VP_PINx[2]))
#endif
#if VP_PORT_COUNT-4 >= 0
# define PORTK (*((volatile unsigned char *)&VP_PORTx[3]))
# define PINK (*((volatile unsigned char *)&VP_PINx[3]))
#endif
#if VP_PORT_COUNT-5 >= 0
# define PORTL (*((volatile unsigned char *)&VP_PORTx[4]))
# define PINL (*((volatile unsigned char *)&VP_PINx[4]))
#endif
#if VP_PORT_COUNT-6 >= 0
# define PORTM (*((volatile unsigned char *)&VP_PORTx[5]))
# define PINM (*((volatile unsigned char *)&VP_PINx[5]))
#endif
#if VP_PORT_COUNT-7 >= 0
# define PORTN (*((volatile unsigned char *)&VP_PORTx[6]))
# define PINN (*((volatile unsigned char *)&VP_PINx[6]))
#endif
#if VP_PORT_COUNT-8 >= 0
# define PORTO (*((volatile unsigned char *)&VP_PORTx[7]))
# define PINO (*((volatile unsigned char *)&VP_PINx[7]))
#endif
#if VP_PORT_COUNT-9 >= 0
# define PORTP (*((volatile unsigned char *)&VP_PORTx[8]))
# define PINP (*((volatile unsigned char *)&VP_PINx[8]))
#endif
#if VP_PORT_COUNT-10 >= 0
# define PORTQ (*((volatile unsigned char *)&VP_PORTx[9]))
# define PINQ (*((volatile unsigned char *)&VP_PINx[9]))
#endif
#if VP_PORT_COUNT-11 >= 0
# define PORTR (*((volatile unsigned char *)&VP_PORTx[10]))
# define PINR (*((volatile unsigned char *)&VP_PINx[10]))
#endif
#if VP_PORT_COUNT-12 >= 0
# define PORTS (*((volatile unsigned char *)&VP_PORTx[11]))
# define PINS (*((volatile unsigned char *)&VP_PINx[11]))
#endif
#if VP_PORT_COUNT-13 >= 0
# define PORTT (*((volatile unsigned char *)&VP_PORTx[12]))
# define PINT (*((volatile unsigned char *)&VP_PINx[12]))
#endif
#if VP_PORT_COUNT-14 >= 0
# define PORTU (*((volatile unsigned char *)&VP_PORTx[13]))
# define PINU (*((volatile unsigned char *)&VP_PINx[13]))
#endif
#if VP_PORT_COUNT-15 >= 0
# define PORTV (*((volatile unsigned char *)&VP_PORTx[14]))
# define PINV (*((volatile unsigned char *)&VP_PINx[14]))
#endif
#if VP_PORT_COUNT-16 >= 0
# define PORTW (*((volatile unsigned char *)&VP_PORTx[15]))
# define PINW (*((volatile unsigned char *)&VP_PINx[15]))
#endif
#if VP_PORT_COUNT-17 >= 0
# define PORTX (*((volatile unsigned char *)&VP_PORTx[16]))
# define PINX (*((volatile unsigned char *)&VP_PINx[16]))
#endif
#if VP_PORT_COUNT-18 >= 0
# define PORTY (*((volatile unsigned char *)&VP_PORTx[17]))
# define PINY (*((volatile unsigned char *)&VP_PINx[17]))
#endif
#if VP_PORT_COUNT-19 >= 0
# define PORTZ (*((volatile unsigned char *)&VP_PORTx[18]))
# define PINZ (*((volatile unsigned char *)&VP_PINx[18]))
#endif
#ifdef PORTH
# define PORTH_BIT SET_BIT8_FORMAT(PORTH)
#endif
#ifdef PORTI
# define PORTI_BIT SET_BIT8_FORMAT(PORTI)
#endif
#ifdef PORTJ
# define PORTJ_BIT SET_BIT8_FORMAT(PORTJ)
#endif
#ifdef PORTK
# define PORTK_BIT SET_BIT8_FORMAT(PORTK)
#endif
#ifdef PORTL
# define PORTL_BIT SET_BIT8_FORMAT(PORTL)
#endif
#ifdef PORTM
# define PORTM_BIT SET_BIT8_FORMAT(PORTM)
#endif
#ifdef PORTN
# define PORTN_BIT SET_BIT8_FORMAT(PORTN)
#endif
#ifdef PORTO
# define PORTO_BIT SET_BIT8_FORMAT(PORTO)
#endif
#ifdef PORTP
# define PORTP_BIT SET_BIT8_FORMAT(PORTP)
#endif
#ifdef PORTQ
# define PORTQ_BIT SET_BIT8_FORMAT(PORTQ)
#endif
#ifdef PORTR
# define PORTR_BIT SET_BIT8_FORMAT(PORTR)
#endif
#ifdef PORTS
# define PORTS_BIT SET_BIT8_FORMAT(PORTS)
#endif
#ifdef PORTT
# define PORTT_BIT SET_BIT8_FORMAT(PORTT)
#endif
#ifdef PORTU
# define PORTU_BIT SET_BIT8_FORMAT(PORTU)
#endif
#ifdef PORTV
# define PORTV_BIT SET_BIT8_FORMAT(PORTV)
#endif
#ifdef PORTW
# define PORTW_BIT SET_BIT8_FORMAT(PORTW)
#endif
#ifdef PORTX
# define PORTX_BIT SET_BIT8_FORMAT(PORTX)
#endif
#ifdef PORTY
# define PORTY_BIT SET_BIT8_FORMAT(PORTY)
#endif
#ifdef PORTZ
# define PORTZ_BIT SET_BIT8_FORMAT(PORTZ)
#endif
#ifdef PINH
# define PINH_BIT SET_BIT8_FORMAT(PINH)
#endif
#ifdef PINI
# define PINI_BIT SET_BIT8_FORMAT(PINI)
#endif
#ifdef PINJ
# define PINJ_BIT SET_BIT8_FORMAT(PINJ)
#endif
#ifdef PINK
# define PINK_BIT SET_BIT8_FORMAT(PINK)
#endif
#ifdef PINL
# define PINL_BIT SET_BIT8_FORMAT(PINL)
#endif
#ifdef PINM
# define PINM_BIT SET_BIT8_FORMAT(PINM)
#endif
#ifdef PINN
# define PINN_BIT SET_BIT8_FORMAT(PINN)
#endif
#ifdef PINO
# define PINO_BIT SET_BIT8_FORMAT(PINO)
#endif
#ifdef PINP
# define PINP_BIT SET_BIT8_FORMAT(PINP)
#endif
#ifdef PINQ
# define PINQ_BIT SET_BIT8_FORMAT(PINQ)
#endif
#ifdef PINR
# define PINR_BIT SET_BIT8_FORMAT(PINR)
#endif
#ifdef PINS
# define PINS_BIT SET_BIT8_FORMAT(PINS)
#endif
#ifdef PINT
# define PINT_BIT SET_BIT8_FORMAT(PINT)
#endif
#ifdef PINU
# define PINU_BIT SET_BIT8_FORMAT(PINU)
#endif
#ifdef PINV
# define PINV_BIT SET_BIT8_FORMAT(PINV)
#endif
#ifdef PINW
# define PINW_BIT SET_BIT8_FORMAT(PINW)
#endif
#ifdef PINX
# define PINX_BIT SET_BIT8_FORMAT(PINX)
#endif
#ifdef PINY
# define PINY_BIT SET_BIT8_FORMAT(PINY)
#endif
#ifdef PINZ
# define PINZ_BIT SET_BIT8_FORMAT(PINZ)
#endif
#ifdef PORTH
# define _PH0 PORTH_BIT.BIT0
# define _PH1 PORTH_BIT.BIT1
# define _PH2 PORTH_BIT.BIT2
# define _PH3 PORTH_BIT.BIT3
# define _PH4 PORTH_BIT.BIT4
# define _PH5 PORTH_BIT.BIT5
# define _PH6 PORTH_BIT.BIT6
# define _PH7 PORTH_BIT.BIT7
#endif
#ifdef PORTI
# define _PI0 PORTI_BIT.BIT0
# define _PI1 PORTI_BIT.BIT1
# define _PI2 PORTI_BIT.BIT2
# define _PI3 PORTI_BIT.BIT3
# define _PI4 PORTI_BIT.BIT4
# define _PI5 PORTI_BIT.BIT5
# define _PI6 PORTI_BIT.BIT6
# define _PI7 PORTI_BIT.BIT7
#endif
#ifdef PORTJ
# define _PJ0 PORTJ_BIT.BIT0
# define _PJ1 PORTJ_BIT.BIT1
# define _PJ2 PORTJ_BIT.BIT2
# define _PJ3 PORTJ_BIT.BIT3
# define _PJ4 PORTJ_BIT.BIT4
# define _PJ5 PORTJ_BIT.BIT5
# define _PJ6 PORTJ_BIT.BIT6
# define _PJ7 PORTJ_BIT.BIT7
#endif
#ifdef PORTK
# define _PK0 PORTK_BIT.BIT0
# define _PK1 PORTK_BIT.BIT1
# define _PK2 PORTK_BIT.BIT2
# define _PK3 PORTK_BIT.BIT3
# define _PK4 PORTK_BIT.BIT4
# define _PK5 PORTK_BIT.BIT5
# define _PK6 PORTK_BIT.BIT6
# define _PK7 PORTK_BIT.BIT7
#endif
#ifdef PORTL
# define _PL0 PORTL_BIT.BIT0
# define _PL1 PORTL_BIT.BIT1
# define _PL2 PORTL_BIT.BIT2
# define _PL3 PORTL_BIT.BIT3
# define _PL4 PORTL_BIT.BIT4
# define _PL5 PORTL_BIT.BIT5
# define _PL6 PORTL_BIT.BIT6
# define _PL7 PORTL_BIT.BIT7
#endif
#ifdef PORTM
# define _PM0 PORTM_BIT.BIT0
# define _PM1 PORTM_BIT.BIT1
# define _PM2 PORTM_BIT.BIT2
# define _PM3 PORTM_BIT.BIT3
# define _PM4 PORTM_BIT.BIT4
# define _PM5 PORTM_BIT.BIT5
# define _PM6 PORTM_BIT.BIT6
# define _PM7 PORTM_BIT.BIT7
#endif
#ifdef PORTN
# define _PN0 PORTN_BIT.BIT0
# define _PN1 PORTN_BIT.BIT1
# define _PN2 PORTN_BIT.BIT2
# define _PN3 PORTN_BIT.BIT3
# define _PN4 PORTN_BIT.BIT4
# define _PN5 PORTN_BIT.BIT5
# define _PN6 PORTN_BIT.BIT6
# define _PN7 PORTN_BIT.BIT7
#endif
#ifdef PORTO
# define _PO0 PORTO_BIT.BIT0
# define _PO1 PORTO_BIT.BIT1
# define _PO2 PORTO_BIT.BIT2
# define _PO3 PORTO_BIT.BIT3
# define _PO4 PORTO_BIT.BIT4
# define _PO5 PORTO_BIT.BIT5
# define _PO6 PORTO_BIT.BIT6
# define _PO7 PORTO_BIT.BIT7
#endif
#ifdef PORTP
# define _PP0 PORTP_BIT.BIT0
# define _PP1 PORTP_BIT.BIT1
# define _PP2 PORTP_BIT.BIT2
# define _PP3 PORTP_BIT.BIT3
# define _PP4 PORTP_BIT.BIT4
# define _PP5 PORTP_BIT.BIT5
# define _PP6 PORTP_BIT.BIT6
# define _PP7 PORTP_BIT.BIT7
#endif
#ifdef PORTQ
# define _PQ0 PORTQ_BIT.BIT0
# define _PQ1 PORTQ_BIT.BIT1
# define _PQ2 PORTQ_BIT.BIT2
# define _PQ3 PORTQ_BIT.BIT3
# define _PQ4 PORTQ_BIT.BIT4
# define _PQ5 PORTQ_BIT.BIT5
# define _PQ6 PORTQ_BIT.BIT6
# define _PQ7 PORTQ_BIT.BIT7
#endif
#ifdef PORTR
# define _PR0 PORTR_BIT.BIT0
# define _PR1 PORTR_BIT.BIT1
# define _PR2 PORTR_BIT.BIT2
# define _PR3 PORTR_BIT.BIT3
# define _PR4 PORTR_BIT.BIT4
# define _PR5 PORTR_BIT.BIT5
# define _PR6 PORTR_BIT.BIT6
# define _PR7 PORTR_BIT.BIT7
#endif
#ifdef PORTS
# define _PS0 PORTS_BIT.BIT0
# define _PS1 PORTS_BIT.BIT1
# define _PS2 PORTS_BIT.BIT2
# define _PS3 PORTS_BIT.BIT3
# define _PS4 PORTS_BIT.BIT4
# define _PS5 PORTS_BIT.BIT5
# define _PS6 PORTS_BIT.BIT6
# define _PS7 PORTS_BIT.BIT7
#endif
#ifdef PORTT
# define _PT0 PORTT_BIT.BIT0
# define _PT1 PORTT_BIT.BIT1
# define _PT2 PORTT_BIT.BIT2
# define _PT3 PORTT_BIT.BIT3
# define _PT4 PORTT_BIT.BIT4
# define _PT5 PORTT_BIT.BIT5
# define _PT6 PORTT_BIT.BIT6
# define _PT7 PORTT_BIT.BIT7
#endif
#ifdef PORTU
# define _PU0 PORTU_BIT.BIT0
# define _PU1 PORTU_BIT.BIT1
# define _PU2 PORTU_BIT.BIT2
# define _PU3 PORTU_BIT.BIT3
# define _PU4 PORTU_BIT.BIT4
# define _PU5 PORTU_BIT.BIT5
# define _PU6 PORTU_BIT.BIT6
# define _PU7 PORTU_BIT.BIT7
#endif
#ifdef PORTV
# define _PV0 PORTV_BIT.BIT0
# define _PV1 PORTV_BIT.BIT1
# define _PV2 PORTV_BIT.BIT2
# define _PV3 PORTV_BIT.BIT3
# define _PV4 PORTV_BIT.BIT4
# define _PV5 PORTV_BIT.BIT5
# define _PV6 PORTV_BIT.BIT6
# define _PV7 PORTV_BIT.BIT7
#endif
#ifdef PORTW
# define _PW0 PORTW_BIT.BIT0
# define _PW1 PORTW_BIT.BIT1
# define _PW2 PORTW_BIT.BIT2
# define _PW3 PORTW_BIT.BIT3
# define _PW4 PORTW_BIT.BIT4
# define _PW5 PORTW_BIT.BIT5
# define _PW6 PORTW_BIT.BIT6
# define _PW7 PORTW_BIT.BIT7
#endif
#ifdef PORTX
# define _PX0 PORTX_BIT.BIT0
# define _PX1 PORTX_BIT.BIT1
# define _PX2 PORTX_BIT.BIT2
# define _PX3 PORTX_BIT.BIT3
# define _PX4 PORTX_BIT.BIT4
# define _PX5 PORTX_BIT.BIT5
# define _PX6 PORTX_BIT.BIT6
# define _PX7 PORTX_BIT.BIT7
#endif
#ifdef PORTY
# define _PY0 PORTY_BIT.BIT0
# define _PY1 PORTY_BIT.BIT1
# define _PY2 PORTY_BIT.BIT2
# define _PY3 PORTY_BIT.BIT3
# define _PY4 PORTY_BIT.BIT4
# define _PY5 PORTY_BIT.BIT5
# define _PY6 PORTY_BIT.BIT6
# define _PY7 PORTY_BIT.BIT7
#endif
#ifdef PORTZ
# define _PZ0 PORTZ_BIT.BIT0
# define _PZ1 PORTZ_BIT.BIT1
# define _PZ2 PORTZ_BIT.BIT2
# define _PZ3 PORTZ_BIT.BIT3
# define _PZ4 PORTZ_BIT.BIT4
# define _PZ5 PORTZ_BIT.BIT5
# define _PZ6 PORTZ_BIT.BIT6
# define _PZ7 PORTZ_BIT.BIT7
#endif
#ifdef PINH
# define Read_PH0 PINH_BIT.BIT0
# define Read_PH1 PINH_BIT.BIT1
# define Read_PH2 PINH_BIT.BIT2
# define Read_PH3 PINH_BIT.BIT3
# define Read_PH4 PINH_BIT.BIT4
# define Read_PH5 PINH_BIT.BIT5
# define Read_PH6 PINH_BIT.BIT6
# define Read_PH7 PINH_BIT.BIT7
#endif
#ifdef PINI
# define Read_PI0 PINI_BIT.BIT0
# define Read_PI1 PINI_BIT.BIT1
# define Read_PI2 PINI_BIT.BIT2
# define Read_PI3 PINI_BIT.BIT3
# define Read_PI4 PINI_BIT.BIT4
# define Read_PI5 PINI_BIT.BIT5
# define Read_PI6 PINI_BIT.BIT6
# define Read_PI7 PINI_BIT.BIT7
#endif
#ifdef PINJ
# define Read_PJ0 PINJ_BIT.BIT0
# define Read_PJ1 PINJ_BIT.BIT1
# define Read_PJ2 PINJ_BIT.BIT2
# define Read_PJ3 PINJ_BIT.BIT3
# define Read_PJ4 PINJ_BIT.BIT4
# define Read_PJ5 PINJ_BIT.BIT5
# define Read_PJ6 PINJ_BIT.BIT6
# define Read_PJ7 PINJ_BIT.BIT7
#endif
#ifdef PINK
# define Read_PK0 PINK_BIT.BIT0
# define Read_PK1 PINK_BIT.BIT1
# define Read_PK2 PINK_BIT.BIT2
# define Read_PK3 PINK_BIT.BIT3
# define Read_PK4 PINK_BIT.BIT4
# define Read_PK5 PINK_BIT.BIT5
# define Read_PK6 PINK_BIT.BIT6
# define Read_PK7 PINK_BIT.BIT7
#endif
#ifdef PINL
# define Read_PL0 PINL_BIT.BIT0
# define Read_PL1 PINL_BIT.BIT1
# define Read_PL2 PINL_BIT.BIT2
# define Read_PL3 PINL_BIT.BIT3
# define Read_PL4 PINL_BIT.BIT4
# define Read_PL5 PINL_BIT.BIT5
# define Read_PL6 PINL_BIT.BIT6
# define Read_PL7 PINL_BIT.BIT7
#endif
#ifdef PINM
# define Read_PM0 PINM_BIT.BIT0
# define Read_PM1 PINM_BIT.BIT1
# define Read_PM2 PINM_BIT.BIT2
# define Read_PM3 PINM_BIT.BIT3
# define Read_PM4 PINM_BIT.BIT4
# define Read_PM5 PINM_BIT.BIT5
# define Read_PM6 PINM_BIT.BIT6
# define Read_PM7 PINM_BIT.BIT7
#endif
#ifdef PINN
# define Read_PN0 PINN_BIT.BIT0
# define Read_PN1 PINN_BIT.BIT1
# define Read_PN2 PINN_BIT.BIT2
# define Read_PN3 PINN_BIT.BIT3
# define Read_PN4 PINN_BIT.BIT4
# define Read_PN5 PINN_BIT.BIT5
# define Read_PN6 PINN_BIT.BIT6
# define Read_PN7 PINN_BIT.BIT7
#endif
#ifdef PINO
# define Read_PO0 PINO_BIT.BIT0
# define Read_PO1 PINO_BIT.BIT1
# define Read_PO2 PINO_BIT.BIT2
# define Read_PO3 PINO_BIT.BIT3
# define Read_PO4 PINO_BIT.BIT4
# define Read_PO5 PINO_BIT.BIT5
# define Read_PO6 PINO_BIT.BIT6
# define Read_PO7 PINO_BIT.BIT7
#endif
#ifdef PINP
# define Read_PP0 PINP_BIT.BIT0
# define Read_PP1 PINP_BIT.BIT1
# define Read_PP2 PINP_BIT.BIT2
# define Read_PP3 PINP_BIT.BIT3
# define Read_PP4 PINP_BIT.BIT4
# define Read_PP5 PINP_BIT.BIT5
# define Read_PP6 PINP_BIT.BIT6
# define Read_PP7 PINP_BIT.BIT7
#endif
#ifdef PINQ
# define Read_PQ0 PINQ_BIT.BIT0
# define Read_PQ1 PINQ_BIT.BIT1
# define Read_PQ2 PINQ_BIT.BIT2
# define Read_PQ3 PINQ_BIT.BIT3
# define Read_PQ4 PINQ_BIT.BIT4
# define Read_PQ5 PINQ_BIT.BIT5
# define Read_PQ6 PINQ_BIT.BIT6
# define Read_PQ7 PINQ_BIT.BIT7
#endif
#ifdef PINR
# define Read_PR0 PINR_BIT.BIT0
# define Read_PR1 PINR_BIT.BIT1
# define Read_PR2 PINR_BIT.BIT2
# define Read_PR3 PINR_BIT.BIT3
# define Read_PR4 PINR_BIT.BIT4
# define Read_PR5 PINR_BIT.BIT5
# define Read_PR6 PINR_BIT.BIT6
# define Read_PR7 PINR_BIT.BIT7
#endif
#ifdef PINS
# define Read_PS0 PINS_BIT.BIT0
# define Read_PS1 PINS_BIT.BIT1
# define Read_PS2 PINS_BIT.BIT2
# define Read_PS3 PINS_BIT.BIT3
# define Read_PS4 PINS_BIT.BIT4
# define Read_PS5 PINS_BIT.BIT5
# define Read_PS6 PINS_BIT.BIT6
# define Read_PS7 PINS_BIT.BIT7
#endif
#ifdef PINT
# define Read_PT0 PINT_BIT.BIT0
# define Read_PT1 PINT_BIT.BIT1
# define Read_PT2 PINT_BIT.BIT2
# define Read_PT3 PINT_BIT.BIT3
# define Read_PT4 PINT_BIT.BIT4
# define Read_PT5 PINT_BIT.BIT5
# define Read_PT6 PINT_BIT.BIT6
# define Read_PT7 PINT_BIT.BIT7
#endif
#ifdef PINU
# define Read_PU0 PINU_BIT.BIT0
# define Read_PU1 PINU_BIT.BIT1
# define Read_PU2 PINU_BIT.BIT2
# define Read_PU3 PINU_BIT.BIT3
# define Read_PU4 PINU_BIT.BIT4
# define Read_PU5 PINU_BIT.BIT5
# define Read_PU6 PINU_BIT.BIT6
# define Read_PU7 PINU_BIT.BIT7
#endif
#ifdef PINV
# define Read_PV0 PINV_BIT.BIT0
# define Read_PV1 PINV_BIT.BIT1
# define Read_PV2 PINV_BIT.BIT2
# define Read_PV3 PINV_BIT.BIT3
# define Read_PV4 PINV_BIT.BIT4
# define Read_PV5 PINV_BIT.BIT5
# define Read_PV6 PINV_BIT.BIT6
# define Read_PV7 PINV_BIT.BIT7
#endif
#ifdef PINW
# define Read_PW0 PINW_BIT.BIT0
# define Read_PW1 PINW_BIT.BIT1
# define Read_PW2 PINW_BIT.BIT2
# define Read_PW3 PINW_BIT.BIT3
# define Read_PW4 PINW_BIT.BIT4
# define Read_PW5 PINW_BIT.BIT5
# define Read_PW6 PINW_BIT.BIT6
# define Read_PW7 PINW_BIT.BIT7
#endif
#ifdef PINX
# define Read_PX0 PINX_BIT.BIT0
# define Read_PX1 PINX_BIT.BIT1
# define Read_PX2 PINX_BIT.BIT2
# define Read_PX3 PINX_BIT.BIT3
# define Read_PX4 PINX_BIT.BIT4
# define Read_PX5 PINX_BIT.BIT5
# define Read_PX6 PINX_BIT.BIT6
# define Read_PX7 PINX_BIT.BIT7
#endif
#ifdef PINY
# define Read_PY0 PINY_BIT.BIT0
# define Read_PY1 PINY_BIT.BIT1
# define Read_PY2 PINY_BIT.BIT2
# define Read_PY3 PINY_BIT.BIT3
# define Read_PY4 PINY_BIT.BIT4
# define Read_PY5 PINY_BIT.BIT5
# define Read_PY6 PINY_BIT.BIT6
# define Read_PY7 PINY_BIT.BIT7
#endif
#ifdef PINZ
# define Read_PZ0 PINZ_BIT.BIT0
# define Read_PZ1 PINZ_BIT.BIT1
# define Read_PZ2 PINZ_BIT.BIT2
# define Read_PZ3 PINZ_BIT.BIT3
# define Read_PZ4 PINZ_BIT.BIT4
# define Read_PZ5 PINZ_BIT.BIT5
# define Read_PZ6 PINZ_BIT.BIT6
# define Read_PZ7 PINZ_BIT.BIT7
#endif
/*------------------*
* 动 作 宏 定 义 *
*------------------*/
# define VIRTUALPORT_INSERT_SPI_STC_ISR_CODE VP_PINx[VP_PORT_COUNT - VP_PortCounter] = SPDR; VP_IfStartRefresh = True;
# define REFRESH_VIRTUAL_PORT refreshVirtualPort();
/********************
* 结构体宏定义 *
********************/
/********************
* 函 数 声 明 区 *
********************/
BOOL refreshVirtualPort(void);
/********************
* 全局变量声明区 *
********************/
volatile unsigned char VP_PORTx[VP_PORT_COUNT];
volatile unsigned char VP_PINx[VP_PORT_COUNT];
BOOL VP_IfStartRefresh = False; //虚拟端口刷新标志
unsigned char VP_PortCounter = 0; //虚拟端口计数器
/***********************************************************
* 函数说明:虚拟端口刷新函数 *
***********************************************************/
BOOL refreshVirtualPort(void)
{
static BOOL IfStartRefresh = False; //刷新忙信号
if (IfStartRefresh)
{
return False;
}
IfStartRefresh = True;
VP_SS = Low;
VP_SS = High; //锁存并行数据
for (VP_PortCounter = VP_PORT_COUNT;VP_PortCounter>0;VP_PortCounter--)
{
VP_IfStartRefresh = False; //设置等待完成信号
SPDR = VP_PORTx[VP_PortCounter-1];
while(VP_IfStartRefresh == False);
}
VP_SS = Low;
VP_SS = High; //锁存串行数据
IfStartRefresh = False;
return True;
}
#endif |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|