📄 signal.lst
字号:
__text_start:
__start:
96 E5CF LDI R28,0x5F
97 E0D2 LDI R29,2
98 BFCD OUT 0x3D,R28
99 BFDE OUT 0x3E,R29
9A 51CE SUBI R28,0x1E
9B 40D0 SBCI R29,0
9C EA0A LDI R16,0xAA
9D 8308 STD Y+0,R16
9E 2400 CLR R0
9F E6E9 LDI R30,0x69
A0 E0F0 LDI R31,0
A1 E010 LDI R17,0
A2 36EA CPI R30,0x6A
A3 07F1 CPC R31,R17
A4 F011 BEQ 0x00A7
A5 9201 ST R0,Z+
A6 CFFB RJMP 0x00A2
A7 8300 STD Z+0,R16
A8 E2E2 LDI R30,0x22
A9 E0F1 LDI R31,1
AA E6A0 LDI R26,0x60
AB E0B0 LDI R27,0
AC E011 LDI R17,1
AD E000 LDI R16,0
AE BF0B OUT 0x3B,R16
AF 32EB CPI R30,0x2B
B0 07F1 CPC R31,R17
B1 F021 BEQ 0x00B6
B2 95C8 LPM
B3 9631 ADIW R30,1
B4 920D ST R0,X+
B5 CFF9 RJMP 0x00AF
B6 D11D RCALL _main
_exit:
B7 CFFF RJMP _exit
_delay:
i --> R20
j --> R22
ms --> R16
B8 D120 RCALL push_xgsetF000
FILE: E:\OK\DA0832\signal.C
(0001) //ICC-AVR application builder : 2008-9-7 11:00:08
(0002) // Target : M8515
(0003) // Crystal: 16.000Mhz
(0004)
(0005) #include <iom8515v.h>
(0006) #include <macros.h>
(0007)
(0008)
(0009) #define uchar unsigned char
(0010) #define uint unsigned int
(0011)
(0012) #define data1 PORTB
(0013)
(0014) uchar h=0,j=0,k=0,func,th1=0xE7,tl1=0;
(0015) uchar f1=0x06,f2=0; //250Hz的步进
(0016) uint i=0;
(0017) #pragma data:code
(0018) const uchar sin_table[256]=
(0019) {
(0020) 0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,
(0021) 0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,
(0022) 0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf4,
(0023) 0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,
(0024) 0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,
(0025) 0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe3,0xe1,0xde,0xdc,
(0026) 0xda,0xd8,0xd6,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb4,
(0027) 0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x92,0x8f,0x8c,0x89,0x86,0x83,
(0028) 0x80,0x7d,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x64,0x61,0x5e,0x5b,0x58,0x55,0x52,
(0029) 0x4f,0x4c,0x49,0x46,0x43,0x41,0x3e,0x3b,0x39,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,
(0030) 0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x14,0x12,0x10,0xf,0xd,0xc,0xb,0x9,
(0031) 0x8,0x7,0x6,0x5,0x4,0x3,0x3,0x2,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
(0032) 0x0,0x1,0x1,0x2,0x3,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xa,0xc,0xd,0xe,0x10,0x12,0x13,
(0033) 0x15,0x17,0x18,0x1a,0x1c,0x1e,0x20,0x23,0x25,0x27,0x29,0x2c,0x2e,0x30,0x33,0x35,
(0034) 0x38,0x3b,0x3d,0x40,0x43,0x46,0x48,0x4b,0x4e,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,
(0035) 0x66,0x69,0x6c,0x6f,0x73,0x76,0x79,0x7c
(0036) };
(0037) void delay(uint ms)
(0038) {
(0039) uint i,j;
(0040) for(i=0;i<ms;i++)
B9 2744 CLR R20
BA 2755 CLR R21
BB C00B RJMP 0x00C7
(0041) {
(0042) for(j=0;j<1141;j++);
BC 2766 CLR R22
BD 2777 CLR R23
BE C002 RJMP 0x00C1
BF 5F6F SUBI R22,0xFF
C0 4F7F SBCI R23,0xFF
C1 3765 CPI R22,0x75
C2 E0E4 LDI R30,4
C3 077E CPC R23,R30
C4 F3D0 BCS 0x00BF
C5 5F4F SUBI R20,0xFF
C6 4F5F SBCI R21,0xFF
C7 1740 CP R20,R16
C8 0751 CPC R21,R17
C9 F390 BCS 0x00BC
CA C113 RJMP pop_xgsetF000
(0043) }
(0044) }
(0045)
(0046) void port_init(void)
(0047) {
(0048) PORTB = 0x00;
_port_init:
CB 2422 CLR R2
CC BA28 OUT 0x18,R2
(0049) DDRB = 0xff;
CD EF8F LDI R24,0xFF
CE BB87 OUT 0x17,R24
(0050) PORTC = 0x00;
CF BA25 OUT 0x15,R2
(0051) DDRC = 0xff;
D0 BB84 OUT 0x14,R24
(0052) PORTD = 0x00;
D1 BA22 OUT 0x12,R2
(0053) DDRD = 0x01;
D2 E081 LDI R24,1
D3 BB81 OUT 0x11,R24
(0054) PORTE = 0x00;
D4 B827 OUT 0x07,R2
(0055) DDRE = 0x00;
D5 B826 OUT 0x06,R2
D6 9508 RET
(0056) }
(0057)
(0058) //TIMER1 initialize - prescale:1
(0059) // WGM: 0) Normal, TOP=0xFFFF
(0060) // desired value: 400uSec
(0061) // actual value: 400.000uSec (0.0%)
(0062) void timer1_init(void)
(0063) {
(0064) TCCR1B = 0x00; //stop
_timer1_init:
D7 2422 CLR R2
D8 BC2E OUT 0x2E,R2
(0065) TCNT1H = th1; //setup //th1,tl1用来改变频率
D9 9020 0063 LDS R2,th1
DB BC2D OUT 0x2D,R2
(0066) TCNT1L = tl1;
DC 9020 0064 LDS R2,tl1
DE BC2C OUT 0x2C,R2
(0067) OCR1AH = 0x20;
DF E280 LDI R24,0x20
E0 BD8B OUT 0x2B,R24
(0068) OCR1AL = 0x00;
E1 2422 CLR R2
E2 BC2A OUT 0x2A,R2
(0069) OCR1BH = 0x20;
E3 BD89 OUT 0x29,R24
(0070) OCR1BL = 0x00;
E4 BC28 OUT 0x28,R2
(0071) TCCR1A = 0x00;
E5 BC2F OUT 0x2F,R2
(0072) TCCR1B = 0x01; //start Timer
E6 E081 LDI R24,1
E7 BD8E OUT 0x2E,R24
E8 9508 RET
_timer1_ovf_isr:
E9 922A ST R2,-Y
EA 923A ST R3,-Y
EB 924A ST R4,-Y
EC 925A ST R5,-Y
ED 938A ST R24,-Y
EE 939A ST R25,-Y
EF 93EA ST R30,-Y
F0 93FA ST R31,-Y
F1 B62F IN R2,0x3F
F2 922A ST R2,-Y
(0073) }
(0074) #pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVF
(0075) void timer1_ovf_isr(void)
(0076) {
(0077) TCCR1B = 0x00; //stop
F3 2422 CLR R2
F4 BC2E OUT 0x2E,R2
(0078) TCNT1H = th1; //reload counter high value
F5 9020 0063 LDS R2,th1
F7 BC2D OUT 0x2D,R2
(0079) TCNT1L = tl1; //reload counter low value
F8 9020 0064 LDS R2,tl1
FA BC2C OUT 0x2C,R2
(0080) //func=1; //设置调试点,计算时间
(0081) if(func==1) //正弦波
FB 9180 0069 LDS R24,func
FD 3081 CPI R24,1
FE F479 BNE 0x010E
(0082) {
(0083) data1=sin_table[j++];
FF 9020 0061 LDS R2,j
101 2433 CLR R3
102 2D82 MOV R24,R2
103 5F8F SUBI R24,0xFF
104 9380 0061 STS j,R24
106 E282 LDI R24,0x22
107 E090 LDI R25,0
108 2DE2 MOV R30,R2
109 27FF CLR R31
10A 0FE8 ADD R30,R24
10B 1FF9 ADC R31,R25
10C 9024 LPM R2,0(Z)
10D BA28 OUT 0x18,R2
(0084) }
(0085) //func++; //设置调试点
(0086) if(func==2) // 锯齿波
10E 9180 0069 LDS R24,func
110 3082 CPI R24,2
111 F4A9 BNE 0x0127
(0087) {
(0088) if(h<128)
112 9180 0060 LDS R24,h
114 3880 CPI R24,0x80
115 F410 BCC 0x0118
(0089) data1=h;
116 BB88 OUT 0x18,R24
117 C009 RJMP 0x0121
(0090) else
(0091) data1=255-h;
118 9020 0060 LDS R2,h
11A 2433 CLR R3
11B EF8F LDI R24,0xFF
11C E090 LDI R25,0
11D 012C MOVW R4,R24
11E 1842 SUB R4,R2
11F 0853 SBC R5,R3
120 BA48 OUT 0x18,R4
(0092) h++;
121 9180 0060 LDS R24,h
123 5F8F SUBI R24,0xFF
124 9380 0060 STS h,R24
(0093) }
126 C013 RJMP 0x013A
(0094) else if(func==3) // 方波
127 9180 0069 LDS R24,func
129 3083 CPI R24,3
12A F479 BNE 0x013A
(0095) {
(0096) k++;
12B 9180 0062 LDS R24,k
12D 5F8F SUBI R24,0xFF
12E 9380 0062 STS k,R24
(0097) if(k<=127)
130 E78F LDI R24,0x7F
131 9020 0062 LDS R2,k
133 1582 CP R24,R2
134 F018 BCS 0x0138
(0098) data1=0x00;
135 2422 CLR R2
136 BA28 OUT 0x18,R2
137 C002 RJMP 0x013A
(0099) else
(0100) data1=0xff;
138 EF8F LDI R24,0xFF
139 BB88 OUT 0x18,R24
(0101)
(0102) }
(0103)
(0104) TCCR1B = 0x01; //start Timer
13A E081 LDI R24,1
13B BD8E OUT 0x2E,R24
13C 9029 LD R2,Y+
13D BE2F OUT 0x3F,R2
13E 91F9 LD R31,Y+
13F 91E9 LD R30,Y+
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -