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

📄 jdbh.lst

📁 AVR单片机系统开发经典实例部分源程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0125) 	//采样轮转赋值
(0126) 		//合闸线圈采样
(0127) 		if(global_ad_counter%2==0)
    0111 90200126  LDS	R2,global_ad_counter
    0113 90300127  LDS	R3,global_ad_counter+1
    0115 FC20      SBRC	R2,0
    0116 C014      RJMP	0x012B
(0128) 		{
(0129) 		//	global_detect_close[0]=int16_temp1;
(0130) 			global_detect_close[0]=global_detect_close[1];
    0117 90200118  LDS	R2,global_detect_close+2
    0119 90300119  LDS	R3,global_detect_close+3
    011B 92300117  STS	global_detect_close+1,R3
    011D 92200116  STS	global_detect_close,R2
(0131) 			global_detect_close[1]=global_detect_close[2];
    011F 9020011A  LDS	R2,0x11A
    0121 9030011B  LDS	R3,0x11B
    0123 92300119  STS	global_detect_close+3,R3
    0125 92200118  STS	global_detect_close+2,R2
(0132) 			global_detect_close[2]=int16_temp1;
    0127 9350011B  STS	0x11B,R21
    0129 9340011A  STS	0x11A,R20
(0133) 	//		global_detect_close[2]=int16_temp1;
(0134) 		}
(0135) 		//分闸线圈采样
(0136) 		if(global_ad_counter%2==1)
    012B 91800126  LDS	R24,global_ad_counter
    012D 91900127  LDS	R25,global_ad_counter+1
    012F 7081      ANDI	R24,1
    0130 7090      ANDI	R25,0
    0131 3081      CPI	R24,1
    0132 E0E0      LDI	R30,0
    0133 079E      CPC	R25,R30
    0134 F4A1      BNE	0x0149
(0137) 		{
(0138) 		//	global_detect_trip[0]=int16_temp1;
(0139) 			global_detect_trip[0]=global_detect_trip[1];
    0135 9020010E  LDS	R2,global_detect_trip+2
    0137 9030010F  LDS	R3,global_detect_trip+3
    0139 9230010D  STS	global_detect_trip+1,R3
    013B 9220010C  STS	global_detect_trip,R2
(0140) 			global_detect_trip[1]=global_detect_trip[2];
    013D 90200110  LDS	R2,0x110
    013F 90300111  LDS	R3,0x111
    0141 9230010F  STS	global_detect_trip+3,R3
    0143 9220010E  STS	global_detect_trip+2,R2
(0141) 			global_detect_trip[2]=int16_temp1;
    0145 93500111  STS	0x111,R21
    0147 93400110  STS	0x110,R20
(0142) 		//	global_detect_trip[2]=int16_temp1;
(0143) 		}
(0144) 	//判断是否有码值变化
(0145) 		//判断合闸数据
(0146) 		if((global_detect_close[0]>2046)&&(global_detect_close[1]>2046)&&(global_detect_close[2]>2046))//&&(global_detect_close[3]>2045)&&(global_detect_close[4]>2045))
    0149 EF8E      LDI	R24,0xFE
    014A E097      LDI	R25,7
    014B 90200116  LDS	R2,global_detect_close
    014D 90300117  LDS	R3,global_detect_close+1
    014F 1582      CP	R24,R2
    0150 0593      CPC	R25,R3
    0151 F4A0      BCC	0x0166
    0152 90200118  LDS	R2,global_detect_close+2
    0154 90300119  LDS	R3,global_detect_close+3
    0156 1582      CP	R24,R2
    0157 0593      CPC	R25,R3
    0158 F468      BCC	0x0166
    0159 9020011A  LDS	R2,0x11A
    015B 9030011B  LDS	R3,0x11B
    015D 1582      CP	R24,R2
    015E 0593      CPC	R25,R3
    015F F430      BCC	0x0166
(0147) 		{
(0148) 		//检测到动作标志赋值
(0149) 			global_operation_detected_flag=1;
    0160 E081      LDI	R24,1
    0161 E090      LDI	R25,0
    0162 93900121  STS	global_operation_detected_flag+1,R25
    0164 93800120  STS	global_operation_detected_flag,R24
(0150) 		}
(0151) 	//	if(global_detect_close[0]>2049)
(0152) 	//	{
(0153) 	//		if((global_detect_close[1]-global_detect_close[0]>1)&&(global_detect_close[2]-global_detect_close[1]>1))//&&(global_detect_close[3]-global_detect_close[0]>1))
(0154) 	//		{
(0155) 			//检测到动作标志赋值
(0156) 	//			global_operation_detected_flag=1;
(0157) 	//		}
(0158) 	//	}
(0159) 		//判断分闸数据
(0160) 		if((global_detect_trip[0]>2046)&&(global_detect_trip[1]>2046)&&(global_detect_trip[2]>2046))//&&(global_detect_trip[3]>2045)&&(global_detect_trip[4]>2045))
    0166 EF8E      LDI	R24,0xFE
    0167 E097      LDI	R25,7
    0168 9020010C  LDS	R2,global_detect_trip
    016A 9030010D  LDS	R3,global_detect_trip+1
    016C 1582      CP	R24,R2
    016D 0593      CPC	R25,R3
    016E F4A0      BCC	0x0183
    016F 9020010E  LDS	R2,global_detect_trip+2
    0171 9030010F  LDS	R3,global_detect_trip+3
    0173 1582      CP	R24,R2
    0174 0593      CPC	R25,R3
    0175 F468      BCC	0x0183
    0176 90200110  LDS	R2,0x110
    0178 90300111  LDS	R3,0x111
    017A 1582      CP	R24,R2
    017B 0593      CPC	R25,R3
    017C F430      BCC	0x0183
(0161) 		{
(0162) 		//检测到动作标志赋值
(0163) 			global_operation_detected_flag=1;
    017D E081      LDI	R24,1
    017E E090      LDI	R25,0
    017F 93900121  STS	global_operation_detected_flag+1,R25
    0181 93800120  STS	global_operation_detected_flag,R24
(0164) 		}
(0165) 	//	if(global_detect_trip[0]>2049)
(0166) 	//	{
(0167) 	//		if((global_detect_trip[1]-global_detect_trip[0]>1)&&(global_detect_trip[2]-global_detect_trip[1]>1))//&&(global_detect_trip[3]-global_detect_trip[0]>1))
(0168) 	//		{
(0169) 			//检测到动作标志赋值
(0170) 	//			global_operation_detected_flag=1;
(0171) 	//		}
(0172) 	//	}
(0173) 	//	if(int16_temp1>2049)
(0174) 	//	{
(0175) 		//检测到动作标志赋值
(0176) 	//		global_operation_detected_flag=1;
(0177) 	//	}
(0178) 		global_ad_counter++;
    0183 91800126  LDS	R24,global_ad_counter
    0185 91900127  LDS	R25,global_ad_counter+1
    0187 9601      ADIW	R24,1
    0188 93900127  STS	global_ad_counter+1,R25
    018A 93800126  STS	global_ad_counter,R24
(0179) 	}
(0180) //完成一次AD转换,将AD转换结束标志赋值
(0181) 	global_ad_finish_flag=0xFF;
    018C EF8F      LDI	R24,0xFF
    018D E090      LDI	R25,0
    018E 93900101  STS	global_ad_finish_flag+1,R25
    0190 93800100  STS	global_ad_finish_flag,R24
    0192 940E01B9  CALL	pop_gset2
    0194 9508      RET
(0182) //开中断
(0183) 	//sei();
(0184) }
(0185) 
(0186) //主程序//////////////////////////////
(0187) int main()
(0188) {
(0189) //变量定义
(0190) 	unsigned int i;
(0191) //初始化和串口波特率设置
(0192) 	//INITIATION();
(0193) //PG3供测试用/////////////
(0194) 	//sbi(DDRG,3);
(0195) 	//cbi(PORTG,3);
(0196) //开中断
(0197) 	//sei();
(0198) //自动测试标志初始化
(0199) 	global_sample_mode_flag=0xFF;
_main:
  i                    --> R16
    0195 EF8F      LDI	R24,0xFF
    0196 E090      LDI	R25,0
    0197 93900123  STS	global_sample_mode_flag+1,R25
    0199 93800122  STS	global_sample_mode_flag,R24
(0200) //采集控制标志初始化
(0201) 	global_start_sample_flag=0xFF;
    019B 93900125  STS	global_start_sample_flag+1,R25
    019D 93800124  STS	global_start_sample_flag,R24
(0202) //串口接收控制变量初始化
(0203) 	global_flag_serie=0;
    019F 2422      CLR	R2
    01A0 2433      CLR	R3
    01A1 92300129  STS	global_flag_serie+1,R3
    01A3 92200128  STS	global_flag_serie,R2
(0204) //开串口接收中断
(0205) 	//UART_RXCINT_OPEN();
(0206) //延时
(0207) 	for(i=0;i<0xFF;i++)
    01A5 2700      CLR	R16
    01A6 2711      CLR	R17
    01A7 C008      RJMP	0x01B0
(0208) 	{
(0209) 		//TIMER_BEGIN();
(0210) 		//等待定时器溢出,AD结束中断处理在等待过程中完成
(0211) 		while(!(TIFR&(1<<OCF1A))){;}
    01A8 B626      IN	R2,0x36
    01A9 FE24      SBRS	R2,4
    01AA CFFD      RJMP	0x01A8
(0212) 		TIFR|=1<<OCF1A;
    01AB B786      IN	R24,0x36
    01AC 6180      ORI	R24,0x10
    01AD BF86      OUT	0x36,R24
    01AE 5F0F      SUBI	R16,0xFF
    01AF 4F1F      SBCI	R17,0xFF
    01B0 3F0F      CPI	R16,0xFF
    01B1 E0E0      LDI	R30,0
    01B2 071E      CPC	R17,R30
    01B3 F3A0      BCS	0x01A8
(0213) 		//终止定时器
(0214) 		//TIMER_STOP();
(0215) 	}
(0216) //数据采集流程
(0217) 	while(1)
    01B4 CFFF      RJMP	0x01B4
(0218) 	{
(0219) 	/*
(0220) 	//检测动作开始标志清零
(0221) 		for(i=0;i<4;i++){global_detect_close[i]=0;}
(0222) 		for(i=0;i<4;i++){global_detect_trip[i]=0;}
(0223) 	//如果自动测试
(0224) 		if(global_sample_mode_flag==0x00)
(0225) 		{
(0226) 		//关串口接收中断
(0227) 			UART_RXCINT_CLOSE();
(0228) 		//开外部中断7(AD转换结束中断)
(0229) 			EXTERN_INTERRUPT_OPEN(7);
(0230) 		//检测采样
(0231) 			OPERATION_DETECTION();
(0232) 		//如果检测到有信号变化,向COUNTER发送开始采集命令
(0233) 		//	sbi(UCSR0B,TXB8);//将TXB8置1
(0234) 			UART_DATA_BYTE_SEND(0x10);//发送数据采集命令
(0235) 		//开始采样
(0236) 			SAMPLE();
(0237) 		//关外部中断7
(0238) 			EXTERN_INTERRUPT_CLOSE(7);
(0239) 		//开串口接收中断,等待数据包传输命令
(0240) 			UART_RXCINT_OPEN();
(0241) 		//向主机发送采集结束命令0x33
(0242) 			UART_DATA_BYTE_SEND(0x33);
(0243) 		//自动测试标志复原
(0244) 			global_sample_mode_flag=0xFF;
(0245) 		}
(0246) 	//如果接收到开始采集命令
(0247) 		if(global_start_sample_flag==0x00)
(0248) 		{
(0249) 		//关串口接收中断
(0250) 			UART_RXCINT_CLOSE();
(0251) 		//开外部中断7(AD转换结束中断)
(0252) 			EXTERN_INTERRUPT_OPEN(7);
(0253) 		//采样
(0254) 			SAMPLE();
(0255) 		//关外部中断7
(0256) 			EXTERN_INTERRUPT_CLOSE(7);
(0257) 		//开串口接收中断,等待数据包传输命令
(0258) 			UART_RXCINT_OPEN();
(0259) 		//开始采集标志复原
(0260) 			global_start_sample_flag=0xFF;
(0261) 		}
(0262) 	*/
(0263) 	}
(0264) 	
(0265) 	for(;;){;}
    01B5 CFFF      RJMP	0x01B5
(0266) 	return 0;
FILE: <library>
    01B6 2700      CLR	R16
    01B7 2711      CLR	R17
    01B8 9508      RET
pop_gset2:
    01B9 E0E2      LDI	R30,2
    01BA 940C01C8  JMP	pop
push_gset5:
    01BC 92FA      ST	R15,-Y
    01BD 92EA      ST	R14,-Y
push_gset4:
    01BE 92DA      ST	R13,-Y
    01BF 92CA      ST	R12,-Y
push_gset3:
    01C0 92BA      ST	R11,-Y
    01C1 92AA      ST	R10,-Y
push_gset2:
    01C2 937A      ST	R23,-Y
    01C3 936A      ST	R22,-Y
push_gset1:
    01C4 935A      ST	R21,-Y
    01C5 934A      ST	R20,-Y
    01C6 9508      RET
pop_gset1:
    01C7 E0E1      LDI	R30,1
pop:
    01C8 9149      LD	R20,Y+
    01C9 9159      LD	R21,Y+
    01CA FDE0      SBRC	R30,0
    01CB 9508      RET
    01CC 9169      LD	R22,Y+
    01CD 9179      LD	R23,Y+
    01CE FDE1      SBRC	R30,1
    01CF 9508      RET
    01D0 90A9      LD	R10,Y+
    01D1 90B9      LD	R11,Y+
    01D2 FDE2      SBRC	R30,2
    01D3 9508      RET
    01D4 90C9      LD	R12,Y+
    01D5 90D9      LD	R13,Y+
    01D6 FDE3      SBRC	R30,3
    01D7 9508      RET
    01D8 90E9      LD	R14,Y+
    01D9 90F9      LD	R15,Y+
    01DA 9508      RET

⌨️ 快捷键说明

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