⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 system_init.s

📁 单片机 mega16L 电池放电器源码
💻 S
字号:
	.module system_init.c
	.area text(rom, con, rel)
	.dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\system_init.c
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	sbiw R28,2
	.dbline -1
	.dbline 8
; #include <iom8v.h> //和单片机类型相对应的头文件,选择Atmega8做实验;
; #include <macros.h>
; #include "discharge.h"
; #include <stdio.h>
; #include "LCD_1602.h"
; 
; void init_devices(void)
; {
	.dbline 9
;  CLI(); //禁止所有中断
	cli
	.dbline 10
;  MCUCR  = 0x00;
	clr R2
	out 0x35,R2
	.dbline 11
;  MCUCSR = 0x80;//禁止JTAG
	ldi R24,128
	out 0x34,R24
	.dbline 12
;  GICR   = 0x00;
	out 0x3b,R2
	.dbline 13
;  port_init(); 
	rcall _port_init
	.dbline 14
;  usart_init();
	rcall _usart_init
	.dbline 15
;  timer1_init(10,10,4000);//PWM上限 4000
	ldi R24,4000
	ldi R25,15
	std y+1,R25
	std y+0,R24
	ldi R18,10
	ldi R19,0
	ldi R16,10
	ldi R17,0
	rcall _timer1_init
	.dbline 16
;  timer2_init();
	rcall _timer2_init
	.dbline 17
;  AD_init(); 
	rcall _AD_init
	.dbline 18
;  LCD_init();
	rcall _LCD_init
	.dbline 19
;  delay_nms(10);
	ldi R16,10
	ldi R17,0
	rcall _delay_nms
	.dbline 20
;  SEI();//开全局中断
	sei
	.dbline -2
L1:
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 25
; }
; 
; //端口初始化
; void port_init(void)
; {	 
	.dbline 26
;    DDRB&=~(1<<0)|(1<<3)|(1<<4)|(1<<5);//KEY 输入
	cbi 0x17,0
	.dbline 27
;    PORTB|=(1<<0)|(1<<3)|(1<<4)|(1<<5);//KEY 开上拉
	in R24,0x18
	ori R24,57
	out 0x18,R24
	.dbline 28
;    DDRC|=(1<<4)|(1<<5);//LED_G  LED_R  
	in R24,0x14
	ori R24,48
	out 0x14,R24
	.dbline 29
;    DDRB&=~(1<<1)|(1<<2);//PWMA PWMB 设为输入,即关闭
	cbi 0x17,1
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e usart_init _usart_init fV
	.even
_usart_init::
	.dbline -1
	.dbline 34
; }
; 
; //串口通信初始化//38400kbps 
; void usart_init(void)
; {
	.dbline 35
;  UCSRB = 0x00;//禁止中断
	clr R2
	out 0xa,R2
	.dbline 36
;  UCSRA = 0x00;
	out 0xb,R2
	.dbline 37
;  UCSRC = BIT(URSEL) | 0x06;
	ldi R24,134
	out 0x20,R24
	.dbline 38
;  UBRRL = 0x0C;
	ldi R24,12
	out 0x9,R24
	.dbline 39
;  UBRRH = 0x00;
	out 0x20,R2
	.dbline 40
;  UCSRB = 0x18;
	ldi R24,24
	out 0xa,R24
	.dbline -2
L3:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer2_init _timer2_init fV
	.even
_timer2_init::
	.dbline -1
	.dbline 45
; }
; 
; //定时器T2初始化
; void timer2_init(void)
; {
	.dbline 46
;  TCCR2  = 0x00;//停止定时器
	clr R2
	out 0x25,R2
	.dbline 47
;  ASSR   = 0x00;//异步时钟模式
	out 0x22,R2
	.dbline 48
;  TCNT2  = 0x06;//初始值
	ldi R24,6
	out 0x24,R24
	.dbline 49
;  OCR2   = 0x05;//匹配值
	ldi R24,5
	out 0x23,R24
	.dbline 50
;  TIMSK |= 0x40;//中断允许
	in R24,0x39
	ori R24,64
	out 0x39,R24
	.dbline 51
;  TCCR2  = 0x06;//启动定时器
	ldi R24,6
	out 0x25,R24
	.dbline -2
L4:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer1_init _timer1_init fV
;            top -> y+0
;              b -> R18,R19
;              a -> R16,R17
	.even
_timer1_init::
	.dbline -1
	.dbline 56
; }
; 
; //定时T1初始化
; void timer1_init(unsigned int a,unsigned int b,unsigned int top)
; {
	.dbline 57
;  TCCR1B = 0x00;//停止定时器
	clr R2
	out 0x2e,R2
	.dbline 58
;  TIMSK |= 0x00;//中断允许
	in R2,0x39
	out 0x39,R2
	.dbline 59
;  TCNT1H = 0x00;
	clr R2
	out 0x2d,R2
	.dbline 60
;  TCNT1L = 0x00;//初始值
	out 0x2c,R2
	.dbline 61
;  OCR1A=a;//匹配A值
	out 0x2b,R17
	out 0x2a,R16
	.dbline 62
;  OCR1B=b;//匹配B值
	out 0x29,R19
	out 0x28,R18
	.dbline 63
;  ICR1=top-1;//输入捕捉匹配值
	ldd R24,y+0
	ldd R25,y+1
	sbiw R24,1
	out 0x27,R25
	out 0x26,R24
	.dbline 64
;  TCCR1A = 0x82;
	ldi R24,130
	out 0x2f,R24
	.dbline 65
;  TCCR1B = 0x19;//启动定时器 无分频
	ldi R24,25
	out 0x2e,R24
	.dbline -2
L5:
	.dbline 0 ; func end
	ret
	.dbsym l top 0 i
	.dbsym r b 18 i
	.dbsym r a 16 i
	.dbend
	.dbfunc e AD_init _AD_init fV
	.even
_AD_init::
	.dbline -1
	.dbline 88
; }
; /*
; //定时器T0初始化
; void timer0_init(void)
; {
;  TCCR0  = 0x00;//停止定时器
;  TCNT0  = 0xFF;//初始值
; }
; 
; void timer0_start(void)
; {
;   TCNT0  = 0xFF;//初始值
;   TCCR0  = 0x05;//启动定时器
; }
; 
; void timer0_stop(void)
; {
;   TCCR0  = 0x00;//停止定时器
;   LCD_write_number(9,0,0,TCNT0,"us",0);//
; }
; */
; void AD_init(void)
; {   	
	.dbline 89
;     ADCSRA=0X00; 
	clr R2
	out 0x6,R2
	.dbline 90
; 	ACSR  =(1<<ACD);//关闭模拟比较器   
	ldi R24,128
	out 0x8,R24
	.dbline 91
;     ADMUX =(1<<REFS0)|(1&0x0F); //
	ldi R24,65
	out 0x7,R24
	.dbline 92
;     ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADPS2)|(1<<ADPS1);//ADC转换 64分频
	ldi R24,198
	out 0x6,R24
	.dbline -2
