📄 measure.s
字号:
.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 + -