




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include main.h#include intrins.h#include nokia_5110.h#include ds18b20.h #include eeprom.h/*modbus asscii 的c51程序 单片机stc89c52通信波特率 9600 8位数据 1位停止位 232通位接口*/uint8sendbuf_12435,recebuf_12435; /发送接收缓冲区uint16 reg_1245; /寄存器uint16 wendu_124; /温度值unsigned int zhengshu_124,xiaoshu_124;char temperature_124= . ;uint8 code table_124= /数码管码 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;uint8recetimeout_124;/接收超时bit f1ms_124=0,f10ms_124=0,f100ms_124=0;/定时标志位uint8 c10ms_124,c100ms_124; /定时计数/*/ /*函数名称: commintproc() *输入参数: 共 0 个参数; *输出参数: 共 0 个参数; *返回值: *需储存的参数: 共 0 个参数; *功能介绍:串口中断函数 *修改日志: *2010-12-14 ver. 1.00 开始编写;2010-12-7 完成; 2010-12-7 /* */ /*/ void commintproc_124() interrupt 4 / 串行中断程序if(ti)ti = 0; if(sendposi_124 =10)c10ms_124 = 0; /10ms计时器清零 f10ms_124=1; / void timer0intproc()/*/ /*函数名称: save_124(void) *输入参数: 共 0 个参数; *输出参数: 共 0 个参数; *返回值: *需储存的参数: 共 0 个参数; *功能介绍:保存掉电寄存器数据 *修改日志: *2010-12-14 ver. 1.00 开始编写;2010-12-14 完成; 2010-12-14 /* */ /*/ void save_124(void) /保存掉电寄存器数据uint8 tempdata_124;tempdata_124=p1;iaperasesector_124(0x2000); iapprogrambyte_124(0x2000,reg_1240);iapprogrambyte_124(0x2001,reg_1241);iapprogrambyte_124(0x2002,reg_1242);iapprogrambyte_124(0x2003,reg_1243);iapprogrambyte_124(0x2004,reg_1244);iapprogrambyte_124(0x2005,tempdata_124);/*/ /*函数名称: read_124(void) *输入参数: 共 0 个参数; *输出参数: 共 0 个参数; *返回值: *需储存的参数: 共 0 个参数; *功能介绍:开机读取掉电时的寄存器数据 *修改日志: *2010-12-14 ver. 1.00 开始编写;2010-12-14 完成; 2010-12-14 /* */ /*/ void read_124(void) /开机读取掉电时的寄存器数据reg_1240=iapreadbyte_124(0x2000); reg_1241=iapreadbyte_124(0x2001);reg_1242=iapreadbyte_124(0x2002);reg_1243=iapreadbyte_124(0x2003);p1=iapreadbyte_124(0x2005);/*/ /*函数名称: displaytempr(void) *输入参数: 共 0 个参数; *输出参数: 共 0 个参数; *返回值: *需储存的参数: 共 0 个参数; *功能介绍:读取温度值并且显示出来 *修改日志: *2010-12-14 ver. 1.00 开始编写;2010-12-14 完成; 2010-12-14 /* */ /*/ void displaytempr_124(void)wendu_124=read_t_124();if(wendu_1240) recetimeout_124-; if(recetimeout_124=0 & rececount_1240) /判断通讯接收是否超时 b232send_124 = 0; /将232置为接收状态 rececount_124 = 0; /将接收地址偏移寄存器清零 checkouterror_124 = 0; if(f10ms_124=1)f10ms_124=0;if(reg_1244reg_1242)|(reg_1244=10) c100ms_124=0; displaytempr_124(); brunled_124 = brunled_124;void main(void)init_124(); /初始化单片机的寄存器 read_124(); /开机去读上次断电的寄存器和线圈状态rececount_124=0;kaiji_124(); /开机显示汉字 chushixianshi_124(); /显示寄存器值和线圈的状态while(1)checkcommdmodbus_124(); /接收上位机命令,然后做出响应处理timeproc_124(); /定时去读温度,保存数据,判断是否报警#include reg52.htypedef unsigned charuint8;typedef unsigned intuint16;typedef unsigned longuint32;sbit coil0_124 = p10;sbit coil1_124 = p11;sbit coil2_124 = p12;sbit coil3_124 = p13;sbit coil4_124 = p14;sbit coil5_124 = p15;sbit coil6_124 = p16;sbit coil7_124 = p17;/sbit shuanmaen_124 = p10;sbitbrunled_124 =p24;/系统运行指示灯sbitb232send_124= p25;/发送接收状态sbitalarm_124 = p27; /报警位sbit checkouterror_124 =p26; /报错位#define timer_hight_1240xf8#define timer_low_1240xcd extern uint8 code table_124;extern uint8 sendbuf_12435,recebuf_12435;extern uint16 reg_1245;/extern uint8checkouterror;/ =2 偶校验错 /extern uint8recetimeout;/extern uint16dwtickcount;#include modbus.h#include main.h#include nokia_5110.huint8sendcount_124;/发送字节个数uint8rececount_124=0; /接收到的字节个数uint8sendposi_124; /发送位置uint8 flag=0;/*/ /*函数名称: uh_asciih_124(uint8 uh_124) *输入参数: 共 1 个参数; *输出参数: 共 1 个参数; *返回值: asciih *需储存的参数: 共 1 个参数; *功能介绍: 把一个16进制uh的高四位值取出转换为相应的ascii码 *修改日志: *2010-12-14 ver. 1.00 开始编写;2010-12-7 完成; 2010-12-7 /*/ uint8 uh_asciih_124(uint8 uh_124)uint8 temph_124;uint8 asciih_124;temph_124=uh_124/16; if(temph_12410)asciih_124=temph_124+0x30;else asciih_124=temph_124+0x37; return asciih_124;/*/ /*函数名称: uh_asciil_124(uint8 uh_124) *输入参数: 共 1 个参数; *输出参数: 共 1 个参数; *返回值: asciil *需储存的参数: 共 1 个参数; *功能介绍: 把一个16进制uh的低四位值取出转换为相应的ascii码 *修改日志: *2010-12-14 ver. 1.00 开始编写;2010-12-7 完成; 2010-12-7 /* */ /*/ uint8 uh_asciil_124(uint8 uh_124)uint8 templ_124;uint8 asciil_124;templ_124=uh_124%16;if(templ_12410)asciil_124=templ_124+0x30;else asciil_124=templ_124+0x37; return asciil_124;/*/ /*函数名称: ascii_uh_124(uint8 asciih_124,uint8 asciil_124) *输入参数: 共 2 个参数; *输出参数: 共 1 个参数; *返回值: uh *需储存的参数: 共 1 个参数; *功能介绍: 把两个ascii码转换为10进制的值 *修改日志: *2010-12-14 ver. 1.00 开始编写;2010-12-7 完成; 2010-12-7 /* */ /*/ uint8 ascii_uh_124(uint8 asciih_124,uint8 asciil_124)uint8 uh_124;if(asciih_124=57)asciih_124=asciih_124-48;else asciih_124=asciih_124-55; if(asciil_1241;tempdat_124=tempdat_124&yu_124(countl_124);if(addrl_124=2)tempdat_124=tempdat_1242;tempdat_124=tempdat_124&yu_124(countl_124);if(addrl_124=3)tempdat_124=tempdat_1243;tempdat_124=tempdat_124&yu_124(countl_124);if(addrl_124=4)tempdat_124=tempdat_1244;tempdat_124=tempdat_124&yu_124(countl_124);if(addrl_124=5)tempdat_124=tempdat_1245;tempdat_124=tempdat_124&yu_124(countl_124);if(addrl_124=6)tempdat_124=tempdat_1246;tempdat_124=tempdat_124&yu_124(countl_124);if(addrl_124=7)tempdat_124=tempdat_1247;tempdat_124=tempdat_124&yu_124(countl_124); sendbuf_1247=uh_asciih_124(tempdat_124); sendbuf_1248=uh_asciil_124(tempdat_124);sendbuf_1240 = 0x3a;sendbuf_1241 = 0x30;sendbuf_1242 = 0x31;sendbuf_1243 = 0x30;sendbuf_1244 = 0x31;sendbuf_1245 = 0x30;sendbuf_1246 = 0x31;lrcdat_124 =lrc_124(sendbuf_124,4);sendbuf_1249=uh_asciih_124(lrcdat_124);sendbuf_12410=uh_asciil_124(lrcdat_124);sendbuf_12411= 0x0d;sendbuf_12412= 0x0a;sendcount_124=13;beginsend_124();/*/ /*函数名称: forcesinglecoil_124(void) *输入参数: 共 0 个参数; *输出参数: 共 0 个参数; *返回值: uh *需储存的参数: 共 n 个参数; *功能介绍: 写单个线圈,根据接收来的命令,然后指定去写一个线圈,然后在去响应上位机 *修改日志: *2010-12-14 ver. 1.00 开始编写;2010-12-8 完成; 2010-12-8 /* */ /*/ void forcesinglecoil_124(void) /功能5,写单个线圈uint8 addrlh_124; uint8 addrll_124;uint8 addrl_124;uint8 datahh_124; uint8 datahl_124;uint8 datah_124;uint8 i_124;addrlh_124=recebuf_1247;addrll_124=recebuf_1248;addrl_124= ascii_uh_124(addrlh_124,addrll_124); datahh_124=recebuf_1249;datahl_124= recebuf_12410;datah_124=ascii_uh_124(datahh_124,datahl_124);if(addrl_124=0)if(datah_124=0xff)coil0_124=1;elsecoil0_124=0;if(addrl_124=1)if(datah_124=0xff) coil1_124=1;elsecoil1_124=0;if(addrl_124=2)if(datah_124=0xff)coil2_124=1;elsecoil2_124=0;if(addrl_124=3)if(datah_124=0xff)coil3_124=1;elsecoil3_124=0;if(addrl_124=4)if(datah_124=0xff)coil4_124=1;elsecoil4_124=0;if(addrl_124=5)if(datah_124=0xff)coil5_124=1;elsecoil5_124=0;if(addrl_124=6)if(datah_124=0xff)coil6_124=1;elsecoil6_124=0;if(addrl_124=7)if(datah_124=0xff)coil7_124=1;elsecoil7_124=0;diaplaycoils_124();for(i_124=0;i_124rececount_124;i_124+)sendbuf_124i_124 = recebuf_124i_124;sendbuf_124rececount_124-2=0x0d;sendbuf_124rececount_124-1=0x0a; sendcount_124 = rececount_124;beginsend_124();/*/ /*函数名称: setmultiplecoils_124(void) *输入参数: 共 0 个参数; *输出参数: 共 0 个参数; *返回值: uh *需储存的参数: 共 n 个参数; *功能介绍: 写多个线圈,根据接收来的命令,然后根据起始地址和个数去写多个线圈,然后在去响应上位机 *修改日志: *2010-12-14 ver. 1.00 开始编写;2010-12-8 完成; 2010-12-8 /* */ /*/ void setmultiplecoils_124 (void) /写多个线圈uint8 addrlh_124; uint8 addrll_124;uint8 addrl_124;uint8 dath_124; uint8 datl_124;uint8 dat_124;uint8 nmblh_124; uint8 nmbll_124;uint8 nmbl_124;uint8 bytcounth_124;uint8 bytcountl_124;uint8 bytcount_124;uint8 lrcdat_124;uint8 i_124;addrlh_124=recebuf_1247;addrll_124=recebuf_1248;addrl_124 = ascii_uh_124(addrlh_124,addrll_124); nmblh_124= recebuf_12411;nmbll_124= recebuf_12412;nmbl_124 =ascii_uh_124(nmblh_124,nmbll_124);bytcounth_124= recebuf_12413;bytcountl_124= recebuf_12414;bytcount_124= ascii_uh_124(bytcounth_124,bytcountl_124);dath_124= recebuf_12415;datl_124= recebuf_12416;dat_124= ascii_uh_124(dath_124,datl_124);if(addrl_124=0) for(i_124=0;i_124nmbl_124;i_124+) writecoil_124(i_124,quwei_124(i_124,dat_124); if(addrl_124=1) for(i_124=0;i_124nmbl_124;i_124+) writecoil_124(i_124+1),quwei_124(i_124,dat_124); if(addrl_124=2) for(i_124=0;i_124nmbl_124;i_124+) writecoil_124(i_124+2),quwei_124(i_124,dat_124); if(addrl_124=3) for(i_124=0;i_124nmbl_124;i_124+) writecoil_124(i_124+3),quwei_124(i_124,dat_124); if(addrl_124=4) for(i_124=0;i_124nmbl_124;i_124+) writecoil_124(i_124+4),quwei_124(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论