📄 sci_po~1.lst
字号:
__start:
__text_start:
8000 45 0240 ldHX #0x0240
8003 94 tXS
8004 CD 83E2 jsr __HC08Setup
8007 45 0045 ldHX #0x0045
800A 65 0045 cpHX #0x0045
800D 27 06 beq 0x8015
800F 6F 00 clr 0,X
8011 AF 01 aiX #1
8013 20 F5 bra 0x800A
8015 45 0046 ldHX #0x0046
8018 94 tXS
8019 45 8000 ldHX #0x8000
801C 65 8000 cpHX #0x8000
801F 27 0B beq 0x802C
8021 E6 00 ldA 0,X
8023 9EE7 00 stA 0,S
8026 AF 01 aiX #1
8028 A7 01 aiS #1
802A 20 F0 bra 0x801C
802C 45 0240 ldHX #0x0240
802F 94 tXS
8030 CD 8141 jsr _main
_exit:
8033 20 FE bra 0x8033
FILE: H08SCI.c
(0001) //[H08SCI.c]串行通信-------------------------------------------------------*
(0002) //本文件包含: *
(0003) //(1)SCIInit:串行口初始化 *
(0004) //(2)SCISend1:串行发送1个字节 *
(0005) //(3)SCISendN:串行发送n字节 *
(0006) //(4)SCIRe1:串行接收1字节 *
(0007) //(5)SCIReN:串行接收n字节 *
(0008) //硬件连接: *
(0009) // MCU的SCI模块接口与PC方的COM1相连 *
(0010) //-------------------------------------------------------------------------*
(0011)
(0012) //头文件
(0013) #include "H08SCI.h"
(0014)
(0015) //SCIInit:串行口初始化-----------------------------------------------------*
(0016) //功 能:对串行口进行初始化,默认为允许SCI,正常码输出,8位数据,无校验, *
(0017) // 允许发送器,允许接收器.查询方式收发,波特率为9600(设fBUS=2.4576MHz) *
(0018) //参 数:无 *
(0019) //返 回:无 *
(0020) //-------------------------------------------------------------------------*
(0021) void SCIInit(void)
(0022) { //1.总线频率fBUS=2.4576MHz,定义波特率Bt=9600
_SCIInit:
8035 A6 02 ldA #2
8037 B7 19 stA 0x19
(0023) SCBR=0b00000010;
(0024) //2.设置允许SCI,正常码输出、8位数据、无校验
(0025) SCC1=0b01000000;
8039 A6 40 ldA #64
803B B7 13 stA 0x13
(0026) //3.设置允许发送、允许接收,查询方式收发
(0027) SCC2=0b00001100;
803D A6 0C ldA #12
803F B7 14 stA 0x14
8041 81 rts
_SCISend1:
o --> X+2
8042 95 tSX
(0028) }
(0029)
(0030) //SCISend1:串行发送1个字节-------------------------------------------------*
(0031) //功 能:串行发送1个字节 *
(0032) //参 数:要发送的数据 *
(0033) //返 回:无 *
(0034) //-------------------------------------------------------------------------*
(0035) void SCISend1(INT8U o)
(0036) {
8043 20 09 bra 0x804E
(0037) //判断ReStatusR的第SendTestBit位是否为1,是1可以发送
(0038) while(1)
(0039) if ((ReSendStatusR & (1<<SendTestBit)) != 0)
8045 0F 1606 BRclr 7,0x16,0x804E
(0040) {
8048 E6 02 ldA 2,X
804A B7 18 stA 0x18
(0041) ReSendDataR=o;
(0042) break;
804C 20 02 bra 0x8050
804E 20 F5 bra 0x8045
8050 81 rts
_SCISendN:
i --> X+0
ch --> X+5
n --> X+4
8051 A7 FE aiS #-2
8053 95 tSX
(0043) }
(0044) }
(0045)
(0046) //SCISendN:串行发送N个字节-------------------------------------------------*
(0047) //功 能:发送数组中的N个字节数据 *
(0048) //参 数:待发送数据的字节数及存放这些数据的数组首地址 *
(0049) //返 回:无 *
(0050) //-------------------------------------------------------------------------*
(0051) void SCISendN(INT8U n,INT8U ch[])
(0052) {
8054 6F 01 clr 1,X
8056 7F clr 0,X
8057 20 1F bra 0x8078
(0053) int i;
(0054) for(i=0;i<n;i++)
(0055) SCISend1(ch[i]);
8059 E6 01 ldA 1,X
805B EB 06 add 6,X
805D B7 41 stA *__r1
805F F6 ldA 0,X
8060 E9 05 adc 5,X
8062 B7 40 stA *__r0
8064 55 40 ldHX *__r0
8066 F6 ldA 0,X
8067 87 pshA
8068 CD 8042 jsr _SCISend1
806B A7 01 aiS #1
806D 95 tSX
806E E6 01 ldA 1,X
8070 AB 01 add #1
8072 E7 01 stA 1,X
8074 F6 ldA 0,X
8075 A9 00 adc #0
8077 F7 stA 0,X
8078 3F 40 clr *__r0
807A E6 04 ldA 4,X
807C B7 41 stA *__r1
807E E6 01 ldA 1,X
8080 B7 43 stA *__r3
8082 F6 ldA 0,X
8083 B7 42 stA *__r2
8085 55 42 ldHX *__r2
8087 75 40 cpHX *__r0
8089 95 tSX
808A 91 CD blt 0x8059
808C A7 02 aiS #2
808E 81 rts
_SCIRe1:
i --> X+0
k --> X+1
p --> X+5
808F A7 FD aiS #-3
8091 95 tSX
(0056) }
(0057)
(0058) //SCIRe1:串行收一个字节数据------------------------------------------------*
(0059) //功 能:从串行口接收1个字节的数据 *
(0060) //参 数:标志指针p *
(0061) //返 回:接收到的数据(若接收失败,返回0xff) *
(0062) //说 明:参数*p带回接收标志.*p=0,收到数据;*p=1,未收到数据 *
(0063) //-------------------------------------------------------------------------*
(0064) INT8U SCIRe1(INT8U *p)
(0065) {
8092 6F 02 clr 2,X
8094 6F 01 clr 1,X
8096 20 21 bra 0x80B9
(0066) INT16U k;
(0067) INT8U i;
(0068) //ReStatusR第ReTestBit位为1表示可接收数据
(0069) for(k=0;k<0xfbbb;k++)
(0070) if ((ReSendStatusR & (1<<ReTestBit)) != 0)
8098 0B 1612 BRclr 5,0x16,0x80AD
(0071) {
809B B6 18 ldA 0x18
809D F7 stA 0,X
(0072) i=ReSendDataR;
(0073) *p=0x00;
809E E6 06 ldA 6,X
80A0 B7 41 stA *__r1
80A2 E6 05 ldA 5,X
80A4 B7 40 stA *__r0
80A6 4F clrA
80A7 55 40 ldHX *__r0
80A9 F7 stA 0,X
80AA 95 tSX
(0074) break;
80AB 20 1C bra 0x80C9
80AD E6 02 ldA 2,X
80AF AB 01 add #1
80B1 E7 02 stA 2,X
80B3 E6 01 ldA 1,X
80B5 A9 00 adc #0
80B7 E7 01 stA 1,X
80B9 E6 02 ldA 2,X
80BB B7 41 stA *__r1
80BD E6 01 ldA 1,X
80BF B7 40 stA *__r0
80C1 55 40 ldHX *__r0
80C3 65 FBBB cpHX #0xFBBB
80C6 95 tSX
80C7 25 CF bcs 0x8098
(0075) }
(0076) //接受失败
(0077) if(k>=0xfbbb)
80C9 E6 02 ldA 2,X
80CB B7 41 stA *__r1
80CD E6 01 ldA 1,X
80CF B7 40 stA *__r0
80D1 55 40 ldHX *__r0
80D3 65 FBBB cpHX #0xFBBB
80D6 95 tSX
80D7 25 11 bcs 0x80EA
(0078) {
80D9 A6 FF ldA #-1
80DB F7 stA 0,X
(0079) i=0xff;
(0080) *p=0x01;
80DC E6 06 ldA 6,X
80DE B7 41 stA *__r1
80E0 E6 05 ldA 5,X
80E2 B7 40 stA *__r0
80E4 A6 01 ldA #1
80E6 55 40 ldHX *__r0
80E8 F7 stA 0,X
80E9 95 tSX
(0081) }
80EA F6 ldA 0,X
80EB A7 03 aiS #3
80ED 81 rts
_SCIReN:
fp --> X+0
m --> X+1
ch --> X+6
n --> X+5
80EE A7 FD aiS #-3
80F0 95 tSX
(0082) return i;
(0083) }
(0084)
(0085) //SCIReN:HC08串行接收N个字节-----------------------------------------------*
(0086) //功 能:接收N个字节数据,并存放在ch数组中 *
(0087) //参 数:待接收的数据字节数及其存放的数组首地址 *
(0088) //返 回:接收标志=0 收到数据,=1 未收到数据 *
(0089) //-------------------------------------------------------------------------*
(0090) INT8U SCIReN(INT8U n,INT8U ch[])
(0091) {
80F1 6F 02 clr 2,X
80F3 6F 01 clr 1,X
80F5 20 31 bra 0x8128
(0092) int m;
(0093) INT8U fp;
(0094) m=0;
(0095) while (m<n)
(0096) {
80F7 89 pshX
80F8 8B pshH
80F9 CD 808F jsr _SCIRe1
80FC A7 02 aiS #2
80FE 95 tSX
80FF B7 41 stA *__r1
8101 E6 02 ldA 2,X
8103 EB 07 add 7,X
8105 B7 43 stA *__r3
8107 E6 01 ldA 1,X
8109 E9 06 adc 6,X
810B B7 42 stA *__r2
810D B6 41 ldA *__r1
810F 55 42 ldHX *__r2
8111 F7 stA 0,X
8112 95 tSX
(0097) ch[m]=SCIRe1(&fp);
(0098) if (fp==1) return 1;
8113 F6 ldA 0,X
8114 A1 01 cmp #1
8116 26 04 bne 0x811C
8118 A6 01 ldA #1
811A 20 22 bra 0x813E
(0099) m++;
811C E6 02 ldA 2,X
811E AB 01 add #1
8120 E7 02 stA 2,X
8122 E6 01 ldA 1,X
8124 A9 00 adc #0
8126 E7 01 stA 1,X
(0100) }
8128 3F 40 clr *__r0
812A E6 05 ldA 5,X
812C B7 41 stA *__r1
812E E6 02 ldA 2,X
8130 B7 43 stA *__r3
8132 E6 01 ldA 1,X
8134 B7 42 stA *__r2
8136 55 42 ldHX *__r2
8138 75 40 cpHX *__r0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -