📄 main.lis
字号:
.module main.c
.area text(rom, con, rel)
0000 .dbfile D:\桌面\教程\at45db041\main.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 9
0000 ; // ICC-AVR application builder : 2007-2-14 21:34:00
0000 ; // Target : M16
0000 ; // Crystal: 7.3728Mhz
0000 ; // 演示 at45db041 读写过程
0000 ;
0000 ; #include "config.h"
0000 ;
0000 ; void port_init(void)
0000 ; {
0000 .dbline 10
0000 ; PORTA = 0x00;
0000 2224 clr R2
0002 2BBA out 0x1b,R2
0004 .dbline 11
0004 ; DDRA = 0x00;
0004 2ABA out 0x1a,R2
0006 .dbline 12
0006 ; PORTB = 0x00;
0006 28BA out 0x18,R2
0008 .dbline 13
0008 ; DDRB = 0x00;
0008 27BA out 0x17,R2
000A .dbline 14
000A ; PORTC = 0x00; //m103 output only
000A 25BA out 0x15,R2
000C .dbline 15
000C ; DDRC = 0x00;
000C 24BA out 0x14,R2
000E .dbline 16
000E ; PORTD = 0x00;
000E 22BA out 0x12,R2
0010 .dbline 17
0010 ; DDRD = 0x00;
0010 21BA out 0x11,R2
0012 .dbline -2
0012 L1:
0012 .dbline 0 ; func end
0012 0895 ret
0014 .dbend
0014 .dbfunc e init_devices _init_devices fV
.even
0014 _init_devices::
0014 .dbline -1
0014 .dbline 22
0014 ; }
0014 ;
0014 ; //call this routine to initialize all peripherals
0014 ; void init_devices(void)
0014 ; {
0014 .dbline 24
0014 ; //stop errant interrupts until set up
0014 ; CLI(); //disable all interrupts
0014 F894 cli
0016 .dbline 25
0016 ; port_init();
0016 F4DF xcall _port_init
0018 .dbline 26
0018 ; at4541_init(); //at45db041初始化
0018 0E940000 xcall _at4541_init
001C .dbline 28
001C ;
001C ; MCUCR = 0x00;
001C 2224 clr R2
001E 25BE out 0x35,R2
0020 .dbline 29
0020 ; GICR = 0x00;
0020 2BBE out 0x3b,R2
0022 .dbline 30
0022 ; TIMSK = 0x00; //timer interrupt sources
0022 29BE out 0x39,R2
0024 .dbline 31
0024 ; SEI(); //re-enable interrupts
0024 7894 sei
0026 .dbline -2
0026 L2:
0026 .dbline 0 ; func end
0026 0895 ret
0028 .dbend
0028 .dbfunc e main _main fV
0028 ; temp1 -> <dead>
0028 ; temp2 -> R22
0028 ; receive_buf -> y+0
0028 ; i -> R20
.even
0028 _main::
0028 2A97 sbiw R28,10
002A .dbline -1
002A .dbline 36
002A ; //all peripherals are now initialized
002A ; }
002A ;
002A ; void main(void)
002A ; {
002A .dbline 38
002A ; unsigned int temp1;
002A ; unsigned char i=0,temp2=0;
002A 4427 clr R20
002C .dbline 38
002C 6627 clr R22
002E .dbline 40
002E ; unsigned char receive_buf[10];
002E ; init_devices();
002E F2DF xcall _init_devices
0030 .dbline 41
0030 ; at4541_commond_send(0x8200,0x00);//开始写指令,地址为0x00
0030 2227 clr R18
0032 3327 clr R19
0034 00E0 ldi R16,33280
0036 12E8 ldi R17,130
0038 0E940000 xcall _at4541_commond_send
003C .dbline 42
003C ; for(i=0;i<10;i++)
003C 04C0 xjmp L7
003E L4:
003E .dbline 43
003E .dbline 44
003E 042F mov R16,R20
0040 0E940000 xcall _at4541_write
0044 .dbline 45
0044 L5:
0044 .dbline 42
0044 4395 inc R20
0046 L7:
0046 .dbline 42
0046 4A30 cpi R20,10
0048 D0F3 brlo L4
004A .dbline 46
004A ; {
004A ; at4541_write(i);
004A ; }
004A ; at4541_stop();
004A 0E940000 xcall _at4541_stop
004E .dbline 47
004E ; delay_ms(500);
004E 04EF ldi R16,500
0050 11E0 ldi R17,1
0052 0E940000 xcall _delay_ms
0056 L8:
0056 .dbline 50
0056 L9:
0056 .dbline 49
0056 ;
0056 ; while(!at4541_check_busy())
0056 0E940000 xcall _at4541_check_busy
005A 0023 tst R16
005C E1F3 breq L8
005E .dbline 52
005E ; ;//忙等待
005E ;
005E ; if(at4541_check_busy())
005E 0E940000 xcall _at4541_check_busy
0062 0023 tst R16
0064 99F0 breq L18
0066 .dbline 53
0066 ; {
0066 .dbline 54
0066 ; at4541_commond_send(0xe800,0x00);
0066 2227 clr R18
0068 3327 clr R19
006A 00E0 ldi R16,59392
006C 18EE ldi R17,232
006E 0E940000 xcall _at4541_commond_send
0072 .dbline 55
0072 ; for(i=0;i<10;i++)
0072 4427 clr R20
0074 09C0 xjmp L16
0076 L13:
0076 .dbline 56
0076 .dbline 57
0076 0E940000 xcall _at4541_read
007A CE01 movw R24,R28
007C E42F mov R30,R20
007E FF27 clr R31
0080 E80F add R30,R24
0082 F91F adc R31,R25
0084 0083 std z+0,R16
0086 .dbline 58
0086 L14:
0086 .dbline 55
0086 4395 inc R20
0088 L16:
0088 .dbline 55
0088 4A30 cpi R20,10
008A A8F3 brlo L13
008C .dbline 59
008C ; {
008C ; receive_buf[i]=at4541_read();
008C ; }
008C ; }
008C L17:
008C .dbline 61
008C L18:
008C .dbline 60
008C FFCF xjmp L17
008E X0:
008E .dbline -2
008E L3:
008E 2A96 adiw R28,10
0090 .dbline 0 ; func end
0090 0895 ret
0092 .dbsym l temp1 1 i
0092 .dbsym r temp2 22 c
0092 .dbsym l receive_buf 0 A[10:10]c
0092 .dbsym r i 20 c
0092 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -