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

📄 main.s

📁 关于proteus的仿真实例
💻 S
📖 第 1 页 / 共 4 页
字号:
	clr R16
	rjmp L32
L29:
	.dbline 118
	.dbline 119
	ldi R24,<_RxBuf
	ldi R25,>_RxBuf
	mov R30,R16
	clr R31
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
	.dbline 120
L30:
	.dbline 117
	inc R16
L32:
	.dbline 117
	cpi R16,128
	brlo L29
	.dbline -2
L28:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e TxEnable _TxEnable fV
	.even
_TxEnable::
	.dbline -1
	.dbline 126
; 	{
; 	    RxBuf[i] = 0;
; 	}
; }
; /*-----------------------------------------------------------------------*/
; ///////////////////////////  串口发送使能  ////////////////////////////////
; /*-----------------------------------------------------------------------*/
; void TxEnable(void)
; {
	.dbline 128
;     //RxIndex = 0;
;     UDR = TxBuf[0];                            // 发送缓冲头送入串口发送寄存器,激活开始发送
	lds R2,_TxBuf
	out 0xc,R2
	.dbline 129
; 	UCSRB |= ((1<<TXCIE));//|(1<<TXEN));
	sbi 0xa,6
	.dbline -2
L33:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Put_AT_command _Put_AT_command fV
;          count -> R20
;          atlen -> R22
;            atc -> R10,R11
	.even
_Put_AT_command::
	rcall push_gset3
	mov R22,R18
	movw R10,R16
	.dbline -1
	.dbline 135
; }
; /*-----------------------------------------------------------------------*/
; /////////////////////////////  发送AT命令 /////////////////////////////////
; /*-----------------------------------------------------------------------*/
; void Put_AT_command(const unsigned char *atc, unsigned char atlen)
; {
	.dbline 138
;     unsigned char count;
; 	
; 	for(count = 0;count < atlen;count++)      // AT命令窜移入发送缓冲
	clr R20
	rjmp L38
L35:
	.dbline 139
	.dbline 140
	mov R30,R20
	clr R31
	add R30,R10
	adc R31,R11
	lpm R30,Z
	ldi R24,<_TxBuf
	ldi R25,>_TxBuf
	mov R26,R20
	clr R27
	add R26,R24
	adc R27,R25
	st x,R30
	.dbline 141
L36:
	.dbline 138
	inc R20
L38:
	.dbline 138
	cp R20,R22
	brlo L35
	.dbline 143
; 	{
; 	    TxBuf[count] = atc[count];
; 	}
; 	
; 	TxBuf[atlen] = 0x0D;                      // 发送缓冲窜结尾加“回车”
	ldi R24,<_TxBuf
	ldi R25,>_TxBuf
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	ldi R24,13
	std z+0,R24
	.dbline 144
; 	TxBuf[atlen + 1] = 0x00;                  // 发送缓冲窜结束符号
	ldi R24,<_TxBuf+1
	ldi R25,>_TxBuf+1
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
	.dbline 146
; 
; 	OkFlag = 0;
	sts _OkFlag,R2
	.dbline 147
;     TxStatus = 0;
	sts _TxStatus,R2
	.dbline 148
; 	TxIndex = 1;                              // 发送指针偏移1
	ldi R24,1
	sts _TxIndex,R24
	.dbline 149
; 	TxEnable();                               // 激活发送
	rcall _TxEnable
L40:
	.dbline 150
L41:
	.dbline 150
;     while(!TxStatus);                         // 等代发送结束,发送缓冲指针为零则可以发送
	lds R2,_TxStatus
	tst R2
	breq L40
	.dbline 151
; 	DelayMs(20);
	ldi R16,20
	ldi R17,0
	rcall _DelayMs
L43:
	.dbline 152
L44:
	.dbline 152
; 	while(!OkFlag);                           // 收到模块返回OK,命令结束
	lds R2,_OkFlag
	tst R2
	breq L43
	.dbline 153
; 	OkFlag = 0;
	clr R2
	sts _OkFlag,R2
	.dbline -2
L34:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r count 20 c
	.dbsym r atlen 22 c
	.dbsym r atc 10 pkc
	.dbend
	.dbfunc e Put_AT_String _Put_AT_String fV
;          count -> R20
;          atlen -> R22
;            atc -> R10,R11
	.even
_Put_AT_String::
	rcall push_gset3
	mov R22,R18
	movw R10,R16
	.dbline -1
	.dbline 161
; 
; }
; 
; /*-----------------------------------------------------------------------*/
; /////////////////////////  从内存发送AT命令串  ////////////////////////////
; /*-----------------------------------------------------------------------*/
; void Put_AT_String(unsigned char *atc, unsigned char atlen)
; {
	.dbline 164
;     unsigned char count;
; 		
; 	for(count = 0;count < atlen;count++)
	clr R20
	rjmp L50
L47:
	.dbline 165
	.dbline 166
	mov R30,R20
	clr R31
	add R30,R10
	adc R31,R11
	ldd R2,z+0
	ldi R24,<_TxBuf
	ldi R25,>_TxBuf
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 167
L48:
	.dbline 164
	inc R20
L50:
	.dbline 164
	cp R20,R22
	brlo L47
	.dbline 169
; 	{
; 	    TxBuf[count] = *(atc+count);
; 	}
; 	
; 	TxBuf[atlen] = 0x0D;                      // 发送缓冲窜结尾加“回车”
	ldi R24,<_TxBuf
	ldi R25,>_TxBuf
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	ldi R24,13
	std z+0,R24
	.dbline 170
; 	TxBuf[atlen + 1] = 0x00;                  // 发送缓冲窜结束符号
	ldi R24,<_TxBuf+1
	ldi R25,>_TxBuf+1
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
	.dbline 172
; 
;     OkFlag = 0;
	sts _OkFlag,R2
	.dbline 173
;     TxStatus = 0;
	sts _TxStatus,R2
	.dbline 174
; 	TxIndex = 1;                              // 发送指针偏移1
	ldi R24,1
	sts _TxIndex,R24
	.dbline 175
; 	TxEnable();                               // 激活发送
	rcall _TxEnable
L52:
	.dbline 176
L53:
	.dbline 176
;     while(!TxStatus);                         // 等代发送结束,发送缓冲指针为零则可以发送
	lds R2,_TxStatus
	tst R2
	breq L52
	.dbline 177
; 	DelayMs(20);
	ldi R16,20
	ldi R17,0
	rcall _DelayMs
L55:
	.dbline 178
L56:
	.dbline 178
; 	while(!OkFlag);                           // 收到模块返回OK,命令结束
	lds R2,_OkFlag
	tst R2
	breq L55
	.dbline 179
; 	OkFlag = 0;
	clr R2
	sts _OkFlag,R2
	.dbline -2
L46:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r count 20 c
	.dbsym r atlen 22 c
	.dbsym r atc 10 pc
	.dbend
	.dbfunc e PutString _PutString fV
;          count -> R20
;        retflag -> R22
;         length -> R10
;            str -> R12,R13
	.even
_PutString::
	rcall push_gset4
	mov R10,R18
	movw R12,R16
	ldd R22,y+8
	.dbline -1
	.dbline 185
; }
; /*-----------------------------------------------------------------------*/
; /////////////////////////  向串口发送一串数据  ////////////////////////////
; /*-----------------------------------------------------------------------*/
; void PutString(unsigned char *str, unsigned char length,unsigned char retflag)
; {
	.dbline 188
;     unsigned char count;
; 
; 	for(count = 0;count < length;count++)
	clr R20
	rjmp L62
L59:
	.dbline 189
	.dbline 190
	mov R30,R20
	clr R31
	add R30,R12
	adc R31,R13
	ldd R2,z+0
	ldi R24,<_TxBuf
	ldi R25,>_TxBuf
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 191
L60:
	.dbline 188
	inc R20
L62:
	.dbline 188
	cp R20,R10
	brlo L59
	.dbline 193
; 	{
; 	    TxBuf[count] = *(str+count);
; 	}
; 	
; 	TxBuf[length] = 0x0D;                     // 发送缓冲窜结尾加“回车”
	ldi R24,<_TxBuf
	ldi R25,>_TxBuf
	mov R30,R10
	clr R31
	add R30,R24
	adc R31,R25
	ldi R24,13
	std z+0,R24
	.dbline 194
; 	TxBuf[length+ 1] = 0x00;                  // 发送缓冲窜结束符号
	ldi R24,<_TxBuf+1
	ldi R25,>_TxBuf+1
	mov R30,R10
	clr R31
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
	.dbline 196
; 	
;     TxStatus = 0;
	sts _TxStatus,R2
	.dbline 197
; 	TxIndex = 1;                              // 发送指针偏移1
	ldi R24,1
	sts _TxIndex,R24
	.dbline 198
; 	OkFlag = 0;
	sts _OkFlag,R2
	.dbline 199
; 	TxEnable();
	rcall _TxEnable
L64:
	.dbline 201
L65:
	.dbline 201
; 	                                          // 激活发送
;     while(!TxStatus);                         // 等代发送结束,发送缓冲指针为零则可以发送
	lds R2,_TxStatus
	tst R2
	breq L64
	.dbline 202
; 	DelayMs(20);
	ldi R16,20
	ldi R17,0
	rcall _DelayMs
	.dbline 203
;     if(retflag)
	tst R22
	breq L67
	.dbline 204
;     {	
L69:
	.dbline 205
L70:
	.dbline 205
;         while(!OkFlag);                       // 收到模块返回OK,命令结束
	lds R2,_OkFlag
	tst R2
	breq L69
	.dbline 206
; 		OkFlag = 0;
	clr R2
	sts _OkFlag,R2
	.dbline 207
; 	}
	rjmp L68
L67:
	.dbline 209
	.dbline 210
	ldi R16,200
	ldi R17,0
	rcall _DelayMs
	.dbline 211
	clr R2
	sts _OkFlag,R2
	.dbline 212
L68:
	.dbline -2
L58:
	rcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r count 20 c
	.dbsym r retflag 22 c
	.dbsym r length 10 c
	.dbsym r str 12 pc
	.dbend
	.dbfunc e DialNum _DialNum fV
;              i -> R10
;         length -> R20
;          count -> R22
	.even
_DialNum::
	rcall push_gset3
	.dbline -1
	.dbline 220
; 	else
; 	{
;         DelayMs(200);
; 		OkFlag = 0;
; 	}
; }
; ////////////////////////////////////////////////////////////////////////////////
; 
; /*-----------------------------------------------------------------------*/
; //////////////////////////         拨号         ///////////////////////////
; /*-----------------------------------------------------------------------*/
; void DialNum(void)
; {
	.dbline 221
;     unsigned char i,count=0,length=0;
	clr R22
	.dbline 221
	clr R20
	rjmp L74
L73:
	.dbline 224
	.dbline 225
	inc R20
	.dbline 226
L74:
	.dbline 223
; 
; 	while ((PhoneNum[count++] != 0))                  // 计算电话号码长度
	mov R2,R22
	clr R3
	subi R22,255    ; addi 1
	ldi R24,<_PhoneNum
	ldi R25,>_PhoneNum
	mov R30,R2
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	tst R2
	brne L73
	.dbline 228
; 	{
; 	    length++;
; 	}
; 	
; 	TxBuf[0] = 'A';
	ldi R24,65
	sts _TxBuf,R24
	.dbline 229
; 	TxBuf[1] = 'T';
	ldi R24,84
	sts _TxBuf+1,R24
	.dbline 230
; 	TxBuf[2] = 'D';
	ldi R24,68
	sts _TxBuf+2,R24
	.dbline 232
; 	
; 	i = 3;
	ldi R24,3
	mov R10,R24
	.dbline 233
;     for(count=0;count<length;count++)
	clr R22
	rjmp L81
L78:
	.dbline 234
	.dbline 235
	mov R2,R10
	clr R3
	mov R24,R2
	subi R24,255    ; addi 1
	mov R10,R24
	ldi R24,<_PhoneNum
	ldi R25,>_PhoneNum
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	ldi R24,<_TxBuf
	ldi R25,>_TxBuf
	mov R30,R2
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R4
	.dbline 236
L79:
	.dbline 233
	inc R22
L81:
	.dbline 233
	cp R22,R20
	brlo L78
	.dbline 238
; 	{
; 	    TxBuf[i++] = PhoneNum[count];
; 	}
;     
; 	TxBuf[length+3] = ';';
	ldi R24,<_TxBuf+3
	ldi R25,>_TxBuf+3
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldi R24,59
	std z+0,R24
	.dbline 239
; 	TxBuf[length+4] = 0x0D;
	ldi R24,<_TxBuf+4
	ldi R25,>_TxBuf+4
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldi R24,13
	std z+0,R24
	.dbline 241
; 	
;     OkFlag = 0;
	clr R2
	sts _OkFlag,R2
	.dbline 242
;     TxStatus = 0;
	sts _TxStatus,R2
	.dbline 243
; 	TxIndex = 1;                              // 发送指针偏移1
	ldi R24,1
	sts _TxIndex,R24
	.dbline 244
; 	TxEnable();                               // 激活发送
	rcall _TxEnable
L84:
	.dbline 245
L85:
	.dbline 245
;     while(!TxStatus);                         // 等代发送结束,发送缓冲指针为零则可以发送
	lds R2,_TxStatus
	tst R2
	breq L84
	.dbline 246
; 	DelayMs(20);
	ldi R16,20
	ldi R17,0
	rcall _DelayMs
	.dbline 248
; 	//while(!OkFlag);                           // 收到模块返回OK,命令结束	
;     OkFlag = 0;
	clr R2
	sts _OkFlag,R2
	.dbline -2
L72:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 10 c
	.dbsym r length 20 c
	.dbsym r count 22 c
	.dbend
	.dbfunc e StringCompare _StringCompare fc
;         strlen -> R20
;           str2 -> R18,R19
;           str1 -> R16,R17
	.even
_StringCompare::
	rcall push_gset1
	ldd R20,y+2
	.dbline -1
	.dbline 255
; } 
; 
; /*-----------------------------------------------------------------------*/
; /////////////////////////////  比较两个串 /////////////////////////////////
; /*-----------------------------------------------------------------------*/
; unsigned char StringCompare(volatile unsigned char *str1,const unsigned char *str2,unsigned char strlen)
; {
	rjmp L89
L88:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -