阳光路上歌曲原唱:61板实现位操作的头文件

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 18:51:09
//用习惯了c51,在用凌阳时总感觉不舒服,这样就好多了
#ifndef    __bit_H__

#define    __bit_H__

/**************************************************************************************/
//位操作,另外,可以对字节操作,每一个单元(单位为16位的字)可以分为高八位和低八位操作;
//使用方法:下面的硬件寄存器都定义为了UNport结构体型的指针变量,使用时只要:
//端口名->bit.bit0就可以操作端口的第0位;
//端口名->byte.bytel就可以操作端口的低八位;
//端口名->port就可以操作整个端口;
//实际上,操作整个端口时可以用另外一个头文件"hardware.h",直接对*端口名操作就可以了;
/***************************************************************************************/

#define    Uint    unsigned int
typedef struct
{
    Uint bit0  : 1;
    Uint bit1  : 1;
    Uint bit2  : 1;
    Uint bit3  : 1;
    Uint bit4  : 1;
    Uint bit5  : 1;
    Uint bit6  : 1;
    Uint bit7  : 1;
    Uint bit8  : 1;
    Uint bit9  : 1;
    Uint bit10 : 1;
    Uint bit11 : 1;
    Uint bit12 : 1;
    Uint bit13 : 1;
    Uint bit14 : 1;
    Uint bit15 : 1;
}Bit;

typedef struct
{
    Uint bytel  : 8;
    Uint byteh  : 8;
}Byte;
    
typedef union
{
    Bit bit;
    Byte byte;
    Uint port;
}UNport;


#define PA                ((volatile UNport *)(0x7000))
#define PA_Buffer        ((volatile UNport *)(0x7001))
#define PA_Dir          ((volatile UNport *)(0x7002))
#define PA_Attrib      ((volatile UNport *)(0x7003))
#define    PA_Latch          ((volatile UNport *)(0x7004))
#define    PB                ((volatile UNport *)(0x7005))
#define    PB_Buffer      ((volatile UNport *)(0x7006))
#define    PB_Dir          ((volatile UNport *)(0x7007))
#define    PB_Attrib      ((volatile UNport *)(0x7008))
#define    Poscu               ((volatile UNport *)(0x7013))
#define    Ptbu               ((volatile UNport *)(0x700e))
#define    Ptbc               ((volatile UNport *)(0x700f))
#define    Pt0              ((volatile UNport *)(0x700a))
#define    Pt1               ((volatile UNport *)(0x700c))
#define    Pt0u               ((volatile UNport *)(0x700b))
#define    Pt1u              ((volatile UNport *)(0x700d))
#define    Pintu              ((volatile UNport *)(0x7010))
#define    Pintc              ((volatile UNport *)(0x7011))
#define    Padm               ((volatile UNport *)(0x7014))
#define    Padl              ((volatile UNport *)(0x702c))
#define    Padu              ((volatile UNport *)(0x7015))
#define    Padmuxu            ((volatile UNport *)(0x702b))
#define    Pda0               ((volatile UNport *)(0x7017))
#define    Pda1               ((volatile UNport *)(0x7016))
#define    Pdau               ((volatile UNport *)(0x702a))
#define    Pwdogc              ((volatile UNport *)(0x7012))
#define    Pflashu         ((volatile UNport *)(0x7555))

#define    Watchdog_Clear        Pwdogc->port

#define    P0_0        PA->bit.bit0
#define    P0_1        PA->bit.bit1
#define    P0_2        PA->bit.bit2
#define    P0_3        PA->bit.bit3
#define    P0_4        PA->bit.bit4
#define    P0_5        PA->bit.bit5
#define    P0_6        PA->bit.bit6
#define    P0_7        PA->bit.bit7
#define    P0_8        PA->bit.bit8
#define    P0_9        PA->bit.bit9
#define    P0_10        PA->bit.bit10
#define    P0_11        PA->bit.bit11
#define    P0_12        PA->bit.bit12
#define    P0_13        PA->bit.bit13
#define    P0_14        PA->bit.bit14
#define    P0_15        PA->bit.bit15
#define    P1_0        PB->bit.bit0
#define    P1_1        PB->bit.bit1
#define    P1_2        PB->bit.bit2
#define    P1_3        PB->bit.bit3
#define    P1_4        PB->bit.bit4
#define    P1_5        PB->bit.bit5
#define    P1_6        PB->bit.bit6
#define    P1_7        PB->bit.bit7
#define    P1_8        PB->bit.bit8
#define    P1_9        PB->bit.bit9
#define    P1_10        PB->bit.bit10
#define    P1_11        PB->bit.bit11
#define    P1_12        PB->bit.bit12
#define    P1_13        PB->bit.bit13
#define    P1_14        PB->bit.bit14
#define    P1_15        PB->bit.bit15

