📄 getpower_m8.lst
字号:
__text_start:
__start:
0014 E5CF LDI R28,0x5F
0015 E0D4 LDI R29,4
0016 BFCD OUT 0x3D,R28
0017 BFDE OUT 0x3E,R29
0018 51C0 SUBI R28,0x10
0019 40D0 SBCI R29,0
001A EA0A LDI R16,0xAA
001B 8308 STD Y+0,R16
001C 2400 CLR R0
001D E6E2 LDI R30,0x62
001E E0F0 LDI R31,0
001F E010 LDI R17,0
0020 36E8 CPI R30,0x68
0021 07F1 CPC R31,R17
0022 F011 BEQ 0x0025
0023 9201 ST R0,Z+
0024 CFFB RJMP 0x0020
0025 8300 STD Z+0,R16
0026 E2E6 LDI R30,0x26
0027 E0F0 LDI R31,0
0028 E6A0 LDI R26,0x60
0029 E0B0 LDI R27,0
002A E010 LDI R17,0
002B 32E8 CPI R30,0x28
002C 07F1 CPC R31,R17
002D F021 BEQ 0x0032
002E 95C8 LPM
002F 9631 ADIW R30,1
0030 920D ST R0,X+
0031 CFF9 RJMP 0x002B
0032 D11B RCALL _main
_exit:
0033 CFFF RJMP _exit
FILE: E:\GetPower_M8_source\GetPower_M8.c
(0001)
(0002) //
(0003) /***********************************************************************************
(0004) Project: GetPower program (V0.6)
(0005) Filename: GetPower.c
(0006) Prozessor: Mega8 family
(0007) Compiler: ICCAVR Version 6.14
(0008) Autor: Dou
(0009) Copyrigth: (c) Sensirion AG
(0010) ***********************************************************************************/
(0011) /////////////////////////////////////////////////////////////
(0012) /*
(0013) 烟台国网中电自动化技术有限公司
(0014) 雷击模块程序(ICCAVR)
(0015) 作者:窦庚欣
(0016)
(0017)
(0018) */
(0019) #include<iom8v.h>
(0020) #include <math.h>
(0021) #include<macros.h>
(0022) #include<eeprom.h>
(0023) #include<string.h>
(0024) #include<stdio.h>
(0025)
(0026)
(0027)
(0028)
(0029) typedef unsigned char BOOLEAN;
(0030) typedef unsigned char INT8U;
(0031) typedef signed char INT8S;
(0032) typedef unsigned int INT16U;
(0033) typedef signed int INT16S;
(0034) typedef unsigned long INT32U;
(0035) typedef signed long INT32S;
(0036)
(0037) #define BIT_H(x) (1<<x)
(0038) #define BIT_L(x) (~(1<<x))
(0039)
(0040) #define LED_H (PORTD |= BIT_H(PD3))
(0041) #define LED_L (PORTD &= BIT_L(PD3))
(0042)
(0043)
(0044) #define fosc 7372800
(0045) #define baud 115200
(0046)
(0047) #define MS_COUNT fosc/1000/17 //延时计数
(0048) #define SR_NOP() asm("nop") //空指令
(0049)
(0050)
(0051)
(0052) #define BYTE unsigned char
(0053) #define WORD unsigned int
(0054)
(0055)
(0056) volatile static WORD adc_val; //AD最终结果
(0057) volatile static int Power_Low; //电压低标志
(0058) static WORD adc_first; //第1次AD标志
(0059)
(0060)
(0061)
(0062)
(0063)
(0064) void (*reset)(void)=0x0000;
(0065)
(0066) /////////////////////////////////////////////////////////////////////////////////
(0067)
(0068) void delay(WORD n)
(0069) {
(0070) while(--n){;}
_delay:
n --> R16
0034 01C8 MOVW R24,R16
0035 9701 SBIW R24,1
0036 018C MOVW R16,R24
0037 3000 CPI R16,0
0038 0701 CPC R16,R17
0039 F7D1 BNE 0x0034
003A 9508 RET
_sr_ms:
i --> R10
j --> R12
n --> R16
003B D14D RCALL push_gset4
(0071) }
(0072) //延时n毫秒
(0073) void sr_ms(WORD n)
(0074) { //延时n毫秒
(0075) WORD i,j;
(0076)
(0077) for(i=0; i<n; i++)
003C 24AA CLR R10
003D 24BB CLR R11
003E C015 RJMP 0x0054
(0078) for(j=0; j<MS_COUNT;j++);
003F 24CC CLR R12
0040 24DD CLR R13
0041 C003 RJMP 0x0045
0042 01C6 MOVW R24,R12
0043 9601 ADIW R24,1
0044 016C MOVW R12,R24
0045 EB41 LDI R20,0xB1
0046 E051 LDI R21,1
0047 E060 LDI R22,0
0048 E070 LDI R23,0
0049 0116 MOVW R2,R12
004A 2444 CLR R4
004B 2455 CLR R5
004C 1624 CP R2,R20
004D 0635 CPC R3,R21
004E 0646 CPC R4,R22
004F 0657 CPC R5,R23
0050 F38C BLT 0x0042
0051 01C5 MOVW R24,R10
0052 9601 ADIW R24,1
0053 015C MOVW R10,R24
0054 16A0 CP R10,R16
0055 06B1 CPC R11,R17
0056 F340 BCS 0x003F
0057 D12D RCALL pop_gset4
0058 9508 RET
_quarter_ms:
i --> R10
j --> R12
n --> R16
0059 D12F RCALL push_gset4
(0079) }
(0080)
(0081) /////////////////////////////////////////////////////////////
(0082) void quarter_ms(WORD n)
(0083) { //延时n毫秒
(0084) WORD i,j;
(0085)
(0086) for(i=0; i<n; i++)
005A 24AA CLR R10
005B 24BB CLR R11
005C C015 RJMP 0x0072
(0087) for(j=0; j<MS_COUNT/4;j++);
005D 24CC CLR R12
005E 24DD CLR R13
005F C003 RJMP 0x0063
0060 01C6 MOVW R24,R12
0061 9601 ADIW R24,1
0062 016C MOVW R12,R24
0063 E64C LDI R20,0x6C
0064 E050 LDI R21,0
0065 E060 LDI R22,0
0066 E070 LDI R23,0
0067 0116 MOVW R2,R12
0068 2444 CLR R4
0069 2455 CLR R5
006A 1624 CP R2,R20
006B 0635 CPC R3,R21
006C 0646 CPC R4,R22
006D 0657 CPC R5,R23
006E F38C BLT 0x0060
006F 01C5 MOVW R24,R10
0070 9601 ADIW R24,1
0071 015C MOVW R10,R24
0072 16A0 CP R10,R16
0073 06B1 CPC R11,R17
0074 F340 BCS 0x005D
0075 D10F RCALL pop_gset4
0076 9508 RET
_half_ms:
i --> R10
j --> R12
n --> R16
0077 D111 RCALL push_gset4
(0088) }
(0089)
(0090) /////////////////////////////////////////////////////////////
(0091) void half_ms(WORD n)
(0092) { //延时n毫秒
(0093) WORD i,j;
(0094)
(0095) for(i=0; i<n; i++)
0078 24AA CLR R10
0079 24BB CLR R11
007A C015 RJMP 0x0090
(0096) for(j=0; j<MS_COUNT/2;j++);
007B 24CC CLR R12
007C 24DD CLR R13
007D C003 RJMP 0x0081
007E 01C6 MOVW R24,R12
007F 9601 ADIW R24,1
0080 016C MOVW R12,R24
0081 ED48 LDI R20,0xD8
0082 E050 LDI R21,0
0083 E060 LDI R22,0
0084 E070 LDI R23,0
0085 0116 MOVW R2,R12
0086 2444 CLR R4
0087 2455 CLR R5
0088 1624 CP R2,R20
0089 0635 CPC R3,R21
008A 0646 CPC R4,R22
008B 0657 CPC R5,R23
008C F38C BLT 0x007E
008D 01C5 MOVW R24,R10
008E 9601 ADIW R24,1
008F 015C MOVW R10,R24
0090 16A0 CP R10,R16
0091 06B1 CPC R11,R17
0092 F340 BCS 0x007B
0093 D0F1 RCALL pop_gset4
0094 9508 RET
_ms:
i --> R10
j --> R12
n --> R16
0095 D0F3 RCALL push_gset4
(0097) }
(0098)
(0099) void ms(WORD n)
(0100) { //延时n毫秒
(0101) WORD i,j;
(0102)
(0103) for(i=0; i<n; i++){WDR();
0096 24AA CLR R10
0097 24BB CLR R11
0098 C016 RJMP 0x00AF
0099 95A8 WDR
(0104) for(j=0; j<MS_COUNT;j++);}
009A 24CC CLR R12
009B 24DD CLR R13
009C C003 RJMP 0x00A0
009D 01C6 MOVW R24,R12
009E 9601 ADIW R24,1
009F 016C MOVW R12,R24
00A0 EB41 LDI R20,0xB1
00A1 E051 LDI R21,1
00A2 E060 LDI R22,0
00A3 E070 LDI R23,0
00A4 0116 MOVW R2,R12
00A5 2444 CLR R4
00A6 2455 CLR R5
00A7 1624 CP R2,R20
00A8 0635 CPC R3,R21
00A9 0646 CPC R4,R22
00AA 0657 CPC R5,R23
00AB F38C BLT 0x009D
00AC 01C5 MOVW R24,R10
00AD 9601 ADIW R24,1
00AE 015C MOVW R10,R24
00AF 16A0 CP R10,R16
00B0 06B1 CPC R11,R17
00B1 F338 BCS 0x0099
00B2 D0D2 RCALL pop_gset4
00B3 9508 RET
_us:
i --> R10
j --> R12
n --> R16
00B4 D0D4 RCALL push_gset4
(0105) }
(0106)
(0107) void us(WORD n)
(0108) { //延时n毫秒
(0109) WORD i,j;
(0110)
(0111) for(i=0; i<n; i++)
00B5 24AA CLR R10
00B6 24BB CLR R11
00B7 C015 RJMP 0x00CD
(0112) for(j=0; j<MS_COUNT/1000;j++);
00B8 24CC CLR R12
00B9 24DD CLR R13
00BA C003 RJMP 0x00BE
00BB 01C6 MOVW R24,R12
00BC 9601 ADIW R24,1
00BD 016C MOVW R12,R24
00BE E040 LDI R20,0
00BF E050 LDI R21,0
00C0 E060 LDI R22,0
00C1 E070 LDI R23,0
00C2 0116 MOVW R2,R12
00C3 2444 CLR R4
00C4 2455 CLR R5
00C5 1624 CP R2,R20
00C6 0635 CPC R3,R21
00C7 0646 CPC R4,R22
00C8 0657 CPC R5,R23
00C9 F38C BLT 0x00BB
00CA 01C5 MOVW R24,R10
00CB 9601 ADIW R24,1
00CC 015C MOVW R10,R24
00CD 16A0 CP R10,R16
00CE 06B1 CPC R11,R17
00CF F340 BCS 0x00B8
00D0 D0B4 RCALL pop_gset4
00D1 9508 RET
_delay_s:
i --> R20
n --> R22
00D2 D0BA RCALL push_gset2
00D3 01B8 MOVW R22,R16
(0113) }
(0114)
(0115) /////////////////////////////////////////////////////////////
(0116) void delay_s(WORD n)
(0117) {
(0118) WORD i;
(0119) for ( i=0; i<10*n; i++ ) ms(100);
00D4 2744 CLR R20
00D5 2755 CLR R21
00D6 C005 RJMP 0x00DC
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -