📄 io_init.lis
字号:
.module io_init.c
.area text(rom, con, rel)
0000 .dbfile G:\mega8\atmega16\mp3_7210\io_init.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 12
0000 ; #include <iom16v.h>
0000 ;
0000 ; /***********端口初始化******************/
0000 ; /**DDRx PORTx I/O 上拉*****************/
0000 ; /* 0 0 I N
0000 ; /* 0 1 I Y
0000 ; /* 1 0 O output0
0000 ; /* 1 1 O output1
0000 ;
0000 ; /***********端口初始化****适用于rev.a*********/
0000 ; void port_init(void)
0000 ; {
0000 .dbline 15
0000 ; /*bit7=V_battery bit6=LED1 bit5=LED2 bit4=NU
0000 ; bit3=VS_REST bit2=VS_BSY bit1=VS_CS bit0=VS_DR/DC*/
0000 ; DDRA =0b01101110; /**/
0000 8EE6 ldi R24,110
0002 8ABB out 0x1a,R24
0004 .dbline 16
0004 ; PORTA=0b00001111; /*led on*/
0004 8FE0 ldi R24,15
0006 8BBB out 0x1b,R24
0008 .dbline 20
0008 ;
0008 ; /*bit7=SCK bi6t=MISO bit5=MOSI bit4=LCD_reset
0008 ; bit3=LCD_CS bit2=LCD_led_CTRL bit1=NU bit0=MMC_CS*/
0008 ; DDRB =0b10111101; /* */
0008 8DEB ldi R24,189
000A 87BB out 0x17,R24
000C .dbline 21
000C ; PORTB=0b11110101; /*LCD_led on*/
000C 85EF ldi R24,245
000E 88BB out 0x18,R24
0010 .dbline 24
0010 ;
0010 ; /*bit7~bit0=usb_data*/
0010 ; DDRC =0b00000000; /* */
0010 2224 clr R2
0012 24BA out 0x14,R2
0014 .dbline 25
0014 ; PORTC=0b00000000; /**/
0014 25BA out 0x15,R2
0016 .dbline 29
0016 ;
0016 ; /*bit7=FT_RXF bi6t=FT_TXE bit5=FT_WR bit4=FT_RD
0016 ; bit3=SW3 bit2=SW2 bit1=SW1 bit0=SW4*/
0016 ; DDRD =0b00110000; /**/
0016 80E3 ldi R24,48
0018 81BB out 0x11,R24
001A .dbline 30
001A ; PORTD=0b00101111; /*FT_WR=0 FT_RD=1*/
001A 8FE2 ldi R24,47
001C 82BB out 0x12,R24
001E .dbline -2
001E .dbline 32
001E ;
001E ; }
001E L1:
001E .dbline 0 ; func end
001E 0895 ret
0020 .dbend
0020 .dbfunc e readkey _readkey fc
0020 ; key -> R16,R17
0020 ; temp -> R18,R19
.even
0020 _readkey::
0020 .dbline -1
0020 .dbline 36
0020 ;
0020 ; /**********readkey()******************/
0020 ; unsigned char readkey(void)
0020 ; {
0020 .dbline 38
0020 ; unsigned key,temp;
0020 ; key=(PIND&0x0f); //用0屏蔽高4位
0020 00B3 in R16,0x10
0022 1127 clr R17
0024 0F70 andi R16,15
0026 1070 andi R17,0
0028 .dbline 39
0028 2227 clr R18
002A 3327 clr R19
002C 02C0 xjmp L6
002E L3:
002E .dbline 39
002E .dbline 39
002E .dbline 39
002E L4:
002E .dbline 39
002E 2F5F subi R18,255 ; offset = 1
0030 3F4F sbci R19,255
0032 L6:
0032 .dbline 39
0032 ; for (temp=0;temp<5000;temp++){;}//去抖动
0032 2838 cpi R18,136
0034 E3E1 ldi R30,19
0036 3E07 cpc R19,R30
0038 D0F3 brlo L3
003A .dbline 40
003A ; temp=(PIND&0x0f);
003A 20B3 in R18,0x10
003C 3327 clr R19
003E 2F70 andi R18,15
0040 3070 andi R19,0
0042 .dbline 41
0042 ; if (key!=temp) return (0);
0042 0217 cp R16,R18
0044 1307 cpc R17,R19
0046 11F0 breq L7
0048 .dbline 41
0048 0027 clr R16
004A 00C0 xjmp L2
004C L7:
004C .dbline 42
004C ; return key;
004C .dbline -2
004C L2:
004C .dbline 0 ; func end
004C 0895 ret
004E .dbsym r key 16 i
004E .dbsym r temp 18 i
004E .dbend
004E .dbfunc e delay_us _delay_us fV
004E ; time -> R16,R17
.even
004E _delay_us::
004E .dbline -1
004E .dbline 47
004E ; }
004E ;
004E ; /*********微秒级延时程序*****************/
004E ; void delay_us(int time)
004E ; {
004E L10:
004E .dbline 49
004E ; do
004E ; {
004E .dbline 50
004E ; time--;
004E 0150 subi R16,1
0050 1040 sbci R17,0
0052 .dbline 51
0052 ; }
0052 L11:
0052 .dbline 52
0052 ; while (time>1);
0052 81E0 ldi R24,1
0054 90E0 ldi R25,0
0056 8017 cp R24,R16
0058 9107 cpc R25,R17
005A CCF3 brlt L10
005C .dbline -2
005C .dbline 53
005C ; }
005C L9:
005C .dbline 0 ; func end
005C 0895 ret
005E .dbsym r time 16 I
005E .dbend
005E .dbfunc e delay_ms _delay_ms fV
005E ; time -> R20,R21
.even
005E _delay_ms::
005E 0E940000 xcall push_gset1
0062 A801 movw R20,R16
0064 .dbline -1
0064 .dbline 56
0064 ; /*********毫秒级延时程序*****************/
0064 ; void delay_ms(unsigned int time)
0064 ; {
0064 05C0 xjmp L15
0066 L14:
0066 .dbline 58
0066 .dbline 59
0066 04E6 ldi R16,100
0068 10E0 ldi R17,0
006A F1DF xcall _delay_us
006C .dbline 60
006C 4150 subi R20,1
006E 5040 sbci R21,0
0070 .dbline 61
0070 L15:
0070 .dbline 57
0070 ; while(time!=0)
0070 4030 cpi R20,0
0072 4507 cpc R20,R21
0074 C1F7 brne L14
0076 X0:
0076 .dbline -2
0076 .dbline 62
0076 ; {
0076 ; delay_us(100);
0076 ; time--;
0076 ; }
0076 ; }
0076 L13:
0076 0E940000 xcall pop_gset1
007A .dbline 0 ; func end
007A 0895 ret
007C .dbsym r time 20 i
007C .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -