📄 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 17
0001 ; /*-------------------------------------------------------------------------*
0001 ; *文件描述:本文件包含了串行通信的4子程序,分别为: *
0001 ; *(1)SCISend1:串行发送1字节 *
0001 ; *(2)SCISendN:串行发送n字节 *
0001 ; *(3)SCIRe1:串行接收1字节 *
0001 ; *(4)SCIReN:串行接收n字节 *
0001 ; *----------------------《嵌入式应用技术基础教程》-------------------------*/
0001 ;
0001 ; /*[包含头文件]*/
0001 ; #include "SCI.h"
0001 ; /*SCISend1:串行发送1个字节-------------------------------------------------*
0001 ; *功 能:串行发送1个字节 *
0001 ; *参 数:要发送的数据 *
0001 ; *返 回:无 *
0001 ; *-------------------------------------------------------------------------*/
0001 ; void SCISend1(unsigned char o)
0001 ; {
0001 2009 bra L3
0003 L2:
0003 .dbline 20
0003 ; //判断ReStatusR的第SendTestBit位是否为1,是1可以发送
0003 ; while(1)
0003 ; if ((ReSendStatusR & (1<<SendTestBit)) != 0)
0003 0F1606 brclr #7,0x16,L5
0006 .dbline 21
0006 ; {
0006 .dbline 22
0006 ; ReSendDataR=o;
0006 E602 lda 2,X
0008 B718 sta 0x18
000A .dbline 23
000A ; break;
000A 2002 bra L4
000C L5:
000C L3:
000C .dbline 19
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 32
0012 ; }
0012 ; }
0012 ; /*SCISendN:串行发送N个字节-------------------------------------------------*
0012 ; *功 能:发送数组中的N个字节数据 *
0012 ; *参 数:待发送的数据字节数及其要存放的数组首地址 *
0012 ; *返 回:无 *
0012 ; *-------------------------------------------------------------------------*/
0012 ; void SCISendN(unsigned char n,unsigned char ch[])
0012 ; {
0012 .dbline 34
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 35
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 34
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 34
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 44
0050 ; SCISend1(ch[i]);
0050 ; }
0050 ; /*SCIRe1:串行收一个字节数据------------------------------------------------*
0050 ; *功 能:从串行口接收1个字节的数据 *
0050 ; *参 数:标志指针p *
0050 ; *返 回:接收到的数据(若接收失败,返回0xff) *
0050 ; *说 明:参数*p带回接收标志=0 收到数据,=1 未收到数据 *
0050 ; *-------------------------------------------------------------------------*/
0050 ; unsigned char SCIRe1(unsigned char *p)
0050 ; {
0050 .dbline 48
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 49
0056 ; if ((ReSendStatusR & (1<<ReTestBit)) != 0)
0056 0B1612 brclr #5,0x16,L17
0059 .dbline 50
0059 ; {
0059 .dbline 51
0059 ; i=ReSendDataR;
0059 B618 lda 0x18
005B F7 sta ,X
005C .dbline 52
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 53
0069 ; break;
0069 201C bra L15
006B L17:
006B L14:
006B .dbline 48
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 48
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 56
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 57
0097 ; {
0097 .dbline 58
0097 ; i=0xff;
0097 A6FF lda #-1
0099 F7 sta ,X
009A .dbline 59
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 60
00A8 ; }
00A8 L19:
00A8 .dbline 61
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 69
00AF ; }
00AF ; /*SCIReN:HC08串行接收N个字节-----------------------------------------------*
00AF ; *功 能:接收N个字节数据,并存放在ch数组中 *
00AF ; *参 数:待接收的数据字节数及其存放的数组首地址 *
00AF ; *返 回:接收标志=0 收到数据,=1 未收到数据 *
00AF ; *-------------------------------------------------------------------------*/
00AF ; unsigned char SCIReN(unsigned char n,unsigned char ch[])
00AF ; {
00AF .dbline 72
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 74
00B5 ; while (m<n)
00B5 ; {
00B5 .dbline 75
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 76
00D1 ; if (fp==1) return 1;
00D1 F6 lda ,X
00D2 A101 cmp #1
00D4 2604 bne L25
00D6 .dbline 76
00D6 A601 lda #1
00D8 2022 bra L21
00DA L25:
00DA .dbline 77
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 78
00E6 L23:
00E6 .dbline 73
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 79
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 + -