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

📄 iic.s

📁 实现机于通讯芯片的电话接听 拨出 以及来电振领提示
💻 S
📖 第 1 页 / 共 2 页
字号:
	.dbline 95
; 						}
L21:
	.dbline 96
; 						if(cmd==0x05 && cmd_num==2)
	lds R24,_cmd
	cpi R24,5
	brne L23
	lds R24,_cmd_num
	cpi R24,2
	brne L23
	.dbline 97
; 						{
	.dbline 98
; 						  vision_flag=1;
	ldi R24,1
	sts _vision_flag,R24
	.dbline 99
; 						}
L23:
	.dbline 100
; 				        Twi_ACK();
	ldi R24,197
	out 0x36,R24
	.dbline 101
; 						if(cmd==0xff) //接受到主机发送数据结束位 置标记
	lds R24,_cmd
	cpi R24,255
	breq X18
	rjmp L3
X18:
	.dbline 102
; 						{
	.dbline 103
; 						   cmd_flag=1;
	ldi R24,1
	sts _cmd_flag,R24
	.dbline 104
; 						}
	.dbline 105
;                         break;
	rjmp L3
L27:
	.dbline 108
;                 }        
;                 case SR_ALL_DATA_ACK://SR_ALL_DATA_ACK=0x90;以前以广播方式被寻址;数据已经被接收,ACK 已返回
;                 {    
	.dbline 109
;                         cmd=TWDR;
	in R2,0x3
	sts _cmd,R2
	.dbline 110
; 						buf[cmd_num]=cmd;
	ldi R24,<_buf
	ldi R25,>_buf
	lds R30,_cmd_num
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 111
; 						cmd_num++;
	lds R24,_cmd_num
	subi R24,255    ; addi 1
	sts _cmd_num,R24
	.dbline 112
; 						if(cmd==0x00 && cmd_num==2) //接收到主机请求数据结束位 置标记
	lds R2,_cmd
	tst R2
	brne L28
	cpi R24,2
	brne L28
	.dbline 113
; 						{  
	.dbline 114
; 						  req_flag=1;
	ldi R24,1
	sts _req_flag,R24
	.dbline 115
; 						  start_flag=0;
	clr R2
	sts _start_flag,R2
	.dbline 116
; 						  vision_flag=0;
	sts _vision_flag,R2
	.dbline 117
; 						  cmd_flag=0;
	sts _cmd_flag,R2
	.dbline 118
; 						  PWRON;
	in R24,0x18
	andi R24,223
	out 0x18,R24
	.dbline 119
; 						  cmd_num=0;
	sts _cmd_num,R2
	.dbline 120
; 						}
L28:
	.dbline 121
; 						if(cmd==0x0f) //接收到握手结束位 置标记
	lds R24,_cmd
	cpi R24,15
	brne L30
	.dbline 122
; 						{
	.dbline 123
; 						  start_flag=1;
	ldi R24,1
	sts _start_flag,R24
	.dbline 124
; 						  PWRON;
	in R24,0x18
	andi R24,223
	out 0x18,R24
	.dbline 125
; 						}
L30:
	.dbline 126
; 						if(cmd==0x05 && cmd_num==2)
	lds R24,_cmd
	cpi R24,5
	brne L32
	lds R24,_cmd_num
	cpi R24,2
	brne L32
	.dbline 127
; 						{
	.dbline 128
; 						  vision_flag=1;
	ldi R24,1
	sts _vision_flag,R24
	.dbline 129
; 						}
L32:
	.dbline 130
; 				        Twi_ACK();
	ldi R24,197
	out 0x36,R24
	.dbline 131
; 						if(cmd==0xff) //接受到主机发送数据结束位 置标记
	lds R24,_cmd
	cpi R24,255
	breq X19
	rjmp L3
X19:
	.dbline 132
; 						{
	.dbline 133
; 						   cmd_flag=1;
	ldi R24,1
	sts _cmd_flag,R24
	.dbline 134
; 						}
	.dbline 135
;                         break;       
	rjmp L3
L36:
	.dbline 138
;                 }         
;                 case SR_ALL_DATA_NOACK://SR_ALL_DATA_NOACK=0x98;以前以广播方式被寻址;数据已经被接收,NOT ACK 已返回
;                 {    
	.dbline 139
;                         cmd=TWDR;
	in R2,0x3
	sts _cmd,R2
	.dbline 140
; 						buf[cmd_num]=cmd;
	ldi R24,<_buf
	ldi R25,>_buf
	lds R30,_cmd_num
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 141
; 						cmd_num++;
	lds R24,_cmd_num
	subi R24,255    ; addi 1
	sts _cmd_num,R24
	.dbline 142
; 						if(cmd==0x00 && cmd_num==2) //接收到主机请求数据结束位 置标记
	lds R2,_cmd
	tst R2
	brne L37
	cpi R24,2
	brne L37
	.dbline 143
; 						{  
	.dbline 144
; 						  req_flag=1;
	ldi R24,1
	sts _req_flag,R24
	.dbline 145
; 						  start_flag=0;
	clr R2
	sts _start_flag,R2
	.dbline 146
; 						  vision_flag=0;
	sts _vision_flag,R2
	.dbline 147
; 						  cmd_flag=0;
	sts _cmd_flag,R2
	.dbline 148
; 						  PWRON;
	in R24,0x18
	andi R24,223
	out 0x18,R24
	.dbline 149
; 						  cmd_num=0;
	sts _cmd_num,R2
	.dbline 150
; 						}
L37:
	.dbline 151
; 						if(cmd==0x0f) //接收到握手结束位 置标记
	lds R24,_cmd
	cpi R24,15
	brne L39
	.dbline 152
; 						{
	.dbline 153
; 						  start_flag=1;
	ldi R24,1
	sts _start_flag,R24
	.dbline 154
; 						  PWRON;
	in R24,0x18
	andi R24,223
	out 0x18,R24
	.dbline 155
; 						}
L39:
	.dbline 156
; 						if(cmd==0x05 && cmd_num==2)
	lds R24,_cmd
	cpi R24,5
	brne L41
	lds R24,_cmd_num
	cpi R24,2
	brne L41
	.dbline 157
; 						{
	.dbline 158
; 						  vision_flag=1;
	ldi R24,1
	sts _vision_flag,R24
	.dbline 159
; 						}
L41:
	.dbline 160
; 				        Twi_ACK();
	ldi R24,197
	out 0x36,R24
	.dbline 161
; 						if(cmd==0xff) //接受到主机发送数据结束位 置标记
	lds R24,_cmd
	cpi R24,255
	breq X20
	rjmp L3
X20:
	.dbline 162
; 						{
	.dbline 163
; 						   cmd_flag=1;
	ldi R24,1
	sts _cmd_flag,R24
	.dbline 164
; 						}
	.dbline 165
;                         break;      
	rjmp L3
L45:
	.dbline 169
;                 }
; 				//*****************************从机发送************************/      
;         		case ST_SLA_ACK://SR_STOP_RESTART=0xa8, 自己的SLA+R 已经被接收,ACK 已返回
;                 { 
	.dbline 170
; 				      Twi_WB(*(data+j)); //从机发送数据 
	.dbline 170
	lds R2,_data
	lds R3,_data+1
	lds R30,_j
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	out 0x3,R2
	.dbline 170
	ldi R24,197
	out 0x36,R24
	.dbline 170
	.dbline 170
	.dbline 171
; 					  j++;  //准备下一个数据
	lds R24,_j
	subi R24,255    ; addi 1
	sts _j,R24
	.dbline 172
; 					  break; 
	rjmp L3
L46:
	.dbline 175
;         		}
; 				case MT_ST_SLA_ACK://SR_STOP_RESTART=0xb0, SLA+R/W 作为主机的仲裁失败;自己的SLA+R 已经被接收,ACK 已返回
;                 { 
	.dbline 176
; 				      Twi_WB(*(data+j)); //从机发送数据 
	.dbline 176
	lds R2,_data
	lds R3,_data+1
	lds R30,_j
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	out 0x3,R2
	.dbline 176
	ldi R24,197
	out 0x36,R24
	.dbline 176
	.dbline 176
	.dbline 177
; 					  j++;  //准备下一个数据
	lds R24,_j
	subi R24,255    ; addi 1
	sts _j,R24
	.dbline 178
; 					  break;
	rjmp L3
L47:
	.dbline 181
;         		}
; 				case ST_DATA_ACK://SR_STOP_RESTART=0xb8, TWDR 里数据已经发送,接收到ACK
;                 { 
	.dbline 182
; 				      Twi_WB(*(data+j)); //从机发送数据 
	.dbline 182
	lds R2,_data
	lds R3,_data+1
	lds R30,_j
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	out 0x3,R2
	.dbline 182
	ldi R24,197
	out 0x36,R24
	.dbline 182
	.dbline 182
	.dbline 183
; 					  j++;  //准备下一个数据
	lds R24,_j
	subi R24,255    ; addi 1
	sts _j,R24
	.dbline 184
; 					  break;
	rjmp L3
L48:
	.dbline 187
;         		}
; 				case ST_DATA_NOACK://SR_STOP_RESTART=0xc0, TWDR 里数据已经发送,接收到NOT ACK
;                 { 
	.dbline 188
; 				      j=0; //发送完数据请零结束
	clr R2
	sts _j,R2
	.dbline 189
; 					  Twi_ACK();
	ldi R24,197
	out 0x36,R24
	.dbline 190
; 					  break;
	rjmp L3
L49:
	.dbline 193
;         		}
; 				case ST_LAST_DATA_ACK://SR_STOP_RESTART=0xc8, TWDR 的一字节数据已经发送,(TWAE = “0”);接收到ACK
;                 { 
	.dbline 194
; 				        j=0;//发送完数据请零结束
	clr R2
	sts _j,R2
	.dbline 195
; 						Twi_ACK();
	ldi R24,197
	out 0x36,R24
	.dbline 196
; 						break; 
	rjmp L3
L50:
	.dbline 199
;         		}  
; 				case SR_STOP_RESTART://SR_STOP_RESTART=0xa0, 在以从机工作时接收到STOP或重复START
;                 { 
	.dbline 200
; 				        j=0;
	clr R2
	sts _j,R2
	.dbline 201
;             			Twi_ACK();
	ldi R24,197
	out 0x36,R24
	.dbline 202
; 						break; 
	rjmp L3
L2:
	.dbline 205
	.dbline 206
	ldi R24,149
	out 0x36,R24
	.dbline 207
L3:
	.dbline -2
L1:
	ld R2,y+
	out 0x3f,R2
	ld R31,y+
	ld R30,y+
	ld R25,y+
	ld R24,y+
	ld R17,y+
	ld R16,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend

⌨️ 快捷键说明

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