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

📄 avr_gy-27.lis

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

⌨️ 快捷键说明

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