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

📄 measure.s

📁 ATmega128单片机对SHT7x温湿度传感器的驱动程序。编译环境:ICC AVR
💻 S
📖 第 1 页 / 共 3 页
字号:
	.module measure.c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\xzy_bupt\桌面\measure_temp\measure.c
	.area lit(rom, con, rel)
_C1::
	.word 0x0,0xc080
	.dbsym e C1 _C1 kD
_C2::
	.word 0xe354,0x3d25
	.dbsym e C2 _C2 kD
_C3::
	.word 0xe7a2,0xb63b
	.dbsym e C3 _C3 kD
_T1::
	.word 0xd70a,0x3c23
	.dbsym e T1 _T1 kD
_T2::
	.word 0xc5ac,0x38a7
	.dbsym e T2 _T2 kD
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\xzy_bupt\桌面\measure_temp\measure.c
	.dbfunc e shxx_config _shxx_config fV
	.even
_shxx_config::
	.dbline -1
	.dbline 43
; #include <iom128v.h> //Microcontroller specific library, e.g. port definitions
; 
; #include <math.h>    //Keil library  
; #include <stdio.h>   //Keil library
; #include <macros.h>
;   const float C1=-4.0;              // for 12 Bit
;   const float C2=+0.0405;           // for 12 Bit
;   const float C3=-0.0000028;        // for 12 Bit
;   const float T1=+0.01;             // for 14 Bit @ 5V
;   const float T2=+0.00008;           // for 14 Bit @ 5V	
; 
; unsigned char cwendu1,cwendu2;
; unsigned int uwendu;
; float fwendu;
; 
; 
; enum {TEMP,HUMI};
; 
; 
; 
; #define noACK 0
; #define ACK   1
;                             //adr  command  r/w
; #define STATUS_REG_W 0x06   //000   0011    0
; #define STATUS_REG_R 0x07   //000   0011    1
; #define MEASURE_TEMP 0x03   //000   0001    1
; #define MEASURE_HUMI 0x05   //000   0010    1
; #define RESET        0x1e   //000   1111    0
; 
; 
; #define  DATA_SHTxx       (1<<1)                // PF0
; #define  DATA_TO_1()      (PORTF |= DATA_SHTxx)   // PF0='0'        //置0
; #define  DATA_TO_0()      (PORTF &= ~DATA_SHTxx)   // PF0='float'   //置1
; #define  DATA_status()    (PINF & DATA_SHTxx)     // read PF0 pin 
; 
; #define  SCK_SHTxx       (1<<2)                // PF0
; #define  SCK_TO_0()      (PORTF &= ~SCK_SHTxx)   // PF0='0'
; #define  SCK_TO_1()      (PORTF |= SCK_SHTxx)     // PF0='float'   //置0
; #define  SCK_status()    (PINF & SCK_SHTxx)     // read PF0 pin  //置1
; //----------------------------------------------------------------------------------
; 
; void shxx_config()
; { 
	.dbline 45
;    //DDRF  &= ~DATA_SHTxx ;   // 输入模式(上电时为高电平)
;   DDRF |= 0x02;//(1<<1)//DATA_SHTxx;       //配置为输出
	lds R24,97
	ori R24,2
	sts 97,R24
	.dbline 46
;   PORTF |= 0x02;//(1<<1)//DATA_SHTxx ;   // 输出锁存器写0
	lds R24,98
	ori R24,2
	sts 98,R24
	.dbline 50
;   
;    
;  // DDRF  &= ~SCK_SHTxx;   // 输入模式(上电时为高电平)  
;   DDRF |=0x04;//(1<<2);// SCK_SHTxx;        //配置为输出
	lds R24,97
	ori R24,4
	sts 97,R24
	.dbline 51
;   PORTF &= 0xfb;//~SCK_SHTxx;   // 输出锁存器写0
	lds R24,98
	andi R24,251
	sts 98,R24
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e s_write_byte _s_write_byte fc
;         merror -> R20
;          error -> R10
;              i -> R22
;          value -> R16
	.even
_s_write_byte::
	xcall push_xgset5
	.dbline -1
	.dbline 57
;   
; }
; char s_write_byte(unsigned char value)
; //----------------------------------------------------------------------------------
; // writes a byte on the Sensibus and checks the acknowledge 
; { 
	.dbline 58
;   unsigned char i,error=0,merror=0;
	clr R10
	.dbline 58
	clr R20
	.dbline 59
;   DDRF |=0x06;  
	lds R24,97
	ori R24,6
	sts 97,R24
	.dbline 70
;  // for (i=0x80;i>0;i/=2)
; /*// while(i>0)             //shift bit for masking
;   { if (i & value) PORTF |=0x02;//DATA=1;          //masking value with i , write to SENSI-BUS
;     else PORTF &=0xfd;//DATA=0;                        
;     PORTF |=0x04;//SCK=1;                          //clk for SENSI-BUS
;     //_NOP();_NOP();_NOP();        //pulswith approx. 5 us  	
;     PORTF &=0xfb;//SCK=0;
;     //i=i/2;
;   }
;   */
;   PORTF |=0x02;
	lds R24,98
	ori R24,2
	sts 98,R24
	.dbline 71
;   PORTF &=0xfb;
	lds R24,98
	andi R24,251
	sts 98,R24
	.dbline 72
;   _NOP();_NOP();_NOP();
	nop
	.dbline 72
	nop
	.dbline 72
	nop
	.dbline 73
;   i=0x80;             //shift bit for masking
	ldi R22,128
	.dbline 74
;   { if (i & value) 
	.dbline 74
	mov R2,R22
	and R2,R16
	breq L4
X0:
	.dbline 75
;     PORTF |=0x02;//DATA=1;          //masking value with i , write to SENSI-BUS
	lds R24,98
	ori R24,2
	sts 98,R24
	xjmp L5
L4:
	.dbline 76
;     else PORTF &=0xfd;//DATA=0;
	lds R24,98
	andi R24,253
	sts 98,R24
L5:
	.dbline 77
;     _NOP();_NOP();_NOP();                        
	nop
	.dbline 77
	nop
	.dbline 77
	nop
	.dbline 78
;     PORTF |=0x04;//SCK=1;                          //clk for SENSI-BUS
	lds R24,98
	ori R24,4
	sts 98,R24
	.dbline 79
;     _NOP();_NOP();_NOP();        //pulswith approx. 5 us  	
	nop
	.dbline 79
	nop
	.dbline 79
	nop
	.dbline 80
;     PORTF &=0xfb;//SCK=0;
	lds R24,98
	andi R24,251
	sts 98,R24
	.dbline 82
;     
;   }
	.dbline 83
;   i=0x40;
	ldi R22,64
	.dbline 84
;   { if (i & value) 
	.dbline 84
	mov R2,R22
	and R2,R16
	breq L6
X1:
	.dbline 85
;     PORTF |=0x02;//DATA=1;          //masking value with i , write to SENSI-BUS
	lds R24,98
	ori R24,2
	sts 98,R24
	xjmp L7
L6:
	.dbline 86
;     else PORTF &=0xfd;//DATA=0; 
	lds R24,98
	andi R24,253
	sts 98,R24
L7:
	.dbline 87
;     _NOP();_NOP();_NOP();                       
	nop
	.dbline 87
	nop
	.dbline 87
	nop
	.dbline 88
;     PORTF |=0x04;//SCK=1;                          //clk for SENSI-BUS
	lds R24,98
	ori R24,4
	sts 98,R24
	.dbline 89
;     _NOP();_NOP();_NOP();        //pulswith approx. 5 us  	
	nop
	.dbline 89
	nop
	.dbline 89
	nop
	.dbline 90
;     PORTF &=0xfb;//SCK=0;
	lds R24,98
	andi R24,251
	sts 98,R24
	.dbline 92
;     
;   }
	.dbline 93
;   i=0x20;
	ldi R22,32
	.dbline 94
;   { if (i & value) 
	.dbline 94
	mov R2,R22
	and R2,R16
	breq L8
X2:
	.dbline 95
;     PORTF |=0x02;//DATA=1;          //masking value with i , write to SENSI-BUS
	lds R24,98
	ori R24,2
	sts 98,R24
	xjmp L9
L8:
	.dbline 96
;     else PORTF &=0xfd;//DATA=0;
	lds R24,98
	andi R24,253
	sts 98,R24
L9:
	.dbline 97
;     _NOP();_NOP();_NOP();                       
	nop
	.dbline 97
	nop
	.dbline 97
	nop
	.dbline 98
;     PORTF |=0x04;//SCK=1;                          //clk for SENSI-BUS
	lds R24,98
	ori R24,4
	sts 98,R24
	.dbline 99
;     _NOP();_NOP();_NOP();        //pulswith approx. 5 us  	
	nop
	.dbline 99
	nop
	.dbline 99
	nop
	.dbline 100
;     PORTF &=0xfb;//SCK=0;
	lds R24,98
	andi R24,251
	sts 98,R24
	.dbline 102
;    
;   }
	.dbline 103
;   i=0x10;
	ldi R22,16
	.dbline 104
;   { if (i & value) 
	.dbline 104
	mov R2,R22
	and R2,R16
	breq L10
X3:
	.dbline 105
;     PORTF |=0x02;//DATA=1;          //masking value with i , write to SENSI-BUS
	lds R24,98
	ori R24,2
	sts 98,R24
	xjmp L11
L10:
	.dbline 106
;     else PORTF &=0xfd;//DATA=0;
	lds R24,98
	andi R24,253
	sts 98,R24
L11:
	.dbline 107
;     _NOP();_NOP();_NOP();                        
	nop
	.dbline 107
	nop
	.dbline 107
	nop
	.dbline 108
;     PORTF |=0x04;//SCK=1;                          //clk for SENSI-BUS
	lds R24,98
	ori R24,4
	sts 98,R24
	.dbline 109
;     _NOP();_NOP();_NOP();        //pulswith approx. 5 us  	
	nop
	.dbline 109
	nop
	.dbline 109
	nop
	.dbline 110
;     PORTF &=0xfb;//SCK=0;
	lds R24,98
	andi R24,251
	sts 98,R24
	.dbline 112
;     
;   }
	.dbline 113
;   i=0x08;
	ldi R22,8
	.dbline 114
;   { if (i & value) 
	.dbline 114
	mov R2,R22
	and R2,R16
	breq L12
X4:
	.dbline 115
;     PORTF |=0x02;//DATA=1;          //masking value with i , write to SENSI-BUS
	lds R24,98
	ori R24,2
	sts 98,R24
	xjmp L13
L12:
	.dbline 116
;     else PORTF &=0xfd;//DATA=0;
	lds R24,98
	andi R24,253
	sts 98,R24
L13:
	.dbline 117
;     _NOP();_NOP();_NOP();                        
	nop
	.dbline 117
	nop
	.dbline 117
	nop
	.dbline 118
;     PORTF |=0x04;//SCK=1;                          //clk for SENSI-BUS
	lds R24,98
	ori R24,4
	sts 98,R24
	.dbline 119
;     _NOP();_NOP();_NOP();        //pulswith approx. 5 us  	
	nop
	.dbline 119
	nop
	.dbline 119
	nop
	.dbline 120
;     PORTF &=0xfb;//SCK=0;
	lds R24,98
	andi R24,251
	sts 98,R24
	.dbline 122
;     
;   }
	.dbline 123
;   i=0x04;
	ldi R22,4
	.dbline 124
;   { if (i & value) 
	.dbline 124
	mov R2,R22
	and R2,R16
	breq L14
X5:
	.dbline 125
;     PORTF |=0x02;//DATA=1;          //masking value with i , write to SENSI-BUS
	lds R24,98
	ori R24,2
	sts 98,R24
	xjmp L15
L14:
	.dbline 126
;     else PORTF &=0xfd;//DATA=0;
	lds R24,98
	andi R24,253
	sts 98,R24
L15:
	.dbline 127
;     _NOP();_NOP();_NOP();                        
	nop
	.dbline 127
	nop
	.dbline 127
	nop
	.dbline 128
;     PORTF |=0x04;//SCK=1;                          //clk for SENSI-BUS
	lds R24,98
	ori R24,4
	sts 98,R24
	.dbline 129
;     _NOP();_NOP();_NOP();        //pulswith approx. 5 us  	
	nop
	.dbline 129
	nop
	.dbline 129
	nop
	.dbline 130
;     PORTF &=0xfb;//SCK=0;
	lds R24,98
	andi R24,251
	sts 98,R24
	.dbline 132
;     
;   }
	.dbline 133
;   i=0x02;
	ldi R22,2
	.dbline 134
;   { if (i & value) 
	.dbline 134
	mov R2,R22
	and R2,R16
	breq L16
X6:
	.dbline 135
;     PORTF |=0x02;//DATA=1;          //masking value with i , write to SENSI-BUS
	lds R24,98
	ori R24,2
	sts 98,R24
	xjmp L17
L16:
	.dbline 136
;     else PORTF &=0xfd;//DATA=0;
	lds R24,98
	andi R24,253
	sts 98,R24
L17:
	.dbline 137
;     _NOP();_NOP();_NOP();                        
	nop
	.dbline 137
	nop
	.dbline 137
	nop
	.dbline 138
;     PORTF |=0x04;//SCK=1;                          //clk for SENSI-BUS
	lds R24,98
	ori R24,4
	sts 98,R24
	.dbline 139
;     _NOP();_NOP();_NOP();        //pulswith approx. 5 us  	
	nop
	.dbline 139
	nop
	.dbline 139
	nop
	.dbline 140
;     PORTF &=0xfb;//SCK=0;
	lds R24,98
	andi R24,251
	sts 98,R24
	.dbline 142
;     
;   }
	.dbline 143
;   i=0x01;
	ldi R22,1
	.dbline 144
;   { if (i & value) 
	.dbline 144
	mov R2,R22
	and R2,R16
	breq L18
X7:
	.dbline 145
;     PORTF |=0x02;//DATA=1;          //masking value with i , write to SENSI-BUS
	lds R24,98
	ori R24,2
	sts 98,R24
	xjmp L19
L18:
	.dbline 146
;     else PORTF &=0xfd;//DATA=0;                        
	lds R24,98
	andi R24,253
	sts 98,R24
L19:
	.dbline 147
;     PORTF |=0x04;//SCK=1;                          //clk for SENSI-BUS
	lds R24,98
	ori R24,4
	sts 98,R24
	.dbline 148
;     _NOP();_NOP();_NOP(); 
	nop
	.dbline 148
	nop
	.dbline 148
	nop
	.dbline 152
;        //pulswith approx. 5 us  	
;     
;     
;   }
	.dbline 154
;   
;   PORTF |=0x02;//DATA=1;
	lds R24,98
	ori R24,2
	sts 98,R24
	.dbline 155
;   DDRF &=0xfd;
	lds R24,97
	andi R24,253
	sts 97,R24
	.dbline 156
;   _NOP();_NOP();_NOP();
	nop
	.dbline 156
	nop
	.dbline 156
	nop
	.dbline 157
;   PORTF &=0xfb;//SCK=0;                           //release DATA-line
	lds R24,98
	andi R24,251
	sts 98,R24
	.dbline 159
;    
;   _NOP();_NOP();_NOP();                           //clk #9 for ack 
	nop
	.dbline 159
	nop
	.dbline 159
	nop
	.dbline 160
;   merror=PINF&0x02;//error=DATA;
	in R20,0x0

⌨️ 快捷键说明

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