📄 init.lis
字号:
.module init.c
.area text(rom, con, rel)
0000 .dbfile D:\hujie\init.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 26
0000 ; // init.c
0000 ; //
0000 ;
0000 ; #include <io8515v.h>
0000 ; #include <macros.h>
0000 ; #include "1602LCD.h"
0000 ; #include "PID.h"
0000 ; #include "main.h"
0000 ;
0000 ; // ADC寄存器
0000 ; #define ADCCR (*(volatile unsigned char *) 0x4000) // ADC控制器
0000 ; #define ADCH (*(volatile unsigned char *) 0x4001) // 高4位寄存器
0000 ; #define ADCL (*(volatile unsigned char *) 0x4000) // 低8位寄存器
0000 ; // DAC寄存器
0000 ; #define DAC1 (*(volatile unsigned char *) 0x8000) // 通道1
0000 ; #define DAC2 (*(volatile unsigned char *) 0x8001) // 通道2
0000 ; #define DAC3 (*(volatile unsigned char *) 0x8002) // 通道3
0000 ; #define DAC4 (*(volatile unsigned char *) 0x8003) // 通道4
0000 ; #define DACEN (*(volatile unsigned char *) 0xc000) // 转换开始
0000 ;
0000 ; //#define K0 32.76 // DAC转换系数
0000 ; //#define K1 2.01 // ADC转换系数
0000 ;
0000 ; // 端口初始化
0000 ; void port_init(void)
0000 ; {
0000 .dbline 27
0000 ; PORTA = 0xFF;
0000 8FEF ldi R24,255
0002 8BBB out 0x1b,R24
0004 .dbline 28
0004 ; DDRA = 0x00;
0004 2224 clr R2
0006 2ABA out 0x1a,R2
0008 .dbline 29
0008 ; PORTB = 0xFF;
0008 88BB out 0x18,R24
000A .dbline 30
000A ; DDRB = 0xFF;
000A 87BB out 0x17,R24
000C .dbline 31
000C ; PORTC = 0xFF;
000C 85BB out 0x15,R24
000E .dbline 32
000E ; DDRC = 0x00;
000E 24BA out 0x14,R2
0010 .dbline 33
0010 ; PORTD = 0xFF;
0010 82BB out 0x12,R24
0012 .dbline 34
0012 ; DDRD = 0x04;
0012 84E0 ldi R24,4
0014 81BB out 0x11,R24
0016 .dbline -2
0016 .dbline 35
0016 ; }
0016 L1:
0016 .dbline 0 ; func end
0016 0895 ret
0018 .dbend
0018 .dbfunc e timer0_init _timer0_init fV
.even
0018 _timer0_init::
0018 .dbline -1
0018 .dbline 38
0018 ; // TIMER0初始化
0018 ; void timer0_init(void)
0018 ; {
0018 .dbline 39
0018 ; TCCR0 = 0x00; //stop timer
0018 2224 clr R2
001A 23BE out 0x33,R2
001C .dbline 40
001C ; TCNT0 = 0xD9; //set count value
001C 89ED ldi R24,217
001E 82BF out 0x32,R24
0020 .dbline 41
0020 ; TCCR0 = 0x05; //start timer
0020 85E0 ldi R24,5
0022 83BF out 0x33,R24
0024 .dbline -2
0024 .dbline 42
0024 ; }
0024 L2:
0024 .dbline 0 ; func end
0024 0895 ret
0026 .dbend
0026 .dbfunc e timer1_init _timer1_init fV
.even
0026 _timer1_init::
0026 .dbline -1
0026 .dbline 45
0026 ; // TIMER1初始化
0026 ; void timer1_init(void)
0026 ; {
0026 .dbline 46
0026 ; TCCR1A = 0x00;
0026 2224 clr R2
0028 2FBC out 0x2f,R2
002A .dbline 47
002A ; TCCR1B = 0x00; //stop
002A 2EBC out 0x2e,R2
002C .dbline 48
002C ; OCR1AH = 0x07;
002C 87E0 ldi R24,7
002E 8BBD out 0x2b,R24
0030 .dbline 49
0030 ; OCR1AL = 0xD0;
0030 80ED ldi R24,208
0032 8ABD out 0x2a,R24
0034 .dbline 50
0034 ; OCR1BH = 0x07;
0034 87E0 ldi R24,7
0036 89BD out 0x29,R24
0038 .dbline 51
0038 ; OCR1BL = 0xD0;
0038 80ED ldi R24,208
003A 88BD out 0x28,R24
003C .dbline 52
003C ; TCNT1H = 0xF8; //setup
003C 88EF ldi R24,248
003E 8DBD out 0x2d,R24
0040 .dbline 53
0040 ; TCNT1L = 0x30;
0040 80E3 ldi R24,48
0042 8CBD out 0x2c,R24
0044 .dbline 54
0044 ; TCCR1B = 0x02; //start Timer
0044 82E0 ldi R24,2
0046 8EBD out 0x2e,R24
0048 .dbline -2
0048 .dbline 55
0048 ; }
0048 L3:
0048 .dbline 0 ; func end
0048 0895 ret
004A .dbend
004A .dbfunc e data_init _data_init fV
004A ; i -> R20,R21
004A ; data -> R22,R23
.even
004A _data_init::
004A 00D0 rcall push_gset2
004C 602F mov R22,R16
004E 712F mov R23,R17
0050 .dbline -1
0050 .dbline 58
0050 ; // 数据格式转换
0050 ; void data_init(unsigned int data)
0050 ; {
0050 .dbline 61
0050 ; int i;
0050 ;
0050 ; for(i=4;i>=0;i--)
0050 44E0 ldi R20,4
0052 50E0 ldi R21,0
0054 L5:
0054 .dbline 62
0054 .dbline 63
0054 2AE0 ldi R18,10
0056 30E0 ldi R19,0
0058 062F mov R16,R22
005A 172F mov R17,R23
005C 00D0 rcall mod16u
005E 80E0 ldi R24,<_value_table
0060 90E0 ldi R25,>_value_table
0062 E42F mov R30,R20
0064 F52F mov R31,R21
0066 E80F add R30,R24
0068 F91F adc R31,R25
006A 0083 std z+0,R16
006C .dbline 64
006C 2AE0 ldi R18,10
006E 30E0 ldi R19,0
0070 062F mov R16,R22
0072 172F mov R17,R23
0074 00D0 rcall div16u
0076 602F mov R22,R16
0078 712F mov R23,R17
007A .dbline 65
007A L6:
007A .dbline 61
007A 4150 subi R20,1
007C 5040 sbci R21,0
007E .dbline 61
007E 4030 cpi R20,0
0080 E0E0 ldi R30,0
0082 5E07 cpc R21,R30
0084 3CF7 brge L5
0086 .dbline -2
0086 .dbline 66
0086 ; {
0086 ; value_table[i]=data%10;
0086 ; data/=10;
0086 ; }
0086 ; }
0086 L4:
0086 00D0 rcall pop_gset2
0088 .dbline 0 ; func end
0088 0895 ret
008A .dbsym r i 20 I
008A .dbsym r data 22 i
008A .dbend
008A .dbfunc e init_devices _init_devices fV
.even
008A _init_devices::
008A 00D0 rcall push_gset1
008C 2697 sbiw R28,6
008E .dbline -1
008E .dbline 70
008E ;
008E ; // 初始化
008E ; void init_devices(void)
008E ; {
008E .dbline 71
008E ; CLI();
008E F894 cli
0090 .dbline 72
0090 ; port_init();
0090 B7DF rcall _port_init
0092 .dbline 73
0092 ; timer0_init();
0092 C2DF rcall _timer0_init
0094 .dbline 74
0094 ; timer1_init();
0094 C8DF rcall _timer1_init
0096 .dbline 75
0096 ; LCD_init();
0096 00D0 rcall _LCD_init
0098 .dbline 77
0098 ;
0098 ; MCUCR = 0xC2; // 外部SRAM访问
0098 82EC ldi R24,194
009A 85BF out 0x35,R24
009C .dbline 78
009C ; GIMSK = 0x40; // INT0中断
009C 80E4 ldi R24,64
009E 8BBF out 0x3b,R24
00A0 .dbline 79
00A0 ; TIMSK = 0x82; // T/C0、T/C1中断
00A0 82E8 ldi R24,130
00A2 89BF out 0x39,R24
00A4 .dbline 81
00A4 ;
00A4 ; ADCCR=0x60; // 开启ADC
00A4 80E6 ldi R24,96
00A6 80930040 sts 16384,R24
00AA .dbline 82
00AA ; ADCCR=0x40;
00AA 80E4 ldi R24,64
00AC 80930040 sts 16384,R24
00B0 .dbline 84
00B0 ;
00B0 ; DAC1=0; // 开启DAC通道1
00B0 2224 clr R2
00B2 20920080 sts 32768,R2
00B6 .dbline 85
00B6 ; DAC2=0; // 开启DAC通道2
00B6 20920180 sts 32769,R2
00BA .dbline 86
00BA ; DAC3=0; // 开启DAC通道3
00BA 20920280 sts 32770,R2
00BE .dbline 87
00BE ; DAC4=DAC4_value; // 开启DAC通道4
00BE 20900000 lds R2,_DAC4_value
00C2 20920380 sts 32771,R2
00C6 .dbline 88
00C6 ; DACEN=0;
00C6 2224 clr R2
00C8 209200C0 sts 49152,R2
00CC .dbline 90
00CC ;
00CC ; LCD_write_string(0,0,"O:0020 R:0000 mA");
00CC 80E0 ldi R24,<L10
00CE 90E0 ldi R25,>L10
00D0 9983 std y+1,R25
00D2 8883 std y+0,R24
00D4 2227 clr R18
00D6 0027 clr R16
00D8 00D0 rcall _LCD_write_string
00DA .dbline 91
00DA ; LCD_write_string(0,1," ^ +/-ing...");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -