📄 pcckmodbus.src
字号:
DB 0C1H
DB 081H
DB 040H
auchCRCLo:
DB 000H
DB 0C0H
DB 0C1H
DB 001H
DB 0C3H
DB 003H
DB 002H
DB 0C2H
DB 0C6H
DB 006H
DB 007H
DB 0C7H
DB 005H
DB 0C5H
DB 0C4H
DB 004H
DB 0CCH
DB 00CH
DB 00DH
DB 0CDH
DB 00FH
DB 0CFH
DB 0CEH
DB 00EH
DB 00AH
DB 0CAH
DB 0CBH
DB 00BH
DB 0C9H
DB 009H
DB 008H
DB 0C8H
DB 0D8H
DB 018H
DB 019H
DB 0D9H
DB 01BH
DB 0DBH
DB 0DAH
DB 01AH
DB 01EH
DB 0DEH
DB 0DFH
DB 01FH
DB 0DDH
DB 01DH
DB 01CH
DB 0DCH
DB 014H
DB 0D4H
DB 0D5H
DB 015H
DB 0D7H
DB 017H
DB 016H
DB 0D6H
DB 0D2H
DB 012H
DB 013H
DB 0D3H
DB 011H
DB 0D1H
DB 0D0H
DB 010H
DB 0F0H
DB 030H
DB 031H
DB 0F1H
DB 033H
DB 0F3H
DB 0F2H
DB 032H
DB 036H
DB 0F6H
DB 0F7H
DB 037H
DB 0F5H
DB 035H
DB 034H
DB 0F4H
DB 03CH
DB 0FCH
DB 0FDH
DB 03DH
DB 0FFH
DB 03FH
DB 03EH
DB 0FEH
DB 0FAH
DB 03AH
DB 03BH
DB 0FBH
DB 039H
DB 0F9H
DB 0F8H
DB 038H
DB 028H
DB 0E8H
DB 0E9H
DB 029H
DB 0EBH
DB 02BH
DB 02AH
DB 0EAH
DB 0EEH
DB 02EH
DB 02FH
DB 0EFH
DB 02DH
DB 0EDH
DB 0ECH
DB 02CH
DB 0E4H
DB 024H
DB 025H
DB 0E5H
DB 027H
DB 0E7H
DB 0E6H
DB 026H
DB 022H
DB 0E2H
DB 0E3H
DB 023H
DB 0E1H
DB 021H
DB 020H
DB 0E0H
DB 0A0H
DB 060H
DB 061H
DB 0A1H
DB 063H
DB 0A3H
DB 0A2H
DB 062H
DB 066H
DB 0A6H
DB 0A7H
DB 067H
DB 0A5H
DB 065H
DB 064H
DB 0A4H
DB 06CH
DB 0ACH
DB 0ADH
DB 06DH
DB 0AFH
DB 06FH
DB 06EH
DB 0AEH
DB 0AAH
DB 06AH
DB 06BH
DB 0ABH
DB 069H
DB 0A9H
DB 0A8H
DB 068H
DB 078H
DB 0B8H
DB 0B9H
DB 079H
DB 0BBH
DB 07BH
DB 07AH
DB 0BAH
DB 0BEH
DB 07EH
DB 07FH
DB 0BFH
DB 07DH
DB 0BDH
DB 0BCH
DB 07CH
DB 0B4H
DB 074H
DB 075H
DB 0B5H
DB 077H
DB 0B7H
DB 0B6H
DB 076H
DB 072H
DB 0B2H
DB 0B3H
DB 073H
DB 0B1H
DB 071H
DB 070H
DB 0B0H
DB 050H
DB 090H
DB 091H
DB 051H
DB 093H
DB 053H
DB 052H
DB 092H
DB 096H
DB 056H
DB 057H
DB 097H
DB 055H
DB 095H
DB 094H
DB 054H
DB 09CH
DB 05CH
DB 05DH
DB 09DH
DB 05FH
DB 09FH
DB 09EH
DB 05EH
DB 05AH
DB 09AH
DB 09BH
DB 05BH
DB 099H
DB 059H
DB 058H
DB 098H
DB 088H
DB 048H
DB 049H
DB 089H
DB 04BH
DB 08BH
DB 08AH
DB 04AH
DB 04EH
DB 08EH
DB 08FH
DB 04FH
DB 08DH
DB 04DH
DB 04CH
DB 08CH
DB 044H
DB 084H
DB 085H
DB 045H
DB 087H
DB 047H
DB 046H
DB 086H
DB 082H
DB 042H
DB 043H
DB 083H
DB 041H
DB 081H
DB 080H
DB 040H
RSEG ?PR?main?PCCKMODBUS
RSEG ?C_INITSEG
DB 0C1H, shezhibiao + 000H ; bit-init
DB 0C1H, tsbbb + 000H ; bit-init
DB 0C1H, jiezhque + 000H ; bit-init
; /*MAIN BOOT SECTION
; BOOK1=DATASHTS\PHILIPS\P51_PG.PDF("80C51 Family Programmer's Guide")
; BOOK2=DATASHTS\PHILIPS\P89C51Rx2xx_DS.PDF("Data Sheet")
; CPU=IRAM(0-0xFF) IROM(0-0xFFFF) XRAM(0-0x2FF) CLOCK(33000000) MODP2
; MON=S8051.DLL TP51.DLL("-p51R2")
; REGFILE=REG51F.H("Philips")
; SIM=S8051.DLL DP51.DLL("-p51R2")
; //-------------------------------------------------------
; 8051 based CMOS controller with PCA, Dual DPTR, WDT,
; 32 I/O lines, 3 Timers/Counters, 7 Interrupts/4 Priority Levels,
; 64K Bytes ISP FLASH, 256 Bytes on-chip RAM, 768 Bytes XRAM
; */
; #include <reg932.h>
; #include <stdio.h>
; #include <math.h>
; #include <absacc.h>
; #include <string.h>
; #include <intrins.h>
; #include <ctype.h>
; #include <stdlib.h>
; //------------------------------------
; #define uchar unsigned char /*宏定义*/
; #define uint unsigned int
; #define _Nop() _nop_() /*定义空指令*/
; /* 地址定义 */
; #define d_add XBYTE[0x8000]
; #define c_add XBYTE[0x8200] /*[0x8100]*/
; #define key_add XBYTE[0xc100]
; #define led_add XBYTE[0xc000]
; #define led_dd 0xc0;
; /* 常数定义 */
; #define para1 16;
; //SCONL DATA 98H
; #define uchar unsigned char /*宏定义*/
; #define uint unsigned int
; #define CSI24WCXX 0XA0
; #define PCF8574 0X40
; //#define SAA1064 0X70
; //#include <SAA1064.h> /*器件驱动函数*/
; uchar disp_ram[4]; /*定义显示缓冲区*/
; uchar code chg_tab[20]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
; 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x73,0x40,0x80,0x50};
; /*些表为 0---F ,P,-,.,r,二十个字模 */
;
; /* 定义标志位 */
; sbit Acc_0=ACC^0;
; sbit Acc_1=ACC^1;
; sbit Acc_2=ACC^2;
; sbit Acc_3=ACC^3;
; sbit Acc_7=ACC^7;
; sbit p1_2=P1^2;
; sbit sipm=P2^7;
; sbit led1=P2^6;
; sbit p1_4=P1^4;
; sbit p1_6=P1^6;
; sbit I2EN = I2CON^6;
; sbit STA = I2CON^5;
; sbit STO = I2CON^4;
; sbit SI = I2CON^3;
; sbit AA = I2CON^2;
; sbit CRSEL = I2CON^0;
; /*状态标志*/
; bit ack; /*应答标志位*/
; bit shezhibiao=0;
; bit tsbbb=0;
; bit jiezhque=0;
; bit keynew,enter,esc,miaobai,shibiao,ledshan;
; bit yunbiao,tingbiao,up000,down000,lef000,trig000;
; bit gucherror; //通讯过程失败
; unsigned char xdata thkonzi;
; unsigned char xdata punjunzi;
; unsigned char xdata *w1161;
; unsigned char xdata rsbuf[200];
; unsigned char xdata tsbuf[50];
; unsigned char xdata b0buf[200];
; unsigned char xdata b1buf[30];
; unsigned char xdata b2buf[2];
;
; unsigned int xdata ramtemp1,ramtemp2,ramtemp3;
; unsigned int xdata dettt1;
; unsigned char rsbufr,tsbufr,tsbufend;
; unsigned char keytemp,keyzt1,keyzt,haomiao1,updown,leftright,keytime;
; unsigned char menu1,chup,chdown,chleft,chright,chesc,chenter,secnum;
; unsigned char code days_month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
; code unsigned char auchCRCHi[256] = {
; 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
; 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
; 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
; 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
; 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
; 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
; 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
; 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
; 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
; 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
; 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
; 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
; 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
; 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
; 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
; 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
; 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
; 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
; 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
; 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
; 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
; 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
; 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
; 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
; 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
; 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
; };
; code unsigned char auchCRCLo[256] = {
; 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,
; 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,
; 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
; 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,
; 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,
; 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
; 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,
; 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,
; 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
; 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,
; 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,
; 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
; 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,
; 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,
; 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
; 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,
; 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,
; 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
; 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,
; 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,
; 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
; 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,
; 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,
; 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
; 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,
; 0x43, 0x83, 0x41, 0x81, 0x80, 0x40
; };
; /*******************************************************************
; P89C668 单片机硬件I2C 软件包668i2c.c 主方式
; 668 的硬件I2C 接口定义在P1.6,P1.7 上,分别为P1.6=SCL;P1.7=SDA;开漏输出
; 相应寄存器地址寄存器 S1ADR 用于存放自身从地址从方式时才有用
; 数据寄存器 I2DAT 接收发送数据用
; 控制寄存器 I2CON 用于硬件I 2 C 的设置使能启动结束
; 应答控制中断标志等
; 状态寄存器 I2STAT 指示I 2 C 总线的操作状态码高5 位有效
; 若I 2 C 中断志置位可查询此寄存器判断
; 总线情况
; 此软件包是以查询方式完成各种总线操作的在使用前应对总线进行检查并
; 使用看门狗以防等待总线而造成死机
; 2001 09 21
; *******************************************************************/
; //#include "REG552.h" /*P89C668 的硬件I 2 C 定义与552 的一样*/
; //#define uchar unsigned char
; /*******************************************************************
; 申请总线
; 功能进行I 2 C 总线的初始化包括时钟速率I 2 C 使能发送起始信号等
; *******************************************************************/
; void GetBus()
RSEG ?PR?GetBus?PCCKMODBUS
GetBus:
USING 0
; SOURCE LINE # 161
; {
; SOURCE LINE # 162
; I2CON=0xc5; /*设置时钟为100K MCU 主频为12M ENS1 和AA 置位*/
; SOURCE LINE # 163
MOV I2CON,#0C5H
; STA=1; /*申请成为主机起动总线*/
; SOURCE LINE # 164
SETB STA
?C0001:
; while(SI==0); /*等待起始位的发送*/
; SOURCE LINE # 165
JNB SI,?C0001
; }
; SOURCE LINE # 166
?C0003:
RET
; END OF GetBus
; /*******************************************************************
; 发送数据函数
; 功能用于向总线发送数据
; *******************************************************************/
; void SendByte(uchar c)
RSEG ?PR?_SendByte?PCCKMODBUS
L?0068:
USING 0
LCALL GetBus
_SendByte:
USING 0
; SOURCE LINE # 171
;---- Variable 'c?140' assigned to Register 'R7' ----
; {
; SOURCE LINE # 172
; I2DAT=c;
; SOURCE LINE # 173
MOV I2DAT,R7
; I2CON=0XC5; /*清除SI 位等等*/
; SOURCE LINE # 174
MOV I2CON,#0C5H
?C0004:
; while(SI==0); /*等待数据的发送*/
; SOURCE LINE # 175
JNB SI,?C0004
; }
; SOURCE LINE # 176
?C0006:
RET
; END OF _SendByte
; /*******************************************************************
; 向无子地址器件发送字节数据函数
; 函数原型: bit ISendByte(uchar sla,ucahr c);
; 功能: 从启动总线到发送地址数据结束总线的全过程,从器件地址sla
; 待发送的数据c 如果返回1 表示操作成功否则操作有误
; ********************************************************************/
; bit ISendByte(uchar sla,uchar c)
RSEG ?PR?_ISendByte?PCCKMODBUS
_ISendByte:
USING 0
; SOURCE LINE # 183
;---- Variable 'c?242' assigned to Register 'R5' ----
;---- Variable 'sla?241' assigned to Register 'R7' ----
; {
; SOURCE LINE # 184
; GetBus(); /*启动总线*/
; SOURCE LINE # 185
; SendByte(sla); /*发送器件地址,若无应答则返回*/
; SOURCE LINE # 186
LCALL L?0068
; if(I2STAT!=0X18){I2CON=0XD5;return(0);}
; SOURCE LINE # 187
MOV A,I2STAT
XRL A,#018H
JZ ?C0007
SJMP ?C0060
?C0007:
; SendByte(c); /*发送数据*/
; SOURCE LINE # 188
XCH A,R7
MOV A,R5
XCH A,R7
LCALL _SendByte
; if(I2STAT!=0X28){I2CON=0XD5;return(0);}
; SOURCE LINE # 189
MOV A,I2STAT
XRL A,#028H
JZ ?C0009
?C0060:
MOV I2CON,#0D5H
CLR C
RET
?C0009:
; I2CON=0XD5; /*结束总线*/
; SOURCE LINE # 190
MOV I2CON,#0D5H
; return(1);
; SOURCE LINE # 191
SETB C
; }
; SOURCE LINE # 192
?C0008:
RET
; END OF _ISendByte
; /*******************************************************************
; 向有子地址器件发送多字节数据函数
; 函数原型: bit ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);
; 功能: 从启动总线到发送地址子地址,数据结束总线的全过程,从器件
; 地址sla 子地址suba 发送内容是s 指向的内容发送no 个字节
; 如果返回1 表示操作成功否则操作有误
; ********************************************************************/
; bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no)
RSEG ?PR?_ISendStr?PCCKMODBUS
_ISendStr:
USING 0
; SOURCE LINE # 200
;---- Variable 'sla?343' assigned to Register 'R7' ----
;---- Variable 's?345' assigned to Register 'R1/R2/R3' ----
;---- Variable 'suba?344' assigned to Register 'R5' ----
; {
; SOURCE LINE # 201
; uchar i;
; GetBus(); /*启动总线*/
; SOURCE LINE # 203
; SendByte(sla); /*发送器件地址*/
; SOURCE LINE # 204
LCALL L?0068
; if(I2STAT!=0X18){I2CON=0XD5;return(0);}
; SOURCE LINE # 205
MOV A,I2STAT
XRL A,#018H
JZ ?C0010
SJMP ?C0062
?C0010:
; SendByte(suba); /*发送器件子地址*/
; SOURCE LINE # 206
XCH A,R7
MOV A,R5
XCH A,R7
LCALL _SendByte
; if(I2STAT!=0X28){I2CON=0XD5;return(0);}
; SOURCE LINE # 207
MOV A,I2STAT
XRL A,#028H
JZ ?C0012
?C0061:
SJMP ?C0062
?C0012:
; for(i=0;i<no;i++)
; SOURCE LINE # 208
;---- Variable 'i?347' assigned to Register 'R6' ----
CLR A
MOV R6,A
?C0013:
MOV DPTR,#no?346
MOVX A,@DPTR
MOV R7,A
MOV A,R6
CLR C
SUBB A,R7
JNC ?C0014
; {
; SOURCE LINE # 209
; SendByte(*s); /*发送数据*/
; SOURCE LINE # 210
LCALL ?C?CLDPTR
MOV R7,A
LCALL _SendByte
; if(I2STAT!=0X28){I2CON=0XD5;return(0);}
; SOURCE LINE # 211
MOV A,I2STAT
XRL A,#028H
JZ ?C0016
?C0062:
MOV I2CON,#0D5H
CLR C
RET
?C0016:
; s++;
; SOURCE LINE # 212
MOV A,#01H
ADD A,R1
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
; }
; SOURCE LINE # 213
INC R6
SJMP ?C0013
?C0014:
; I2CON=0XD5; /*结束总线*/
; SOURCE LINE # 214
MOV I2CON,#0D5H
; return(1);
; SOURCE LINE # 215
SETB C
; }
; SOURCE LINE # 216
?C0011:
RET
; END OF _ISendStr
; /*******************************************************************
; 向无子地址器件读字节数据函数
; 函数原型: bit IRcvByte(uchar sla,ucahr *c);
; 功能: 从启动总线到发送地址读数据结束总线的全过程,从器件地
; 址sla 返回值在c.
; 如果返回1 表示操作成功否则操作有误
; ********************************************************************/
; bit IRcvByte(uchar sla,uchar *c)
RSEG ?PR?_IRcvByte?PCCKMODBUS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -