📄 main.lis
字号:
.module main.c
.area lit(rom, con, rel)
0000 L2:
0000 0000 .byte 0,0
0002 0000 .byte 0,0
0004 L3:
0004 0000 .byte 0,0
0006 0000 .byte 0,0
.area bss(ram, con, rel)
0000 L4:
0000 .blkb 1
.area text(rom, con, rel)
0000 .dbfile F:\网络下载\AVR\完整应用\电流电压表\SOF\main.c
0000 .dbfunc e main _main fI
0000 .dbsym s chdot L4 c
0000 ; chS_V -> y+6
0000 ; chS_A -> y+2
.even
0000 _main::
0000 2A97 sbiw R28,10
0002 .dbline -1
0002 .dbline 33
0002 ; //ICC-AVR application builder : 2006-12-28 11:58:18
0002 ; // Target : M8
0002 ; // Crystal: 4.0000Mhz
0002 ; //本程序主要完成对外界输入的电流/电压进行AD转换并显示的功能
0002 ; /*
0002 ; * Copyright (c) 2005, 广州力源电器公司开发部
0002 ; * All rights reserved.
0002 ; * 文件名称:main.c 主函数
0002 ;
0002 ; * 当前版本: 1.0
0002 ; * 作者: 张洪强
0002 ; * 完成日期: 2005.7.25
0002 ; */
0002 ;
0002 ; //#define OS_GLOBALS
0002 ; #include <iom8v.h>
0002 ; #include <macros.h>
0002 ; //#include <interrupt.h>
0002 ; #include <signal.h>
0002 ; //#include <wdt.h>
0002 ; #include <stdlib.h>
0002 ; #include <eeprom.h>
0002 ; #include "init.h"
0002 ;
0002 ; void convert_v( unsigned char* pch);
0002 ; void convert_a( unsigned char* pch);
0002 ; void SET_A( unsigned char* pch );
0002 ; void CHECK_EDATA_A(void);
0002 ;
0002 ; //char CS[4] = {0,2,1,0};
0002 ;
0002 ; int main(void)
0002 ; {
0002 .dbline 34
0002 ; unsigned char chS_V[]={0,0,0,0},chS_A[]={0,0,0,0};
0002 80E0 ldi R24,<L2
0004 90E0 ldi R25,>L2
0006 FE01 movw R30,R28
0008 3696 adiw R30,6
000A 04E0 ldi R16,4
000C 10E0 ldi R17,0
000E FA93 st -y,R31
0010 EA93 st -y,R30
0012 9A93 st -y,R25
0014 8A93 st -y,R24
0016 00D0 rcall asgncblk
0018 .dbline 34
0018 80E0 ldi R24,<L3
001A 90E0 ldi R25,>L3
001C FE01 movw R30,R28
001E 3296 adiw R30,2
0020 04E0 ldi R16,4
0022 10E0 ldi R17,0
0024 FA93 st -y,R31
0026 EA93 st -y,R30
0028 9A93 st -y,R25
002A 8A93 st -y,R24
002C 00D0 rcall asgncblk
002E .dbline 36
002E ; static unsigned char chdot;
002E ; delayMS(250); //延时250MS
002E 0AEF ldi R16,250
0030 00D0 rcall _delayMS
0032 .dbline 37
0032 ; delayMS(250); //延时250MS
0032 0AEF ldi R16,250
0034 00D0 rcall _delayMS
0036 .dbline 38
0036 ; eeprom_busy_wait();
0036 00D0 rcall _eeprom_busy_wait
0038 .dbline 39
0038 ; cli();
0038 00D0 rcall _cli
003A .dbline 40
003A ; eeprom_read_block((char*)MAX_A,(char*)0x20,6 );
003A 86E0 ldi R24,6
003C 90E0 ldi R25,0
003E 9983 std y+1,R25
0040 8883 std y+0,R24
0042 20E2 ldi R18,32
0044 30E0 ldi R19,0
0046 00E0 ldi R16,<_MAX_A
0048 10E0 ldi R17,>_MAX_A
004A 00D0 rcall _eeprom_read_block
004C .dbline 41
004C ; CHECK_EDATA_A();
004C F5D2 rcall _CHECK_EDATA_A
004E .dbline 42
004E ; init_devices(); //初始化端口
004E 00D0 rcall _init_devices
0050 .dbline 44
0050 ;
0050 ; for (;;)
0050 L5:
0050 .dbline 45
0050 ; {
0050 .dbline 46
0050 ; wdt_reset(); //喂狗
0050 00D0 rcall _wdt_reset
0052 .dbline 47
0052 ; convert_v( chS_V );
0052 8E01 movw R16,R28
0054 0A5F subi R16,250 ; offset = 6
0056 1F4F sbci R17,255
0058 3BD0 rcall _convert_v
005A .dbline 48
005A ; convert_a( chS_A );
005A 8E01 movw R16,R28
005C 0E5F subi R16,254 ; offset = 2
005E 1F4F sbci R17,255
0060 79D0 rcall _convert_a
0062 .dbline 49
0062 ; key_board();
0062 00D0 rcall _key_board
0064 .dbline 50
0064 ; if ( !SET_STATU )
0064 20900800 lds R2,_SET_STATU
0068 2220 tst R2
006A 19F5 brne L9
006C .dbline 51
006C ; {
006C .dbline 52
006C ; if ( KEY_A_V_STATE )
006C 20900500 lds R2,_KEY_A_V_STATE
0070 2220 tst R2
0072 B1F0 breq L11
0074 .dbline 53
0074 ; {
0074 .dbline 54
0074 ; if ( MAX_A[0] >= 500 )
0074 80910000 lds R24,_MAX_A
0078 90910100 lds R25,_MAX_A+1
007C 843F cpi R24,244
007E E1E0 ldi R30,1
0080 9E07 cpc R25,R30
0082 20F0 brlo L13
0084 .dbline 55
0084 ; {
0084 .dbline 56
0084 ; chdot = NODOT;
0084 80E4 ldi R24,64
0086 80930000 sts L4,R24
008A .dbline 57
008A ; }
008A 03C0 rjmp L14
008C L13:
008C .dbline 59
008C ; else
008C ; {
008C .dbline 60
008C ; chdot = ONEDOT;
008C 81E0 ldi R24,1
008E 80930000 sts L4,R24
0092 .dbline 61
0092 ; }
0092 L14:
0092 .dbline 62
0092 ; display(chS_A,chdot); //显示电流值
0092 20910000 lds R18,L4
0096 8E01 movw R16,R28
0098 0E5F subi R16,254 ; offset = 2
009A 1F4F sbci R17,255
009C 00D0 rcall _display
009E .dbline 63
009E ; }
009E D8CF rjmp L5
00A0 L11:
00A0 .dbline 65
00A0 ; else
00A0 ; {
00A0 .dbline 66
00A0 ; chdot = TWODOT;
00A0 82E0 ldi R24,2
00A2 80930000 sts L4,R24
00A6 .dbline 67
00A6 ; display(chS_V,chdot); //显示电压值
00A6 282F mov R18,R24
00A8 8E01 movw R16,R28
00AA 0A5F subi R16,250 ; offset = 6
00AC 1F4F sbci R17,255
00AE 00D0 rcall _display
00B0 .dbline 68
00B0 ; }
00B0 .dbline 69
00B0 ; }
00B0 CFCF rjmp L5
00B2 L9:
00B2 .dbline 71
00B2 .dbline 72
00B2 8E01 movw R16,R28
00B4 0E5F subi R16,254 ; offset = 2
00B6 1F4F sbci R17,255
00B8 8ED2 rcall _SET_A
00BA .dbline 73
00BA 80E4 ldi R24,64
00BC 80930000 sts L4,R24
00C0 .dbline 74
00C0 282F mov R18,R24
00C2 8E01 movw R16,R28
00C4 0E5F subi R16,254 ; offset = 2
00C6 1F4F sbci R17,255
00C8 00D0 rcall _display
00CA .dbline 75
00CA .dbline 77
00CA .dbline 44
00CA .dbline 44
00CA C2CF rjmp L5
00CC X0:
00CC .dbline -2
00CC L1:
00CC 2A96 adiw R28,10
00CE .dbline 0 ; func end
00CE 0895 ret
00D0 .dbsym l chS_V 6 A[4:4]c
00D0 .dbsym l chS_A 2 A[4:4]c
00D0 .dbend
00D0 .dbfunc e convert_v _convert_v fV
00D0 ; intV -> R20,R21
00D0 ; i -> R22,R23
00D0 ; pch -> R10,R11
.even
00D0 _convert_v::
00D0 00D0 rcall push_gset3
00D2 5801 movw R10,R16
00D4 .dbline -1
00D4 .dbline 81
00D4 ; else
00D4 ; {
00D4 ; SET_A( chS_A ); //进入设置电流值状态
00D4 ; chdot = NODOT;
00D4 ; display(chS_A,chdot); //显示设定电流值
00D4 ; }
00D4 ; //delayMS(10); //延时10MS
00D4 ; }
00D4 ; }
00D4 ;
00D4 ; void convert_v( unsigned char* pch )
00D4 ; {
00D4 .dbline 83
00D4 ; unsigned int intV,i;
00D4 ; intV = (int) (((float)MAX_V * (float) adc_data[0]) /1024.0) ;
00D4 00E0 ldi R16,<L16
00D6 10E0 ldi R17,>L16
00D8 00D0 rcall lpm32
00DA 3A93 st -y,R19
00DC 2A93 st -y,R18
00DE 1A93 st -y,R17
00E0 0A93 st -y,R16
00E2 40900200 lds R4,_adc_data+2
00E6 50900300 lds R5,_adc_data+2+1
00EA 20900000 lds R2,_adc_data
00EE 30900100 lds R3,_adc_data+1
00F2 5A92 st -y,R5
00F4 4A92 st -y,R4
00F6 3A92 st -y,R3
00F8 2A92 st -y,R2
00FA 00D0 rcall empy32fs
00FC 00E0 ldi R16,<L17
00FE 10E0 ldi R17,>L17
0100 00D0 rcall lpm32
0102 3A93 st -y,R19
0104 2A93 st -y,R18
0106 1A93 st -y,R17
0108 0A93 st -y,R16
010A 00D0 rcall div32f
010C 00D0 rcall fp2int
010E A801 movw R20,R16
0110 .dbline 85
0110 ; //计算电压值
0110 ; if ( intV > 70 )
0110 86E4 ldi R24,70
0112 90E0 ldi R25,0
0114 8017 cp R24,R16
0116 9107 cpc R25,R17
0118 18F4 brsh L18
011A .dbline 86
011A ; {
011A .dbline 87
011A ; intV -= 70;
011A 4654 subi R20,70
011C 5040 sbci R21,0
011E .dbline 88
011E ; }
011E 02C0 rjmp L19
0120 L18:
0120 .dbline 90
0120 ; else
0120 ; {
0120 .dbline 91
0120 ; intV = 0;
0120 4427 clr R20
0122 5527 clr R21
0124 .dbline 92
0124 ; }
0124 L19:
0124 .dbline 93
0124 ; for ( i = 0; i < 4; i++ )
0124 6627 clr R22
0126 7727 clr R23
0128 0FC0 rjmp L23
012A L20:
012A .dbline 94
012A .dbline 95
012A 2AE0 ldi R18,10
012C 30E0 ldi R19,0
012E 8A01 movw R16,R20
0130 00D0 rcall mod16u
0132 FB01 movw R30,R22
0134 EA0D add R30,R10
0136 FB1D adc R31,R11
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -