📄 io_init.s
字号:
.module io_init.c
.area text(rom, con, rel)
.dbfile G:\mega8\atmega16\mp3_7210\io_init.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 12
; #include <iom16v.h>
;
; /***********端口初始化******************/
; /**DDRx PORTx I/O 上拉*****************/
; /* 0 0 I N
; /* 0 1 I Y
; /* 1 0 O output0
; /* 1 1 O output1
;
; /***********端口初始化****适用于rev.a*********/
; void port_init(void)
; {
.dbline 15
; /*bit7=V_battery bit6=LED1 bit5=LED2 bit4=NU
; bit3=VS_REST bit2=VS_BSY bit1=VS_CS bit0=VS_DR/DC*/
; DDRA =0b01101110; /**/
ldi R24,110
out 0x1a,R24
.dbline 16
; PORTA=0b00001111; /*led on*/
ldi R24,15
out 0x1b,R24
.dbline 20
;
; /*bit7=SCK bi6t=MISO bit5=MOSI bit4=LCD_reset
; bit3=LCD_CS bit2=LCD_led_CTRL bit1=NU bit0=MMC_CS*/
; DDRB =0b10111101; /* */
ldi R24,189
out 0x17,R24
.dbline 21
; PORTB=0b11110101; /*LCD_led on*/
ldi R24,245
out 0x18,R24
.dbline 24
;
; /*bit7~bit0=usb_data*/
; DDRC =0b00000000; /* */
clr R2
out 0x14,R2
.dbline 25
; PORTC=0b00000000; /**/
out 0x15,R2
.dbline 29
;
; /*bit7=FT_RXF bi6t=FT_TXE bit5=FT_WR bit4=FT_RD
; bit3=SW3 bit2=SW2 bit1=SW1 bit0=SW4*/
; DDRD =0b00110000; /**/
ldi R24,48
out 0x11,R24
.dbline 30
; PORTD=0b00101111; /*FT_WR=0 FT_RD=1*/
ldi R24,47
out 0x12,R24
.dbline -2
.dbline 32
;
; }
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e readkey _readkey fc
; key -> R16,R17
; temp -> R18,R19
.even
_readkey::
.dbline -1
.dbline 36
;
; /**********readkey()******************/
; unsigned char readkey(void)
; {
.dbline 38
; unsigned key,temp;
; key=(PIND&0x0f); //用0屏蔽高4位
in R16,0x10
clr R17
andi R16,15
andi R17,0
.dbline 39
clr R18
clr R19
xjmp L6
L3:
.dbline 39
.dbline 39
.dbline 39
L4:
.dbline 39
subi R18,255 ; offset = 1
sbci R19,255
L6:
.dbline 39
; for (temp=0;temp<5000;temp++){;}//去抖动
cpi R18,136
ldi R30,19
cpc R19,R30
brlo L3
.dbline 40
; temp=(PIND&0x0f);
in R18,0x10
clr R19
andi R18,15
andi R19,0
.dbline 41
; if (key!=temp) return (0);
cp R16,R18
cpc R17,R19
breq L7
.dbline 41
clr R16
xjmp L2
L7:
.dbline 42
; return key;
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbsym r key 16 i
.dbsym r temp 18 i
.dbend
.dbfunc e delay_us _delay_us fV
; time -> R16,R17
.even
_delay_us::
.dbline -1
.dbline 47
; }
;
; /*********微秒级延时程序*****************/
; void delay_us(int time)
; {
L10:
.dbline 49
; do
; {
.dbline 50
; time--;
subi R16,1
sbci R17,0
.dbline 51
; }
L11:
.dbline 52
; while (time>1);
ldi R24,1
ldi R25,0
cp R24,R16
cpc R25,R17
brlt L10
.dbline -2
.dbline 53
; }
L9:
.dbline 0 ; func end
ret
.dbsym r time 16 I
.dbend
.dbfunc e delay_ms _delay_ms fV
; time -> R20,R21
.even
_delay_ms::
xcall push_gset1
movw R20,R16
.dbline -1
.dbline 56
; /*********毫秒级延时程序*****************/
; void delay_ms(unsigned int time)
; {
xjmp L15
L14:
.dbline 58
.dbline 59
ldi R16,100
ldi R17,0
xcall _delay_us
.dbline 60
subi R20,1
sbci R21,0
.dbline 61
L15:
.dbline 57
; while(time!=0)
cpi R20,0
cpc R20,R21
brne L14
X0:
.dbline -2
.dbline 62
; {
; delay_us(100);
; time--;
; }
; }
L13:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r time 20 i
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -