📄 flash.lst
字号:
(0013) SCC1=0b01000000;
A229 A6 40 ldA #64
A22B B7 13 stA 0x13
(0014) //设置允许发送、允许接收,查询方式收发
(0015) SCC2=0b00001100;
A22D A6 0C ldA #12
A22F B7 14 stA 0x14
A231 81 rts
_SCISend1:
o --> X+2
A232 95 tSX
FILE: F:\01科研~1\编著2005\HC08嵌~1\GP32程序\HC08EX~2\C\C06_FL~1\SCI.c
(0001) /*-----------------------------------------------------*
(0002) *文件描述:本文件包含了串行通信的4子程序,分别为: *
(0003) *(1)SCISend1:串行发送1字节 *
(0004) *(2)SCISendN:串行发送n字节 *
(0005) *(3)SCIRe1:串行接收1字节 *
(0006) *(4)SCIReN:串行接收n字节 *
(0007) *-------------《嵌入式应用技术基础教程》--------------*/
(0008) //[以下为子程序源代码]
(0009) //[包含头文件]
(0010) #include "SCI.h"
(0011) /*SCISend1:串行发送1个字节-----------------------------*
(0012) *功 能:串行发送1个字节 *
(0013) *参 数:要发送的数据 *
(0014) *返 回:无 *
(0015) *-----------------------------------------------------*/
(0016) void SCISend1(unsigned char o)
(0017) {//判断ReStatusR的第SendTestBit位是否为1,是1可以发送
A233 20 09 bra 0xA23E
(0018) while(1)
(0019) if ((ReSendStatusR & (1<<SendTestBit)) != 0)
A235 0F 1606 BRclr 7,0x16,0xA23E
(0020) { ReSendDataR=o;
A238 E6 02 ldA 2,X
A23A B7 18 stA 0x18
(0021) break;}
A23C 20 02 bra 0xA240
A23E 20 F5 bra 0xA235
A240 81 rts
_SCISendN:
i --> X+0
ch --> X+5
n --> X+4
A241 A7 FE aiS #-2
A243 95 tSX
(0022) }
(0023) /*SCISendN:串行发送N个字节-----------------------------*
(0024) *功 能:发送数组中的N个字节数据 *
(0025) *参 数:待发送的数据字节数及其要存放的数组首地址 *
(0026) *返 回:无 *
(0027) *-----------------------------------------------------*/
(0028) void SCISendN(unsigned char n,unsigned char ch[])
(0029) {int i;
A244 6F 01 clr 1,X
A246 7F clr 0,X
A247 20 1F bra 0xA268
(0030) for(i=0;i<n;i++)
(0031) SCISend1(ch[i]);
A249 E6 01 ldA 1,X
A24B EB 06 add 6,X
A24D B7 41 stA *__r1
A24F F6 ldA 0,X
A250 E9 05 adc 5,X
A252 B7 40 stA *__r0
A254 55 40 ldHX *__r0
A256 F6 ldA 0,X
A257 87 pshA
A258 CD A232 jsr _SCISend1
A25B A7 01 aiS #1
A25D 95 tSX
A25E E6 01 ldA 1,X
A260 AB 01 add #1
A262 E7 01 stA 1,X
A264 F6 ldA 0,X
A265 A9 00 adc #0
A267 F7 stA 0,X
A268 3F 40 clr *__r0
A26A E6 04 ldA 4,X
A26C B7 41 stA *__r1
A26E E6 01 ldA 1,X
A270 B7 43 stA *__r3
A272 F6 ldA 0,X
A273 B7 42 stA *__r2
A275 55 42 ldHX *__r2
A277 75 40 cpHX *__r0
A279 95 tSX
A27A 91 CD blt 0xA249
A27C A7 02 aiS #2
A27E 81 rts
_SCIRe1:
i --> X+0
k --> X+1
p --> X+5
A27F A7 FD aiS #-3
A281 95 tSX
(0032) }
(0033) /*SCIRe1:串行收一个字节数据----------------------------*
(0034) *功 能:从串行口接收1个字节的数据 *
(0035) *参 数:标志指针p *
(0036) *返 回:接收到的数据(若接收失败,返回0xff) *
(0037) *说 明:参数*p带回接收标志=0收到数据,=1未收到数据 *
(0038) *-----------------------------------------------------*/
(0039) unsigned char SCIRe1(unsigned char *p)
(0040) { unsigned int k;
A282 6F 02 clr 2,X
A284 6F 01 clr 1,X
A286 20 21 bra 0xA2A9
(0041) unsigned char i;
(0042) //ReStatusR第ReTestBit位为1表示可接收数据
(0043) for(k=0;k<0xfbbb;k++)
(0044) if ((ReSendStatusR & (1<<ReTestBit)) != 0)
A288 0B 1612 BRclr 5,0x16,0xA29D
(0045) {i=ReSendDataR;
A28B B6 18 ldA 0x18
A28D F7 stA 0,X
(0046) *p=0x00;
A28E E6 06 ldA 6,X
A290 B7 41 stA *__r1
A292 E6 05 ldA 5,X
A294 B7 40 stA *__r0
A296 4F clrA
A297 55 40 ldHX *__r0
A299 F7 stA 0,X
A29A 95 tSX
(0047) break;}
A29B 20 1C bra 0xA2B9
A29D E6 02 ldA 2,X
A29F AB 01 add #1
A2A1 E7 02 stA 2,X
A2A3 E6 01 ldA 1,X
A2A5 A9 00 adc #0
A2A7 E7 01 stA 1,X
A2A9 E6 02 ldA 2,X
A2AB B7 41 stA *__r1
A2AD E6 01 ldA 1,X
A2AF B7 40 stA *__r0
A2B1 55 40 ldHX *__r0
A2B3 65 FBBB cpHX #0xFBBB
A2B6 95 tSX
A2B7 25 CF bcs 0xA288
(0048) if(k>=0xfbbb)
A2B9 E6 02 ldA 2,X
A2BB B7 41 stA *__r1
A2BD E6 01 ldA 1,X
A2BF B7 40 stA *__r0
A2C1 55 40 ldHX *__r0
A2C3 65 FBBB cpHX #0xFBBB
A2C6 95 tSX
A2C7 25 11 bcs 0xA2DA
(0049) {i=0xff;
A2C9 A6 FF ldA #-1
A2CB F7 stA 0,X
(0050) *p=0x01;}
A2CC E6 06 ldA 6,X
A2CE B7 41 stA *__r1
A2D0 E6 05 ldA 5,X
A2D2 B7 40 stA *__r0
A2D4 A6 01 ldA #1
A2D6 55 40 ldHX *__r0
A2D8 F7 stA 0,X
A2D9 95 tSX
(0051) return i; //返回接收到的数据
A2DA F6 ldA 0,X
A2DB A7 03 aiS #3
A2DD 81 rts
_SCIReN:
fp --> X+0
m --> X+1
ch --> X+6
n --> X+5
A2DE A7 FD aiS #-3
A2E0 95 tSX
(0052) }
(0053) /*SCIReN:HC08串行接收N个字节---------------------------*
(0054) *功 能:接收N个字节数据,并存放在ch数组中 *
(0055) *参 数:待接收的数据字节数及其存放的数组首地址 *
(0056) *返 回:接收标志=0收到数据,=1未收到数据 *
(0057) *-----------------------------------------------------*/
(0058) unsigned char SCIReN(unsigned char n,unsigned char ch[])
(0059) {int m;
A2E1 6F 02 clr 2,X
A2E3 6F 01 clr 1,X
A2E5 20 31 bra 0xA318
(0060) unsigned char fp;
(0061) m=0;
(0062) while (m<n)
(0063) {
A2E7 89 pshX
A2E8 8B pshH
A2E9 CD A27F jsr _SCIRe1
A2EC A7 02 aiS #2
A2EE 95 tSX
A2EF B7 41 stA *__r1
A2F1 E6 02 ldA 2,X
A2F3 EB 07 add 7,X
A2F5 B7 43 stA *__r3
A2F7 E6 01 ldA 1,X
A2F9 E9 06 adc 6,X
A2FB B7 42 stA *__r2
A2FD B6 41 ldA *__r1
A2FF 55 42 ldHX *__r2
A301 F7 stA 0,X
A302 95 tSX
(0064) ch[m]=SCIRe1(&fp);
(0065) if (fp==1) return 1;
A303 F6 ldA 0,X
A304 A1 01 cmp #1
A306 26 04 bne 0xA30C
A308 A6 01 ldA #1
A30A 20 22 bra 0xA32E
(0066) m++;
A30C E6 02 ldA 2,X
A30E AB 01 add #1
A310 E7 02 stA 2,X
A312 E6 01 ldA 1,X
A314 A9 00 adc #0
A316 E7 01 stA 1,X
(0067) }
A318 3F 40 clr *__r0
A31A E6 05 ldA 5,X
A31C B7 41 stA *__r1
A31E E6 02 ldA 2,X
A320 B7 43 stA *__r3
A322 E6 01 ldA 1,X
A324 B7 42 stA *__r2
A326 55 42 ldHX *__r2
A328 75 40 cpHX *__r0
A32A 95 tSX
A32B 91 BA blt 0xA2E7
(0068) return 0;
FILE: <library>
A32D 4F clrA
A32E A7 03 aiS #3
A330 81 rts
_memcpy:
A331 95 tSX
A332 AF 02 aiX #2
A334 7E 40 mov 0,X+,*__r0
A336 7E 41 mov 0,X+,*__r1
A338 7E 42 mov 0,X+,*__r2
A33A 7E 43 mov 0,X+,*__r3
A33C 7E 44 mov 0,X+,*__r4
A33E 7E 45 mov 0,X+,*__r5
A340 95 tSX
A341 55 44 ldHX *__r4
A343 65 0000 cpHX #0x0000
A346 27 18 beq 0xA360
A348 55 42 ldHX *__r2
A34A E6 00 ldA 0,X
A34C AF 01 aiX #1
A34E 35 42 stHX *__r2
A350 55 40 ldHX *__r0
A352 E7 00 stA 0,X
A354 AF 01 aiX #1
A356 35 40 stHX *__r0
A358 55 44 ldHX *__r4
A35A AF FF aiX #-1
A35C 35 44 stHX *__r4
A35E 20 E3 bra 0xA343
A360 95 tSX
A361 E6 02 ldA 2,X
A363 B7 40 stA *__r0
A365 E6 03 ldA 3,X
A367 B7 41 stA *__r1
A369 81 rts
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -