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

📄 avr_gy-29.lis

📁 GY-27资料源码 ADXL345 HMC5883L
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 00A8 27FE              sbrs R2,7
 00AA FDCF              rjmp L33
 00AC           X9:
 00AC                   .dbline 58
 00AC                   .dbline 58
 00AC                   .dbline 59
 00AC           ;         if(TestAck()!=MT_DATA_ACK) 
 00AC 81B1              in R24,0x1
 00AE 887F              andi R24,248
 00B0 8832              cpi R24,40
 00B2 11F0              breq L36
 00B4           X10:
 00B4                   .dbline 60
 00B4           ;               return 1;                                   //ACK        
 00B4 01E0              ldi R16,1
 00B6 03C0              xjmp L17
 00B8           L36:
 00B8                   .dbline 61
 00B8           ;         Stop();                                               //I2C停止
 00B8 84E9              ldi R24,148
 00BA 86BF              out 0x36,R24
 00BC                   .dbline 63
 00BC           ;       //delay_nms(10);                                //延时  
 00BC           ;         return 0;
 00BC 0027              clr R16
 00BE                   .dbline -2
 00BE           L17:
 00BE                   .dbline 0 ; func end
 00BE 0895              ret
 00C0                   .dbsym r Wdata 18 c
 00C0                   .dbsym r RegAddress 16 c
 00C0                   .dbend
 00C0                   .dbfunc e I2C_Read _I2C_Read fc
 00C0           ;           temp -> R10
 00C0           ;     RegAddress -> R16,R17
                        .even
 00C0           _I2C_Read::
 00C0 AA92              st -y,R10
 00C2                   .dbline -1
 00C2                   .dbline 74
 00C2           ; }
 00C2           ; 
 00C2           ; /*********************************************
 00C2           ; I2C总线读一个字节
 00C2           ; 返回0:读成功
 00C2           ; 返回1:读失败
 00C2           ; **********************************************/
 00C2           ; 
 00C2           ; unsigned char I2C_Read(unsigned RegAddress)
 00C2           ; 
 00C2           ;  {
 00C2                   .dbline 76
 00C2           ;          unsigned char temp;
 00C2           ;          Start();//I2C启动
 00C2 84EA              ldi R24,164
 00C4 86BF              out 0x36,R24
 00C6                   .dbline 77
 00C6           ;          Wait();
 00C6           L39:
 00C6                   .dbline 77
 00C6           L40:
 00C6                   .dbline 77
 00C6 26B6              in R2,0x36
 00C8 27FE              sbrs R2,7
 00CA FDCF              rjmp L39
 00CC           X11:
 00CC                   .dbline 77
 00CC                   .dbline 77
 00CC                   .dbline 78
 00CC           ;          if (TestAck()!=START) 
 00CC 81B1              in R24,0x1
 00CE 887F              andi R24,248
 00D0 8830              cpi R24,8
 00D2 11F0              breq L42
 00D4           X12:
 00D4                   .dbline 79
 00D4           ;                 return 1;                                     //ACK      
 00D4 01E0              ldi R16,1
 00D6 40C0              xjmp L38
 00D8           L42:
 00D8                   .dbline 81
 00D8           ;          
 00D8           ;          Write8Bit(WD_DEVICE_ADDR);   //写I2C从器件地址和写方式
 00D8                   .dbline 81
 00D8 86EA              ldi R24,166
 00DA 83B9              out 0x3,R24
 00DC                   .dbline 81
 00DC 84E8              ldi R24,132
 00DE 86BF              out 0x36,R24
 00E0                   .dbline 81
 00E0                   .dbline 81
 00E0                   .dbline 82
 00E0           ;          Wait(); 
 00E0           L44:
 00E0                   .dbline 82
 00E0           L45:
 00E0                   .dbline 82
 00E0 26B6              in R2,0x36
 00E2 27FE              sbrs R2,7
 00E4 FDCF              rjmp L44
 00E6           X13:
 00E6                   .dbline 82
 00E6                   .dbline 82
 00E6                   .dbline 83
 00E6           ;          if (TestAck()!=MT_SLA_ACK) 
 00E6 81B1              in R24,0x1
 00E8 887F              andi R24,248
 00EA 8831              cpi R24,24
 00EC 11F0              breq L47
 00EE           X14:
 00EE                   .dbline 84
 00EE           ;                 return 1;                                 //ACK
 00EE 01E0              ldi R16,1
 00F0 33C0              xjmp L38
 00F2           L47:
 00F2                   .dbline 86
 00F2           ;          
 00F2           ;          Write8Bit(RegAddress);               //写器件相应寄存器地址
 00F2                   .dbline 86
 00F2 03B9              out 0x3,R16
 00F4                   .dbline 86
 00F4 84E8              ldi R24,132
 00F6 86BF              out 0x36,R24
 00F8                   .dbline 86
 00F8                   .dbline 86
 00F8                   .dbline 87
 00F8           ;          Wait();
 00F8           L49:
 00F8                   .dbline 87
 00F8           L50:
 00F8                   .dbline 87
 00F8 26B6              in R2,0x36
 00FA 27FE              sbrs R2,7
 00FC FDCF              rjmp L49
 00FE           X15:
 00FE                   .dbline 87
 00FE                   .dbline 87
 00FE                   .dbline 88
 00FE           ;          if (TestAck()!=MT_DATA_ACK) 
 00FE 81B1              in R24,0x1
 0100 887F              andi R24,248
 0102 8832              cpi R24,40
 0104 11F0              breq L52
 0106           X16:
 0106                   .dbline 89
 0106           ;                 return 1;
 0106 01E0              ldi R16,1
 0108 27C0              xjmp L38
 010A           L52:
 010A                   .dbline 91
 010A           ;          
 010A           ;          Start();                                             //I2C重新启动
 010A 84EA              ldi R24,164
 010C 86BF              out 0x36,R24
 010E                   .dbline 92
 010E           ;          Wait();
 010E           L54:
 010E                   .dbline 92
 010E           L55:
 010E                   .dbline 92
 010E 26B6              in R2,0x36
 0110 27FE              sbrs R2,7
 0112 FDCF              rjmp L54
 0114           X17:
 0114                   .dbline 92
 0114                   .dbline 92
 0114                   .dbline 93
 0114           ;          if (TestAck()!=RE_START)  
 0114 81B1              in R24,0x1
 0116 887F              andi R24,248
 0118 8031              cpi R24,16
 011A 11F0              breq L57
 011C           X18:
 011C                   .dbline 94
 011C           ;                 return 1;
 011C 01E0              ldi R16,1
 011E 1CC0              xjmp L38
 0120           L57:
 0120                   .dbline 96
 0120           ;          
 0120           ;          Write8Bit(RD_DEVICE_ADDR);   //写I2C从器件地址和读方式
 0120                   .dbline 96
 0120 87EA              ldi R24,167
 0122 83B9              out 0x3,R24
 0124                   .dbline 96
 0124 84E8              ldi R24,132
 0126 86BF              out 0x36,R24
 0128                   .dbline 96
 0128                   .dbline 96
 0128                   .dbline 97
 0128           ;          Wait();
 0128           L59:
 0128                   .dbline 97
 0128           L60:
 0128                   .dbline 97
 0128 26B6              in R2,0x36
 012A 27FE              sbrs R2,7
 012C FDCF              rjmp L59
 012E           X19:
 012E                   .dbline 97
 012E                   .dbline 97
 012E                   .dbline 98
 012E           ;          if(TestAck()!=MR_SLA_ACK)  
 012E 81B1              in R24,0x1
 0130 887F              andi R24,248
 0132 8034              cpi R24,64
 0134 11F0              breq L62
 0136           X20:
 0136                   .dbline 99
 0136           ;                 return 1;                                //ACK
 0136 01E0              ldi R16,1
 0138 0FC0              xjmp L38
 013A           L62:
 013A                   .dbline 101
 013A           ;          
 013A           ;          Twi();                                          //启动主I2C读方式
 013A 84E8              ldi R24,132
 013C 86BF              out 0x36,R24
 013E                   .dbline 102
 013E           ;          Wait();
 013E           L64:
 013E                   .dbline 102
 013E           L65:
 013E                   .dbline 102
 013E 26B6              in R2,0x36
 0140 27FE              sbrs R2,7
 0142 FDCF              rjmp L64
 0144           X21:
 0144                   .dbline 102
 0144                   .dbline 102
 0144                   .dbline 103
 0144           ;          if(TestAck()!=MR_DATA_NOACK) 
 0144 81B1              in R24,0x1
 0146 887F              andi R24,248
 0148 8835              cpi R24,88
 014A 11F0              breq L67
 014C           X22:
 014C                   .dbline 104
 014C           ;                return 1;                                      //ACK   
 014C 01E0              ldi R16,1
 014E 04C0              xjmp L38
 0150           L67:
 0150                   .dbline 106
 0150           ;          
 0150           ;          temp=TWDR;//读取I2C接收数据
 0150 A3B0              in R10,0x3
 0152                   .dbline 107
 0152           ;        Stop();//I2C停止
 0152 84E9              ldi R24,148
 0154 86BF              out 0x36,R24
 0156                   .dbline 108
 0156           ;          return temp;
 0156 0A2D              mov R16,R10
 0158                   .dbline -2
 0158           L38:
 0158                   .dbline 0 ; func end
 0158 A990              ld R10,y+
 015A 0895              ret
 015C                   .dbsym r temp 10 c
 015C                   .dbsym r RegAddress 16 i
 015C                   .dbend
 015C                   .dbfile D:\MCU_Project\MCU_AVR\AVR_GY-29\1602.h
 015C                   .dbfunc e LCD_init _LCD_init fV
                        .even
 015C           _LCD_init::
 015C                   .dbline -1
 015C                   .dbline 44
 015C           ; /* 用法:
 015C           ;    LCD_init();
 015C           ;    LCD_write_string(列,行,"字符串");
 015C           ;    LCD_write_char(列,行,'字符'); 
 015C           ;  ---------------------------------------------------------------
 015C           ; 下面是AVR与LCD连接信息
 015C           ;   PC6 ->RS
 015C           ;   PC7 ->EN
 015C           ;   地  ->RW
 015C           ;   PA4 ->D4
 015C           ;   PA5 ->D5
 015C           ;   PA6 ->D6
 015C           ;   PA7 ->D7
 015C           ; 使用端口:1602:PC6,PC7,PA4~PA7        
 015C           ; 要使用本驱动,改变下面配置信息即可
 015C           ; -----------------------------------------------------------------*/
 015C           ; #define LCD_EN_PORT    PORTC   //以下2个要设为同一个口
 015C           ; #define LCD_EN_DDR     DDRC
 015C           ; #define LCD_RS_PORT    PORTC   //以下2个要设为同一个口
 015C           ; #define LCD_RS_DDR     DDRC
 015C           ; #define LCD_DATA_PORT  PORTA   //以下3个要设为同一个口
 015C           ; #define LCD_DATA_DDR   DDRA    //默认情况下连线必须使用高四位端口,如果不是请注意修改
 015C           ; #define LCD_DATA_PIN   PINA
 015C           ; #define LCD_RS         (1<<PC6) //0x20   portC6       out
 015C           ; #define LCD_EN         (1<<PC7) //0x40   portC7       out
 015C           ; #define LCD_DATA       ((1<<PA4)|(1<<PA5)|(1<<PA6)|(1<<PA7)) //0xf0   portA 4/5/6/7 out
 015C           ; /*--------------------------------------------------------------------------------------------------
 015C           ; 函数说明
 015C           ; --------------------------------------------------------------------------------------------------*/
 015C           ; void LCD_init(void);
 015C           ; void LCD_en_write(void);
 015C           ; void LCD_write_command(unsigned  char command) ;
 015C           ; void LCD_write_data(unsigned char data);
 015C           ; void LCD_set_xy (unsigned char x, unsigned char y);
 015C           ; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);
 015C           ; void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data);
 015C           ; 
 015C           ; //-----------------------------------------------------------------------------------------
 015C           ; 
 015C           ; #include <macros.h>
 015C           ; #include "delay.h"
 015C           ; 
 015C           ; void LCD_init(void)         //液晶初始化
 015C           ; {
 015C                   .dbline 45
 015C           ;   LCD_DATA_DDR|=LCD_DATA;   //数据口方向为输出
 015C 8AB3              in R24,0x1a
 015E 806F              ori R24,240
 0160 8ABB              out 0x1a,R24
 0162                   .dbline 46
 0162           ;   LCD_EN_DDR|=LCD_EN;       //设置EN方向为输出
 0162 A79A              sbi 0x14,7
 0164                   .dbline 47
 0164           ;   LCD_RS_DDR|=LCD_RS;       //设置RS方向为输出
 0164 A69A              sbi 0x14,6
 0166                   .dbline 48
 0166           ;   LCD_write_command(0x28); 

⌨️ 快捷键说明

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