//*****************************************************   
//Copyright (c) 2021, 苏州华芯微电子股份有限公司
//All rights reserved                                 
//
//文件名称: HS16F3211-GPIO
//摘    要: HS16F3211-GPIO功能演示
//  	    PB口输入输出配置、上下拉配置及高低输出 
//
//当前版本: 1.0                                      
//作    者: 华芯微MCU组
//完成日期: 2021.09.02
//*****************************************************   

#include 	<hs16f3211.h> 


//***********************宏定义*****************************
#define  unchar     unsigned char 
#define  unint      unsigned int
#define  unlong     unsigned long
#define	CLRWDT()	asm("clrwdt")

#define  OUT1		FPB0
#define  OUT2		FPB1
#define  KEY1		FPB2  
#define  KEY2		FPB3


union {
	struct {
		unsigned  bit0:1;
		unsigned  bit1:1;
		unsigned  bit2:1;
		unsigned  bit3:1;
		unsigned  bit4:1;
		unsigned  bit5:1;
		unsigned  bit6:1;
		unsigned  bit7:1;
		
	} flag_bit;
	unsigned int flag_byte;
} FLAG;


volatile unsigned char           FLAG1            @ 0x010;
// bit and bitfield definitions
volatile bit F_bit0                @ ((unsigned)&FLAG1*8)+0;
volatile bit F_bit1                @ ((unsigned)&FLAG1*8)+1;
volatile bit F_bit2                @ ((unsigned)&FLAG1*8)+2;
volatile bit F_bit3                @ ((unsigned)&FLAG1*8)+3;
volatile bit F_bit4                @ ((unsigned)&FLAG1*8)+4;
volatile bit F_bit5                @ ((unsigned)&FLAG1*8)+5;
volatile bit F_bit6                @ ((unsigned)&FLAG1*8)+6;
volatile bit F_bit7                @ ((unsigned)&FLAG1*8)+7;


/*-------------------------------------------------
 *  函数名：GPIO_Init
 *  功能：  GPIO设置
 *  输入：  PB3 PB2
 *  输出：  PB0 PB1
 --------------------------------------------------*/	
void GPIO_Init(void) 
{ 

    OPTION= 0b00000010; //Bit7 INT1EDG, 外部中断1触发方式 0 INT1引脚下降沿触发
                        //Bit6 INTEDG, 外部中断 触发方式 0 INT引脚下降沿触发
                        //Bit5 T0CS, TMR0时钟源选择位 0 内部指令时钟
                        //Bit4 T0SE, TMR0时钟源边沿选择位 0 T0CKI引脚下降沿触发计数
                        //Bit3 PSA, 预分频分配位 0 预分频器分配给TMR0
                        //Bit2:0 PS[2:0], 预分频配置 010 '8分频
    
    PORTA = 0b00000000;	
    IOSTA = 0b00000000;	//PA配置输入输出 0-输出 1-输入
                        //PA口->全输出

    PORTB = 0b00000000;	
    IOSTB = 0b00001100;	//PB配置输入输出 0-输出 1-输入
                        //PB0 PB1输出，PB3 PB2输入 
			
    PHCON = 0b11111011; //上拉配置  0使能  1禁止
			//PB2开上拉

    PDCON = 0b01111111; //下拉配置  0使能  1禁止  
			//PB3开下拉
}

void WDT_Init(void) 
{  
	CLRWDT(); 	
}

//****主函数****// 
void main(void) 
{
    GPIO_Init();
 
    while(1)  
    { 
    	CLRWDT();
    	
     // 整体FLAG赋值 
		FLAG.flag_byte =0;
	 	
	 	FLAG1 =0x01; 
	 	
	 //FLAG 位赋值 
		FLAG.flag_bit.bit0 =1; 

		F_bit1 =1;
		
	 //位判断 
	 	if(FLAG.flag_bit.bit0)
	 	{
			PB0 = ~PB0;

		}

		if((F_bit1)&&(F_bit0))
		{
		
			PB1 = ~PB1;
		}
		
	 
    }    
}
