📄 modem.s
字号:
.module modem.c
.area data(ram, con, rel)
_In::
.blkw 1
.area idata
.word _InBuffer
.area data(ram, con, rel)
.dbfile F:\mydoc\avrproject\icc\big162\gpseep\modem.c
.dbsym e In _In pc
_Out::
.blkw 1
.area idata
.word _OutBuffer
.area data(ram, con, rel)
.dbfile F:\mydoc\avrproject\icc\big162\gpseep\modem.c
.dbsym e Out _Out pc
_mDataSlot::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile F:\mydoc\avrproject\icc\big162\gpseep\modem.c
.dbsym e mDataSlot _mDataSlot c
_mEmptySlot::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile F:\mydoc\avrproject\icc\big162\gpseep\modem.c
.dbsym e mEmptySlot _mEmptySlot c
_mTest::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile F:\mydoc\avrproject\icc\big162\gpseep\modem.c
.dbsym e mTest _mTest c
_oTest::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile F:\mydoc\avrproject\icc\big162\gpseep\modem.c
.dbsym e oTest _oTest c
_firstTest::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile F:\mydoc\avrproject\icc\big162\gpseep\modem.c
.dbsym e firstTest _firstTest c
_isAdd::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile F:\mydoc\avrproject\icc\big162\gpseep\modem.c
.dbsym e isAdd _isAdd c
_ModemBuffer::
.blkw 1
.area idata
.word _InBuffer
.area data(ram, con, rel)
.dbfile F:\mydoc\avrproject\icc\big162\gpseep\modem.c
.dbsym e ModemBuffer _ModemBuffer pc
.area text(rom, con, rel)
.dbfile F:\mydoc\avrproject\icc\big162\gpseep\modem.c
.dbfunc e ProcModemReceive _ProcModemReceive fV
; c -> R16
.even
_ProcModemReceive::
.dbline -1
.dbline 31
; #include "Modem.h"
;
; #include "sci.h"
; #include <string.h>
; #define MODEM_BUFFER_SIZE 250 // Size of Modem Buffer
; BYTE InBuffer[256];
;
; BYTE OutBuffer[10];
;
; BYTE *In = &InBuffer[0];
; BYTE *Out = &OutBuffer[0];
;
; // Byte pointers of the ring buffer (FIFO)
; volatile BYTE mDataSlot = 0; // Points to the next available character
; volatile BYTE mEmptySlot = 0; // Points to next available slot of the FIFO
; volatile BYTE mTest = 0;
; volatile BYTE oTest = 0;
; volatile BYTE firstTest = 0;
; volatile BYTE isAdd = 0;
; void addoid(void);
; void strtob(void);
; BYTE *ModemBuffer = &InBuffer[0];
; extern BYTE *pordid;
; extern BYTE ordidStr[];
; extern BYTE looptimeStr[];
; extern BYTE *plooptime;
;
; extern DWORD ii,kk;
;
; void ProcModemReceive (BYTE c)
; {
.dbline 32
; ModemBuffer [mEmptySlot++] = c;
lds R2,_mEmptySlot
clr R3
mov R24,R2
subi R24,255 ; addi 1
sts _mEmptySlot,R24
lds R4,_ModemBuffer
lds R5,_ModemBuffer+1
mov R30,R2
clr R31
add R30,R4
adc R31,R5
std z+0,R16
.dbline 33
; if (mEmptySlot > MODEM_BUFFER_SIZE) {
ldi R24,250
lds R2,_mEmptySlot
cp R24,R2
brsh L2
.dbline 33
.dbline 34
; mEmptySlot = 0;
clr R2
sts _mEmptySlot,R2
.dbline 35
; }
L2:
.dbline 36
; if(c == '['){
cpi R16,91
brne L4
.dbline 36
.dbline 37
; firstTest=1;
ldi R24,1
sts _firstTest,R24
.dbline 38
; return;
xjmp L1
L4:
.dbline 39
; }else if(c == ']'){
cpi R16,93
brne L6
.dbline 39
.dbline 40
; mTest=0;
clr R2
sts _mTest,R2
.dbline 41
; return;
xjmp L1
L6:
.dbline 42
; }else if(firstTest==1){
lds R24,_firstTest
cpi R24,1
brne L8
.dbline 42
.dbline 43
; if(c == '$'){
cpi R16,36
brne L10
.dbline 43
.dbline 44
; mTest=1;
ldi R24,1
sts _mTest,R24
.dbline 45
; firstTest=0;
clr R2
sts _firstTest,R2
.dbline 46
; return;
xjmp L1
L10:
.dbline 47
; }else{
.dbline 48
; firstTest=0;
clr R2
sts _firstTest,R2
.dbline 49
; }
.dbline 50
; }
L8:
.dbline 52
lds R2,_mTest
tst R2
breq L12
.dbline 52
.dbline 54
L12:
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r c 16 c
.dbend
.dbfunc e ModemInit _ModemInit fV
.even
_ModemInit::
.dbline -1
.dbline 58
;
; if(mTest){
;
; }
; }
;
; void ModemInit (void)
; {
.dbline 59
; mDataSlot = 0; // Initialize FIFO Modem pointers
clr R2
sts _mDataSlot,R2
.dbline 60
; mEmptySlot = 0;
sts _mEmptySlot,R2
.dbline -2
L14:
.dbline 0 ; func end
ret
.dbend
.dbfunc e ModemBuffNotEmpty _ModemBuffNotEmpty fc
.even
_ModemBuffNotEmpty::
.dbline -1
.dbline 65
;
; }
;
; BYTE ModemBuffNotEmpty (void)
; {
.dbline 66
; return !(mDataSlot == mEmptySlot);
lds R2,_mEmptySlot
lds R3,_mDataSlot
cp R3,R2
breq L16
ldi R16,1
ldi R17,0
xjmp L17
L16:
clr R16
clr R17
L17:
.dbline -2
L15:
.dbline 0 ; func end
ret
.dbend
.dbfunc e ModemBuffFlush _ModemBuffFlush fV
.even
_ModemBuffFlush::
.dbline -1
.dbline 71
; }
;
;
; void ModemBuffFlush (void)
; {
.dbline 72
; mDataSlot = mEmptySlot;
lds R2,_mEmptySlot
sts _mDataSlot,R2
.dbline -2
L18:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Waitfor _Waitfor fc
; c -> R20
; Offset -> R22
; Time -> R10
; String -> R12,R13
.even
_Waitfor::
xcall push_gset4
mov R10,R18
movw R12,R16
.dbline -1
.dbline 78
; }
;
;
;
; BYTE Waitfor (char *String, BYTE Time)
; {
.dbline 79
; BYTE c = 0;
clr R20
.dbline 80
; BYTE Offset = 0;
clr R22
xjmp L21
L20:
.dbline 83
;
; while (Time-- > 0)
; {
.dbline 84
; DelayM (100); // Wait =~ 150 mSec
ldi R16,100
xcall _DelayM
xjmp L24
L23:
.dbline 86
; while (ModemBuffNotEmpty())
; { // Wait for characters
.dbline 87
; c = ModemGetch (); // Extract a character from FIFO
xcall _ModemGetch
mov R20,R16
.dbline 88
; if (c == String [Offset])
mov R30,R22
clr R31
add R30,R12
adc R31,R13
ldd R2,z+0
cp R16,R2
brne L26
.dbline 89
; { // Is C a part of the string?
.dbline 90
; Offset++; // Compare with next character
inc R22
.dbline 91
; if (String [Offset] == 0)
mov R30,R22
clr R31
add R30,R12
adc R31,R13
ldd R2,z+0
tst R2
brne L27
.dbline 92
; { // is this the end of string?
.dbline 93
; return True; // match = True
ldi R16,1
xjmp L19
X0:
.dbline 95
; }
; }
L26:
.dbline 97
; else // c does not belong to String
; Offset = 0; // Reset String pointer
clr R22
L27:
.dbline 98
L24:
.dbline 85
xcall _ModemBuffNotEmpty
tst R16
brne L23
.dbline 100
L21:
.dbline 82
mov R2,R10
clr R3
mov R24,R2
subi R24,1
mov R10,R24
clr R4
cp R4,R2
brlo L20
.dbline 101
; }
;
; }
; return False;
clr R16
.dbline -2
L19:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r c 20 c
.dbsym r Offset 22 c
.dbsym r Time 10 c
.dbsym r String 12 pc
.dbend
.dbfunc e ModemGetch _ModemGetch fc
; c -> R16
.even
_ModemGetch::
.dbline -1
.dbline 106
; }
;
;
; BYTE ModemGetch (void)
; {
.dbline 107
; BYTE c = 0;
clr R16
.dbline 108
; if (mDataSlot != mEmptySlot)
lds R2,_mEmptySlot
lds R3,_mDataSlot
cp R3,R2
breq L31
.dbline 109
; {
.dbline 110
; c = ModemBuffer [mDataSlot];
lds R2,_ModemBuffer
lds R3,_ModemBuffer+1
lds R30,_mDataSlot
clr R31
add R30,R2
adc R31,R3
ldd R16,z+0
.dbline 111
; mDataSlot++;
lds R24,_mDataSlot
subi R24,255 ; addi 1
sts _mDataSlot,R24
.dbline 112
; if (mDataSlot > MODEM_BUFFER_SIZE)
ldi R24,250
lds R2,_mDataSlot
cp R24,R2
brsh L33
.dbline 113
; mDataSlot = 0;
clr R2
sts _mDataSlot,R2
L33:
.dbline 114
; return(c);
xjmp L30
L31:
.dbline 116
; }
; else {
.dbline 117
; return (BYTE)0x00;
clr R16
.dbline -2
L30:
.dbline 0 ; func end
ret
.dbsym r c 16 c
.dbend
.area bss(ram, con, rel)
.dbfile F:\mydoc\avrproject\icc\big162\gpseep\modem.c
_OutBuffer::
.blkb 10
.dbsym e OutBuffer _OutBuffer A[10:10]c
_InBuffer::
.blkb 256
.dbsym e InBuffer _InBuffer A[256:256]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -