📄 sci.lis
字号:
.module SCI.c
.area text
0000 .dbfile SCI.c
0000 .dbfunc e SCIInit _SCIInit fV
0000 _SCIInit::
0000 .dbline -1
0000 .dbline 22
0000 ; //[H08SCI.c]串行通信-------------------------------------------------------*
0000 ; //本文件包含: *
0000 ; //(1)SCIInit:串行口初始化 *
0000 ; //(2)SCISend1:串行发送1个字节 *
0000 ; //(3)SCISendN:串行发送n字节 *
0000 ; //(4)SCIRe1:串行接收1字节 *
0000 ; //(5)SCIReN:串行接收n字节 *
0000 ; //硬件连接: *
0000 ; // MCU的SCI模块接口与PC方的COM1相连 *
0000 ; //-------------------------------------------------------------------------*
0000 ;
0000 ; //头文件
0000 ; #include "SCI.h"
0000 ;
0000 ; //SCIInit:串行口初始化-----------------------------------------------------*
0000 ; //功 能:对串行口进行初始化,默认为允许SCI,正常码输出,8位数据,无校验, *
0000 ; // 允许发送器,允许接收器.查询方式收发,波特率为9600(设fBUS=2.4576MHz) *
0000 ; //参 数:无 *
0000 ; //返 回:无 *
0000 ; //-------------------------------------------------------------------------*
0000 ; void SCIInit(void)
0000 ; { //1.总线频率fBUS=2.4576MHz,定义波特率Bt=9600
0000 .dbline 23
0000 ; SCBR=0b00000010;
0000 A602 lda #2
0002 B719 sta 0x19
0004 .dbline 25
0004 ; //2.设置允许SCI,正常码输出、8位数据、无校验
0004 ; SCC1=0b01000000;
0004 A640 lda #64
0006 B713 sta 0x13
0008 .dbline 27
0008 ; //3.设置允许发送、允许接收,查询方式收发
0008 ; SCC2=0b00001100;
0008 A60C lda #12
000A B714 sta 0x14
000C .dbline -2
000C L1:
000C .dbline 0 ; func end
000C 81 rts
000D .dbend
000D .dbfunc e SCISend1 _SCISend1 fV
000D ; o -> 2,X
000D _SCISend1::
000D .dbline -1
000D 95 tsx
000E .dbline 36
000E ; }
000E ;
000E ; //SCISend1:串行发送1个字节-------------------------------------------------*
000E ; //功 能:串行发送1个字节 *
000E ; //参 数:要发送的数据 *
000E ; //返 回:无 *
000E ; //-------------------------------------------------------------------------*
000E ; void SCISend1(INT8U o)
000E ; {
000E 2009 bra L4
0010 L3:
0010 .dbline 39
0010 ; //判断ReStatusR的第SendTestBit位是否为1,是1可以发送
0010 ; while(1)
0010 ; if ((ReSendStatusR & (1<<SendTestBit)) != 0)
0010 0F1606 brclr #7,0x16,L6
0013 .dbline 40
0013 ; {
0013 .dbline 41
0013 ; ReSendDataR=o;
0013 E602 lda 2,X
0015 B718 sta 0x18
0017 .dbline 42
0017 ; break;
0017 2002 bra L5
0019 L6:
0019 L4:
0019 .dbline 38
0019 20F5 bra L3
001B L5:
001B .dbline -2
001B L2:
001B .dbline 0 ; func end
001B 81 rts
001C .dbsym l o 2 c
001C .dbend
001C .dbfunc e SCISendN _SCISendN fV
001C ; i -> 0,X
001C ; ch -> 5,X
001C ; n -> 4,X
001C _SCISendN::
001C .dbline -1
001C A7FE ais #-2
001E 95 tsx
001F .dbline 52
001F ; }
001F ; }
001F ;
001F ; //SCISendN:串行发送N个字节-------------------------------------------------*
001F ; //功 能:发送数组中的N个字节数据 *
001F ; //参 数:待发送数据的字节数及存放这些数据的数组首地址 *
001F ; //返 回:无 *
001F ; //-------------------------------------------------------------------------*
001F ; void SCISendN(INT8U n,INT8U ch[])
001F ; {
001F .dbline 54
001F ; int i;
001F ; for(i=0;i<n;i++)
001F 6F01 clr 1,X
0021 7F clr ,X
0022 201F bra L12
0024 L9:
0024 .dbline 55
0024 E601 lda 1,X
0026 EB06 add 6,X
0028 B700 sta *__r1
002A F6 lda ,X
002B E905 adc 5,X
002D B700 sta *__r0
002F 5500 ldhx *__r0
0031 F6 lda ,x
0032 87 psha
0033 CD000D jsr _SCISend1
0036 A701 ais #1
0038 95 tsx
0039 L10:
0039 .dbline 54
0039 E601 lda 1,X
003B AB01 add #1
003D E701 sta 1,X
003F F6 lda ,X
0040 A900 adc #0
0042 F7 sta ,X
0043 L12:
0043 .dbline 54
0043 3F00 clr *__r0
0045 E604 lda 4,X
0047 B700 sta *__r1
0049 E601 lda 1,X
004B B700 sta *__r3
004D F6 lda ,X
004E B700 sta *__r2
0050 5500 ldhx *__r2
0052 7500 cphx *__r0
0054 95 tsx
0055 91CD blt L9
0057 .dbline -2
0057 L8:
0057 A702 ais #2
0059 .dbline 0 ; func end
0059 81 rts
005A .dbsym l i 0 I
005A .dbsym l ch 5 pc
005A .dbsym l n 4 c
005A .dbend
005A .dbfunc e SCIRe1 _SCIRe1 fc
005A ; i -> 0,X
005A ; k -> 1,X
005A ; p -> 5,X
005A _SCIRe1::
005A .dbline -1
005A A7FD ais #-3
005C 95 tsx
005D .dbline 65
005D ; SCISend1(ch[i]);
005D ; }
005D ;
005D ; //SCIRe1:串行收一个字节数据------------------------------------------------*
005D ; //功 能:从串行口接收1个字节的数据 *
005D ; //参 数:标志指针p *
005D ; //返 回:接收到的数据(若接收失败,返回0xff) *
005D ; //说 明:参数*p带回接收标志.*p=0,收到数据;*p=1,未收到数据 *
005D ; //-------------------------------------------------------------------------*
005D ; INT8U SCIRe1(INT8U *p)
005D ; {
005D .dbline 69
005D ; INT16U k;
005D ; INT8U i;
005D ; //ReStatusR第ReTestBit位为1表示可接收数据
005D ; for(k=0;k<0xfbbb;k++)
005D 6F02 clr 2,X
005F 6F01 clr 1,X
0061 2021 bra L17
0063 L14:
0063 .dbline 70
0063 ; if ((ReSendStatusR & (1<<ReTestBit)) != 0)
0063 0B1612 brclr #5,0x16,L18
0066 .dbline 71
0066 ; {
0066 .dbline 72
0066 ; i=ReSendDataR;
0066 B618 lda 0x18
0068 F7 sta ,X
0069 .dbline 73
0069 ; *p=0x00;
0069 E606 lda 6,X
006B B700 sta *__r1
006D E605 lda 5,X
006F B700 sta *__r0
0071 4F clra
0072 5500 ldhx *__r0
0074 F7 sta ,x
0075 95 tsx
0076 .dbline 74
0076 ; break;
0076 201C bra L16
0078 L18:
0078 L15:
0078 .dbline 69
0078 E602 lda 2,X
007A AB01 add #1
007C E702 sta 2,X
007E E601 lda 1,X
0080 A900 adc #0
0082 E701 sta 1,X
0084 L17:
0084 .dbline 69
0084 E602 lda 2,X
0086 B700 sta *__r1
0088 E601 lda 1,X
008A B700 sta *__r0
008C 5500 ldhx *__r0
008E 65FBBB cphx #-1093
0091 95 tsx
0092 25CF blo L14
0094 L16:
0094 .dbline 77
0094 ; }
0094 ; //接受失败
0094 ; if(k>=0xfbbb)
0094 E602 lda 2,X
0096 B700 sta *__r1
0098 E601 lda 1,X
009A B700 sta *__r0
009C 5500 ldhx *__r0
009E 65FBBB cphx #-1093
00A1 95 tsx
00A2 2511 blo L20
00A4 .dbline 78
00A4 ; {
00A4 .dbline 79
00A4 ; i=0xff;
00A4 A6FF lda #-1
00A6 F7 sta ,X
00A7 .dbline 80
00A7 ; *p=0x01;
00A7 E606 lda 6,X
00A9 B700 sta *__r1
00AB E605 lda 5,X
00AD B700 sta *__r0
00AF A601 lda #1
00B1 5500 ldhx *__r0
00B3 F7 sta ,x
00B4 95 tsx
00B5 .dbline 81
00B5 ; }
00B5 L20:
00B5 .dbline 82
00B5 ; return i;
00B5 F6 lda ,X
00B6 .dbline -2
00B6 L13:
00B6 A703 ais #3
00B8 .dbline 0 ; func end
00B8 81 rts
00B9 .dbsym l i 0 c
00B9 .dbsym l k 1 i
00B9 .dbsym l p 5 pc
00B9 .dbend
00B9 .dbfunc e SCIReN _SCIReN fc
00B9 ; fp -> 0,X
00B9 ; m -> 1,X
00B9 ; ch -> 6,X
00B9 ; n -> 5,X
00B9 _SCIReN::
00B9 .dbline -1
00B9 A7FD ais #-3
00BB 95 tsx
00BC .dbline 91
00BC ; }
00BC ;
00BC ; //SCIReN:HC08串行接收N个字节-----------------------------------------------*
00BC ; //功 能:接收N个字节数据,并存放在ch数组中 *
00BC ; //参 数:待接收的数据字节数及其存放的数组首地址 *
00BC ; //返 回:接收标志=0 收到数据,=1 未收到数据 *
00BC ; //-------------------------------------------------------------------------*
00BC ; INT8U SCIReN(INT8U n,INT8U ch[])
00BC ; {
00BC .dbline 94
00BC ; int m;
00BC ; INT8U fp;
00BC ; m=0;
00BC 6F02 clr 2,X
00BE 6F01 clr 1,X
00C0 2031 bra L24
00C2 L23:
00C2 .dbline 96
00C2 ; while (m<n)
00C2 ; {
00C2 .dbline 97
00C2 ; ch[m]=SCIRe1(&fp);
00C2 89 pshx
00C3 8B pshh
00C4 CD005A jsr _SCIRe1
00C7 A702 ais #2
00C9 95 tsx
00CA B700 sta *__r1
00CC E602 lda 2,X
00CE EB07 add 7,X
00D0 B700 sta *__r3
00D2 E601 lda 1,X
00D4 E906 adc 6,X
00D6 B700 sta *__r2
00D8 B600 lda *__r1
00DA 5500 ldhx *__r2
00DC F7 sta ,x
00DD 95 tsx
00DE .dbline 98
00DE ; if (fp==1) return 1;
00DE F6 lda ,X
00DF A101 cmp #1
00E1 2604 bne L26
00E3 .dbline 98
00E3 A601 lda #1
00E5 2022 bra L22
00E7 L26:
00E7 .dbline 99
00E7 E602 lda 2,X
00E9 AB01 add #1
00EB E702 sta 2,X
00ED E601 lda 1,X
00EF A900 adc #0
00F1 E701 sta 1,X
00F3 .dbline 100
00F3 L24:
00F3 .dbline 95
00F3 3F00 clr *__r0
00F5 E605 lda 5,X
00F7 B700 sta *__r1
00F9 E602 lda 2,X
00FB B700 sta *__r3
00FD E601 lda 1,X
00FF B700 sta *__r2
0101 5500 ldhx *__r2
0103 7500 cphx *__r0
0105 95 tsx
0106 91BA blt L23
0108 .dbline 101
0108 ; m++;
0108 ; }
0108 ; return 0;
0108 4F clra
0109 .dbline -2
0109 L22:
0109 A703 ais #3
010B .dbline 0 ; func end
010B 81 rts
010C .dbsym l fp 0 c
010C .dbsym l m 1 I
010C .dbsym l ch 6 pc
010C .dbsym l n 5 c
010C .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -