单片机程序与PLC连接串行通讯程序

  • Q2_248722
    了解作者
  • C/C++
    开发工具
  • 57.3KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-02-24 16:14
    上传日期
单片机程序与PLC连接串行通讯程序,单片机采用c语言编写
单片机程序与PLC连接串行通讯程序
  • 和PLC通讯程序调试3(用Keil)
  • TRANSFER.C
    4.5KB
  • TIMER.OBJ
    4.1KB
  • MAIN.LST
    4.8KB
  • protboard.PRJ
    4.8KB
  • WAVE.LIN
    108B
  • AT24CXXX3.LST
    6.9KB
  • PlcTransfer.Uv2
    2.1KB
  • TIMER.LST
    19.8KB
  • PlcTransfer.M51
    17.2KB
  • PlcTransfer_Uv2.Bak
    0B
  • MAIN.OBJ
    3.9KB
  • PlcTransfer.plg
    177B
  • TRANSFER.LST
    10KB
  • AT24CXX1.C
    4.9KB
  • AT24CXXX3.C
    3.5KB
  • TRANSFER.OBJ
    5KB
  • TIMER.C
    8KB
  • AT24CXXX3.OBJ
    5.8KB
  • PlcTransfer.Opt
    1.8KB
  • PlcTransfer_Opt.Bak
    1.7KB
  • AT24CXXX4.C
    8KB
  • PROTBOARD.M51
    15.9KB
  • TIMER.H
    651B
  • PROTBOARD.BIN
    724B
  • STARTUP.A51
    5KB
  • TRANSFER.H
    755B
  • PROTBOARD
    4.4KB
  • PROTBOARD.DSK
    3.2KB
  • PlcTransfer
    13.6KB
  • STARTUP.obj
    872B
  • TEMP.LST
    139B
  • PROTBOARD.HEX
    1.7KB
  • AT24CXX.C
    5.4KB
  • AT24CXXX2.C
    3.5KB
  • AT24CXX(512).C
    5.5KB
  • STARTUP.lst
    11.5KB
  • MAIN.C
    2.5KB
  • AT24CXXX3.H
    616B
内容介绍
/* ========================================================================= * 文件名: I2C9.C * 功 能:这是mcs-51和EEPROM AT24C512 I2C总线接口器件接口的例子 。 * =========================================================================*/ #include <reg52.h> #define HIGH 1 #define LOW 0 #define FALSE 0 #define TRUE ~FALSE #define function #define end_if #define end_for #define uchar unsigned char #define uint unsigned int #define WRITE 0xA0 /* 定义24C512的器件地址SLA和方向位W */ #define READ 0xA1 /* 定义24C512的器件地址SLA和方向位R */ #define BLOCK_SIZE 32 /* 定义指定字节个数 */ uchar idata EAROMImage[BLOCK_SIZE]; /* 在RAM中定义存储映象单元 */ uchar idata EAROMImage2[BLOCK_SIZE]; /* 在RAM中定义存储映象单元 */ uint Addr; uchar con; void eeprom24c32r(uint Address,uchar count); void eeprom24c32w(uint Address,uchar count); void timedelay(uint timess); sbit SCL=0xb2;//p3.2 sbit SDA=0xb3;//p3.3 /**************************************************************************** * 函数原型: void function delay(void); * 功 能: 本函数实际上只有一条返回指令, 在具体应用中可视具体要求增加延时 * 指令。 ****************************************************************************/ void function delay( void ) { uchar i ; for ( i=0 ; i<6 ; i++ ){ ;} } /**************************************************************************** * 函数原型: void function I_start(void); * 功 能: 提供I2C总线工作时序中的起始位。 ****************************************************************************/ void function I_start( void ) { SCL = HIGH ; delay() ; SDA = LOW ; delay() ; SCL = LOW ; delay() ; } /**************************************************************************** * 函数原型: void function I_stop(void); * 功 能: 提供I2C总线工作时序中的停止位。 ****************************************************************************/ void function I_stop( void ) { SDA = LOW ; delay() ; SCL = HIGH ; delay() ; SDA = HIGH ; delay() ; SCL = LOW ; delay() ; } /**************************************************************************** * 函数原型: void function I_init(void); * 功 能: I2C总线初始化。在main()函数中应首先调用本函数, 然后再调用 * 其它函数。 ****************************************************************************/ void function I_init( void ) { SCL = LOW ; I_stop() ; } /**************************************************************************** * 函数原型: bit function I_clock(void); * 功 能: 提供I2C总线的时钟信号, 并返回在时钟电平为高期间SDA 信号线上状 * 态。本函数可用于数据发送, 也可用于数据接收。 ****************************************************************************/ bit function I_clock( void ) { bit sample ; SCL = HIGH ; delay() ; sample = SDA ; SCL = LOW ; delay() ; return ( sample ) ; } /**************************************************************************** * 函数原型: bit function I_send(uchar I_data); * 功 能: 向I2C总线发送8位数据, 并请求一个应答信号ACK。如果收到ACK应答 * 则返回1(TRUE), 否则返回0(FALSE)。 ****************************************************************************/ bit function I_send( uchar I_data ) { uchar i ; /* 发送8位数据 */ for ( i=0 ; i<8 ; i++ ) { SDA = (bit)( I_data & 0x80 ) ; I_data = I_data << 1 ; I_clock() ; end_for} /* 请求应答信号ACK */ SDA = HIGH ; return ( ~I_clock() ) ; } /**************************************************************************** * 函数原型: uchar function I_receive(void); * 功 能: 从I2C总线上接收8位数据信号, 并将接收到8位数据作为一个字节 * 返回, 不回送应答信号ACK。主函数在调用本函数之前应保证SDA信 * 号线处于浮置状态, 即使8051的P1.7脚置1。 ****************************************************************************/ uchar function I_receive( void ) { uchar I_data = 0 ; uchar i ; for ( i=0 ; i<8 ; i++ ) { I_data *= 2 ; if ( I_clock() ) I_data++ ; end_if end_for } return ( I_data ) ; } /**************************************************************************** * 函数原型: void function I_Ack(void); * 功 能: 向I2C总线发送一个应答信号ACK, 一般用于连续数据读取时。 *****************************************************************************/ void function I_Ack( void ) { SDA = LOW ; I_clock() ; SDA = HIGH ; } /**************************************************************************** * 函数原型: void function wait_5ms(void); * 功 能: 提供5ms延时(时钟频率为12MHz)。 ****************************************************************************/ void function wait_5ms( void ) { uint i ; for ( i=0 ; i<3000 ; i++ ) ; end_for } /**************************************************************************** * 函数原型: void eeprom24c32r(uint Address,uchar count); * 功 能: 从24CXX中首址为Address的存储区读取count个字节的数据并转存于 * 数组EAROMImage2[32]中去。采用序列读操作方式从片内连续读取数据。 *****************************************************************************/ void eeprom24c32r(uint Address,uchar count) { uchar i ; I_start() ; I_send( WRITE ); I_send( Address>>8); I_send( Address&0xff) ; I_start() ; I_send( READ); for ( i=0; i<count;i++ ) { EAROMImage2[i] = ( I_receive() ) ; if ( i!=(count-1)) { I_Ack() ;} else { I_clock() ; I_stop() ; end_if } } } /**************************************************************************** * 函数原型: void eeprom24c32w(uint Address,uchar count); * 功 能: 将数组EAROMImage[32]中count个字节的数写入24CXX中Address为首址 * 的存储区中去。 *****************************************************************************/ void eeprom24c32w(uint Address,uchar count) { uchar i ; I_start() ; I_send( WRITE ); I_send( Address>>8); I_send( Address&0xff); for ( i=0; i<count;i++ ) { I_send( EAROMImage[i] ); } I_stop(); wait_5ms(); } /**************************************************************************** * 函数原型: void timedelay(uint timess); * 功 能: 提供延时,延时长度取决于timess。 ****************************************************************************/ void timedelay(uint timess) { uint tj; for (tj=timess;tj>0;tj--){;} } /**************************************************************************** * 函数原型: void innumber(void); * 功 能: 将0x44填充到数组EAROMImage[16]中。 ****************************************************************************/ void innumber() { uchar m; for (m=0;m<=31;m++){ EAROMImage[m]=0x44;} } /**************************************************************************** * 函数原型: void outnumber(void); * 功 能: 将0,2,4,...等16个连续偶数填充到数组EAROMImage2[16]中。 ****************************************************************************/ void outnumber() { uchar m; for (m=0;m<=31;m++){ EAROMImage2[m]=m*2;} } /**************************************************************************** * 函数原型: void main(void); * 功 能: 主程序。 ****************************************************************************/ void main(void) { SP=0xdf; timedelay(10000); EA=0; I_init(); Addr=0x0100; con=32; outnumber(); eeprom24c32r(Addr,con); //从24CXX中首址为0x0100的存储区读取32个字节的数据并转存于 //数组EAROMImage2[32]中去。 Addr=0x0100; con=32; innumber(); eeprom24c32w(Addr,con); //将数组EAROMImage[32]中32个字节的数写入24CXX中0x0100为首址 //的存储区中去。
评论
    相关推荐
    • 单片机课件
      单片机的课件及例题, 单片机的课件及例题, 单片机的课件及例题, 单片机的课 件及例题,
    • 爱上单片机
      一本电子爱好者都能看懂,会边看边笑的单片机入门书籍,作者杜洋曾在《无线电》上发表过“趣味单片机制作专题”、“单片机编程魔法学校”等深受读者喜爱、让无数单片机入门者热血沸腾的系列文章。本书通过生动的语言...
    • 单片机资料
      内含30个单片机应用开发的资料,包括配套单片机入门PPT。
    • 单片机课件
      单片机课的课件,对单片机的基础进行了全面的概述,也有非常精细的指导。
    • 单片机工具
      单片机工具 供单片机学习使用 免费资源 日后还会有更多资源 请联系我
    • 单片机
      单片机c 和汇编程序
    • 单片机课件
      单片机课件 ppt文件格式 介绍了单片机的结构、程序设计、定时器、中断等
    • 单片机教程
      这是一个单片机的教程,可以用于初次学习单片机的人学习。
    • 单片机入门
      很好的单片机学习资源,入门比较好适合对单片机的学习有兴趣的人,而且是名校的精彩讲解,
    • 单片机
      利用protues仿真实现基于51单片机的大棚温湿度检测系统设计