#define    P0                PA->port
#define    P0_Buffer        PA_Buffer->port
#define    P0_Dir            PA_Dir->port
#define    P0_Attrib        PA_Attrib->port
#define    P0_Latch        PA_Latch->port
#define    P0_Lowbyte            PA->byte.bytel
#define    P0_Highbyte            PA->byte.byteh
#define    P0_Dir_Lowbyte        PA_Dir->byte.bytel
#define    P0_Dir_Highbyte        PA_Dir->byte.byteh
#define    P0_Attrib_Lowbyte    PA_Attrib->byte.bytel
#define    P0_Attrib_Highbyte    PA_Attrib->byte.byteh

#define    P1                PB->port
#define    P1_Buffer        PB_Buffer->port
#define    P1_Dir            PB_Dir->port
#define    P1_Attrib        PB_Attrib->port
#define    P1_Lowbyte            PB->byte.bytel
#define    P1_Highbyte            PB->byte.byteh
#define    P1_Dir_Lowbyte        PB_Dir->byte.bytel
#define    P1_Dir_Highbyte        PB_Dir->byte.byteh
#define    P1_Attrib_Lowbyte    PB_Attrib->byte.bytel
#define    P1_Attrib_Highbyte    PB_Attrib->byte.byteh

#define    OSC_Unit        Poscu->port
#define    Timebase_Unit    Ptbu->port
#define    Timebase_Clear    Ptbc->port
#define    T0                Pt0->port
#define    T1                Pt1->port
#define    T0_Unit            Pt0u->port
#define    T1_Unit            Pt1u->port
#define    INT_Unit        Pintu->port
#define    INT_Clear        Pintc->port
#define    AD_Unit            Padu->port
#define    ADMUX_Unit        Padmuxu->port
#define    AD_Mic            Padm->port
#define    AD_Line            Padl->port
#define    DA_Unit            Pdau->port
#define    DA0                Pda0->port
#define    DA1                Pda1->port
#define    Flash_Unit        Pflashu->port

#define EXT0        PB->bit.bit2
#define EXT1        PB->bit.bit3
#define EXT0_Dir        PB_Dir->bit.bit2
#define EXT1_Dir        PB_Dir->bit.bit3
#define EXT0_Attrib        PB_Attrib->bit.bit2
#define EXT1_Attrib        PB_Attrib->bit.bit3

#define    UART_Unit1        Puartu1->byte.bytel
#define    UART_Unit2        Puartu2->byte.bytel
#define    UART            Puart->byte.bytel
#define UART_Baud_Low        Puartbaudl->byte.bytel
#define UART_Baud_High        Puartbaudh->byte.bytel

#define    SCK_Dir            PB_Dir->bit.bit0
#define    SDA_Dir            PB_Dir->bit.bit1
#define    SCK_Attrib        PB_Attrib->bit.bit0
#define    SDA_Attrib        PB_Attrib->bit.bit1
#define    SCK            P1_0
#define    SDA            P1_1

#define    Rx_Dir            PB_Dir->bit.bit7
#define    Tx_Dir            PB_Dir->bit.bit10
#define    Rx_Attrib        PB_Attrib->bit.bit7
#define    Tx_Attrib        PB_Attrib->bit.bit10
#define    Rx            P1_7
#define    Tx            P1_10

#define Rx_Int_EN        Puartu1->bit.bit7
#define Tx_Int_EN        Puartu1->bit.bit6
#define UART_Reset        Puartu1->bit.bit5
#define Parity            Puartu1->bit.bit3
#define Parity_EN        Puartu1->bit.bit7
#define Rx_EM            Puartu2->bit.bit7
#define Tx_EM            Puartu2->bit.bit6
#define Rx_RDY            Puartu2->bit.bit7
#define Tx_RDY            Puartu2->bit.bit6
#define UART_FE            Puartu2->bit.bit5
#define UART_OE            Puartu2->bit.bit4
#define UART_PE            Puartu2->bit.bit3

#define    AD_Open()        AD_Unit=0x3d

#endif