?? system_init.s
字號(hào):
.module system_init.c
.area text(rom, con, rel)
.dbfile E:\刻錄的\電子技術(shù)\項(xiàng)目\電池放電器\軟件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> //和單片機(jī)類(lèi)型相對(duì)應(yīng)的頭文件,選擇Atmega8做實(shí)驗(yàn);
; #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();//開(kāi)全局中斷
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 開(kāi)上拉
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 設(shè)為輸入,即關(guān)閉
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
; }
;
; //定時(shí)器T2初始化
; void timer2_init(void)
; {
.dbline 46
; TCCR2 = 0x00;//停止定時(shí)器
clr R2
out 0x25,R2
.dbline 47
; ASSR = 0x00;//異步時(shí)鐘模式
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;//啟動(dòng)定時(shí)器
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
; }
;
; //定時(shí)T1初始化
; void timer1_init(unsigned int a,unsigned int b,unsigned int top)
; {
.dbline 57
; TCCR1B = 0x00;//停止定時(shí)器
clr R2
out 0x2e,R2
.dbline 58
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;//啟動(dòng)定時(shí)器 無(wú)分頻
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
; }
; /*
; //定時(shí)器T0初始化
; void timer0_init(void)
; {
; TCCR0 = 0x00;//停止定時(shí)器
; TCNT0 = 0xFF;//初始值
; }
;
; void timer0_start(void)
; {
; TCNT0 = 0xFF;//初始值
; TCCR0 = 0x05;//啟動(dòng)定時(shí)器
; }
;
; void timer0_stop(void)
; {
; TCCR0 = 0x00;//停止定時(shí)器
; 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);//關(guān)閉模擬比較器
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轉(zhuǎn)換 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);//選擇基準(zhǔn)
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);//啟動(dòng)AD轉(zhuǎn)換
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)//延時(shí)n毫秒
; {
.dbline 110
; unsigned int i;
; for (i=0;i<n;i++)//執(zhí)行n次1毫秒延時(shí)
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)//延時(shí)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
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -