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

📄 measure.lis

📁 ATmega128单片机对SHT7x温湿度传感器的驱动程序。编译环境:ICC AVR
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module measure.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\xzy_bupt\桌面\measure_temp\measure.c
                        .area lit(rom, con, rel)
 0000           _C1::
 0000 000080C0          .word 0x0,0xc080
 0004                   .dbsym e C1 _C1 kD
 0004           _C2::
 0004 54E3253D          .word 0xe354,0x3d25
 0008                   .dbsym e C2 _C2 kD
 0008           _C3::
 0008 A2E73BB6          .word 0xe7a2,0xb63b
 000C                   .dbsym e C3 _C3 kD
 000C           _T1::
 000C 0AD7233C          .word 0xd70a,0x3c23
 0010                   .dbsym e T1 _T1 kD
 0010           _T2::
 0010 ACC5A738          .word 0xc5ac,0x38a7
 0014                   .dbsym e T2 _T2 kD
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\xzy_bupt\桌面\measure_temp\measure.c
 0000                   .dbfunc e shxx_config _shxx_config fV
                        .even
 0000           _shxx_config::
 0000                   .dbline -1
 0000                   .dbline 43
 0000           ; #include <iom128v.h> //Microcontroller specific library, e.g. port definitions
 0000           ; 
 0000           ; #include <math.h>    //Keil library  
 0000           ; #include <stdio.h>   //Keil library
 0000           ; #include <macros.h>
 0000           ;   const float C1=-4.0;              // for 12 Bit
 0000           ;   const float C2=+0.0405;           // for 12 Bit
 0000           ;   const float C3=-0.0000028;        // for 12 Bit
 0000           ;   const float T1=+0.01;             // for 14 Bit @ 5V
 0000           ;   const float T2=+0.00008;           // for 14 Bit @ 5V       
 0000           ; 
 0000           ; unsigned char cwendu1,cwendu2;
 0000           ; unsigned int uwendu;
 0000           ; float fwendu;
 0000           ; 
 0000           ; 
 0000           ; enum {TEMP,HUMI};
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; #define noACK 0
 0000           ; #define ACK   1
 0000           ;                             //adr  command  r/w
 0000           ; #define STATUS_REG_W 0x06   //000   0011    0
 0000           ; #define STATUS_REG_R 0x07   //000   0011    1
 0000           ; #define MEASURE_TEMP 0x03   //000   0001    1
 0000           ; #define MEASURE_HUMI 0x05   //000   0010    1
 0000           ; #define RESET        0x1e   //000   1111    0
 0000           ; 
 0000           ; 
 0000           ; #define  DATA_SHTxx       (1<<1)                // PF0
 0000           ; #define  DATA_TO_1()      (PORTF |= DATA_SHTxx)   // PF0='0'        //置0
 0000           ; #define  DATA_TO_0()      (PORTF &= ~DATA_SHTxx)   // PF0='float'   //置1
 0000           ; #define  DATA_status()    (PINF & DATA_SHTxx)     // read PF0 pin 
 0000           ; 
 0000           ; #define  SCK_SHTxx       (1<<2)                // PF0
 0000           ; #define  SCK_TO_0()      (PORTF &= ~SCK_SHTxx)   // PF0='0'
 0000           ; #define  SCK_TO_1()      (PORTF |= SCK_SHTxx)     // PF0='float'   //置0
 0000           ; #define  SCK_status()    (PINF & SCK_SHTxx)     // read PF0 pin  //置1
 0000           ; //----------------------------------------------------------------------------------
 0000           ; 
 0000           ; void shxx_config()
 0000           ; { 
 0000                   .dbline 45
 0000           ;    //DDRF  &= ~DATA_SHTxx ;   // 输入模式(上电时为高电平)
 0000           ;   DDRF |= 0x02;//(1<<1)//DATA_SHTxx;       //配置为输出
 0000 80916100          lds R24,97
 0004 8260              ori R24,2
 0006 80936100          sts 97,R24
 000A                   .dbline 46
 000A           ;   PORTF |= 0x02;//(1<<1)//DATA_SHTxx ;   // 输出锁存器写0
 000A 80916200          lds R24,98
 000E 8260              ori R24,2
 0010 80936200          sts 98,R24
 0014                   .dbline 50
 0014           ;   
 0014           ;    
 0014           ;  // DDRF  &= ~SCK_SHTxx;   // 输入模式(上电时为高电平)  
 0014           ;   DDRF |=0x04;//(1<<2);// SCK_SHTxx;        //配置为输出
 0014 80916100          lds R24,97
 0018 8460              ori R24,4
 001A 80936100          sts 97,R24
 001E                   .dbline 51
 001E           ;   PORTF &= 0xfb;//~SCK_SHTxx;   // 输出锁存器写0
 001E 80916200          lds R24,98
 0022 8B7F              andi R24,251
 0024 80936200          sts 98,R24
 0028                   .dbline -2
 0028           L2:
 0028                   .dbline 0 ; func end
 0028 0895              ret
 002A                   .dbend
 002A                   .dbfunc e s_write_byte _s_write_byte fc
 002A           ;         merror -> R20
 002A           ;          error -> R10
 002A           ;              i -> R22
 002A           ;          value -> R16
                        .even
 002A           _s_write_byte::
 002A 0E940000          xcall push_xgset5
 002E                   .dbline -1
 002E                   .dbline 57
 002E           ;   
 002E           ; }
 002E           ; char s_write_byte(unsigned char value)
 002E           ; //----------------------------------------------------------------------------------
 002E           ; // writes a byte on the Sensibus and checks the acknowledge 
 002E           ; { 
 002E                   .dbline 58
 002E           ;   unsigned char i,error=0,merror=0;
 002E AA24              clr R10
 0030                   .dbline 58
 0030 4427              clr R20
 0032                   .dbline 59
 0032           ;   DDRF |=0x06;  
 0032 80916100          lds R24,97
 0036 8660              ori R24,6
 0038 80936100          sts 97,R24
 003C                   .dbline 70
 003C           ;  // for (i=0x80;i>0;i/=2)
 003C           ; /*// while(i>0)             //shift bit for masking
 003C           ;   { if (i & value) PORTF |=0x02;//DATA=1;          //masking value with i , write to SENSI-BUS
 003C           ;     else PORTF &=0xfd;//DATA=0;                        
 003C           ;     PORTF |=0x04;//SCK=1;                          //clk for SENSI-BUS
 003C           ;     //_NOP();_NOP();_NOP();        //pulswith approx. 5 us    
 003C           ;     PORTF &=0xfb;//SCK=0;
 003C           ;     //i=i/2;
 003C           ;   }
 003C           ;   */
 003C           ;   PORTF |=0x02;
 003C 80916200          lds R24,98
 0040 8260              ori R24,2
 0042 80936200          sts 98,R24
 0046                   .dbline 71
 0046           ;   PORTF &=0xfb;
 0046 80916200          lds R24,98
 004A 8B7F              andi R24,251
 004C 80936200          sts 98,R24
 0050                   .dbline 72
 0050           ;   _NOP();_NOP();_NOP();
 0050 0000              nop
 0052                   .dbline 72
 0052 0000              nop
 0054                   .dbline 72
 0054 0000              nop
 0056                   .dbline 73
 0056           ;   i=0x80;             //shift bit for masking
 0056 60E8              ldi R22,128
 0058                   .dbline 74
 0058           ;   { if (i & value) 
 0058                   .dbline 74
 0058 262E              mov R2,R22
 005A 2022              and R2,R16
 005C 31F0              breq L4
 005E           X0:
 005E                   .dbline 75
 005E           ;     PORTF |=0x02;//DATA=1;          //masking value with i , write to SENSI-BUS
 005E 80916200          lds R24,98
 0062 8260              ori R24,2
 0064 80936200          sts 98,R24
 0068 05C0              xjmp L5
 006A           L4:
 006A                   .dbline 76
 006A           ;     else PORTF &=0xfd;//DATA=0;
 006A 80916200          lds R24,98
 006E 8D7F              andi R24,253
 0070 80936200          sts 98,R24
 0074           L5:
 0074                   .dbline 77
 0074           ;     _NOP();_NOP();_NOP();                        
 0074 0000              nop
 0076                   .dbline 77
 0076 0000              nop
 0078                   .dbline 77
 0078 0000              nop
 007A                   .dbline 78
 007A           ;     PORTF |=0x04;//SCK=1;                          //clk for SENSI-BUS
 007A 80916200          lds R24,98
 007E 8460              ori R24,4
 0080 80936200          sts 98,R24
 0084                   .dbline 79
 0084           ;     _NOP();_NOP();_NOP();        //pulswith approx. 5 us      
 0084 0000              nop
 0086                   .dbline 79
 0086 0000              nop
 0088                   .dbline 79
 0088 0000              nop
 008A                   .dbline 80
 008A           ;     PORTF &=0xfb;//SCK=0;
 008A 80916200          lds R24,98
 008E 8B7F              andi R24,251
 0090 80936200          sts 98,R24
 0094                   .dbline 82
 0094           ;     
 0094           ;   }
 0094                   .dbline 83
 0094           ;   i=0x40;
 0094 60E4              ldi R22,64
 0096                   .dbline 84
 0096           ;   { if (i & value) 
 0096                   .dbline 84
 0096 262E              mov R2,R22
 0098 2022              and R2,R16
 009A 31F0              breq L6
 009C           X1:
 009C                   .dbline 85
 009C           ;     PORTF |=0x02;//DATA=1;          //masking value with i , write to SENSI-BUS
 009C 80916200          lds R24,98
 00A0 8260              ori R24,2
 00A2 80936200          sts 98,R24
 00A6 05C0              xjmp L7
 00A8           L6:
 00A8                   .dbline 86
 00A8           ;     else PORTF &=0xfd;//DATA=0; 
 00A8 80916200          lds R24,98
 00AC 8D7F              andi R24,253
 00AE 80936200          sts 98,R24
 00B2           L7:
 00B2                   .dbline 87
 00B2           ;     _NOP();_NOP();_NOP();                       
 00B2 0000              nop
 00B4                   .dbline 87
 00B4 0000              nop
 00B6                   .dbline 87
 00B6 0000              nop
 00B8                   .dbline 88
 00B8           ;     PORTF |=0x04;//SCK=1;                          //clk for SENSI-BUS
 00B8 80916200          lds R24,98
 00BC 8460              ori R24,4
 00BE 80936200          sts 98,R24
 00C2                   .dbline 89
 00C2           ;     _NOP();_NOP();_NOP();        //pulswith approx. 5 us      
 00C2 0000              nop
 00C4                   .dbline 89
 00C4 0000              nop
 00C6                   .dbline 89
 00C6 0000              nop
 00C8                   .dbline 90
 00C8           ;     PORTF &=0xfb;//SCK=0;
 00C8 80916200          lds R24,98
 00CC 8B7F              andi R24,251
 00CE 80936200          sts 98,R24
 00D2                   .dbline 92
 00D2           ;     
 00D2           ;   }
 00D2                   .dbline 93
 00D2           ;   i=0x20;
 00D2 60E2              ldi R22,32
 00D4                   .dbline 94
 00D4           ;   { if (i & value) 
 00D4                   .dbline 94
 00D4 262E              mov R2,R22
 00D6 2022              and R2,R16
 00D8 31F0              breq L8
 00DA           X2:
 00DA                   .dbline 95
 00DA           ;     PORTF |=0x02;//DATA=1;          //masking value with i , write to SENSI-BUS
 00DA 80916200          lds R24,98
 00DE 8260              ori R24,2
 00E0 80936200          sts 98,R24
 00E4 05C0              xjmp L9
 00E6           L8:
 00E6                   .dbline 96
 00E6           ;     else PORTF &=0xfd;//DATA=0;
 00E6 80916200          lds R24,98
 00EA 8D7F              andi R24,253
 00EC 80936200          sts 98,R24
 00F0           L9:
 00F0                   .dbline 97
 00F0           ;     _NOP();_NOP();_NOP();                       
 00F0 0000              nop
 00F2                   .dbline 97
 00F2 0000              nop
 00F4                   .dbline 97
 00F4 0000              nop
 00F6                   .dbline 98
 00F6           ;     PORTF |=0x04;//SCK=1;                          //clk for SENSI-BUS
 00F6 80916200          lds R24,98
 00FA 8460              ori R24,4
 00FC 80936200          sts 98,R24
 0100                   .dbline 99
 0100           ;     _NOP();_NOP();_NOP();        //pulswith approx. 5 us      
 0100 0000              nop
 0102                   .dbline 99
 0102 0000              nop
 0104                   .dbline 99
 0104 0000              nop
 0106                   .dbline 100
 0106           ;     PORTF &=0xfb;//SCK=0;
 0106 80916200          lds R24,98
 010A 8B7F              andi R24,251
 010C 80936200          sts 98,R24
 0110                   .dbline 102
 0110           ;    
 0110           ;   }
 0110                   .dbline 103
 0110           ;   i=0x10;
 0110 60E1              ldi R22,16
 0112                   .dbline 104
 0112           ;   { if (i & value) 
 0112                   .dbline 104
 0112 262E              mov R2,R22
 0114 2022              and R2,R16
 0116 31F0              breq L10
 0118           X3:
 0118                   .dbline 105
 0118           ;     PORTF |=0x02;//DATA=1;          //masking value with i , write to SENSI-BUS
 0118 80916200          lds R24,98
 011C 8260              ori R24,2
 011E 80936200          sts 98,R24
 0122 05C0              xjmp L11
 0124           L10:
 0124                   .dbline 106
 0124           ;     else PORTF &=0xfd;//DATA=0;
 0124 80916200          lds R24,98
 0128 8D7F              andi R24,253
 012A 80936200          sts 98,R24
 012E           L11:
 012E                   .dbline 107
 012E           ;     _NOP();_NOP();_NOP();                        
 012E 0000              nop
 0130                   .dbline 107
 0130 0000              nop
 0132                   .dbline 107
 0132 0000              nop
 0134                   .dbline 108

⌨️ 快捷键说明

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