📄 prgframe.lst
字号:
80EA 38 40 lsl *__r0
80EC 4B FC dbnzA 0x812E
80EE B6 00 ldA 0x00
80F0 BA 40 orA *__r0
80F2 B7 00 stA 0x00
80F4 81 rts
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:
80F5 A6 02 ldA #2
80F7 B7 19 stA 0x19
(0023) SCBR=0b00000010;
(0024) //2.设置允许SCI,正常码输出、8位数据、无校验
(0025) SCC1=0b01000000;
80F9 A6 40 ldA #64
80FB B7 13 stA 0x13
(0026) //3.设置允许发送、允许接收,查询方式收发
(0027) SCC2=0b00001100;
80FD A6 0C ldA #12
80FF B7 14 stA 0x14
8101 81 rts
_SCISend1:
o --> X+2
8102 95 tSX
(0028) }
(0029)
(0030) //SCISend1:串行发送1个字节-------------------------------------------------*
(0031) //功 能:串行发送1个字节 *
(0032) //参 数:要发送的数据 *
(0033) //返 回:无 *
(0034) //-------------------------------------------------------------------------*
(0035) void SCISend1(INT8U o)
(0036) {
8103 20 09 bra 0x810E
(0037) //判断ReStatusR的第SendTestBit位是否为1,是1可以发送
(0038) while(1)
(0039) if ((ReSendStatusR & (1<<SendTestBit)) != 0)
8105 0F 1606 BRclr 7,0x16,0x810E
(0040) {
8108 E6 02 ldA 2,X
810A B7 18 stA 0x18
(0041) ReSendDataR=o;
(0042) break;
810C 20 02 bra 0x8110
810E 20 F5 bra 0x8105
8110 81 rts
_SCISendN:
i --> X+0
ch --> X+5
n --> X+4
8111 A7 FE aiS #-2
8113 95 tSX
(0043) }
(0044) }
(0045)
(0046) //SCISendN:串行发送N个字节-------------------------------------------------*
(0047) //功 能:发送数组中的N个字节数据 *
(0048) //参 数:待发送数据的字节数及存放这些数据的数组首地址 *
(0049) //返 回:无 *
(0050) //-------------------------------------------------------------------------*
(0051) void SCISendN(INT8U n,INT8U ch[])
(0052) {
8114 6F 01 clr 1,X
8116 7F clr 0,X
8117 20 1F bra 0x8138
(0053) int i;
(0054) for(i=0;i<n;i++)
(0055) SCISend1(ch[i]);
8119 E6 01 ldA 1,X
811B EB 06 add 6,X
811D B7 41 stA *__r1
811F F6 ldA 0,X
8120 E9 05 adc 5,X
8122 B7 40 stA *__r0
8124 55 40 ldHX *__r0
8126 F6 ldA 0,X
8127 87 pshA
8128 CD 8102 jsr _SCISend1
812B A7 01 aiS #1
812D 95 tSX
812E E6 01 ldA 1,X
8130 AB 01 add #1
8132 E7 01 stA 1,X
8134 F6 ldA 0,X
8135 A9 00 adc #0
8137 F7 stA 0,X
8138 3F 40 clr *__r0
813A E6 04 ldA 4,X
813C B7 41 stA *__r1
813E E6 01 ldA 1,X
8140 B7 43 stA *__r3
8142 F6 ldA 0,X
8143 B7 42 stA *__r2
8145 55 42 ldHX *__r2
8147 75 40 cpHX *__r0
8149 95 tSX
814A 91 CD blt 0x8119
814C A7 02 aiS #2
814E 81 rts
_SCIRe1:
i --> X+0
k --> X+1
p --> X+5
814F A7 FD aiS #-3
8151 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) {
8152 6F 02 clr 2,X
8154 6F 01 clr 1,X
8156 20 21 bra 0x8179
(0066) INT16U k;
(0067) INT8U i;
(0068) //ReStatusR第ReTestBit位为1表示可接收数据
(0069) for(k=0;k<0xfbbb;k++)
(0070) if ((ReSendStatusR & (1<<ReTestBit)) != 0)
8158 0B 1612 BRclr 5,0x16,0x816D
(0071) {
815B B6 18 ldA 0x18
815D F7 stA 0,X
(0072) i=ReSendDataR;
(0073) *p=0x00;
815E E6 06 ldA 6,X
8160 B7 41 stA *__r1
8162 E6 05 ldA 5,X
8164 B7 40 stA *__r0
8166 4F clrA
8167 55 40 ldHX *__r0
8169 F7 stA 0,X
816A 95 tSX
(0074) break;
816B 20 1C bra 0x8189
816D E6 02 ldA 2,X
816F AB 01 add #1
8171 E7 02 stA 2,X
8173 E6 01 ldA 1,X
8175 A9 00 adc #0
8177 E7 01 stA 1,X
8179 E6 02 ldA 2,X
817B B7 41 stA *__r1
817D E6 01 ldA 1,X
817F B7 40 stA *__r0
8181 55 40 ldHX *__r0
8183 65 FBBB cpHX #0xFBBB
8186 95 tSX
8187 25 CF bcs 0x8158
(0075) }
(0076) //接受失败
(0077) if(k>=0xfbbb)
8189 E6 02 ldA 2,X
818B B7 41 stA *__r1
818D E6 01 ldA 1,X
818F B7 40 stA *__r0
8191 55 40 ldHX *__r0
8193 65 FBBB cpHX #0xFBBB
8196 95 tSX
8197 25 11 bcs 0x81AA
(0078) {
8199 A6 FF ldA #-1
819B F7 stA 0,X
(0079) i=0xff;
(0080) *p=0x01;
819C E6 06 ldA 6,X
819E B7 41 stA *__r1
81A0 E6 05 ldA 5,X
81A2 B7 40 stA *__r0
81A4 A6 01 ldA #1
81A6 55 40 ldHX *__r0
81A8 F7 stA 0,X
81A9 95 tSX
(0081) }
81AA F6 ldA 0,X
81AB A7 03 aiS #3
81AD 81 rts
_SCIReN:
fp --> X+0
m --> X+1
ch --> X+6
n --> X+5
81AE A7 FD aiS #-3
81B0 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) {
81B1 6F 02 clr 2,X
81B3 6F 01 clr 1,X
81B5 20 31 bra 0x81E8
(0092) int m;
(0093) INT8U fp;
(0094) m=0;
(0095) while (m<n)
(0096) {
81B7 89 pshX
81B8 8B pshH
81B9 CD 814F jsr _SCIRe1
81BC A7 02 aiS #2
81BE 95 tSX
81BF B7 41 stA *__r1
81C1 E6 02 ldA 2,X
81C3 EB 07 add 7,X
81C5 B7 43 stA *__r3
81C7 E6 01 ldA 1,X
81C9 E9 06 adc 6,X
81CB B7 42 stA *__r2
81CD B6 41 ldA *__r1
81CF 55 42 ldHX *__r2
81D1 F7 stA 0,X
81D2 95 tSX
(0097) ch[m]=SCIRe1(&fp);
(0098) if (fp==1) return 1;
81D3 F6 ldA 0,X
81D4 A1 01 cmp #1
81D6 26 04 bne 0x81DC
81D8 A6 01 ldA #1
81DA 20 22 bra 0x81FE
(0099) m++;
81DC E6 02 ldA 2,X
81DE AB 01 add #1
81E0 E7 02 stA 2,X
81E2 E6 01 ldA 1,X
81E4 A9 00 adc #0
81E6 E7 01 stA 1,X
(0100) }
81E8 3F 40 clr *__r0
81EA E6 05 ldA 5,X
81EC B7 41 stA *__r1
81EE E6 02 ldA 2,X
81F0 B7 43 stA *__r3
81F2 E6 01 ldA 1,X
81F4 B7 42 stA *__r2
81F6 55 42 ldHX *__r2
81F8 75 40 cpHX *__r0
81FA 95 tSX
81FB 91 BA blt 0x81B7
(0101) return 0;
FILE: <library>
81FD 4F clrA
81FE A7 03 aiS #3
8200 81 rts
__HC08Setup:
8201 81 rts
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -