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