⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 driver8155.h

📁 8155做的电子时钟
💻 H
字号:
/*----------------------------------------------------------------------------------------------------------------
库文件名称:driver8155.h
功能描述:驱动8155,透明操作8155,读写存储器,读写PA、PB、PC,设置计数模式,读计数值,开中断,输出中断。
全局变量: state_flags是8155命令/状态寄存器再RAM中的映射,不允许其它程序改动
特殊说明: 无
//----------------------------------------------------------------------------------------------------------------*/
 #include<config.h>
    
void main(void)
               {
      unsigned char aa;
      wr_mem(0x05,0x45);
      aa=rd_mem(0x05);
         }

unsigned char rd_mem(unsigned char mem_ad)                        /*读存储器*/
           {
            unsigned char mem_data;
      unsigned int  AD_mem;
   AD_mem=&mem_head;
            AD_mem=AD_mem+mem_ad;
      mem_data=XBYTE[AD_mem];
   return(mem_data);
   }
void wr_mem(unsigned char mem_ad, unsigned char mem_data)         /*写存储器*/
           {
       unsigned int  AD_mem;
    AD_mem=&mem_head;
             AD_mem=AD_mem+mem_ad;
       XBYTE[AD_mem]=mem_data;
     }
     
char rd_PA(void)                                                  /*读PA口*/  
           { unsigned char PA_data;
      ACC=state_flags;    /*把状态标志字读到ACC便于进行位操作*/
      do
      {
       IO_flagA=0;           /*置PA状态标志位为低--输入*/
    state_flags=ACC;
    a8155_CON=state_flags;  /*重写控制字,完成对8155的设置*/
    }
    while(IO_flagA==1);      /*判断状态标志位是否为高*/
           /*控制字设置完成*/
    PA_data=a8155_PA;   /*把PA口的数据读到PA_data*/
    return(PA_data);   /*返回PA_data*/
            }
           
char rd_PB(void)                                                /*读PB口*/  
           { unsigned char PB_data;
      ACC=state_flags;    /*把状态标志字读到ACC便于进行位操作*/
      do
      {
       IO_flagB=0;           /*置PB状态标志位为低--输入*/
    state_flags=ACC;
    a8155_CON=state_flags;  /*重写控制字,完成对8155的设置*/
    }
    while(IO_flagB==1);      /*判断状态标志位是否为高*/
           /*控制字设置完成*/
    PB_data=a8155_PB;   /*把PB口的数据读到PB_data*/
    return(PB_data);   /*返回PB_data*/
            }
char rd_PC(void)                                                   /*读PC口*/  
           { unsigned char PC_data;
      ACC=state_flags;    /*把状态标志字读到ACC便于进行位操作*/
      do
      {
       IO_flagC=0;           /*置PB状态标志位为低--输入*/
    IO_flagC1=0;         /*置控制字D3=0*/
    state_flags=ACC;
    a8155_CON=state_flags;  /*重写控制字,完成对8155的设置*/
    }
    while(IO_flagC==1);      /*判断状态标志位是否为高*/
           /*控制字设置完成*/
    PC_data=a8155_PC;   /*把PB口的数据读到PB_data*/
    return(PC_data);   /*返回PB_data*/
            }

void wt_PA(unsigned char PA_data)                             /*写PA口*/
                {
       ACC=state_flags;   /*把状态标志字读到ACC便于进行位操作*/
          
       {IO_flagA=1;    /*置PA状态标志位为高--输出*/
       state_flags=ACC;   /*位操作完成,把ACC的内容写回状态标志字*/
    a8155_CON=state_flags;  /*写控制字,完成对8155的设置*/
    }
    while(IO_flagA==0);      /*判断状态标志位是否为低
                                为低,设置未完成,需从新设置*/

      a8155_PA=PA_data;   /*将PA_data的内容送到PA口*/
    }
void wt_PB(unsigned char PB_data)                      /*写PB口*/
                {
       ACC=state_flags;    /*把状态标志字读到ACC便于进行位操作*/
          
       {IO_flagB=1;     /*置PB状态标志位为高--输出*/
       state_flags=ACC;    /*位操作完成,把ACC的内容写回状态标志字*/
    a8155_CON=state_flags;   /*写控制字,完成对8155的设置*/
    }
    while(IO_flagB==0);       /*判断状态标志位是否为低
                                为低,设置未完成,需从新设置*/

      a8155_PB=PB_data;     /*将PB_data的内容送到PB口*/
    }
void wt_PC(unsigned char PC_data)                      /*写PC口*/
                {
       ACC=state_flags;     /*把状态标志字读到ACC便于进行位操作*/
          
       {IO_flagC=1;      /*置PC状态标志位为高--输出*/
       IO_flagC1=0;           /*置控制字D3=0*/
       state_flags=ACC;     /*位操作完成,把ACC的内容写回状态标志字*/
    a8155_CON=state_flags;    /*写控制字,完成对8155的设置*/
    }
    while(IO_flagC==0);        /*判断状态标志位是否为低
                                为低,设置未完成,需从新设置*/

      a8155_PC=PC_data;     /*将PC_data的内容送到PC口*/
    }
void Dint_PA(void)                                                /*关A口中断*/
               {
      ACC=state_flags;     /*把状态标志字读到ACC便于进行位操作*/
      Int_flagA=0;
      state_flags=ACC;     /*位操作完成,把ACC的内容写回状态标志字*/
      a8155_CON=state_flags;   /*写控制字,完成对8155的设置*/
      }

void Eint_PA(void)                                                /*开A口中断*/
              {
     ACC=state_flags;     /*把状态标志字读到ACC便于进行位操作*/
     Int_flagA=1;
     state_flags=ACC;     /*位操作完成,把ACC的内容写回状态标志字*/
     a8155_CON=state_flags;   /*写控制字,完成对8155的设置*/
     }
void Dint_PB(void)                                                /*关B口中断*/
              {
      ACC=state_flags;     /*把状态标志字读到ACC便于进行位操作*/
      Int_flagB=0;
      state_flags=ACC;     /*位操作完成,把ACC的内容写回状态标志字*/
      a8155_CON=state_flags;   /*写控制字,完成对8155的设置*/
      }
void Eint_PB(void)                                                /*开B口中断*/
              {
     ACC=state_flags;     /*把状态标志字读到ACC便于进行位操作*/
     Int_flagA=1;
     state_flags=ACC;     /*位操作完成,把ACC的内容写回状态标志字*/
     a8155_CON=state_flags;   /*写控制字,完成对8155的设置*/
     }
void PC0_PAint(void)            /*PC上半口为PA状态输出*/
               {             /*PC0=INTRa,PC1=BFa,PC3=/STBaP*/
     ACC=state_flags;     /*把状态标志字读到ACC便于进行位操作*/
     Int_flagA=1;
     IO_flagC1=1;
     state_flags=ACC;     /*位操作完成,把ACC的内容写回状态标志字*/
     a8155_CON=state_flags;   /*写控制字,完成对8155的设置*/
      }
void PC4_PBint(void)                                             /*PC上半口为PA状态输出*/
               {             /*PC4=INTRb,PC5=BFb,PC6=/STBb*/
     ACC=state_flags;     /*把状态标志字读到ACC便于进行位操作*/
     Int_flagA=1;
     IO_flagC1=1;
     IO_flagC=1;
     state_flags=ACC;     /*位操作完成,把ACC的内容写回状态标志字*/
     a8155_CON=state_flags;   /*写控制字,完成对8155的设置*/
      }
void start_timer(void)                                            /*开始计数器计数*/
     {
     ACC=state_flags;     /*把状态标志字读到ACC便于进行位操作*/
     Timer_flag1=1;
     Timer_flag2=1;
     state_flags=ACC;     /*位操作完成,把ACC的内容写回状态标志字*/
     a8155_CON=state_flags;   /*写控制字,完成对8155的设置*/
      }
void stop_timer(void)                                             /*停止计数器计数*/
               {
     ACC=state_flags;     /*把状态标志字读到ACC便于进行位操作*/
     Timer_flag1=1;
     Timer_flag2=0;
     state_flags=ACC;     /*位操作完成,把ACC的内容写回状态标志字*/
     a8155_CON=state_flags;   /*写控制字,完成对8155的设置*/
      }
void setting_zero_stop(void)                                      /*设定计数到零停止计数*/
               {
     ACC=state_flags;     /*把状态标志字读到ACC便于进行位操作*/
     Timer_flag1=0;
     Timer_flag2=1;
     state_flags=ACC;     /*位操作完成,把ACC的内容写回状态标志字*/
     a8155_CON=state_flags;   /*写控制字,完成对8155的设置*/
      }
int rd_timer(void)                       /*读计数值*/
               {
      int time;
      char timea;
      time=Timer_B;
      timea=Timer_A;
      time=time<<8;
      time=((time&timea)&0x3F);
      return(time);      
      }

void setting_timerout_mode(unsigned char mode)             /*设定TIMERout输出模式*/
               {
       Timer_B=(mode&0x03);
      }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -