📄 sdio.src
字号:
; 0xbb,0xa9,0x9f,0x8d,0xf3,0xe1,0xd7,0xc5,
; 0x19,0xb,0x3d,0x2f,0x51,0x43,0x75,0x67,
; 0x89,0x9b,0xad,0xbf,0xc1,0xd3,0xe5,0xf7,
; 0x87,0x95,0xa3,0xb1,0xcf,0xdd,0xeb,0xf9,
; 0x17,0x5,0x33,0x21,0x5f,0x4d,0x7b,0x69,
; 0xb5,0xa7,0x91,0x83,0xfd,0xef,0xd9,0xcb,
; 0x25,0x37,0x1,0x13,0x6d,0x7f,0x49,0x5b,
; 0xe3,0xf1,0xc7,0xd5,0xab,0xb9,0x8f,0x9d,
; 0x73,0x61,0x57,0x45,0x3b,0x29,0x1f,0xd,
; 0xd1,0xc3,0xf5,0xe7,0x99,0x8b,0xbd,0xaf};
;
; void delay_us(unsigned int time_count)
RSEG ?PR?_delay_us?SDIO
_delay_us:
USING 0
; SOURCE LINE # 128
;---- Variable 'time_count?040' assigned to Register 'R6/R7' ----
; {
; SOURCE LINE # 129
?C0003:
; do
; {
; SOURCE LINE # 131
; time_count--;
; SOURCE LINE # 132
MOV A,R7
DEC R7
JNZ ?C0322
DEC R6
?C0322:
; }
; SOURCE LINE # 133
; while (time_count>1);
; SOURCE LINE # 134
SETB C
MOV A,R7
SUBB A,#01H
MOV A,R6
SUBB A,#00H
JNC ?C0003
; }
; SOURCE LINE # 135
RET
; END OF _delay_us
;
; void Oscillator_Init(void)
RSEG ?PR?Oscillator_Init?SDIO
Oscillator_Init:
; SOURCE LINE # 137
; {
; SOURCE LINE # 138
; OSCICL=0x08; //Internal Oscillator programme to 24MHz.
; SOURCE LINE # 139
MOV OSCICL,#08H
; OSCICN=0xC3; //Enable Internal oscilator and set dividor to 1
; SOURCE LINE # 140
MOV OSCICN,#0C3H
; }
; SOURCE LINE # 141
RET
; END OF Oscillator_Init
;
; void Watchdog_close(void)
RSEG ?PR?Watchdog_close?SDIO
Watchdog_close:
; SOURCE LINE # 143
; {
; SOURCE LINE # 144
; PCA0MD&=~0X40; //COSE WATCHDOG
; SOURCE LINE # 145
ANL PCA0MD,#0BFH
; }
; SOURCE LINE # 146
RET
; END OF Watchdog_close
;
; void IO_Init(void)
RSEG ?PR?IO_Init?SDIO
IO_Init:
; SOURCE LINE # 148
; {
; SOURCE LINE # 149
; P2MDOUT=0x08; //Config P2.0-P2.3(CLK,CMD,DATA0,led) as push_pull
; SOURCE LINE # 150
MOV P2MDOUT,#08H
; P1MDOUT=0x10;
; SOURCE LINE # 151
MOV P1MDOUT,#010H
; XBR1=0x60; //Crossbar enabled
; SOURCE LINE # 152
MOV XBR1,#060H
; }
; SOURCE LINE # 153
RET
; END OF IO_Init
;
; void ADC_Init(void)
RSEG ?PR?ADC_Init?SDIO
ADC_Init:
; SOURCE LINE # 155
; {
; SOURCE LINE # 156
; AMX0P=0x05; //P1.5 x_axis
; SOURCE LINE # 157
MOV AMX0P,#05H
; AMX0N=0x1F; //GND(ADC in single-ended mode)
; SOURCE LINE # 158
MOV AMX0N,#01FH
; ADC0CN=0xC0;
; SOURCE LINE # 159
MOV ADC0CN,#0C0H
; ADC0CF=0x3C;
; SOURCE LINE # 160
MOV ADC0CF,#03CH
; REF0CN=0x0A; // Vdd used as voltage reference, internal temperature sensor off
; SOURCE LINE # 161
MOV REF0CN,#0AH
; }
; SOURCE LINE # 162
RET
; END OF ADC_Init
;
; void Interrupts_Init()
RSEG ?PR?Interrupts_Init?SDIO
Interrupts_Init:
; SOURCE LINE # 164
; {
; SOURCE LINE # 165
; IE=0xA0; //Enabled T2 interrupt enabled all
; SOURCE LINE # 166
MOV IE,#0A0H
; }
; SOURCE LINE # 167
RET
; END OF Interrupts_Init
;
; void ADC(void)
RSEG ?PR?ADC?SDIO
ADC:
; SOURCE LINE # 169
; {
; SOURCE LINE # 170
; AMX0P=0x05;
; SOURCE LINE # 171
MOV AMX0P,#05H
; AD0BUSY=0X01;
; SOURCE LINE # 172
SETB AD0BUSY
?C0010:
; while(AD0BUSY);
; SOURCE LINE # 173
JB AD0BUSY,?C0010
?C0011:
; Adc_X=ADC0H;
; SOURCE LINE # 174
MOV Adc_X,ADC0H
; AMX0P=0x04;
; SOURCE LINE # 175
MOV AMX0P,#04H
; AD0BUSY=0X01;
; SOURCE LINE # 176
SETB AD0BUSY
?C0012:
; while(AD0BUSY);
; SOURCE LINE # 177
JB AD0BUSY,?C0012
?C0013:
; Adc_Y=ADC0H;
; SOURCE LINE # 178
MOV Adc_Y,ADC0H
; }
; SOURCE LINE # 179
RET
; END OF ADC
;
; void Timer_Init(void)
RSEG ?PR?Timer_Init?SDIO
Timer_Init:
; SOURCE LINE # 181
; {
; SOURCE LINE # 182
; TMR2CN =0x04; //Timer2 enabled, clock is the system clock divided by 12
; SOURCE LINE # 183
MOV TMR2CN,#04H
; TMR2RLL=0x00;
; SOURCE LINE # 184
CLR A
MOV TMR2RLL,A
; TMR2RLH=0xc0;
; SOURCE LINE # 185
MOV TMR2RLH,#0C0H
; TMR2L =0x00;
; SOURCE LINE # 186
MOV TMR2L,A
; TMR2H =0xc0;
; SOURCE LINE # 187
MOV TMR2H,#0C0H
; timer_index=0;
; SOURCE LINE # 188
MOV timer_index,A
; }
; SOURCE LINE # 189
RET
; END OF Timer_Init
CSEG AT 0002BH
LJMP Timer2_ISR
;
; void Timer2_ISR (void) interrupt 5 using 1
RSEG ?PR?Timer2_ISR?SDIO
USING 1
Timer2_ISR:
PUSH PSW
; SOURCE LINE # 191
; {
;
; IE=0;
; SOURCE LINE # 194
MOV IE,#00H
; TMR2CN&=0x7F; // clear inturrupt overflow flag
; SOURCE LINE # 195
ANL TMR2CN,#07FH
; //if(++timer_index==1)
; //{
; // timer_index=0;
; SD_BUSY_LED^=1;
; SOURCE LINE # 199
MOV C,SD_BUSY_LED
CPL C
MOV SD_BUSY_LED,C
; //SD_BUSY_LED=0;
; timer_index=1;
; SOURCE LINE # 201
MOV timer_index,#01H
; //}
; //ADC();
;
; }
; SOURCE LINE # 205
POP PSW
RETI
; END OF Timer2_ISR
;
; void set_10ms(void)
RSEG ?PR?set_10ms?SDIO
set_10ms:
; SOURCE LINE # 207
; {
; SOURCE LINE # 208
; IE=0xA0;
; SOURCE LINE # 209
MOV IE,#0A0H
; timer_index=0;
; SOURCE LINE # 210
CLR A
MOV timer_index,A
; }
; SOURCE LINE # 211
RET
; END OF set_10ms
;
; void Write_Byte_SD(unsigned char value) //MCU Data WRITE
RSEG ?PR?_Write_Byte_SD?SDIO
_Write_Byte_SD:
USING 0
; SOURCE LINE # 213
;---- Variable 'value?1041' assigned to Register 'R7' ----
; {
; SOURCE LINE # 214
; unsigned char i;
; for (i=0; i<8; i++)
; SOURCE LINE # 216
;---- Variable 'i?1042' assigned to Register 'R6' ----
CLR A
MOV R6,A
?C0018:
; {
; SOURCE LINE # 217
?C0021:
; while(SD_CLK_PIN==0); //WAITING Clock Impuls (Low)
; SOURCE LINE # 218
JNB SD_CLK_PIN,?C0021
?C0022:
; if(((value>>(7-i))&0x01)==0x01)
; SOURCE LINE # 219
CLR C
MOV A,#07H
SUBB A,R6
MOV R5,A
MOV A,R7
MOV R0,AR5
INC R0
SJMP ?C0324
?C0323:
CLR C
RRC A
?C0324:
DJNZ R0,?C0323
JNB ACC.0,?C0023
; SD_DATA0_PIN=1; //Send bit by bit(MSB First)
; SOURCE LINE # 220
SETB SD_DATA0_PIN
SJMP ?C0025
?C0023:
; else SD_DATA0_PIN=0;
; SOURCE LINE # 221
CLR SD_DATA0_PIN
?C0025:
; while(SD_CLK_PIN==1); //WAITING Clock Impuls (High)
; SOURCE LINE # 222
JB SD_CLK_PIN,?C0025
; }
; SOURCE LINE # 223
?C0020:
INC R6
CJNE R6,#08H,?C0018
; //while(SD_CLK_PIN==0);
; //SD_DATA0_PIN=1; //set Output High
; }
; SOURCE LINE # 226
?C0027:
RET
; END OF _Write_Byte_SD
;
; unsigned char Read_Byte_SD(void) //MCU Data READ
RSEG ?PR?Read_Byte_SD?SDIO
Read_Byte_SD:
USING 0
; SOURCE LINE # 228
; {
; SOURCE LINE # 229
; unsigned char temp=0;
; SOURCE LINE # 230
;---- Variable 'temp?1143' assigned to Register 'R7' ----
CLR A
MOV R7,A
; unsigned char i;
; for (i=0; i<8; i++) //MSB First
; SOURCE LINE # 232
;---- Variable 'i?1144' assigned to Register 'R6' ----
MOV R6,A
?C0028:
; {
; SOURCE LINE # 233
?C0031:
; while(SD_CLK_PIN==1) ; //WAITING Clock Impuls (Low)
; SOURCE LINE # 234
JB SD_CLK_PIN,?C0031
?C0032:
; temp=(temp<<1)|SD_DATA0_PIN; //read data from master
; SOURCE LINE # 235
MOV A,R7
ADD A,ACC
MOV R7,A
MOV C,SD_DATA0_PIN
CLR A
RLC A
ORL A,R7
MOV R7,A
?C0033:
; while(SD_CLK_PIN==0); //WAITING Clock Impuls (LOW)
; SOURCE LINE # 236
JNB SD_CLK_PIN,?C0033
; }
; SOURCE LINE # 237
?C0030:
INC R6
CJNE R6,#08H,?C0028
?C0029:
; return (temp);
; SOURCE LINE # 238
; }
; SOURCE LINE # 239
?C0035:
RET
; END OF Read_Byte_SD
;
; unsigned char code mask[8]={0x80,0x40,0x20,0x10,8,4,2,1};
; void Write_Res_SD_CMD53(unsigned char value1,unsigned char value2) //MCU CMD WRITE
RSEG ?PR?_Write_Res_SD_CMD53?SDIO
_Write_Res_SD_CMD53:
USING 0
; SOURCE LINE # 242
;---- Variable 'value2?1246' assigned to Register 'R5' ----
;---- Variable 'value1?1245' assigned to Register 'R7' ----
; {
; SOURCE LINE # 243
;
;
; unsigned char i;
;
; for (i=0; i<8; i++)
; SOURCE LINE # 248
;---- Variable 'i?1247' assigned to Register 'R6' ----
CLR A
MOV R6,A
?C0036:
; {
; SOURCE LINE # 249
?C0039:
; while(SD_CLK_PIN==0); //WAITING Clock Impuls (Low)
; SOURCE LINE # 250
JNB SD_CLK_PIN,?C0039
?C0040:
; if((value1 & mask[i])==mask[i])
; SOURCE LINE # 251
MOV A,R6
MOV DPTR,#mask
MOVC A,@A+DPTR
MOV R4,A
ANL A,R7
CJNE A,AR4,?C0041
; SD_CMD_PIN=1;
; SOURCE LINE # 252
SETB SD_CMD_PIN
SJMP ?C0042
?C0041:
; else SD_CMD_PIN=0;
; SOURCE LINE # 253
CLR SD_CMD_PIN
?C0042:
; if((value2 & mask[i])==mask[i])
; SOURCE LINE # 254
MOV A,R6
MOV DPTR,#mask
MOVC A,@A+DPTR
MOV R4,A
ANL A,R5
CJNE A,AR4,?C0043
; SD_DATA0_PIN=1;
; SOURCE LINE # 255
SETB SD_DATA0_PIN
SJMP ?C0045
?C0043:
; else SD_DATA0_PIN=0;
; SOURCE LINE # 256
CLR SD_DATA0_PIN
?C0045:
; while(SD_CLK_PIN==1); //WAITING Clock Impuls (High)
; SOURCE LINE # 257
JB SD_CLK_PIN,?C0045
; }
; SOURCE LINE # 258
?C0038:
INC R6
CJNE R6,#08H,?C0036
; //while(SD_CLK_PIN==0);
; //SD_CMD_PIN=1;
;
; }
; SOURCE LINE # 262
?C0047:
RET
; END OF _Write_Res_SD_CMD53
;
; void Write_Res_SD(unsigned char value) //MCU CMD WRITE
RSEG ?PR?_Write_Res_SD?SDIO
L?0332:
USING 0
L?0333:
MOV Buffer_send,#034H
L?0334:
MOV Buffer_send+01H,A
MOV Buffer_send+02H,A
MOV Buffer_send+03H,#020H
MOV Buffer_send+04H,CMD_R+04H
MOV A,CMD_R+04H
L?0335:
MOV DPTR,#crc7_CMD52
L?0336:
MOVC A,@A+DPTR
MOV Buffer_send+05H,A
L?0337:
LCALL Timing_Sync
MOV R7,Buffer_send
LCALL _Write_Res_SD
MOV R7,Buffer_send+01H
LCALL _Write_Res_SD
MOV R7,Buffer_send+02H
LCALL _Write_Res_SD
MOV R7,Buffer_send+03H
LCALL _Write_Res_SD
MOV R7,Buffer_send+04H
LCALL _Write_Res_SD
MOV R7,Buffer_send+05H
_Write_Res_SD:
USING 0
; SOURCE LINE # 264
;---- Variable 'value?1348' assigned to Register 'R7' ----
; {
; SOURCE LINE # 265
; unsigned char i;
; for (i=0; i<8; i++)
; SOURCE LINE # 267
;---- Variable 'i?1349' assigned to Register 'R6' ----
CLR A
MOV R6,A
?C0048:
; {
; SOURCE LINE # 268
?C0051:
; while(SD_CLK_PIN==0); //WAITING Clock Impuls (Low)
; SOURCE LINE # 269
JNB SD_CLK_PIN,?C0051
?C0052:
; if(((value>>(7-i))&0x01)==0x01)
; SOURCE LINE # 270
CLR C
MOV A,#07H
SUBB A,R6
MOV R5,A
MOV A,R7
MOV R0,AR5
INC R0
SJMP ?C0326
?C0325:
CLR C
RRC A
?C0326:
DJNZ R0,?C0325
JNB ACC.0,?C0053
; SD_CMD_PIN=1; //Send bit by bit(MSB First)
; SOURCE LINE # 271
SETB SD_CMD_PIN
SJMP ?C0055
?C0053:
; else SD_CMD_PIN=0;
; SOURCE LINE # 272
CLR SD_CMD_PIN
?C0055:
; while(SD_CLK_PIN==1); //WAITING Clock Impuls (High)
; SOURCE LINE # 273
JB SD_CLK_PIN,?C0055
; }
; SOURCE LINE # 274
?C0050:
INC R6
CJNE R6,#08H,?C0048
; //while(SD_CLK_PIN==0);
; //SD_CMD_PIN=1;
; }
; SOURCE LINE # 277
?C0057:
RET
; END OF _Write_Res_SD
;
; unsigned char Read_CMD_SD(void) //MCU CMD READ
RSEG ?PR?Read_CMD_SD?SDIO
Read_CMD_SD:
USING 0
; SOURCE LINE # 279
; {
; SOURCE LINE # 280
; unsigned char temp=0;
; SOURCE LINE # 281
;---- Variable 'temp?1450' assigned to Register 'R7' ----
CLR A
MOV R7,A
; unsigned char i;
; for (i=0; i<8; i++) //MSB First
; SOURCE LINE # 283
;---- Variable 'i?1451' assigned to Register 'R6' ----
MOV R6,A
?C0058:
; {
; SOURCE LINE # 284
?C0061:
; while(SD_CLK_PIN==1) ; //WAITING Clock Impuls (Low)
; SOURCE LINE # 285
JB SD_CLK_PIN,?C0061
?C0062:
; temp=(temp<<1)|SD_CMD_PIN; //read data from master
; SOURCE LINE # 286
MOV A,R7
ADD A,ACC
MOV R7,A
MOV C,SD_CMD_PIN
CLR A
RLC A
ORL A,R7
MOV R7,A
?C0063:
; while(SD_CLK_PIN==0); //WAITING Clock Impuls (High)
; SOURCE LINE # 287
JNB SD_CLK_PIN,?C0063
; }
; SOURCE LINE # 288
?C0060:
INC R6
CJNE R6,#08H,?C0058
?C0059:
; return (temp);
; SOURCE LINE # 289
; }
; SOURCE LINE # 290
?C0065:
RET
; END OF Read_CMD_SD
;
; unsigned char CRC7(unsigned char * chr, int cnt)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -