📄 rf04dev.s51
字号:
CFI EndBlock cfiBlock0
// 88 }
// 89 }
// 90
// 91
// 92 /******************************************************************************
// 93 * @fn getPotValue
// 94 *
// 95 * @brief
// 96 * This function utilizes the 8-bit ADC to obtain a digital value for the
// 97 * potentiometer resistance.
// 98 *
// 99 * Parameters:
// 100 *
// 101 * @param void
// 102 *
// 103 * @return UINT8
// 104 * 0xFF
// 105 * 0x00
// 106 *
// 107 ******************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 108 UINT8 getPotValue( void ){
getPotValue:
CFI Block cfiBlock1 Using cfiCommon0
CFI Function getPotValue
FUNCALL getPotValue, halAdcSampleSingle
LOCFRAME ISTACK, 2, STACK
ARGFRAME ISTACK, 2, STACK
PUSH DPL
CFI DPL0 Frame(CFA_SP, 4)
CFI CFA_SP SP+-4
PUSH DPH
CFI DPH0 Frame(CFA_SP, 5)
CFI CFA_SP SP+-5
; Saved register size: 2
; Auto size: 0
// 109 INT8 adcValue = halAdcSampleSingle(ADC_REF_AVDD, ADC_8_BIT, ADC_INPUT_POT);
; Setup parameters for call to function halAdcSampleSingle
MOV R3,#0x7
MOV R2,#0x0
MOV R1,#-0x80
MOV DPTR,#(halAdcSampleSingle & 0xffff)
MOV A,#((halAdcSampleSingle >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,R2
// 110 return (adcValue > 0) ? adcValue : 0;
CLR C
SUBB A,#0x1
MOV C,0xD0 /* PSW */.2
XRL A,PSW
RLC A
JC ??getPotValue_0
MOV A,R2
MOV R1,A
SJMP ??getPotValue_1
??getPotValue_0:
MOV R1,#0x0
CFI EndBlock cfiBlock1
??getPotValue_1:
REQUIRE ?Subroutine0
; // Fall through to label ?Subroutine0
// 111 }
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine0:
CFI Block cfiBlock2 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+-5
CFI DPL0 Frame(CFA_SP, 4)
CFI DPH0 Frame(CFA_SP, 5)
POP DPH
CFI CFA_SP SP+-4
CFI DPH0 SameValue
POP DPL
CFI CFA_SP SP+-3
CFI DPL0 SameValue
LJMP ?BRET
CFI EndBlock cfiBlock2
// 112
// 113
// 114 /******************************************************************************
// 115 * @fn buttonPushed
// 116 *
// 117 * @brief
// 118 * This function detects if the button is being pushed. The function
// 119 * implements software debounce. Return true only if previuosly called
// 120 * with button not pushed. Return true only once each time the button
// 121 * is pressed.
// 122 *
// 123 * Parameters:
// 124 *
// 125 * @param void
// 126 *
// 127 * @return BOOL
// 128 * TRUE: Button is being pushed
// 129 * FALSE: Button is not being pushed
// 130 *
// 131 ******************************************************************************/
// 132 #define BUTTON_ACTIVE_TIMEOUT 10
RSEG BANKED_CODE:CODE:NOROOT(0)
// 133 BOOL buttonPushed( void ) {
buttonPushed:
CFI Block cfiBlock3 Using cfiCommon0
CFI Function buttonPushed
PUSH DPL
CFI DPL0 Frame(CFA_SP, 4)
CFI CFA_SP SP+-4
PUSH DPH
CFI DPH0 Frame(CFA_SP, 5)
CFI CFA_SP SP+-5
; Saved register size: 2
; Auto size: 0
// 134 UINT8 i;
// 135 BOOL value;
// 136 static BOOL prevValue;
// 137
// 138 if (value = BUTTON_PRESSED()){
MOV C,0x80.1
CLR A
MOV 0xE0 /* A */.0,C
CPL A
ANL A,#0x1
MOV R1,A
JZ ??buttonPushed_0
// 139 for(i = 0;i < BUTTON_ACTIVE_TIMEOUT; i++){
MOV R2,#0x0
// 140 if(!BUTTON_PRESSED()){
??buttonPushed_1:
MOV C,0x80.1
JNC ??buttonPushed_2
// 141 value = FALSE;
MOV R1,#0x0
// 142 break;
// 143 }
// 144 }
// 145 }
// 146
// 147 if(value){
// 148 if (!prevValue){
// 149 value = prevValue = TRUE;
// 150 }
// 151 else{
// 152 value = FALSE;
// 153 }
// 154 }
// 155 else{
// 156 prevValue = FALSE;
??buttonPushed_0:
CLR A
MOV DPTR,#??prevValue
MOVX @DPTR,A
// 157 }
// 158 return value;
??buttonPushed_3:
SJMP ?Subroutine0
??buttonPushed_2:
INC R2
MOV A,R2
CLR C
SUBB A,#0xa
JC ??buttonPushed_1
MOV DPTR,#??prevValue
MOVX A,@DPTR
JNZ ??buttonPushed_4
MOV A,#0x1
MOVX @DPTR,A
MOV R1,A
SJMP ??buttonPushed_3
??buttonPushed_4:
MOV R1,#0x0
SJMP ??buttonPushed_3
CFI EndBlock cfiBlock3
// 159 }
RSEG XDATA_Z:XDATA:NOROOT(0)
REQUIRE __INIT_XDATA_Z
??prevValue:
DS 1
// 160
// 161
// 162 /******************************************************************************
// 163 * @fn joystickPushed
// 164 *
// 165 * @brief
// 166 * This function detects if the joystick is being pushed. The function
// 167 * implements software debounce. Return true only if previuosly called
// 168 * with joystick not pushed. Return true only once each time the joystick
// 169 * is pressed.
// 170 *
// 171 * Parameters:
// 172 *
// 173 * @param void
// 174 *
// 175 * @return BOOL
// 176 * TRUE: Button is being pushed
// 177 * FALSE: Button is not being pushed
// 178 *
// 179 ******************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 180 BOOL joystickPushed( void ) {
joystickPushed:
CFI Block cfiBlock4 Using cfiCommon0
CFI Function joystickPushed
PUSH DPL
CFI DPL0 Frame(CFA_SP, 4)
CFI CFA_SP SP+-4
PUSH DPH
CFI DPH0 Frame(CFA_SP, 5)
CFI CFA_SP SP+-5
; Saved register size: 2
; Auto size: 0
// 181 UINT8 i;
// 182 BOOL value;
// 183 static BOOL prevValue;
// 184
// 185 if (value = JOYSTICK_PRESSED()){
MOV C,0x80.5
CLR A
MOV 0xE0 /* A */.0,C
MOV R1,A
JZ ??joystickPushed_0
// 186 for(i = 0;i < BUTTON_ACTIVE_TIMEOUT; i++){
MOV R2,#0x0
// 187 if(!JOYSTICK_PRESSED()){
??joystickPushed_1:
MOV C,0x80.5
JC ??joystickPushed_2
// 188 value = FALSE;
MOV R1,#0x0
// 189 break;
// 190 }
// 191 }
// 192 }
// 193
// 194 if(value){
// 195 if (!prevValue){
// 196 value = prevValue = TRUE;
// 197 }
// 198 else{
// 199 value = FALSE;
// 200 }
// 201 }
// 202 else{
// 203 prevValue = FALSE;
??joystickPushed_0:
CLR A
MOV DPTR,#??prevValue_1
MOVX @DPTR,A
// 204 }
// 205
// 206 return value;
??joystickPushed_3:
SJMP ?Subroutine0
??joystickPushed_2:
INC R2
MOV A,R2
CLR C
SUBB A,#0xa
JC ??joystickPushed_1
MOV DPTR,#??prevValue_1
MOVX A,@DPTR
JNZ ??joystickPushed_4
MOV A,#0x1
MOVX @DPTR,A
MOV R1,A
SJMP ??joystickPushed_3
??joystickPushed_4:
MOV R1,#0x0
SJMP ??joystickPushed_3
CFI EndBlock cfiBlock4
// 207 }
RSEG XDATA_Z:XDATA:NOROOT(0)
REQUIRE __INIT_XDATA_Z
??prevValue_1:
DS 1
ASEGN SFR_AN:DATA:NOROOT,080H
// union <unnamed> volatile __sfr _A_P0
_A_P0:
DS 1
END
// 208
// 209 #ifdef CC2430DB
// 210 /******************************************************************************
// 211 * @fn getLdrValue
// 212 *
// 213 * @brief
// 214 * Returns a value indicating the illumination of the light dependent
// 215 * resistor (LDR). Values range from 0xFF (255) for saturated sensor
// 216 * (resistor value around 5 kOhm), to 0 for dark sensor (resistor value
// 217 * around 20MOhm).
// 218 *
// 219 * Parameters:
// 220 *
// 221 * @param void
// 222 *
// 223 * @return UINT8
// 224 * 0xFF (255) maximum illumination (saturated sensor)
// 225 * 0x00 dark sensor
// 226 *
// 227 ******************************************************************************/
// 228 UINT8 getLdrValue( void ){
// 229 INT8 adcValue = halAdcSampleSingle(ADC_REF_AVDD, ADC_8_BIT, ADC_INPUT_LDR);
// 230
// 231 adcValue = (adcValue > 0) ? adcValue : 0;
// 232 // max 8 bit value from ADC is 0x7F (127)
// 233 adcValue *= 2;
// 234
// 235 return 255 - adcValue;
// 236 }
// 237
// 238 /******************************************************************************
// 239 * @fn getXacceleration
// 240 *
// 241 * @brief
// 242 * This function returns the value of the current acceleration of the of
// 243 * accelerometer in the x-axis.
// 244 *
// 245 * Parameters:
// 246 *
// 247 * @param void
// 248 *
// 249 * @return UINT8
// 250 * 0xFF (255) +18g (theoretical value)
// 251 * 0x7F (127) 0g no acceleration
// 252 * 0x00 -18g (theoretical value)
// 253 *
// 254 * Wait 20 ms after VCC is turned on before calling this function.
// 255 ******************************************************************************/
// 256 UINT8 getXacceleration( void ){
// 257 INT8 adcValue = halAdcSampleSingle(ADC_REF_AVDD, ADC_8_BIT, ADC_INPUT_ACC_X);
// 258 return (adcValue > 0) ? adcValue : 0;
// 259 }
// 260
// 261 /******************************************************************************
// 262 * @fn getYacceleration
// 263 *
// 264 * @brief
// 265 * This function returns the value of the current acceleration of the of
// 266 * accelerometer in the y-axis.
// 267 *
// 268 * Parameters:
// 269 *
// 270 * @param void
// 271 *
// 272 * @return UINT8
// 273 * 0xFF (255) +18g (theoretical value)
// 274 * 0x7F (127) 0g no acceleration
// 275 * 0x00 -18g (theoretical value)
// 276 *
// 277 * Wait 20 ms after VCC is turned on before calling this function.
// 278 ******************************************************************************/
// 279 UINT8 getYacceleration( void ){
// 280 INT8 adcValue = halAdcSampleSingle(ADC_REF_AVDD, ADC_8_BIT, ADC_INPUT_ACC_Y);
// 281 return (adcValue > 0) ? adcValue : 0;
// 282 }
// 283 #endif
//
// 298 bytes in segment BANKED_CODE
// 1 byte in segment SFR_AN
// 2 bytes in segment XDATA_Z
//
// 298 bytes of CODE memory
// 0 bytes of DATA memory (+ 1 byte shared)
// 2 bytes of XDATA memory
//
//Errors: none
//Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -