📄 rs485.asm
字号:
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 + -