📄 pro.lst
字号:
__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 + -