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

📄 pro.lst

📁 数控电压源程序数控电压源程序数控电压源程序数控电压源程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
__text_start:
__start:
    00CF E5CF      LDI	R28,0x5F
    00D0 E0D4      LDI	R29,4
    00D1 BFCD      OUT	0x3D,R28
    00D2 BFDE      OUT	0x3E,R29
    00D3 51C0      SUBI	R28,0x10
    00D4 40D0      SBCI	R29,0
    00D5 EA0A      LDI	R16,0xAA
    00D6 8308      STD	Y+0,R16
    00D7 2400      CLR	R0
    00D8 EDEF      LDI	R30,0xDF
    00D9 E0F0      LDI	R31,0
    00DA E010      LDI	R17,0
    00DB 3FE3      CPI	R30,0xF3
    00DC 07F1      CPC	R31,R17
    00DD F011      BEQ	0x00E0
    00DE 9201      ST	R0,Z+
    00DF CFFB      RJMP	0x00DB
    00E0 8300      STD	Z+0,R16
    00E1 E1EE      LDI	R30,0x1E
    00E2 E0F1      LDI	R31,1
    00E3 E6A0      LDI	R26,0x60
    00E4 E0B0      LDI	R27,0
    00E5 E011      LDI	R17,1
    00E6 39ED      CPI	R30,0x9D
    00E7 07F1      CPC	R31,R17
    00E8 F021      BEQ	0x00ED
    00E9 95C8      LPM
    00EA 9631      ADIW	R30,1
    00EB 920D      ST	R0,X+
    00EC CFF9      RJMP	0x00E6
    00ED 940E06B1  CALL	_main
_exit:
    00EF CFFF      RJMP	_exit
FILE: E:\张秋伟\我的实验\数控电压源\delay.c
(0001) #define XTAL 8    //晶振频率,单位MHz
(0002) void delay_1us(void)                 //1us延时函数
(0003)   {
(0004)    asm("nop");
_delay_1us:
    00F0 0000      NOP
    00F1 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R22
    00F2 940E08BC  CALL	push_gset2
    00F4 01B8      MOVW	R22,R16
(0005)   }
(0006) 
(0007) void delay_nus(unsigned int n)       //N us延时函数
(0008)   {
(0009)    unsigned int i=0;
    00F5 2744      CLR	R20
    00F6 2755      CLR	R21
(0010)    for (i=0;i<n;i++)
    00F7 C003      RJMP	0x00FB
(0011)    delay_1us();
    00F8 DFF7      RCALL	_delay_1us
    00F9 5F4F      SUBI	R20,0xFF
    00FA 4F5F      SBCI	R21,0xFF
    00FB 1746      CP	R20,R22
    00FC 0757      CPC	R21,R23
    00FD F3D0      BCS	0x00F8
    00FE 940E08AD  CALL	pop_gset2
    0100 9508      RET
(0012)   }
(0013)   
(0014) void delay_1ms(void)                 //1ms延时函数
(0015)   {
(0016)    unsigned int i;
(0017)    for (i=0;i<(unsigned int)(XTAL*143-2);i++);
_delay_1ms:
  i                    --> R16
    0101 2700      CLR	R16
    0102 2711      CLR	R17
    0103 C002      RJMP	0x0106
    0104 5F0F      SUBI	R16,0xFF
    0105 4F1F      SBCI	R17,0xFF
    0106 3706      CPI	R16,0x76
    0107 E0E4      LDI	R30,4
    0108 071E      CPC	R17,R30
    0109 F3D0      BCS	0x0104
    010A 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    010B 940E08BC  CALL	push_gset2
    010D 01B8      MOVW	R22,R16
(0018)   }
(0019)   
(0020) void delay_nms(unsigned int n)       //N ms延时函数
(0021)   {
(0022)    unsigned int i=0;
    010E 2744      CLR	R20
    010F 2755      CLR	R21
(0023)    for (i=0;i<n;i++)
    0110 C003      RJMP	0x0114
(0024)    {
(0025)       delay_1ms();
    0111 DFEF      RCALL	_delay_1ms
    0112 5F4F      SUBI	R20,0xFF
    0113 4F5F      SBCI	R21,0xFF
    0114 1746      CP	R20,R22
    0115 0757      CPC	R21,R23
    0116 F3D0      BCS	0x0111
    0117 940E08AD  CALL	pop_gset2
    0119 9508      RET
FILE: E:\张秋伟\我的实验\数控电压源\main.c
(0001) //包含所需头文件
(0002) #include <ioM16v.h>
(0003) #include <macros.h>
(0004) #include "delay.h"
(0005) #include "LCD1602.H"
(0006) #include "boxing.h"
(0007) /*------宏定义------*/
(0008) #define uchar	unsigned char
(0009) #define uint	unsigned int
(0010) 
(0011) #define DAC_DATA    PORTB
(0012) #define DAC_DDR     DDRB
(0013) 
(0014) uint Adverage_vol;
(0015) long  adc_vol=0;
(0016) long read_vol=0;
(0017) unsigned int adc_calc(void);
(0018) void control(void);
(0019) uchar ad_is_ok=0;
(0020) void adc_init(void);
(0021) 
(0022) unsigned char ad_flag=0;
(0023) uint  AD_COUNT=0;
(0024) uint counter=0;
(0025) uint time_delay=0;
(0026) uint key_is_ok=0;
(0027) uint key_value1=16;
(0028) uint key_value2=16;
(0029) uint Set_Value=10;
(0030) uchar Set_Value_H;
(0031) uchar Set_Value_L;
(0032) 
(0033) uint VOL_L=0;
(0034) uint VOL_H=0;
(0035) uint VOL_H0=0;
(0036) uint VOL_L0=0;
(0037) 
(0038) uchar VOL_P=0;
(0039) uchar real_vol=0;
(0040) 
(0041) uchar clear_flag=0;
(0042) uchar ahead_flag=0;
(0043) uchar back_flag=0;
(0044) uint setting_val;
(0045) uchar ENTER=0;
(0046) static uchar  state=0,cn=0;
(0047) uint SET_VALUE[4];
(0048) 
(0049) uchar welcome[] = {"volt-source"};      //开机欢迎文字
(0050) uchar st[] = {"System-starting"}; 
(0051) uchar setting[] = {"set:"};   //设定值
(0052) uchar measure[] = {"Measure:"};   // 测量值
(0053) uchar error[]={"error"};
(0054) 
(0055) 
(0056) void system_init()
(0057) {
(0058)   Write_Position(1,1);
_system_init:
    011A E021      LDI	R18,1
    011B E030      LDI	R19,0
    011C E001      LDI	R16,1
    011D E010      LDI	R17,0
    011E 940E074E  CALL	_Write_Position
(0059)   Write_String(welcome);
    0120 E808      LDI	R16,0x88
    0121 E010      LDI	R17,0
    0122 940E0768  CALL	_Write_String
(0060)   Write_Position(2,1);
    0124 E021      LDI	R18,1
    0125 E030      LDI	R19,0
    0126 E002      LDI	R16,2
    0127 E010      LDI	R17,0
    0128 940E074E  CALL	_Write_Position
(0061)   Write_String(st);
    012A E904      LDI	R16,0x94
    012B E010      LDI	R17,0
    012C 940E0768  CALL	_Write_String
(0062)   delay_nms(1500);
    012E ED0C      LDI	R16,0xDC
    012F E015      LDI	R17,5
    0130 940E010B  CALL	_delay_nms
(0063)   Clear_Screen;
    0132 E001      LDI	R16,1
    0133 940E072E  CALL	_Write_Command
    0135 9508      RET
_dec_to_bin:
  temp1                --> R20
  i                    --> R22
  temp                 --> R10
  data                 --> R12
    0136 940E08B8  CALL	push_gset4
    0138 0168      MOVW	R12,R16
(0064) }
(0065)  //用于将十进制数转换成IO口上的二进制数
(0066) uchar  dec_to_bin(uint data)
(0067) {
(0068) 
(0069)   uint i=0;
    0139 2766      CLR	R22
    013A 2777      CLR	R23
(0070)   uint temp=0;
    013B 24AA      CLR	R10
    013C 24BB      CLR	R11
(0071)   uchar temp1=0x00;
    013D 2744      CLR	R20
(0072)   temp=data;
    013E 0156      MOVW	R10,R12
(0073)   for(;i<8;i++)
    013F C024      RJMP	0x0164
(0074)   {
(0075)    if((temp%2)==1)
    0140 01C5      MOVW	R24,R10
    0141 7081      ANDI	R24,1
    0142 7090      ANDI	R25,0
    0143 3081      CPI	R24,1
    0144 E0E0      LDI	R30,0
    0145 079E      CPC	R25,R30
    0146 F451      BNE	0x0151
(0076) 	{
(0077) 	 temp1 |=(1<<i);
    0147 E001      LDI	R16,1
    0148 E010      LDI	R17,0
    0149 019B      MOVW	R18,R22
    014A 940E0928  CALL	lsl16
    014C 2E24      MOV	R2,R20
    014D 2433      CLR	R3
    014E 2A20      OR	R2,R16
    014F 2A31      OR	R3,R17
    0150 2D42      MOV	R20,R2
(0078) 	
(0079) 	 }
(0080)    if((temp%2)==0) 
    0151 FCA0      SBRC	R10,0
    0152 C00D      RJMP	0x0160
(0081) 	{
(0082) 	 temp1 &=~(1<<i);
    0153 E001      LDI	R16,1
    0154 E010      LDI	R17,0
    0155 019B      MOVW	R18,R22
    0156 940E0928  CALL	lsl16
    0158 0118      MOVW	R2,R16
    0159 9420      COM	R2
    015A 9430      COM	R3
    015B 2E44      MOV	R4,R20
    015C 2455      CLR	R5
    015D 2042      AND	R4,R2
    015E 2053      AND	R5,R3
    015F 2D44      MOV	R20,R4
(0083) 	 }
(0084) 	 temp =temp/2;
    0160 94B6      LSR	R11
    0161 94A7      ROR	R10
    0162 5F6F      SUBI	R22,0xFF
    0163 4F7F      SBCI	R23,0xFF
    0164 3068      CPI	R22,0x8
    0165 E0E0      LDI	R30,0
    0166 077E      CPC	R23,R30
    0167 F2C0      BCS	0x0140
(0085)    }
(0086)  
(0087) 	 return (temp1);
    0168 2F04      MOV	R16,R20
    0169 940E08B3  CALL	pop_gset4
    016B 9508      RET
_Display_VOL:
    016C 940E08BC  CALL	push_gset2
(0088) }
(0089) 
(0090) void Display_VOL(void)
(0091) {
(0092)  // Set_Value=10*SET_VALUE[1]+SET_VALUE[3];
(0093)   Set_Value_H=Set_Value/10+0x30;
    016E E02A      LDI	R18,0xA
    016F E030      LDI	R19,0
    0170 91000076  LDS	R16,Set_Value
    0172 91100077  LDS	R17,Set_Value+1
    0174 940E07E2  CALL	div16u
    0176 01C8      MOVW	R24,R16
    0177 96C0      ADIW	R24,0x30
    0178 938000F0  STS	Set_Value_H,R24
(0094)   Set_Value_L=Set_Value%10+0x30;
    017A E02A      LDI	R18,0xA
    017B E030      LDI	R19,0
    017C 91000076  LDS	R16,Set_Value
    017E 91100077  LDS	R17,Set_Value+1
    0180 940E07E0  CALL	mod16u
    0182 01C8      MOVW	R24,R16
    0183 96C0      ADIW	R24,0x30
    0184 938000EF  STS	Set_Value_L,R24
(0095)   Write_Position(1,1);
    0186 E021      LDI	R18,1
    0187 E030      LDI	R19,0
    0188 E001      LDI	R16,1
    0189 E010      LDI	R17,0
    018A 940E074E  CALL	_Write_Position
(0096)   Write_String(setting);
    018C EA04      LDI	R16,0xA4
    018D E010      LDI	R17,0
    018E 940E0768  CALL	_Write_String
(0097)   
(0098)   Write_Position(1,5);
    0190 E025      LDI	R18,5
    0191 E030      LDI	R19,0
    0192 E001      LDI	R16,1
    0193 E010      LDI	R17,0
    0194 940E074E  CALL	_Write_Position
(0099)   Write_Data(Set_Value_H);
    0196 910000F0  LDS	R16,Set_Value_H
    0198 2711      CLR	R17
    0199 940E073E  CALL	_Write_Data
(0100)   Write_String(".");
    019B ED0D      LDI	R16,0xDD
    019C E010      LDI	R17,0
    019D 940E0768  CALL	_Write_String
(0101)   Write_Data(Set_Value_L);
    019F 910000EF  LDS	R16,Set_Value_L
    01A1 2711      CLR	R17
    01A2 940E073E  CALL	_Write_Data
(0102)   Write_String("v");
    01A4 ED0B      LDI	R16,0xDB
    01A5 E010      LDI	R17,0
    01A6 940E0768  CALL	_Write_String
(0103)  
(0104)   adc_vol=Adverage_vol*2+40;//作为补偿电压值
    01A8 912000F1  LDS	R18,Adverage_vol
    01AA 913000F2  LDS	R19,Adverage_vol+1
    01AC E002      LDI	R16,2
    01AD E010      LDI	R17,0
    01AE 940E086D  CALL	empy16s
    01B0 01C8      MOVW	R24,R16
    01B1 9688      ADIW	R24,0x28
    01B2 011C      MOVW	R2,R24
    01B3 2444      CLR	R4
    01B4 2455      CLR	R5
    01B5 92300061  STS	adc_vol+1,R3
    01B7 92200060  STS	adc_vol,R2
    01B9 92500063  STS	adc_vol+3,R5
    01BB 92400062  STS	adc_vol+2,R4
(0105)   VOL_H0=adc_vol/1000+0x30;
    01BD EE48      LDI	R20,0xE8
    01BE E053      LDI	R21,3
    01BF E060      LDI	R22,0
    01C0 E070      LDI	R23,0
    01C1 937A      ST	R23,-Y
    01C2 936A      ST	R22,-Y
    01C3 935A      ST	R21,-Y
    01C4 934A      ST	R20,-Y
    01C5 0181      MOVW	R16,R2
    01C6 0192      MOVW	R18,R4
    01C7 940E0802  CALL	div32s
    01C9 0118      MOVW	R2,R16
    01CA 0129      MOVW	R4,R18
    01CB E340      LDI	R20,0x30
    01CC E050      LDI	R21,0
    01CD E060      LDI	R22,0
    01CE E070      LDI	R23,0
    01CF 0E24      ADD	R2,R20
    01D0 1E35      ADC	R3,R21
    01D1 1E46      ADC	R4,R22
    01D2 1E57      ADC	R5,R23
    01D3 9230007D  STS	VOL_H0+1,R3
    01D5 9220007C  STS	VOL_H0,R2
(0106)   VOL_H=adc_vol/100%10+0x30;
    01D7 E644      LDI	R20,0x64
    01D8 E050      LDI	R21,0
    01D9 E060      LDI	R22,0
    01DA E070      LDI	R23,0
    01DB 90400062  LDS	R4,adc_vol+2
    01DD 90500063  LDS	R5,adc_vol+3
    01DF 90200060  LDS	R2,adc_vol
    01E1 90300061  LDS	R3,adc_vol+1
    01E3 937A      ST	R23,-Y
    01E4 936A      ST	R22,-Y
    01E5 935A      ST	R21,-Y
    01E6 934A      ST	R20,-Y
    01E7 0181      MOVW	R16,R2
    01E8 0192      MOVW	R18,R4
    01E9 940E0802  CALL	div32s
    01EB E04A      LDI	R20,0xA
    01EC E050      LDI	R21,0
    01ED E060      LDI	R22,0
    01EE E070      LDI	R23,0
    01EF 937A      ST	R23,-Y
    01F0 936A      ST	R22,-Y
    01F1 935A      ST	R21,-Y
    01F2 934A      ST	R20,-Y
    01F3 940E0804  CALL	mod32s
    01F5 0118      MOVW	R2,R16
    01F6 0129      MOVW	R4,R18
    01F7 E340      LDI	R20,0x30
    01F8 E050      LDI	R21,0
    01F9 E060      LDI	R22,0
    01FA E070      LDI	R23,0
    01FB 0E24      ADD	R2,R20
    01FC 1E35      ADC	R3,R21
    01FD 1E46      ADC	R4,R22
    01FE 1E57      ADC	R5,R23
    01FF 9230007B  STS	VOL_H+1,R3
    0201 9220007A  STS	VOL_H,R2
(0107) //  VOL_L0=adc_vol/10%10+0x30;
(0108) 
(0109)   Write_Position(2,1);
    0203 E021      LDI	R18,1
    0204 E030      LDI	R19,0
    0205 E002      LDI	R16,2
    0206 E010      LDI	R17,0
    0207 940E074E  CALL	_Write_Position
(0110)   Write_String("real_vol:");
    0209 ED01      LDI	R16,0xD1
    020A E010      LDI	R17,0
    020B 940E0768  CALL	_Write_String
(0111)   Write_Position(2,10);
    020D E02A      LDI	R18,0xA
    020E E030      LDI	R19,0
    020F E002      LDI	R16,2
    0210 E010      LDI	R17,0
    0211 940E074E  CALL	_Write_Position
(0112)   Write_Data(VOL_H0);
    0213 9100007C  LDS	R16,VOL_H0
    0215 9110007D  LDS	R17,VOL_H0+1
    0217 940E073E  CALL	_Write_Data
(0113)   Write_Data(0x2e);

⌨️ 快捷键说明

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