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

📄 pro.lst

📁 数控电压源程序数控电压源程序数控电压源程序数控电压源程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0501 E010      LDI	R17,0
    0502 940E00F2  CALL	_delay_nus
    0504 5041      SUBI	R20,1
    0505 4050      SBCI	R21,0
    0506 3040      CPI	R20,0
    0507 0745      CPC	R20,R21
    0508 F7B1      BNE	0x04FF
(0317) 	      }
(0318) 		 if(KeyScan()==15)
    0509 DD26      RCALL	_KeyScan
    050A 300F      CPI	R16,0xF
    050B E0E0      LDI	R30,0
    050C 071E      CPC	R17,R30
    050D F419      BNE	0x0511
(0319) 	      auto_flag=0;
    050E 2422      CLR	R2
    050F 922000B8  STS	auto_flag,R2
    0511 918000B8  LDS	R24,auto_flag
    0513 3084      CPI	R24,4
    0514 F339      BEQ	0x04FC
(0320)          }
(0321)          break;
    0515 940E08C1  CALL	pop_gset1
    0517 9508      RET
_function_DAC:
  i                    --> R20
    0518 940E08BE  CALL	push_gset1
(0322)  /* case 4:
(0323)          Write_Position(1,12); 
(0324)          Write_String("sin"); 
(0325) 		  for(;auto_flag == 4;)
(0326)          {
(0327) 		  
(0328) 		   uint i;
(0329) 		   for(i=0;i<=200;i++)
(0330) 		   {
(0331) 		    DAC_DATA=Sin[i];
(0332) 			delay_nus(10);
(0333) 		   
(0334) 		   if(KeyScan()==15)
(0335) 	        auto_flag=5;
(0336)          }
(0337)          break;*/
(0338)   }
(0339) 
(0340) }
(0341) void function_DAC()
(0342) {
(0343)   if(ENTER==1)
    051A 91800085  LDS	R24,ENTER
    051C 3081      CPI	R24,1
    051D F449      BNE	0x0527
(0344)  {
(0345)   ENTER=0;
    051E 2422      CLR	R2
    051F 92200085  STS	ENTER,R2
(0346)   DAC_DATA=Set_Value;
    0521 90200076  LDS	R2,Set_Value
    0523 90300077  LDS	R3,Set_Value+1
    0525 BA28      OUT	0x18,R2
(0347)   control();
    0526 D07B      RCALL	_control
(0348)  }
(0349)  if(ahead_flag)
    0527 90200083  LDS	R2,ahead_flag
    0529 2022      TST	R2
    052A F091      BEQ	0x053D
(0350)  {
(0351)    ahead_flag=0;
    052B 2422      CLR	R2
    052C 92200083  STS	ahead_flag,R2
(0352)    if(Set_Value<99)
    052E 91800076  LDS	R24,Set_Value
    0530 91900077  LDS	R25,Set_Value+1
    0532 3683      CPI	R24,0x63
    0533 E0E0      LDI	R30,0
    0534 079E      CPC	R25,R30
    0535 F438      BCC	0x053D
(0353) 	{
(0354) 	  Set_Value++;
    0536 9601      ADIW	R24,1
    0537 93900077  STS	Set_Value+1,R25
    0539 93800076  STS	Set_Value,R24
(0355) 	  DAC_DATA=Set_Value;
    053B BB88      OUT	0x18,R24
(0356) 	  control();
    053C D065      RCALL	_control
(0357)    }
(0358)  }
(0359)  
(0360)  if(back_flag)
    053D 90200084  LDS	R2,back_flag
    053F 2022      TST	R2
    0540 F0B1      BEQ	0x0557
(0361)  {
(0362)    back_flag=0;
    0541 2422      CLR	R2
    0542 92200084  STS	back_flag,R2
(0363)     if(Set_Value>0)
    0544 90200076  LDS	R2,Set_Value
    0546 90300077  LDS	R3,Set_Value+1
    0548 2022      TST	R2
    0549 F411      BNE	0x054C
    054A 2033      TST	R3
    054B F059      BEQ	0x0557
(0364) 	{
(0365) 	 Set_Value--;
    054C 91800076  LDS	R24,Set_Value
    054E 91900077  LDS	R25,Set_Value+1
    0550 9701      SBIW	R24,1
    0551 93900077  STS	Set_Value+1,R25
    0553 93800076  STS	Set_Value,R24
(0366) 	 DAC_DATA=Set_Value;
    0555 BB88      OUT	0x18,R24
(0367) 	 control();
    0556 D04B      RCALL	_control
(0368) 	}
(0369)  }
(0370)  
(0371)  if(clear_flag)
    0557 90200082  LDS	R2,clear_flag
    0559 2022      TST	R2
    055A F149      BEQ	0x0584
(0372)  {
(0373)   uint i=0;
    055B 2744      CLR	R20
    055C 2755      CLR	R21
(0374)   clear_flag=0;
    055D 2422      CLR	R2
    055E 92200082  STS	clear_flag,R2
(0375)   auto_flag=0;
    0560 922000B8  STS	auto_flag,R2
(0376)   cn=0;
    0562 92200087  STS	cn,R2
(0377)   Clear_Screen;
    0564 E001      LDI	R16,1
    0565 940E072E  CALL	_Write_Command
(0378)   for(i=0;i<4;i++)
    0567 C010      RJMP	0x0578
(0379)    {
(0380) 	SET_VALUE[i]=0;
    0568 E002      LDI	R16,2
    0569 E010      LDI	R17,0
    056A 019A      MOVW	R18,R20
    056B 940E086D  CALL	empy16s
    056D 01F8      MOVW	R30,R16
    056E EE85      LDI	R24,0xE5
    056F E090      LDI	R25,0
    0570 0FE8      ADD	R30,R24
    0571 1FF9      ADC	R31,R25
    0572 2422      CLR	R2
    0573 2433      CLR	R3
    0574 8231      STD	Z+1,R3
    0575 8220      STD	Z+0,R2
    0576 5F4F      SUBI	R20,0xFF
    0577 4F5F      SBCI	R21,0xFF
    0578 3044      CPI	R20,4
    0579 E0E0      LDI	R30,0
    057A 075E      CPC	R21,R30
    057B F360      BCS	0x0568
(0381)    }
(0382)   Set_Value=0;
    057C 2422      CLR	R2
    057D 2433      CLR	R3
    057E 92300077  STS	Set_Value+1,R3
    0580 92200076  STS	Set_Value,R2
(0383)   DAC_DATA=Set_Value;
    0582 BA28      OUT	0x18,R2
(0384)   control();
    0583 D01E      RCALL	_control
(0385)  }
    0584 940E08C1  CALL	pop_gset1
    0586 9508      RET
_adc_isr:
  voltage              --> Y+0
    0587 940E08FA  CALL	push_lset
    0589 9724      SBIW	R28,4
(0386) }
(0387) 
(0388) uint temp_vol=0;
(0389) uint temp_value=0;
(0390) uchar temp_H,temp_L;
(0391) #pragma interrupt_handler adc_isr:15
(0392) void adc_isr(void)
(0393) {
(0394)   unsigned long int voltage;
(0395)   voltage=adc_calc();
    058A 940E0796  CALL	_adc_calc
    058C 0118      MOVW	R2,R16
    058D 2444      CLR	R4
    058E 2455      CLR	R5
    058F 01FE      MOVW	R30,R28
    0590 8220      STD	Z+0,R2
    0591 8231      STD	Z+1,R3
    0592 8242      STD	Z+2,R4
    0593 8253      STD	Z+3,R5
(0396)   Adverage_vol=voltage;
    0594 01FE      MOVW	R30,R28
    0595 8020      LDD	R2,Z+0
    0596 8031      LDD	R3,Z+1
    0597 923000F2  STS	Adverage_vol+1,R3
    0599 922000F1  STS	Adverage_vol,R2
(0397)   ad_flag=1;
    059B E081      LDI	R24,1
    059C 93800069  STS	ad_flag,R24
    059E 9624      ADIW	R28,4
    059F 940E0911  CALL	pop_lset
    05A1 9518      RETI
(0398) }
(0399) 
(0400)  void control(void)
(0401)  {
(0402)   temp_vol=2*Adverage_vol+45;
_control:
    05A2 912000F1  LDS	R18,Adverage_vol
    05A4 913000F2  LDS	R19,Adverage_vol+1
    05A6 E002      LDI	R16,2
    05A7 E010      LDI	R17,0
    05A8 940E086D  CALL	empy16s
    05AA 01C8      MOVW	R24,R16
    05AB 968D      ADIW	R24,0x2D
    05AC 939000BA  STS	temp_vol+1,R25
    05AE 938000B9  STS	temp_vol,R24
(0403)   temp_vol=temp_vol/100;
    05B0 E624      LDI	R18,0x64
    05B1 E030      LDI	R19,0
    05B2 018C      MOVW	R16,R24
    05B3 940E07E2  CALL	div16u
    05B5 931000BA  STS	temp_vol+1,R17
    05B7 930000B9  STS	temp_vol,R16
(0404)   temp_value=Set_Value;
    05B9 90200076  LDS	R2,Set_Value
    05BB 90300077  LDS	R3,Set_Value+1
    05BD 923000BC  STS	temp_value+1,R3
    05BF 922000BB  STS	temp_value,R2
(0405)   if(cn ==0)
    05C1 90200087  LDS	R2,cn
    05C3 2022      TST	R2
    05C4 F009      BEQ	0x05C6
    05C5 C086      RJMP	0x064C
(0406)   {
    05C6 C036      RJMP	0x05FD
(0407)    while(temp_vol < Set_Value)
(0408)    {
(0409)       if(temp_value>=255);
    05C7 918000BB  LDS	R24,temp_value
    05C9 919000BC  LDS	R25,temp_value+1
    05CB 3F8F      CPI	R24,0xFF
    05CC E0E0      LDI	R30,0
    05CD 079E      CPC	R25,R30
    05CE F008      BCS	0x05D0
    05CF C009      RJMP	0x05D9
(0410) 	   else
(0411) 	   temp_value++;
    05D0 918000BB  LDS	R24,temp_value
    05D2 919000BC  LDS	R25,temp_value+1
    05D4 9601      ADIW	R24,1
    05D5 939000BC  STS	temp_value+1,R25
    05D7 938000BB  STS	temp_value,R24
(0412) 	  DAC_DATA=temp_value;
    05D9 902000BB  LDS	R2,temp_value
    05DB 903000BC  LDS	R3,temp_value+1
    05DD BA28      OUT	0x18,R2
(0413) 	  ADCSRA|=BIT(ADSC);
    05DE 9A36      SBI	0x06,6
(0414) 	  while(!ad_flag);
    05DF 90200069  LDS	R2,ad_flag
    05E1 2022      TST	R2
    05E2 F3E1      BEQ	0x05DF
(0415) 	  ad_flag=0;
    05E3 2422      CLR	R2
    05E4 92200069  STS	ad_flag,R2
(0416) 	  temp_vol=(unsigned int)2*Adverage_vol+40;
    05E6 912000F1  LDS	R18,Adverage_vol
    05E8 913000F2  LDS	R19,Adverage_vol+1
    05EA E002      LDI	R16,2
    05EB E010      LDI	R17,0
    05EC 940E086D  CALL	empy16s
    05EE 01C8      MOVW	R24,R16
    05EF 9688      ADIW	R24,0x28
    05F0 939000BA  STS	temp_vol+1,R25
    05F2 938000B9  STS	temp_vol,R24
(0417)       temp_vol=(unsigned int)temp_vol/100;
    05F4 E624      LDI	R18,0x64
    05F5 E030      LDI	R19,0
    05F6 018C      MOVW	R16,R24
    05F7 940E07E2  CALL	div16u
    05F9 931000BA  STS	temp_vol+1,R17
    05FB 930000B9  STS	temp_vol,R16
    05FD 90200076  LDS	R2,Set_Value
    05FF 90300077  LDS	R3,Set_Value+1
    0601 904000B9  LDS	R4,temp_vol
    0603 905000BA  LDS	R5,temp_vol+1
    0605 1442      CP	R4,R2
    0606 0453      CPC	R5,R3
    0607 F408      BCC	0x0609
    0608 CFBE      RJMP	0x05C7
    0609 C036      RJMP	0x0640
(0418)    }
(0419)   
(0420)    while(temp_vol> Set_Value)
(0421)    {
(0422)     if(temp_value <=0) ;
    060A 902000BB  LDS	R2,temp_value
    060C 903000BC  LDS	R3,temp_value+1
    060E 2022      TST	R2
    060F F419      BNE	0x0613
    0610 2033      TST	R3
    0611 F409      BNE	0x0613
    0612 C009      RJMP	0x061C
(0423) 	  else
(0424)       temp_value--;
    0613 918000BB  LDS	R24,temp_value
    0615 919000BC  LDS	R25,temp_value+1
    0617 9701      SBIW	R24,1
    0618 939000BC  STS	temp_value+1,R25
    061A 938000BB  STS	temp_value,R24
(0425) 	  DAC_DATA=temp_value;
    061C 902000BB  LDS	R2,temp_value
    061E 903000BC  LDS	R3,temp_value+1
    0620 BA28      OUT	0x18,R2
(0426) 	  ADCSRA|=BIT(ADSC);
    0621 9A36      SBI	0x06,6
(0427) 	  while(!ad_flag);
    0622 90200069  LDS	R2,ad_flag
    0624 2022      TST	R2
    0625 F3E1      BEQ	0x0622
(0428) 	  ad_flag=0;
    0626 2422      CLR	R2
    0627 92200069  STS	ad_flag,R2
(0429) 	  temp_vol=(unsigned int)2*Adverage_vol+40;
    0629 912000F1  LDS	R18,Adverage_vol
    062B 913000F2  LDS	R19,Adverage_vol+1
    062D E002      LDI	R16,2
    062E E010      LDI	R17,0
    062F 940E086D  CALL	empy16s
    0631 01C8      MOVW	R24,R16
    0632 9688      ADIW	R24,0x28
    0633 939000BA  STS	temp_vol+1,R25
    0635 938000B9  STS	temp_vol,R24
(0430)       temp_vol=(unsigned int)temp_vol/100;
    0637 E624      LDI	R18,0x64
    0638 E030      LDI	R19,0
    0639 018C      MOVW	R16,R24
    063A 940E07E2  CALL	div16u
    063C 931000BA  STS	temp_vol+1,R17
    063E 930000B9  STS	temp_vol,R16
    0640 90200076  LDS	R2,Set_Value
    0642 90300077  LDS	R3,Set_Value+1
    0644 904000B9  LDS	R4,temp_vol
    0646 905000BA  LDS	R5,temp_vol+1
    0648 1424      CP	R2,R4
    0649 0435      CPC	R3,R5
    064A F408      BCC	0x064C
    064B CFBE      RJMP	0x060A
(0431)    }
(0432)   }   
    064C 9508      RET
(0433)  }
(0434) 
(0435)  
(0436) //端口初始化
(0437) void port_init(void)
(0438) {
(0439)  PORTA = 0x00;//低三位作为1602控制端
_port_init:
    064D 2422      CLR	R2
    064E BA2B      OUT	0x1B,R2
(0440)  DDRA  = 0x07;//低三位作为1602控制端
    064F E087      LDI	R24,7
    0650 BB8A      OUT	0x1A,R24
(0441)  PORTD = 0x0F;//矩阵键盘的接口
    0651 E08F      LDI	R24,0xF
    0652 BB82      OUT	0x12,R24
(0442)  DDRD  = 0xF0;
    0653 EF80      LDI	R24,0xF0
    0654 BB81      OUT	0x11,R24
(0443)  PORTB = 0x00;//DAC0832的数据控制端
    0655 BA28      OUT	0x18,R2
(0444)  DDRB  = 0xFF;//DAC0832的数据控制端
    0656 EF8F      LDI	R24,0xFF
    0657 BB87      OUT	0x17,R24
(0445)  PORTC = 0x00;//PC口作为1602的数据端
    0658 BA25      OUT	0x15,R2
(0446)  DDRC  = 0xFF;//PC口作为1602的数据端
    0659 BB84      OUT	0x14,R24
    065A 9508      RET
(0447) }
(0448) 
(0449) //定时器T0初始化
(0450) void timer0_init(void)
(0451) {
(0452)  TCCR0  = 0x00;//停止定时器
_timer0_init:
    065B 2422      CLR	R2
    065C BE23      OUT	0x33,R2
(0453)  TCNT0 = 0x25;//初始值
    065D E285      LDI	R24,0x25
    065E BF82      OUT	0x32,R24
(0454)  OCR0   = 0xC0;//匹配值
    065F EC80      LDI	R24,0xC0
    0660 BF8C      OUT	0x3C,R24
(0455)  TIMSK |= 0x02;//中断允许
    0661 B789      IN	R24,0x39
    0662 6082      ORI	R24,2
    0663 BF89      OUT	0x39,R24
(0456)  TCCR0  = 0x04;//启动定时器
    0664 E084      LDI	R24,4
    0665 BF83      OUT	0x33,R24
    0666 9508      RET
_timer0_comp_isr:
    0667 922A      ST	R2,-Y
    0668 923A      ST	R3,-Y
    0669 938A      ST	R24,-Y
    066A 939A      ST	R25,-Y
    066B 93EA      ST	R30,-Y
    066C B62F      IN	R2,0x3F
    066D 922A      ST	R2,-Y
(0457) }
(0458) 
(0459) 
(0460) //T0比较中断服务程序
(0461) #pragma interrupt_handler timer0_comp_isr:20
(0462) void timer0_comp_isr(void)
(0463) {
(0464)  //中断发生时刻在TCNT0=OCR0
(0465)     
(0466)   if(++counter>=4)
    066E 9180006C  LDS	R24,counter
    0670 9190006D  LDS	R25,counter+1
    0672 9601      ADIW	R24,1
    0673 9390006D  STS	counter+1,R25

⌨️ 快捷键说明

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