📄 init.lis
字号:
.module init.c
.area text(rom, con, rel)
0000 .dbfile D:\MY_COMPUTER\d\avr16\atmegal16\init.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 28
0000 ;
0000 ;
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ; #include "Uart.h"
0000 ; #include "init.h"
0000 ; //============================================================
0000 ; //计算和设置16的特率参数 覃道堂 2007-01-16
0000 ; #define BAUD 9600
0000 ; #define CRYSTAL 4000000
0000 ; #define BAUD_SETTING (unsigned char)((unsigned long)CRYSTAL/(16*(unsigned long)BAUD)-1)
0000 ; #define BAUD_H (unsigned char)(BAUD_SETTING>>8)
0000 ; #define BAUD_L (unsigned char)BAUD_SETTING
0000 ;
0000 ; /**************************************
0000 ; **芯片类型:ATmega16
0000 ; **时钟频率:8M
0000 ; **硬件接口说明:
0000 ; PD0:串口接收 主要用于232/485的接收
0000 ; PD1:串口发送 主要用于232/485的发送
0000 ; PD2:主要用于对超声波变送器的收到回波的检测(连到Pin5)
0000 ; PD3:主要用于对超声波的开始检测的触发(连到Pin3)
0000 ; PD4:主要用于485收发的使能
0000 ; PD5:用于超声波范围控制引脚1(置为内部上拉)
0000 ; PD6:用于超声波范围控制引脚2(置为内部上拉)
0000 ; **************************************/
0000 ; void port_init(void) //ATMEGA16口的初始化
0000 ; {
0000 .dbline 29
0000 ; PORTA = 0x20;
0000 80E2 ldi R24,32
0002 8BBB out 0x1b,R24
0004 .dbline 30
0004 ; DDRA |= 0x20;
0004 D59A sbi 0x1a,5
0006 .dbline 31
0006 ; PORTB = 0x00;
0006 2224 clr R2
0008 28BA out 0x18,R2
000A .dbline 32
000A ; DDRB = 0x00;
000A 27BA out 0x17,R2
000C .dbline 33
000C ; PORTC = 0x00;
000C 25BA out 0x15,R2
000E .dbline 34
000E ; DDRC = 0x00;
000E 24BA out 0x14,R2
0010 .dbline 35
0010 ; PORTD = 0x80;
0010 80E8 ldi R24,128
0012 82BB out 0x12,R24
0014 .dbline 36
0014 ; DDRD = 0x80;//口初始化,初始化PD.3口为输出
0014 81BB out 0x11,R24
0016 .dbline -2
0016 .dbline 37
0016 ; }
0016 L1:
0016 .dbline 0 ; func end
0016 0895 ret
0018 .dbend
0018 .dbfunc e uart0_init _uart0_init fV
.even
0018 _uart0_init::
0018 .dbline -1
0018 .dbline 49
0018 ; //============================================================
0018 ; //函 数:void Init_Com(void)
0018 ; //功 能:初始化串口设置
0018 ; //入口参数:无
0018 ; //返 回 值:无
0018 ; //设 计 者:覃道堂
0018 ; //创作时间:2007-01-16
0018 ; //修改时间:
0018 ; //修改目的:
0018 ; //============================================================
0018 ; void uart0_init(void)
0018 ; {
0018 .dbline 50
0018 ; UCSRB = 0x00; //disable while setting baud rate
0018 2224 clr R2
001A 2AB8 out 0xa,R2
001C .dbline 51
001C ; UCSRA = 0x00;
001C 2BB8 out 0xb,R2
001E .dbline 52
001E ; UCSRC = BIT(URSEL) | 0x06;
001E 86E8 ldi R24,134
0020 80BD out 0x20,R24
0022 .dbline 53
0022 ; UBRRL =BAUD_L;//设置波特率为9600
0022 89E1 ldi R24,25
0024 89B9 out 0x9,R24
0026 .dbline 54
0026 ; UBRRH =BAUD_H;
0026 20BC out 0x20,R2
0028 .dbline 55
0028 ; UCSRB = 0x18;
0028 88E1 ldi R24,24
002A 8AB9 out 0xa,R24
002C .dbline -2
002C .dbline 56
002C ; }
002C L2:
002C .dbline 0 ; func end
002C 0895 ret
002E .dbend
002E .dbfunc e timer0_init _timer0_init fV
.even
002E _timer0_init::
002E .dbline -1
002E .dbline 71
002E ; /**************************************
002E ; **芯片类型:ATmega16
002E ; **时钟频率:8M
002E ; **硬件接口说明:无
002E ; **函数功能说明:对定时器0进行初始化,使定时器0的溢出频率为40HZ
002E ; **函数输入参数及说明:无
002E ; **函数返回值:无
002E ; **在本函数以外定义的变量:无
002E ; **调用的函数说明:无
002E ; **修改人:
002E ; **修改日期:
002E ; **修改说明:
002E ; **************************************/
002E ; void timer0_init(void)//定时器初始化
002E ; {
002E .dbline 72
002E ; TCCR0 = 0x00; //stop
002E 2224 clr R2
0030 23BE out 0x33,R2
0032 .dbline 73
0032 ; TCNT0 = 0x3D; //set count
0032 8DE3 ldi R24,61
0034 82BF out 0x32,R24
0036 .dbline 74
0036 ; OCR0 = 0xC3; //set compare
0036 83EC ldi R24,195
0038 8CBF out 0x3c,R24
003A .dbline -2
003A .dbline 75
003A ; }
003A L3:
003A .dbline 0 ; func end
003A 0895 ret
003C .dbend
003C .dbfunc e timer1_init _timer1_init fV
.even
003C _timer1_init::
003C .dbline -1
003C .dbline 90
003C ; /**************************************
003C ; **芯片类型:ATmega16
003C ; **时钟频率:4M
003C ; **硬件接口说明:无
003C ; **函数功能说明:对定时器1进行初始化,计数初值为0
003C ; **函数输入参数及说明:无
003C ; **函数返回值:无
003C ; **在本函数以外定义的变量:无
003C ; **调用的函数说明:无
003C ; **修改人:
003C ; **修改日期:
003C ; **修改说明:
003C ; **************************************/
003C ; void timer1_init(void)
003C ; {
003C .dbline 91
003C ; TCCR1B = 0x00; //stop
003C 2224 clr R2
003E 2EBC out 0x2e,R2
0040 .dbline 92
0040 ; TCNT1H = 0x00; //setup
0040 2DBC out 0x2d,R2
0042 .dbline 93
0042 ; TCNT1L = 0x00;
0042 2CBC out 0x2c,R2
0044 .dbline 94
0044 ; OCR1AH = 0xFF;
0044 8FEF ldi R24,255
0046 8BBD out 0x2b,R24
0048 .dbline 95
0048 ; OCR1AL = 0xFF;
0048 8ABD out 0x2a,R24
004A .dbline 96
004A ; OCR1BH = 0xFF;
004A 89BD out 0x29,R24
004C .dbline 97
004C ; OCR1BL = 0xFF;
004C 88BD out 0x28,R24
004E .dbline 98
004E ; TCCR1A = 0x00;
004E 2FBC out 0x2f,R2
0050 .dbline -2
0050 .dbline 99
0050 ; }
0050 L4:
0050 .dbline 0 ; func end
0050 0895 ret
0052 .dbend
0052 .dbfunc e ext_init _ext_init fV
.even
0052 _ext_init::
0052 .dbline -1
0052 .dbline 115
0052 ; /**************************************
0052 ; **芯片类型:ATmega16
0052 ; **时钟频率:8M
0052 ; **硬件接口说明:无
0052 ; **函数功能说明:对外部中断0进行初始化,设置为下降沿触发
0052 ; **函数输入参数及说明:无
0052 ; **函数返回值:无
0052 ; **在本函数以外定义的变量:无
0052 ; **调用的函数说明:无
0052 ; **修改人:
0052 ; **修改日期:
0052 ; **修改说明:
0052 ; **************************************/
0052 ;
0052 ; void ext_init(void)
0052 ; {
0052 .dbline 116
0052 ; MCUCR=0x02;
0052 82E0 ldi R24,2
0054 85BF out 0x35,R24
0056 .dbline 117
0056 ; GICR=0x40; //设置外中断0为下降沿触发
0056 80E4 ldi R24,64
0058 8BBF out 0x3b,R24
005A .dbline -2
005A .dbline 118
005A ; }
005A L5:
005A .dbline 0 ; func end
005A 0895 ret
005C .dbend
005C .dbfunc e init_devices _init_devices fV
.even
005C _init_devices::
005C .dbline -1
005C .dbline 134
005C ;
005C ; /**************************************
005C ; **芯片类型:ATmega16
005C ; **时钟频率:8M
005C ; **硬件接口说明:无
005C ; **函数功能说明:对端口、串口、定时器0、1进行初始化
005C ; **函数输入参数及说明:无
005C ; **函数返回值:无
005C ; **在本函数以外定义的变量:无
005C ; **调用的函数说明:port_init()、uart0_init()、timer0_init()、timer1_init()
005C ; **修改人:
005C ; **修改日期:
005C ; **修改说明:
005C ; **************************************/
005C ; void init_devices(void)
005C ; {
005C .dbline 135
005C ; CLI(); //关中断
005C F894 cli
005E .dbline 136
005E ; port_init();
005E D0DF xcall _port_init
0060 .dbline 137
0060 ; uart0_init();
0060 DBDF xcall _uart0_init
0062 .dbline 138
0062 ; timer0_init();
0062 E5DF xcall _timer0_init
0064 .dbline 139
0064 ; timer1_init();
0064 EBDF xcall _timer1_init
0066 .dbline 140
0066 ; MCUCR = 0x00;
0066 2224 clr R2
0068 25BE out 0x35,R2
006A .dbline 141
006A ; GICR = 0x00;
006A 2BBE out 0x3b,R2
006C .dbline 142
006C ; TIMSK = 0x05; //T/C0、1中断中断使能
006C 85E0 ldi R24,5
006E 89BF out 0x39,R24
0070 .dbline 144
0070 ;
0070 ; SEI(); //开中断
0070 7894 sei
0072 .dbline -2
0072 .dbline 145
0072 ; }
0072 L6:
0072 .dbline 0 ; func end
0072 0895 ret
0074 .dbend
0074 .dbfunc e watchdog_init _watchdog_init fV
.even
0074 _watchdog_init::
0074 .dbline -1
0074 .dbline 154
0074 ; //============================================================
0074 ; //看门狗初始化函数
0074 ; //
0074 ; //
0074 ; //
0074 ; //
0074 ; //============================================================
0074 ; void watchdog_init(void)
0074 ; {
0074 .dbline 155
0074 ; WDR(); //this prevents a timout on enabling
0074 A895 wdr
0076 .dbline 156
0076 ; WDTCR = 0x08; //WATCHDOG ENABLED - dont forget to issue WDRs
0076 88E0 ldi R24,8
0078 81BD out 0x21,R24
007A .dbline -2
007A .dbline 157
007A ; }
007A L7:
007A .dbline 0 ; func end
007A 0895 ret
007C .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -