📄 sci.lis
字号:
.module SCI.c
.area text
0000 .dbfile SCI.c
0000 .dbfunc e SCISend1 _SCISend1 fV
0000 ; o -> 2,X
0000 _SCISend1::
0000 .dbline -1
0000 95 tsx
0001 .dbline 11
0001 ; /*-----------------------------------------------------*
0001 ; *文件描述:本文件包含了串行通信的4子程序,分别为: *
0001 ; *(1)SCISend1:串行发送1字节 *
0001 ; *(2)SCISendN:串行发送n字节 *
0001 ; *(3)SCIRe1:串行接收1字节 *
0001 ; *(4)SCIReN:串行接收n字节 *
0001 ; *-------------《嵌入式应用技术基础教程》--------------*/
0001 ; #include "SCI.h"
0001 ;
0001 ; void SCISend1(unsigned char o)
0001 ; {//判断ReStatusR的第SendTestBit位是否为1,是1可以发送
0001 2009 bra L3
0003 L2:
0003 .dbline 13
0003 ; while(1)
0003 ; {
0003 .dbline 14
0003 ; if ((ReSendStatusR & (1 << SendTestBit)) != 0)
0003 0F1606 brclr #7,0x16,L5
0006 .dbline 15
0006 ; {
0006 .dbline 16
0006 ; ReSendDataR = o;
0006 E602 lda 2,X
0008 B718 sta 0x18
000A .dbline 17
000A ; break;
000A 2002 bra L4
000C L5:
000C .dbline 19
000C L3:
000C .dbline 12
000C 20F5 bra L2
000E L4:
000E .dbline -2
000E L1:
000E .dbline 0 ; func end
000E 81 rts
000F .dbsym l o 2 c
000F .dbend
000F .dbfunc e SCISendN _SCISendN fV
000F ; i -> 0,X
000F ; ch -> 5,X
000F ; n -> 4,X
000F _SCISendN::
000F .dbline -1
000F A7FE ais #-2
0011 95 tsx
0012 .dbline 23
0012 ; }
0012 ; }
0012 ; }
0012 ;
0012 ; void SCISendN(unsigned char n,unsigned char ch[])
0012 ; {
0012 .dbline 25
0012 ; int i;
0012 ; for(i = 0; i < n; i++)
0012 6F01 clr 1,X
0014 7F clr ,X
0015 201F bra L11
0017 L8:
0017 .dbline 26
0017 E601 lda 1,X
0019 EB06 add 6,X
001B B700 sta *__r1
001D F6 lda ,X
001E E905 adc 5,X
0020 B700 sta *__r0
0022 5500 ldhx *__r0
0024 F6 lda ,x
0025 87 psha
0026 CD0000 jsr _SCISend1
0029 A701 ais #1
002B 95 tsx
002C L9:
002C .dbline 25
002C E601 lda 1,X
002E AB01 add #1
0030 E701 sta 1,X
0032 F6 lda ,X
0033 A900 adc #0
0035 F7 sta ,X
0036 L11:
0036 .dbline 25
0036 3F00 clr *__r0
0038 E604 lda 4,X
003A B700 sta *__r1
003C E601 lda 1,X
003E B700 sta *__r3
0040 F6 lda ,X
0041 B700 sta *__r2
0043 5500 ldhx *__r2
0045 7500 cphx *__r0
0047 95 tsx
0048 91CD blt L8
004A .dbline -2
004A L7:
004A A702 ais #2
004C .dbline 0 ; func end
004C 81 rts
004D .dbsym l i 0 I
004D .dbsym l ch 5 pc
004D .dbsym l n 4 c
004D .dbend
004D .dbfunc e SCIRe1 _SCIRe1 fc
004D ; i -> 0,X
004D ; k -> 1,X
004D ; p -> 5,X
004D _SCIRe1::
004D .dbline -1
004D A7FD ais #-3
004F 95 tsx
0050 .dbline 30
0050 ; SCISend1(ch[i]);
0050 ; }
0050 ;
0050 ; unsigned char SCIRe1(unsigned char *p)
0050 ; {
0050 .dbline 34
0050 ; unsigned int k;
0050 ; unsigned char i;
0050 ; //ReStatusR第ReTestBit位为1表示可接收数据
0050 ; for(k = 0; k< 0xfbbb; k++)
0050 6F02 clr 2,X
0052 6F01 clr 1,X
0054 2021 bra L16
0056 L13:
0056 .dbline 35
0056 ; {
0056 .dbline 36
0056 ; if ((ReSendStatusR & (1 << ReTestBit)) != 0)
0056 0B1612 brclr #5,0x16,L17
0059 .dbline 37
0059 ; {
0059 .dbline 38
0059 ; i = ReSendDataR;
0059 B618 lda 0x18
005B F7 sta ,X
005C .dbline 39
005C ; *p = 0x00;
005C E606 lda 6,X
005E B700 sta *__r1
0060 E605 lda 5,X
0062 B700 sta *__r0
0064 4F clra
0065 5500 ldhx *__r0
0067 F7 sta ,x
0068 95 tsx
0069 .dbline 40
0069 ; break;
0069 201C bra L15
006B L17:
006B .dbline 42
006B L14:
006B .dbline 34
006B E602 lda 2,X
006D AB01 add #1
006F E702 sta 2,X
0071 E601 lda 1,X
0073 A900 adc #0
0075 E701 sta 1,X
0077 L16:
0077 .dbline 34
0077 E602 lda 2,X
0079 B700 sta *__r1
007B E601 lda 1,X
007D B700 sta *__r0
007F 5500 ldhx *__r0
0081 65FBBB cphx #-1093
0084 95 tsx
0085 25CF blo L13
0087 L15:
0087 .dbline 43
0087 ; }
0087 ; }
0087 ; if(k >= 0xfbbb)
0087 E602 lda 2,X
0089 B700 sta *__r1
008B E601 lda 1,X
008D B700 sta *__r0
008F 5500 ldhx *__r0
0091 65FBBB cphx #-1093
0094 95 tsx
0095 2511 blo L19
0097 .dbline 44
0097 ; {
0097 .dbline 45
0097 ; i = 0xff;
0097 A6FF lda #-1
0099 F7 sta ,X
009A .dbline 46
009A ; *p = 0x01;
009A E606 lda 6,X
009C B700 sta *__r1
009E E605 lda 5,X
00A0 B700 sta *__r0
00A2 A601 lda #1
00A4 5500 ldhx *__r0
00A6 F7 sta ,x
00A7 95 tsx
00A8 .dbline 47
00A8 ; }
00A8 L19:
00A8 .dbline 48
00A8 ; return i; //返回接收到的数据
00A8 F6 lda ,X
00A9 .dbline -2
00A9 L12:
00A9 A703 ais #3
00AB .dbline 0 ; func end
00AB 81 rts
00AC .dbsym l i 0 c
00AC .dbsym l k 1 i
00AC .dbsym l p 5 pc
00AC .dbend
00AC .dbfunc e SCIReN _SCIReN fc
00AC ; fp -> 0,X
00AC ; m -> 1,X
00AC ; ch -> 6,X
00AC ; n -> 5,X
00AC _SCIReN::
00AC .dbline -1
00AC A7FD ais #-3
00AE 95 tsx
00AF .dbline 52
00AF ; }
00AF ;
00AF ; unsigned char SCIReN(unsigned char n, unsigned char ch[])
00AF ; {
00AF .dbline 55
00AF ; int m;
00AF ; unsigned char fp;
00AF ; m = 0;
00AF 6F02 clr 2,X
00B1 6F01 clr 1,X
00B3 2031 bra L23
00B5 L22:
00B5 .dbline 57
00B5 ; while (m < n)
00B5 ; {
00B5 .dbline 58
00B5 ; ch[m]=SCIRe1(&fp);
00B5 89 pshx
00B6 8B pshh
00B7 CD004D jsr _SCIRe1
00BA A702 ais #2
00BC 95 tsx
00BD B700 sta *__r1
00BF E602 lda 2,X
00C1 EB07 add 7,X
00C3 B700 sta *__r3
00C5 E601 lda 1,X
00C7 E906 adc 6,X
00C9 B700 sta *__r2
00CB B600 lda *__r1
00CD 5500 ldhx *__r2
00CF F7 sta ,x
00D0 95 tsx
00D1 .dbline 59
00D1 ; if (fp == 1) return 1;
00D1 F6 lda ,X
00D2 A101 cmp #1
00D4 2604 bne L25
00D6 .dbline 59
00D6 A601 lda #1
00D8 2022 bra L21
00DA L25:
00DA .dbline 60
00DA E602 lda 2,X
00DC AB01 add #1
00DE E702 sta 2,X
00E0 E601 lda 1,X
00E2 A900 adc #0
00E4 E701 sta 1,X
00E6 .dbline 61
00E6 L23:
00E6 .dbline 56
00E6 3F00 clr *__r0
00E8 E605 lda 5,X
00EA B700 sta *__r1
00EC E602 lda 2,X
00EE B700 sta *__r3
00F0 E601 lda 1,X
00F2 B700 sta *__r2
00F4 5500 ldhx *__r2
00F6 7500 cphx *__r0
00F8 95 tsx
00F9 91BA blt L22
00FB .dbline 62
00FB ; m ++;
00FB ; }
00FB ; return 0;
00FB 4F clra
00FC .dbline -2
00FC L21:
00FC A703 ais #3
00FE .dbline 0 ; func end
00FE 81 rts
00FF .dbsym l fp 0 c
00FF .dbsym l m 1 I
00FF .dbsym l ch 6 pc
00FF .dbsym l n 5 c
00FF .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -