📄 sci.asm
字号:
LACK 255
SACL *+
CALL _delay
MAR *-,AR3
.line 20
;>>>> DIE_L;
LARK AR3,28826
LACK 65531
AND *
SACL * ,AR1
.line 21
;>>>> delay(0xff);
LACK 255
SACL *+
CALL _delay
MAR *-
.line 22
;>>>> enable_int();
CALL _enable_int
.line 23
;>>>> Len_RecChar = 0;
LACK 0
LDPK _Len_RecChar
SACL _Len_RecChar
.line 24
;>>>> read_flag = 0;
;>>>> // *PBDATDIR=*PBDATDIR | 0xffff;
;>>>> // data_to_send=0x005a;
;>>>> // *SCITXBUF=data_to_send;
;>>>> // while ( * SCICTL2 & 0x0040 == 0x0040) ;
;>>>> // *PBDATDIR=*PBDATDIR & 0xfffb;
;>>>> // while((*SCIRXST&0x0040)==0x0000);
;>>>> // data_received= *SCIRXBUF;
;>>>> // if(data_received!=0x005a)return(0);
;>>>> // return(1);
LDPK _read_flag
SACL _read_flag
L10:
.line 39
;>>>> return(0);
LACK 0
EPI0_5:
.line 40
SBRK 4
LAR AR0,*-
PSHD *
RET
.endfunc 149,000000000H,3
.sym _UartRec,_UartRec,32,2,0
.globl _UartRec
.func 154
;>>>> void UartRec()
;>>>> unsigned char ch;
******************************************************
* FUNCTION DEF : _UartRec
******************************************************
_UartRec:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,2
LAR AR0,*0+,AR3
.sym _ch,1,12,1,16
.line 6
;>>>> ch = *SCIRXBUF;
LARK AR3,28759
LAC * ,AR2
LARK AR2,1
MAR *0+
SACL *
.line 7
;>>>> if(read_flag==0)
LDPK _read_flag
LAC _read_flag
BNZ L13
.line 9
;>>>> if(ch == 0x05)
LAC *
SUBK 5
BNZ L14
.line 11
;>>>> uiRecNum = 0;
LACK 0
LDPK _uiRecNum
SACL _uiRecNum
.line 12
;>>>> Len_RecChar = 0;
SACL _Len_RecChar
L14:
.line 14
;>>>> if(ch == EOT || uiRecNum>=INBUF_LEN) //接收结束,收到0X0A
;>>>> // disable_int();
LAC *
SUBK 10
BZ LL8
SSXM
LDPK _uiRecNum
LAC _uiRecNum
SUBK 20
BLZ L15
LL8:
.line 17
;>>>> read_flag = 1;
LACK 1
LDPK _read_flag
SACL _read_flag
.line 18
;>>>> SciRecBuf[uiRecNum++] = ch;
LDPK _uiRecNum
LAC _uiRecNum
ADDK 1
SACL _uiRecNum
SUBK 1
ADLK _SciRecBuf+0,0
MAR * ,AR0
SACL *
LAR AR4,* ,AR2
SSXM
LAC * ,AR4
SACL *
.line 19
;>>>> Len_RecChar = uiRecNum;
BLKD #_uiRecNum,_Len_RecChar
.line 20
;>>>> uiRecNum=0;
;>>>> else
LACK 0
SACL _uiRecNum
B L13
L15:
.line 25
;>>>> if (ch > 127 ) //if1
ZALS *
SUBK 127
BLEZ L17
.line 27
;>>>> uiRecNum = 0 ;
LACK 0
SACL _uiRecNum
.line 28
;>>>> SciRecBuf[uiRecNum] = ch;
;>>>> else
ADLK _SciRecBuf+0,0
MAR * ,AR0
SACL *
LAR AR4,* ,AR2
LAC * ,AR4
SACL *
B L13
L17:
.line 32
;>>>> SciRecBuf[uiRecNum] = ch;
ADDK 127
MAR * ,AR1
SACL * ,AR0
LAC _uiRecNum
RSXM
ADLK _SciRecBuf+0,0
SACL *
LAR AR4,* ,AR1
LAC * ,AR4
SACL *
.line 33
;>>>> uiRecNum++;
;>>>> // Len_RecChar++;
;>>>> } //endif1
;>>>> }//endif
;>>>> }//endif !read_flag
LAC _uiRecNum
ADDK 1
SACL _uiRecNum
L13:
.line 39
;>>>> *IFR = 0x0001;
LARK AR4,6
LACK 1
MAR * ,AR4
SACL *
.line 40
;>>>> delay(0xf);
;>>>> // enable_int();
ADRK 9
MAR * ,AR1
SAR AR4,*+
CALL _delay
MAR *-
EPI0_6:
.line 43
SBRK 3
LAR AR0,*-
PSHD *
RET
.endfunc 196,000000000H,2
.sym _chkxor,_chkxor,44,2,0
.globl _chkxor
.func 208
;>>>> uchar chkxor(char *p,uint a,uint n)
******************************************************
* FUNCTION DEF : _chkxor
******************************************************
_chkxor:
LF7 .set 0
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,3
LAR AR0,*0+,AR2
.sym _p,-3+LF7,18,9,16
.sym _a,-4+LF7,14,9,16
.sym _n,-5+LF7,14,9,16
.sym _i,1,14,1,16
.sym _checkxor,2,12,1,16
.line 2
;>>>> uint i;
;>>>> uchar checkxor;
.line 5
;>>>> i=0;
LACK 0
LARK AR2,1
MAR *0+
SACL *+
.line 6
;>>>> checkxor=0;
SACL *-
.line 7
;>>>> for(i=0;i<n;i++)
SACL *
ZALS *
SBRK 6-LF7
SUBS *
BGEZ L20
MAR *+
L19:
.line 9
;>>>> checkxor ^= p[a+i];
LAC *+
ADD *
ADRK 4-LF7
ADD *+,AR0
SACL *
LAR AR3,* ,AR3
LAC * ,AR2
XOR *
SACL *-
.line 7
LAC *
ADDK 1
SACL *
ZALS *
SBRK 6-LF7
SUBS *+
BLZ L19
L20:
.line 12
;>>>> return (checkxor);
LARK AR2,2
MAR *0+
ZALS *
EPI0_7:
.line 13
MAR * ,AR1
SBRK 4
LAR AR0,*-
PSHD *
RET
.endfunc 220,000000000H,3
.sym _chksum,_chksum,44,2,0
.globl _chksum
.func 222
;>>>> uchar chksum(char *p,uint a,uint n)
******************************************************
* FUNCTION DEF : _chksum
******************************************************
_chksum:
LF8 .set 0
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,3
LAR AR0,*0+,AR2
.sym _p,-3+LF8,18,9,16
.sym _a,-4+LF8,14,9,16
.sym _n,-5+LF8,14,9,16
.sym _i,1,14,1,16
.sym _checksum,2,12,1,16
.line 2
;>>>> uint i;
;>>>> uchar checksum;
.line 5
;>>>> i=0;
LACK 0
LARK AR2,1
MAR *0+
SACL *+
.line 6
;>>>> checksum=0;
SACL *-
.line 7
;>>>> for(i=0;i<n;i++)
SACL *
ZALS *
SBRK 6-LF8
SUBS *
BGEZ L22
MAR *+
L21:
.line 9
;>>>> checksum += p[a+i];
LAC *+
ADD *
ADRK 4-LF8
ADD *+,AR0
SACL *
LAR AR3,* ,AR3
LAC * ,AR2
ADD *
SACL *-
.line 7
LAC *
ADDK 1
SACL *
ZALS *
SBRK 6-LF8
SUBS *+
BLZ L21
L22:
.line 12
;>>>> return checksum;
LARK AR2,2
MAR *0+
ZALS *
EPI0_8:
.line 13
MAR * ,AR1
SBRK 4
LAR AR0,*-
PSHD *
RET
.endfunc 234,000000000H,3
.sym _SendSci,_SendSci,46,2,0
.globl _SendSci
.func 272
;>>>> uint SendSci(unsigned char dsp_ad,uchar para,ulong uldata,uint n)
******************************************************
* FUNCTION DEF : _SendSci
******************************************************
_SendSci:
LF9 .set 0
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,25
LAR AR0,*0+,AR2
.sym _dsp_ad,-3+LF9,12,9,16
.sym _para,-4+LF9,12,9,16
.sym _uldata,-6+LF9,15,9,32
.sym _n,-7+LF9,14,9,16
.sym _i,1,14,1,16
.sym _checks,2,12,1,16
.sym _OutBuf,3,50,1,320,,20
.line 2
;>>>> uint i;
;>>>> uchar checks;
;>>>> char OutBuf[20];
.line 6
;>>>> i=0;
;>>>> // uchar chksum = 0x3A;
LACK 0
LARK AR2,1
MAR *0+
SACL *
.line 8
;>>>> if(uldata % 65536 > 0x7fff)
SBRK 7-LF9
ZALS *
ANDK 65535
ADRK 29-LF9
SACL *+
SACH *-
LT *+
MPYK 1
LPH *
LACK 32767
SPAC
BC L23
.line 10
;>>>> uldata = ~(uint)uldata + 1;
SBRK 30-LF9
ZALS *
CMPL
ADDK 1
ANDK 0FFFFh
SACL *+
SACH *
.line 11
;>>>> uldata_fh = 0x2d;
;>>>> else
LACK 45
LDPK _uldata_fh
SACL _uldata_fh
B L24
L23:
.line 15
;>>>> uldata_fh = 0x30;
LACK 48
LDPK _uldata_fh
SACL _uldata_fh
L24:
.line 18
;>>>> i = ltoascii((long)dsp_ad,OutBuf,2);
;>>>> // i += ltoascii((long)ucSq,OutBuf+i,1);
;>>>> // i += ltoascii((long)para,OutBuf+i,1);
MAR * ,AR1
LACK 2
SACL *+,AR3
LARK AR3,3
MAR *0+,AR1
SAR AR3,*+,AR2
LARK AR2,-3+LF9
MAR *0+
ZALS * ,AR1
SACL *+
SACH *+
CALL _ltoascii
SBRK 4
MAR * ,AR2
LARK AR2,1
MAR *0+
SACL * ,AR1
.line 21
;>>>> i += ltoascii((long)uldata,OutBuf+i,10);
LACK 10
SACL *+,AR0
SAR AR0,*
LAC * ,AR2
ADD * ,AR1
ADDK 3
SACL *+,AR2
SBRK 7-LF9
ZALS *+
ADDH * ,AR1
SACL *+
SACH *+
CALL _ltoascii
SBRK 4
MAR * ,AR2
LARK AR2,1
MAR *0+
ADD *
SACL *
.line 28
;>>>> if(uldata_fh == 0x2d)
SSXM
LDPK _uldata_fh
LAC _uldata_fh
SUBK 45
BNZ L25
.line 30
;>>>> OutBuf[5] = 0x2d;
LACK 45
ADRK 7
SACL *
L25:
.line 33
;>>>> checks = chkxor(OutBuf,0,i);
LARK AR2,1
MAR *0+
LAC * ,AR1
SACL *+
LACK 0
SACL *+,AR3
LARK AR3,3
MAR *0+,AR1
SAR AR3,*+
CALL _chkxor
SBRK 3
MAR * ,AR2
LARK AR2,2
MAR *0+
SACL *
.line 34
;>>>> checks = checks ^ para;
SBRK 6-LF9
XOR *
ADRK 6-LF9
SACL *
.line 35
;>>>> checks = checks ^ ucSq;
LDPK _ucSq
XOR _ucSq
SACL * ,AR1
.line 37
;>>>> ltofascii((long)(checks),OutBuf,2);
LACK 2
SACL *+,AR3
LARK AR3,3
MAR *0+,AR1
SAR AR3,*+,AR2
ZALS * ,AR1
SACL *+
SACH *+
CALL _ltofascii
SBRK 4
.line 39
;>>>> send_char_com(0x02);//STX
LACK 2
SACL *+
CALL _send_char_com
MAR *-
.line 40
;>>>> send_num_com(dsp_ad,2); //dsp_ad
LACK 2
SACL *+,AR2
LARK AR2,-3+LF9
MAR *0+
ZALS * ,AR1
SACL *+
SACH *+
CALL _send_num_com
SBRK 3
.line 41
;>>>> send_char_com(ucSq); //SQ
BLKD _ucSq+0,*+
CALL _send_char_com
MAR *-,AR2
.line 42
;>>>> send_char_com(para); //C or M
LARK AR2,-4+LF9
MAR *0+
LAC * ,AR1
SACL *+
CALL _send_char_com
MAR *-
.line 43
;>>>> send_char_com(uldata_fh);
BLKD _uldata_fh+0,*+
CALL _send_char_com
MAR *-,AR2
.line 44
;>>>> send_num_com(uldata,n-1); //the num of pulse
LARK AR2,-7+LF9
MAR *0+
LAC *+,AR1
SUBK 1
SACL *+,AR2
ZALS *+
ADDH * ,AR1
SACL *+
SACH *+
CALL _send_num_com
SBRK 3
.line 45
;>>>> send_char_com(0x03); //ETX
LACK 3
SACL *+
CALL _send_char_com
MAR *-
.line 46
;>>>> send_string_com(OutBuf,2);//checksum
;>>>> // send_string_com(p, 16); //(plc_ad + para + 要发
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -