⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modem.s

📁 微程序控制器采用ATMEL AVR MEGA162
💻 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 + -