815582558243.rar

  • 帅帅的帅哥
    了解作者
  • C/C++
    开发工具
  • 8KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 66
    下载次数
  • 2007-12-13 23:48
    上传日期
外围IO口扩展程序集合,包含IO口扩展芯片8155,8255,8243等多种扩展芯片的程序,全部采用C语言编写。贡献出来给大家参考!
815582558243.rar
  • 1.4
  • 用8243扩展IO接口
  • drive8243.c
    2.1KB
  • config.h
    530B
  • drive8243.Uv2
    2KB
  • 8255驱动程序
  • config.h
    1.3KB
  • drive8255.Uv2
    2KB
  • drive8255.c
    4.8KB
  • 8155驱动程序
  • driber8155.Uv2
    1.9KB
  • drive8155.c
    7.8KB
  • config.h
    2.8KB
内容介绍
/*---------------------------------------------------------------------------------------------------------------- 库文件名称: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); }
评论
    相关推荐
    • 8255-ok.rar
      这是关于单片机各种应用接口的子程序,还是用c语言写的,非常实用
    • 8255dirve.rar
      功能描述:驱动8155,不需要了解8255的工作原理,透明操作8255的三个输入输出口PA、PB、PC 读A口只需要调用rd_PA,写则需要调用wr_PA B、C操作也一样 全局变量: IO_flags,在其它程序中不能对其改写 特殊说明: 无
    • 8255.rar
      驱动8255,透明操作8255,读写存储器,读写PA、PB、PC,设置计数模式,读计数值,开中断,输出中断。
    • 8155-C51.rar
      “基于8155的存储示波器” 仿真软件是Proteus和Keil联调,用C51编写,功能是从示波器输入一段正弦波形,A/D后存储进6264,单步回放功能是从6264读取后D/A,显示数值在LCD上,还有回放整段锯齿波形功能,I/O口用8155...
    • AT89s51_8155.rar
      Mcs-51单片机接8155接数码管显示时间,
    • 8155-8led.rar
      关于8255 8LED的一个电子数码表的实验
    • main.zip
      基于8255的8LED显示频率计设计,c语言源程序
    • 8155kuozhan.zip
      基于51内核的单片机利用8155进行IO端口扩展的程序。
    • 基于单片机设计的电子琴
      由于做的时间有点长,所以收大家一点积分,呵呵。 这是我们的课程设计之一,要求如下: ...必须使用8255/8155扩展实现键盘和显示部分。 2) 长时间(如2s)按下某一键 可连续播放先前输入的八位音乐。
    • 基于8255的LCD显示温度控制器设计_南邮_通院课程设计
      lxs是最终版本,8255驱动1602,0-10显示无bug,可设置上下限,带温度回显(仅显示不同温度值); lxs2是初版,仅8255驱动1602显示, test带8155驱动数码管显示和仅51单片机驱动1602程序及仿真图;