L6:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e read_adc _read_adc fi
;        adc_rel -> R20,R21
;              m -> R22
;              r -> R20
	.even
_read_adc::
	rcall push_gset2
	mov R22,R18
	mov R20,R16
	.dbline -1
	.dbline 96
; }
; 
; unsigned int read_adc (uchar r,uchar m)
; {
	.dbline 98
;  unsigned int adc_rel;
;  ADMUX=0;
	clr R2
	out 0x7,R2
	.dbline 99
;  ADMUX |=(m&0x0F);//选择通道
	mov R24,R22
	andi R24,15
	in R2,0x7
	or R2,R24
	out 0x7,R2
	.dbline 100
;  ADMUX |=(r<<6);//选择基准
	mov R2,R20
	lsl R2
	lsl R2
	lsl R2
	lsl R2
	lsl R2
	lsl R2
	in R3,0x7
	or R3,R2
	out 0x7,R3
	.dbline 101
;  ADCSRA|=(1<<ADSC);//启动AD转换
	sbi 0x6,6
	.dbline 102
;  delay_nus(125);
	ldi R16,125
	ldi R17,0
	rcall _delay_nus
	.dbline 103
;  adc_rel=ADC&0x3FF;
	in R20,0x4
	in R21,0x5
	andi R21,3
	.dbline 104
;   return(adc_rel);
	movw R16,R20
	.dbline -2
L7:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r adc_rel 20 i
	.dbsym r m 22 c
	.dbsym r r 20 c
	.dbend
	.dbfunc e delay_nms _delay_nms fV
;              i -> R20,R21
;              n -> R22,R23
	.even
_delay_nms::
	rcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 108
; }
; 
; void delay_nms(unsigned int n)//延时n毫秒
; {
	.dbline 110
;   unsigned int i;
;   for (i=0;i<n;i++)//执行n次1毫秒延时
	clr R20
	clr R21
	rjmp L12
L9:
	.dbline 111
	.dbline 111
	ldi R16,1000
	ldi R17,3
	rcall _delay_nus
	.dbline 111
L10:
	.dbline 110
	subi R20,255  ; offset = 1
	sbci R21,255
L12:
	.dbline 110
	cp R20,R22
	cpc R21,R23
	brlo L9
	.dbline -2
L8:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r n 22 i
	.dbend
	.dbfunc e delay_nus _delay_nus fV
;              i -> R20,R21
;              n -> R16,R17
	.even
_delay_nus::
	rcall push_gset1
	.dbline -1
	.dbline 115
;    {delay_nus(1000);}
; }
; 
; void delay_nus(unsigned int n)//延时N微秒,N>=5  晶振:8MHz
; {
	.dbline 117
;   unsigned int i;
;   for (i=5;i<n;i++)
	ldi R20,5
	ldi R21,0
	rjmp L17
L14:
	.dbline 118
	.dbline 119
	nop
	.dbline 120
	nop
	.dbline 121
L15:
	.dbline 117
	subi R20,255  ; offset = 1
	sbci R21,255
L17:
	.dbline 117
	cp R20,R16
	cpc R21,R17
	brlo L14
	.dbline -2
L13:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r n 16 i
	.dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -