📄 system_init.lis
字号:
.module system_init.c
.area text(rom, con, rel)
0000 .dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\system_init.c
0000 .dbfunc e init_devices _init_devices fV
.even
0000 _init_devices::
0000 2297 sbiw R28,2
0002 .dbline -1
0002 .dbline 8
0002 ; #include <iom8v.h> //和单片机类型相对应的头文件,选择Atmega8做实验;
0002 ; #include <macros.h>
0002 ; #include "discharge.h"
0002 ; #include <stdio.h>
0002 ; #include "LCD_1602.h"
0002 ;
0002 ; void init_devices(void)
0002 ; {
0002 .dbline 9
0002 ; CLI(); //禁止所有中断
0002 F894 cli
0004 .dbline 10
0004 ; MCUCR = 0x00;
0004 2224 clr R2
0006 25BE out 0x35,R2
0008 .dbline 11
0008 ; MCUCSR = 0x80;//禁止JTAG
0008 80E8 ldi R24,128
000A 84BF out 0x34,R24
000C .dbline 12
000C ; GICR = 0x00;
000C 2BBE out 0x3b,R2
000E .dbline 13
000E ; port_init();
000E 13D0 rcall _port_init
0010 .dbline 14
0010 ; usart_init();
0010 1BD0 rcall _usart_init
0012 .dbline 15
0012 ; timer1_init(10,10,4000);//PWM上限 4000
0012 80EA ldi R24,4000
0014 9FE0 ldi R25,15
0016 9983 std y+1,R25
0018 8883 std y+0,R24
001A 2AE0 ldi R18,10
001C 30E0 ldi R19,0
001E 0AE0 ldi R16,10
0020 10E0 ldi R17,0
0022 2AD0 rcall _timer1_init
0024 .dbline 16
0024 ; timer2_init();
0024 1CD0 rcall _timer2_init
0026 .dbline 17
0026 ; AD_init();
0026 3DD0 rcall _AD_init
0028 .dbline 18
0028 ; LCD_init();
0028 00D0 rcall _LCD_init
002A .dbline 19
002A ; delay_nms(10);
002A 0AE0 ldi R16,10
002C 10E0 ldi R17,0
002E 60D0 rcall _delay_nms
0030 .dbline 20
0030 ; SEI();//开全局中断
0030 7894 sei
0032 .dbline -2
0032 L1:
0032 2296 adiw R28,2
0034 .dbline 0 ; func end
0034 0895 ret
0036 .dbend
0036 .dbfunc e port_init _port_init fV
.even
0036 _port_init::
0036 .dbline -1
0036 .dbline 25
0036 ; }
0036 ;
0036 ; //端口初始化
0036 ; void port_init(void)
0036 ; {
0036 .dbline 26
0036 ; DDRB&=~(1<<0)|(1<<3)|(1<<4)|(1<<5);//KEY 输入
0036 B898 cbi 0x17,0
0038 .dbline 27
0038 ; PORTB|=(1<<0)|(1<<3)|(1<<4)|(1<<5);//KEY 开上拉
0038 88B3 in R24,0x18
003A 8963 ori R24,57
003C 88BB out 0x18,R24
003E .dbline 28
003E ; DDRC|=(1<<4)|(1<<5);//LED_G LED_R
003E 84B3 in R24,0x14
0040 8063 ori R24,48
0042 84BB out 0x14,R24
0044 .dbline 29
0044 ; DDRB&=~(1<<1)|(1<<2);//PWMA PWMB 设为输入,即关闭
0044 B998 cbi 0x17,1
0046 .dbline -2
0046 L2:
0046 .dbline 0 ; func end
0046 0895 ret
0048 .dbend
0048 .dbfunc e usart_init _usart_init fV
.even
0048 _usart_init::
0048 .dbline -1
0048 .dbline 34
0048 ; }
0048 ;
0048 ; //串口通信初始化//38400kbps
0048 ; void usart_init(void)
0048 ; {
0048 .dbline 35
0048 ; UCSRB = 0x00;//禁止中断
0048 2224 clr R2
004A 2AB8 out 0xa,R2
004C .dbline 36
004C ; UCSRA = 0x00;
004C 2BB8 out 0xb,R2
004E .dbline 37
004E ; UCSRC = BIT(URSEL) | 0x06;
004E 86E8 ldi R24,134
0050 80BD out 0x20,R24
0052 .dbline 38
0052 ; UBRRL = 0x0C;
0052 8CE0 ldi R24,12
0054 89B9 out 0x9,R24
0056 .dbline 39
0056 ; UBRRH = 0x00;
0056 20BC out 0x20,R2
0058 .dbline 40
0058 ; UCSRB = 0x18;
0058 88E1 ldi R24,24
005A 8AB9 out 0xa,R24
005C .dbline -2
005C L3:
005C .dbline 0 ; func end
005C 0895 ret
005E .dbend
005E .dbfunc e timer2_init _timer2_init fV
.even
005E _timer2_init::
005E .dbline -1
005E .dbline 45
005E ; }
005E ;
005E ; //定时器T2初始化
005E ; void timer2_init(void)
005E ; {
005E .dbline 46
005E ; TCCR2 = 0x00;//停止定时器
005E 2224 clr R2
0060 25BC out 0x25,R2
0062 .dbline 47
0062 ; ASSR = 0x00;//异步时钟模式
0062 22BC out 0x22,R2
0064 .dbline 48
0064 ; TCNT2 = 0x06;//初始值
0064 86E0 ldi R24,6
0066 84BD out 0x24,R24
0068 .dbline 49
0068 ; OCR2 = 0x05;//匹配值
0068 85E0 ldi R24,5
006A 83BD out 0x23,R24
006C .dbline 50
006C ; TIMSK |= 0x40;//中断允许
006C 89B7 in R24,0x39
006E 8064 ori R24,64
0070 89BF out 0x39,R24
0072 .dbline 51
0072 ; TCCR2 = 0x06;//启动定时器
0072 86E0 ldi R24,6
0074 85BD out 0x25,R24
0076 .dbline -2
0076 L4:
0076 .dbline 0 ; func end
0076 0895 ret
0078 .dbend
0078 .dbfunc e timer1_init _timer1_init fV
0078 ; top -> y+0
0078 ; b -> R18,R19
0078 ; a -> R16,R17
.even
0078 _timer1_init::
0078 .dbline -1
0078 .dbline 56
0078 ; }
0078 ;
0078 ; //定时T1初始化
0078 ; void timer1_init(unsigned int a,unsigned int b,unsigned int top)
0078 ; {
0078 .dbline 57
0078 ; TCCR1B = 0x00;//停止定时器
0078 2224 clr R2
007A 2EBC out 0x2e,R2
007C .dbline 58
007C ; TIMSK |= 0x00;//中断允许
007C 29B6 in R2,0x39
007E 29BE out 0x39,R2
0080 .dbline 59
0080 ; TCNT1H = 0x00;
0080 2224 clr R2
0082 2DBC out 0x2d,R2
0084 .dbline 60
0084 ; TCNT1L = 0x00;//初始值
0084 2CBC out 0x2c,R2
0086 .dbline 61
0086 ; OCR1A=a;//匹配A值
0086 1BBD out 0x2b,R17
0088 0ABD out 0x2a,R16
008A .dbline 62
008A ; OCR1B=b;//匹配B值
008A 39BD out 0x29,R19
008C 28BD out 0x28,R18
008E .dbline 63
008E ; ICR1=top-1;//输入捕捉匹配值
008E 8881 ldd R24,y+0
0090 9981 ldd R25,y+1
0092 0197 sbiw R24,1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -