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

📄 at45db041.lis

📁 一个关于AVR单片机的例程
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module at45db041.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\桌面\教程\at45db041\at45db041.c
 0000                   .dbfunc e at4541_init _at4541_init fV
                        .even
 0000           _at4541_init::
 0000                   .dbline -1
 0000                   .dbline 15
 0000           ; /**************************************
 0000           ; ** Filename: at45db041.c
 0000           ; ** Describe: Flash 存储器at45db041
 0000           ; ** Author : 古欣 www.avrvi.com
 0000           ; ** Time  :   2007-2-14
 0000           ; **************************************/
 0000           ; 
 0000           ; #include "config.h"
 0000           ; 
 0000           ; /**************************************
 0000           ; ** 说明:初始化 at45db041
 0000           ; ** 除SO对应引脚为输入外,其余都设为输出,RESET高,CS低,芯片工作
 0000           ; **************************************/
 0000           ; void at4541_init(void)
 0000           ; {
 0000                   .dbline 16
 0000           ;  DDR_RESET_SET();
 0000 D09A              sbi 0x1a,0
 0002                   .dbline 17
 0002           ;  DDR_CS_SET();
 0002 D19A              sbi 0x1a,1
 0004                   .dbline 18
 0004           ;  DDR_SCK_SET();
 0004 D29A              sbi 0x1a,2
 0006                   .dbline 19
 0006           ;  DDR_SI_SET();
 0006 D39A              sbi 0x1a,3
 0008                   .dbline 20
 0008           ;  DDR_SO_SET();
 0008 D498              cbi 0x1a,4
 000A                   .dbline 22
 000A           ;  
 000A           ;  CS_LOW();
 000A D998              cbi 0x1b,1
 000C                   .dbline 23
 000C           ;  RESET_HIGH();
 000C D89A              sbi 0x1b,0
 000E                   .dbline -2
 000E           L1:
 000E                   .dbline 0 ; func end
 000E 0895              ret
 0010                   .dbend
 0010                   .dbfunc e at4541_check_busy _at4541_check_busy fc
                        .even
 0010           _at4541_check_busy::
 0010                   .dbline -1
 0010                   .dbline 31
 0010           ; }
 0010           ; 
 0010           ; /**************************************
 0010           ; ** 说明:RDY/~BUSY引脚为高表示准备好
 0010           ; **                      低表示内部忙
 0010           ; **************************************/
 0010           ; unsigned char at4541_check_busy(void)
 0010           ; {
 0010                   .dbline 32
 0010           ;  if((AT4541_PIN&CHEAK_BUSY)==CHEAK_BUSY)
 0010 89B3              in R24,0x19
 0012 8072              andi R24,32
 0014 8032              cpi R24,32
 0016 11F4              brne L3
 0018                   .dbline 33
 0018           ;   {
 0018                   .dbline 34
 0018           ;     return 1;
 0018 01E0              ldi R16,1
 001A 01C0              xjmp L2
 001C           L3:
 001C                   .dbline 37
 001C           ;   }
 001C           ;  else
 001C           ;   {
 001C                   .dbline 38
 001C           ;    return 0;
 001C 0027              clr R16
 001E                   .dbline -2
 001E           L2:
 001E                   .dbline 0 ; func end
 001E 0895              ret
 0020                   .dbend
 0020                   .dbfunc e at4541_commond_send _at4541_commond_send fV
 0020           ;              i -> R20
 0020           ;        address -> R22,R23
 0020           ;        commond -> R10,R11
                        .even
 0020           _at4541_commond_send::
 0020 0E940000          xcall push_gset3
 0024 B901              movw R22,R18
 0026 5801              movw R10,R16
 0028                   .dbline -1
 0028                   .dbline 49
 0028           ;   }
 0028           ; }
 0028           ; 
 0028           ; 
 0028           ; /**************************************
 0028           ; ** 说明:发送操作命令 (0xe800读)(0x8200写)
 0028           ; ** 数据格式:16位命令字,16位地址位,32位任意数
 0028           ; ** 输入:命令字,地址位
 0028           ; **************************************/
 0028           ; void at4541_commond_send(unsigned int commond,unsigned int address)
 0028           ; {
 0028                   .dbline 50
 0028           ;  unsigned char i=0;
 0028 4427              clr R20
 002A                   .dbline 51
 002A           ;  SCK_HIGH();
 002A DA9A              sbi 0x1b,2
 002C                   .dbline 52
 002C           ;  RESET_HIGH();
 002C D89A              sbi 0x1b,0
 002E                   .dbline 53
 002E           ;  CS_HIGH();
 002E D99A              sbi 0x1b,1
 0030                   .dbline 54
 0030           ;  delay_1ms();
 0030 0E940000          xcall _delay_1ms
 0034                   .dbline 55
 0034           ;  CS_LOW();
 0034 D998              cbi 0x1b,1
 0036                   .dbline 56
 0036           ;  delay_1ms();
 0036 0E940000          xcall _delay_1ms
 003A                   .dbline 58
 003A           ;  //16位命令字
 003A           ;  for(i=0;i<16;i++)
 003A 13C0              xjmp L9
 003C           L6:
 003C                   .dbline 59
 003C           ;  {
 003C                   .dbline 60
 003C           ;   SCK_LOW();
 003C DA98              cbi 0x1b,2
 003E                   .dbline 61
 003E           ;   if((commond&0x8000)==0x8000)
 003E C501              movw R24,R10
 0040 8070              andi R24,0
 0042 9078              andi R25,128
 0044 8030              cpi R24,0
 0046 E0E8              ldi R30,128
 0048 9E07              cpc R25,R30
 004A 11F4              brne L10
 004C                   .dbline 62
 004C           ;    SI_HIGH();
 004C DB9A              sbi 0x1b,3
 004E 01C0              xjmp L11
 0050           L10:
 0050                   .dbline 64
 0050           ;   else
 0050           ;    SI_LOW();
 0050 DB98              cbi 0x1b,3
 0052           L11:
 0052                   .dbline 65
 0052 0E940000          xcall _delay_1ms
 0056                   .dbline 66
 0056 DA9A              sbi 0x1b,2
 0058                   .dbline 67
 0058 0E940000          xcall _delay_1ms
 005C                   .dbline 68
 005C AA0C              lsl R10
 005E BB1C              rol R11
 0060                   .dbline 69
 0060           L7:
 0060                   .dbline 58
 0060 4395              inc R20
 0062           L9:
 0062                   .dbline 58
 0062 4031              cpi R20,16
 0064 58F3              brlo L6
 0066                   .dbline 71
 0066           ;   delay_1ms();
 0066           ;   SCK_HIGH();
 0066           ;   delay_1ms();
 0066           ;   commond=commond<<1;
 0066           ;  }
 0066           ;  //16位地址位
 0066           ;  for(i=0;i<16;i++)
 0066 4427              clr R20
 0068 13C0              xjmp L15
 006A           L12:
 006A                   .dbline 72
 006A           ;  {
 006A                   .dbline 73
 006A           ;   SCK_LOW();
 006A DA98              cbi 0x1b,2
 006C                   .dbline 74
 006C           ;   if((address&0x8000)==0x8000)
 006C CB01              movw R24,R22
 006E 8070              andi R24,0
 0070 9078              andi R25,128
 0072 8030              cpi R24,0
 0074 E0E8              ldi R30,128
 0076 9E07              cpc R25,R30
 0078 11F4              brne L16
 007A                   .dbline 75
 007A           ;    SI_HIGH();
 007A DB9A              sbi 0x1b,3
 007C 01C0              xjmp L17
 007E           L16:
 007E                   .dbline 77
 007E           ;   else
 007E           ;    SI_LOW();
 007E DB98              cbi 0x1b,3
 0080           L17:
 0080                   .dbline 78
 0080 0E940000          xcall _delay_1ms
 0084                   .dbline 79
 0084 DA9A              sbi 0x1b,2
 0086                   .dbline 80
 0086 0E940000          xcall _delay_1ms
 008A                   .dbline 81
 008A 660F              lsl R22
 008C 771F              rol R23
 008E                   .dbline 82
 008E           L13:
 008E                   .dbline 71
 008E 4395              inc R20
 0090           L15:
 0090                   .dbline 71
 0090 4031              cpi R20,16
 0092 58F3              brlo L12
 0094                   .dbline 84
 0094           ;   delay_1ms();
 0094           ;   SCK_HIGH();
 0094           ;   delay_1ms();
 0094           ;   address=address<<1;
 0094           ;  }
 0094           ;  //32位任意位
 0094           ;  for(i=0;i<32;i++)
 0094 4427              clr R20
 0096 07C0              xjmp L21
 0098           L18:
 0098                   .dbline 85
 0098                   .dbline 86
 0098 DA98              cbi 0x1b,2
 009A                   .dbline 87
 009A 0E940000          xcall _delay_1ms
 009E                   .dbline 88
 009E DA9A              sbi 0x1b,2
 00A0                   .dbline 89
 00A0 0E940000          xcall _delay_1ms
 00A4                   .dbline 90
 00A4           L19:
 00A4                   .dbline 84
 00A4 4395              inc R20
 00A6           L21:
 00A6                   .dbline 84
 00A6 4032              cpi R20,32
 00A8 B8F3              brlo L18
 00AA                   .dbline -2
 00AA           L5:
 00AA 0E940000          xcall pop_gset3
 00AE                   .dbline 0 ; func end
 00AE 0895              ret
 00B0                   .dbsym r i 20 c
 00B0                   .dbsym r address 22 i
 00B0                   .dbsym r commond 10 i
 00B0                   .dbend
 00B0                   .dbfunc e at4541_read _at4541_read fc
 00B0           ;          temp1 -> R20
 00B0           ;          temp2 -> R22
 00B0           ;              i -> R10
                        .even
 00B0           _at4541_read::
 00B0 0E940000          xcall push_gset3
 00B4                   .dbline -1
 00B4                   .dbline 99
 00B4           ;  {
 00B4           ;   SCK_LOW();
 00B4           ;   delay_1ms();
 00B4           ;   SCK_HIGH();
 00B4           ;   delay_1ms();
 00B4           ;  }
 00B4           ; }
 00B4           ; 
 00B4           ; /**************************************
 00B4           ; ** 说明:读at45db41
 00B4           ; ** 数据:在执行at4541_commond_send(发送读命令)之后,8位的数从SO输出
 00B4           ; ** 输出:读出的一位数
 00B4           ; **************************************/
 00B4           ; unsigned char at4541_read(void)
 00B4           ; {
 00B4                   .dbline 100
 00B4           ;  unsigned char i=0,temp1=0,temp2=0;
 00B4 AA24              clr R10
 00B6                   .dbline 100
 00B6 4427              clr R20
 00B8                   .dbline 100
 00B8 6627              clr R22
 00BA                   .dbline 102
 00BA           ;  //读出8位,组合在temp2里
 00BA           ;  for(i=0;i<8;i++)
 00BA 14C0              xjmp L26
 00BC           L23:
 00BC                   .dbline 103
 00BC           ;  {
 00BC                   .dbline 104
 00BC           ;   SCK_LOW();
 00BC DA98              cbi 0x1b,2
 00BE                   .dbline 105
 00BE           ;   delay_1ms();
 00BE 0E940000          xcall _delay_1ms
 00C2                   .dbline 106
 00C2           ;   if(SO_PIN_HIGH)
 00C2 89B3              in R24,0x19
 00C4 8071              andi R24,16
 00C6 8031              cpi R24,16
 00C8 11F4              brne L27
 00CA                   .dbline 107

⌨️ 快捷键说明

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