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

📄 rs485.asm

📁 e010_modbusref,该文件为MODBUS的原版说明e010_modbusref,该文件为MODBUS的原版说明
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	RETLW .21
	RETLW .215
	RETLW .23
	RETLW .22
	RETLW .214
	RETLW .210
	RETLW .18
	RETLW .19
	RETLW .211
	RETLW .17
	RETLW .209
	RETLW .208
	RETLW .16
	RETLW .240
	RETLW .48
	RETLW .49
	RETLW .241
	RETLW .51
	RETLW .243
	RETLW .242
	RETLW .50
	RETLW .54
	RETLW .246
	RETLW .247
	RETLW .55
	RETLW .245
	RETLW .53
	RETLW .52
	RETLW .244
	RETLW .60
	RETLW .252
	RETLW .253
	RETLW .61
	RETLW .255
	RETLW .63
	RETLW .62
	RETLW .254
	RETLW .250
	RETLW .58
	RETLW .59
	RETLW .251
	RETLW .57
	RETLW .249
	RETLW .248
	RETLW .56
	RETLW .40
	RETLW .232
	RETLW .233
	RETLW .41
	RETLW .235
	RETLW .43
	RETLW .42
	RETLW .234
	RETLW .238
	RETLW .46
	RETLW .47
	RETLW .239
	RETLW .45
	RETLW .237
	RETLW .236
	RETLW .44
	RETLW .228
	RETLW .36
	RETLW .37
	RETLW .229
	RETLW .39
	RETLW .231
	RETLW .230
	RETLW .38
	RETLW .34
	RETLW .226
	RETLW .227
	RETLW .35
	RETLW .225
	RETLW .33
	RETLW .32
	RETLW .224
	RETLW .160
	RETLW .96
	RETLW .97
	RETLW .161
	RETLW .99
	RETLW .163
	RETLW .162
	RETLW .98
	RETLW .102
	RETLW .166
	RETLW .167
	RETLW .103
	RETLW .165
	RETLW .101
	RETLW .100
	RETLW .164
	RETLW .108
	RETLW .172
	RETLW .173
	RETLW .109
	RETLW .175
	RETLW .111
	RETLW .110
	RETLW .174
	RETLW .170
	RETLW .106
	RETLW .107
	RETLW .171
	RETLW .105
	RETLW .169
	RETLW .168
	RETLW .104
	RETLW .120
	RETLW .184
	RETLW .185
	RETLW .121
	RETLW .187
	RETLW .123
	RETLW .122
	RETLW .186
	RETLW .190
	RETLW .126
	RETLW .127
	RETLW .191
	RETLW .125
	RETLW .189
	RETLW .188
	RETLW .124
	RETLW .180
	RETLW .116
	RETLW .117
	RETLW .181
	RETLW .119
	RETLW .183
	RETLW .182
	RETLW .118
	RETLW .114
	RETLW .178
	RETLW .179
	RETLW .115
	RETLW .177
	RETLW .113
	RETLW .112
	RETLW .176
	RETLW .80
	RETLW .144
	RETLW .145
	RETLW .81
	RETLW .147
	RETLW .83
	RETLW .82
	RETLW .146
	RETLW .150
	RETLW .86
	RETLW .87
	RETLW .151
	RETLW .85
	RETLW .149
	RETLW .148
	RETLW .84
	RETLW .156
	RETLW .92
	RETLW .93
	RETLW .157
	RETLW .95
	RETLW .159
	RETLW .158
	RETLW .94
	RETLW .90
	RETLW .154
	RETLW .155
	RETLW .91
	RETLW .153
	RETLW .89
	RETLW .88
	RETLW .152
	RETLW .136
	RETLW .72
	RETLW .73
	RETLW .137
	RETLW .75
	RETLW .139
	RETLW .138
	RETLW .74
	RETLW .78
	RETLW .142
	RETLW .143
	RETLW .79
	RETLW .141
	RETLW .77
	RETLW .76
	RETLW .140
	RETLW .68
	RETLW .132
	RETLW .133
	RETLW .69
	RETLW .135
	RETLW .71
	RETLW .70
	RETLW .134
	RETLW .130
	RETLW .66
	RETLW .67
	RETLW .131
	RETLW .65
	RETLW .129
	RETLW .128
	RETLW .64
crc16
	MOVWF crc_count
			;	uns8 uindex;
			;	uns16 temp16;
			;	uchCRCHi=0xff;
	MOVLW .255
	MOVWF uchCRCHi
			;	uchCRCLo=0xff;
	MOVWF uchCRCLo
			;	while(crc_count)
m007	MOVF  crc_count,1
	BTFSC 0x03,Zero_
	GOTO  m008
			;	{
			;		uindex=uchCRCHi ^ *puchMsg;
	BCF   0x03,IRP
	MOVF  puchMsg,W
	MOVWF FSR
	MOVF  INDF,W
	XORWF uchCRCHi,W
	MOVWF uindex
			;		puchMsg++;
	INCF  puchMsg,1
			;		uchCRCHi=uchCRCLo ^ auchCRCHi[uindex];
	CALL  _const1
	XORWF uchCRCLo,W
	MOVWF uchCRCHi
			;		uchCRCLo=auchCRCLo[uindex];
	MOVF  uindex,W
	CALL  _const2
	MOVWF uchCRCLo
			;		crc_count--;
	DECF  crc_count,1
			;	}
	GOTO  m007
			;	temp16=(uns16)uchCRCHi << 8;
m008	MOVF  uchCRCHi,W
	MOVWF temp16+1
	CLRF  temp16
			;	temp16=temp16 | uchCRCLo;
	MOVF  uchCRCLo,W
	IORWF temp16,1
			;	return temp16;
	MOVF  temp16,W
	RETURN
			;}
			;
			;page0 void main(void)
			;{
	ORG 0x004C
main
			;	uns8 i;
			;	uns16 temp16;
			;	TRISA=0b11111111;
	MOVLW .255
	BSF   0x03,RP0
	BCF   0x03,RP1
	MOVWF TRISA
			;	TRISB=0b00011111;	//RB7(IO3) RB6(IO2) RB5(IO1)->output
	MOVLW .31
	MOVWF TRISB
			;	TRISC=0b10111011;	//RC7(RX) RC6(TX) RC2(C_EN)->output
	MOVLW .187
	MOVWF TRISC
			;	IO1=0;
	BCF   0x03,RP0
	BCF   0x06,IO1
			;	IO2=0;
	BCF   0x06,IO2
			;	IO3=0;
	BCF   0x06,IO3
			;	addr=0x06;
	MOVLW .6
	MOVWF addr
			;	dis_hz=79;
	MOVLW .79
	MOVWF dis_hz
			;	dis_current=80;
	MOVLW .80
	MOVWF dis_current
			;	dis_error=87;
	MOVLW .87
	MOVWF dis_error
	CLRF  dis_error+1
			;	dis_running=85;		//bit2->0=stop,1=run
	MOVLW .85
	MOVWF dis_running
	CLRF  dis_running+1
			;						//bit14->0=FR,1=RR
			;	_8ms_count_ok=DISABLE;
	BCF   0x4B,_8ms_count_ok
			;	receive_ok=FAULT;
	BCF   0x4B,receive_ok
			;	transfer_ok=TRUE;
	BSF   0x4B,transfer_ok
			;	receive_count=0;
	CLRF  receive_count
			;	C_EN=RECEIVE_EN;
	BCF   0x07,C_EN
			;	BRGH=1;
	BSF   0x03,RP0
	BSF   0x98,BRGH
			;	SYNC=0;
	BCF   0x98,SYNC
			;	SPEN=1;
	BCF   0x03,RP0
	BSF   0x18,SPEN
			;	TXIE=0;
	BSF   0x03,RP0
	BCF   0x8C,TXIE
			;	RCIE=1;
	BSF   0x8C,RCIE
			;	TX9=0;	//8 data bit transfer
	BCF   0x98,TX9
			;	SPBRG=64;	// baud rate=20M/16(64+1)=19230
	MOVLW .64
	MOVWF SPBRG
			;	TXEN=1;
	BSF   0x98,TXEN
			;	CREN=1;		//receive enable
	BCF   0x03,RP0
	BSF   0x18,CREN
			;	
			;	T0CS=0;		//TIMER0 clock=Fosc/4=20MHz/4=5MHz
	BSF   0x03,RP0
	BCF   0x81,T0CS
			;	TMR0=100;	//256-156
	MOVLW .100
	BCF   0x03,RP0
	MOVWF TMR0
			;	PSA=0;		//use prescaler
	BSF   0x03,RP0
	BCF   0x81,PSA
			;	PS2=1;		//prescale value=1:256
	BSF   0x81,PS2
			;	PS1=1;		//5000KHz/256=19.53125KHz,19.53125K/156=0.125KHz(8ms)
	BSF   0x81,PS1
			;	PS0=1;
	BSF   0x81,PS0
			;	T0IE=1;		//TIMER0 enable
	BSF   0x0B,T0IE
			;	
			;	PEIE=1;
	BSF   0x0B,PEIE
			;	GIE=1;
	BSF   0x0B,GIE
			;	rxbuf[0]=0x11;
	MOVLW .17
	BCF   0x03,RP0
	MOVWF rxbuf
			;	rxbuf[1]=0x03;
	MOVLW .3
	MOVWF rxbuf+1
			;	rxbuf[2]=0x00;
	CLRF  rxbuf+2
			;	rxbuf[3]=0x6b;
	MOVLW .107
	MOVWF rxbuf+3
			;	rxbuf[4]=0x00;
	CLRF  rxbuf+4
			;	rxbuf[5]=0x03;
	MOVLW .3
	MOVWF rxbuf+5
			;	rxbuf[6]=0x01;
	MOVLW .1
	MOVWF rxbuf+6
			;	rxbuf[7]=0x02;
	MOVLW .2
	MOVWF rxbuf+7
			;	i=0;
	CLRF  i
			;	while(1)
			;	{
			;		if(receive_ok==TRUE)
m009	BTFSS 0x4B,receive_ok
	GOTO  m023
			;		{
			;			temp16=crc16(rxbuf,6);
	MOVLW .47
	MOVWF puchMsg
	MOVLW .6
	BSF   0x0A,PA0
	CALL  crc16
	BCF   0x0A,PA0
	MOVWF temp16_2
	MOVF  temp16+1,W
	MOVWF temp16_2+1
			;			if(rxbuf[6]==temp16.high8 && rxbuf[7]==temp16.low8)
	MOVF  rxbuf+6,W
	XORWF temp16_2+1,W
	BTFSS 0x03,Zero_
	GOTO  m022
	MOVF  rxbuf+7,W
	XORWF temp16_2,W
	BTFSS 0x03,Zero_
	GOTO  m022
			;			{
			;				switch(rxbuf[1])
	MOVF  rxbuf+1,W
	XORLW .3
	BTFSC 0x03,Zero_
	GOTO  m010
	XORLW .5
	BTFSC 0x03,Zero_
	GOTO  m018
	GOTO  m022
			;				{
			;					case 0x03:
			;						txbuf[0]=rxbuf[0];
m010	MOVF  rxbuf,W
	MOVWF txbuf
			;						txbuf[1]=rxbuf[1];
	MOVF  rxbuf+1,W
	MOVWF txbuf+1
			;						txbuf[2]=2;		//byte count
	MOVLW .2
	MOVWF txbuf+2
			;						txbuf[3]=0;		//data high byte
	CLRF  txbuf+3
			;						switch(rxbuf[3])
	MOVF  rxbuf+3,W
	BTFSC 0x03,Zero_
	GOTO  m011
	XORLW .85
	BTFSC 0x03,Zero_
	GOTO  m012
	XORLW .27
	BTFSC 0x03,Zero_
	GOTO  m013
	XORLW .1
	BTFSC 0x03,Zero_
	GOTO  m014
	XORLW .27
	BTFSC 0x03,Zero_
	GOTO  m015
	XORLW .2
	BTFSC 0x03,Zero_
	GOTO  m016
	GOTO  m017
			;						{
			;							case 0:
			;								txbuf[4]=set_hz;	//set hz
m011	MOVF  set_hz,W
	MOVWF txbuf+4
			;								break;
	GOTO  m017
			;							case 85:
			;								txbuf[4]=set_run;	//set run
m012	MOVF  set_run,W
	MOVWF txbuf+4
			;								break;
	GOTO  m017
			;							case 78:	//display Hz
			;								txbuf[4]=dis_hz;	//data low byte
m013	MOVF  dis_hz,W
	MOVWF txbuf+4
			;								break;
	GOTO  m017
			;							case 79:	//display current
			;								txbuf[4]=dis_current;	//data low byte
m014	MOVF  dis_current,W
	MOVWF txbuf+4
			;								break;
	GOTO  m017
			;							case 84:	//display running state
			;								txbuf[3]=dis_running.high8;	//data high byte
m015	MOVF  dis_running+1,W
	MOVWF txbuf+3
			;								txbuf[4]=dis_running.low8;	//data low byte
	MOVF  dis_running,W
	MOVWF txbuf+4
			;								break;
	GOTO  m017
			;							case 86:	//display error code
			;								txbuf[3]=dis_error.high8;	//data high byte
m016	MOVF  dis_error+1,W
	MOVWF txbuf+3
			;								txbuf[4]=dis_error.low8;	//data low byte
	MOVF  dis_error,W
	MOVWF txbuf+4
			;						}
			;						temp16=crc16(txbuf,5);
m017	MOVLW .58
	MOVWF puchMsg
	MOVLW .5
	BSF   0x0A,PA0
	CALL  crc16
	BCF   0x0A,PA0
	MOVWF temp16_2
	MOVF  temp16+1,W
	MOVWF temp16_2+1
			;						txbuf[5]=temp16.high8;
	MOVWF txbuf+5
			;						txbuf[6]=temp16.low8;
	MOVF  temp16_2,W
	MOVWF txbuf+6
			;						transfer_ok=FAULT;
	BCF   0x4B,transfer_ok
			;						break;
	GOTO  m022
			;					case 0x06:
			;						txbuf[0]=rxbuf[0];
m018	MOVF  rxbuf,W
	MOVWF txbuf
			;						txbuf[1]=rxbuf[1];
	MOVF  rxbuf+1,W
	MOVWF txbuf+1
			;						txbuf[2]=rxbuf[2];
	MOVF  rxbuf+2,W
	MOVWF txbuf+2
			;						txbuf[3]=rxbuf[3];
	MOVF  rxbuf+3,W
	MOVWF txbuf+3
			;						txbuf[4]=rxbuf[4];
	MOVF  rxbuf+4,W
	MOVWF txbuf+4
			;						txbuf[5]=rxbuf[5];
	MOVF  rxbuf+5,W
	MOVWF txbuf+5
			;						txbuf[6]=rxbuf[6];
	MOVF  rxbuf+6,W
	MOVWF txbuf+6
			;						txbuf[7]=rxbuf[7];
	MOVF  rxbuf+7,W
	MOVWF txbuf+7
			;						switch(rxbuf[3])
	MOVF  rxbuf+3,W
	BTFSC 0x03,Zero_
	GOTO  m019
	XORLW .85
	BTFSC 0x03,Zero_
	GOTO  m020
	GOTO  m021
			;						{
			;							case 0:		//set Hz
			;								set_hz=rxbuf[5];
m019	MOVF  rxbuf+5,W
	MOVWF set_hz
			;								break;
	GOTO  m021
			;							case 85:	//set run
			;								set_run=rxbuf[5];
m020	MOVF  rxbuf+5,W
	MOVWF set_run
			;							
			;						}
			;						transfer_ok=FAULT;
m021	BCF   0x4B,transfer_ok
			;				}
			;			}
			;			receive_ok=FAULT;
m022	BCF   0x4B,receive_ok
			;		}
			;		if(TXIF && TRMT && transfer_ok==FAULT)
m023	BTFSS 0x0C,TXIF
	GOTO  m025
	BSF   0x03,RP0
	BTFSS 0x98,TRMT
	GOTO  m025
	BCF   0x03,RP0
	BTFSC 0x4B,transfer_ok
	GOTO  m025
			;		{
			;			C_EN=TRANSFER_EN;
	BSF   0x07,C_EN
			;			TXREG=txbuf[i];
	MOVLW .58
	ADDWF i,W
	MOVWF FSR
	MOVF  INDF,W
	MOVWF TXREG
			;			i++;
	INCF  i,1
			;			if(i==7 && txbuf[1]==3)
	MOVF  i,W
	XORLW .7
	BTFSS 0x03,Zero_
	GOTO  m024
	MOVF  txbuf+1,W
	XORLW .3
	BTFSS 0x03,Zero_
	GOTO  m024
			;			{
			;				transfer_ok=TRUE;
	BSF   0x4B,transfer_ok
			;				i=0;
	CLRF  i
			;			}
			;			if(i==8 && txbuf[1]==6)
m024	MOVF  i,W
	XORLW .8
	BTFSS 0x03,Zero_
	GOTO  m025
	MOVF  txbuf+1,W
	XORLW .6
	BTFSS 0x03,Zero_
	GOTO  m025
			;			{
			;				transfer_ok=TRUE;
	BSF   0x4B,transfer_ok
			;				i=0;
	CLRF  i
			;			}
			;		}
			;		if(TRMT)
m025	BSF   0x03,RP0
	BTFSS 0x98,TRMT
	GOTO  m026
			;			C_EN=RECEIVE_EN;
	BCF   0x03,RP0
	BCF   0x07,C_EN
			;	}
m026	BCF   0x03,RP0
	GOTO  m009

	END

⌨️ 快捷键说明

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