📄 at93c46.lst
字号:
00AB 9508 RET
_Read:
i --> R20
read_data --> R22
buffer --> R10
add --> R20
00AC 940E013C CALL push_gset3
00AE 2F40 MOV R20,R16
(0187) }
(0188) }
(0189) /*********************************************
(0190) 函数功能:从指定地址读出一个字节的数据
(0191) 描 述:从已add为地址的eeprom中读数据
(0192) 入口参数:add
(0193) 出口参数:read_data
(0194) *********************************************/
(0195) uint8_t Read(uint8_t add)
(0196) {
(0197) uint8_t i,buffer = 0,read_data = 0;
00AF 24AA CLR R10
00B0 2766 CLR R22
(0198) set_cs();
00B1 9AC4 SBI 0x18,4
(0199) delay_us();
00B2 DFBE RCALL _delay_us
(0200) Send_str_op(READ);
00B3 E800 LDI R16,0x80
00B4 DFC1 RCALL _Send_str_op
(0201) Send_bits(add);
00B5 2F04 MOV R16,R20
00B6 DFDC RCALL _Send_bits
(0202) for (i=0;i<8;i++)
00B7 2744 CLR R20
00B8 C010 RJMP 0x00C9
(0203) {
(0204) set_sk();
00B9 9AC7 SBI 0x18,7
(0205) delay_us();
00BA DFB6 RCALL _delay_us
(0206) buffer |= (PIN_DO & 0X40); //读取引脚电平
00BB B386 IN R24,0x16
00BC 7480 ANDI R24,0x40
00BD 2AA8 OR R10,R24
(0207) buffer >>= DO;
00BE 94A6 LSR R10
00BF 94A6 LSR R10
00C0 94A6 LSR R10
00C1 94A6 LSR R10
00C2 94A6 LSR R10
00C3 94A6 LSR R10
(0208) read_data <<=1;
00C4 0F66 LSL R22
(0209) read_data |= buffer;
00C5 296A OR R22,R10
(0210) delay_us();
00C6 DFAA RCALL _delay_us
(0211) clr_sk();
00C7 98C7 CBI 0x18,7
00C8 9543 INC R20
00C9 3048 CPI R20,0x8
00CA F370 BCS 0x00B9
(0212) }
(0213) delay_us();
00CB DFA5 RCALL _delay_us
(0214) clr_cs();
00CC 98C4 CBI 0x18,4
(0215) return read_data;
00CD 2F06 MOV R16,R22
00CE 940E0135 CALL pop_gset3
00D0 9508 RET
_Delay_ms:
i --> R20
ms --> R16
00D1 940E0140 CALL push_gset1
(0216) }
(0217) /*********************************************
(0218) 函数功能:延时函数
(0219) 描 述:延时
(0220) 入口参数:ms
(0221) 出口参数:void
(0222) *********************************************/
(0223) void Delay_ms(uint16_t ms)
(0224) {
(0225) uint8_t i;
(0226) for (;ms>0;ms--)
00D3 C007 RJMP 0x00DB
(0227) for(i = 0;i<100;i++)
00D4 2744 CLR R20
00D5 C001 RJMP 0x00D7
00D6 9543 INC R20
00D7 3644 CPI R20,0x64
00D8 F3E8 BCS 0x00D6
00D9 5001 SUBI R16,1
00DA 4010 SBCI R17,0
00DB 3000 CPI R16,0
00DC 0701 CPC R16,R17
00DD F7B1 BNE 0x00D4
00DE 940E0143 CALL pop_gset1
00E0 9508 RET
(0228) ;
(0229) }
(0230) /*********************************************
(0231) 函数功能:读写禁止
(0232) 描 述:禁止读写功能
(0233) 入口参数:void
(0234) 出口参数:void
(0235) *********************************************/
(0236) void EW_disable(void)
(0237) {
(0238) set_cs();
_EW_disable:
00E1 9AC4 SBI 0x18,4
(0239) delay_us();
00E2 DF8E RCALL _delay_us
(0240) Send_str_op(EWDS);
00E3 2700 CLR R16
00E4 DF91 RCALL _Send_str_op
(0241) Send_bits(0x00);
00E5 2700 CLR R16
00E6 DFAC RCALL _Send_bits
(0242) delay_us();
00E7 DF89 RCALL _delay_us
(0243) clr_cs();
00E8 98C4 CBI 0x18,4
00E9 9508 RET
(0244) }
(0245) /*********************************************
(0246) 函数功能:读写使能
(0247) 描 述:使能读写功能
(0248) 入口参数:void
(0249) 出口参数:void
(0250) *********************************************/
(0251) void EW_enable(void)
(0252) {
(0253) set_cs();
_EW_enable:
00EA 9AC4 SBI 0x18,4
(0254) delay_us();
00EB DF85 RCALL _delay_us
(0255) Send_str_op(EWEN);
00EC 2700 CLR R16
00ED DF88 RCALL _Send_str_op
(0256) Send_bits(0x60);
00EE E600 LDI R16,0x60
00EF DFA3 RCALL _Send_bits
(0257) delay_us();
00F0 DF80 RCALL _delay_us
(0258) clr_cs();
00F1 98C4 CBI 0x18,4
00F2 9508 RET
_Erase:
add --> R20
00F3 940E0140 CALL push_gset1
00F5 2F40 MOV R20,R16
(0259) }
(0260) /*********************************************
(0261) 函数功能:擦出指定地址的内容
(0262) 描 述:将指定地址的内容全部擦除
(0263) 入口参数:add
(0264) 出口参数:void
(0265) *********************************************/
(0266) void Erase(uint8_t add)
(0267) {
(0268) clr_cs();
00F6 98C4 CBI 0x18,4
(0269) clr_sk();
00F7 98C7 CBI 0x18,7
(0270) set_cs();
00F8 9AC4 SBI 0x18,4
(0271) delay_us();
00F9 DF77 RCALL _delay_us
(0272) Send_str_op(ERASE);
00FA EC00 LDI R16,0xC0
00FB DF7A RCALL _Send_str_op
(0273) Send_bits(add);
00FC 2F04 MOV R16,R20
00FD DF95 RCALL _Send_bits
(0274) delay_us();
00FE DF72 RCALL _delay_us
(0275) clr_cs();
00FF 98C4 CBI 0x18,4
(0276) delay_us();
0100 DF70 RCALL _delay_us
(0277) delay_us();
0101 DF6F RCALL _delay_us
(0278) set_cs();
0102 9AC4 SBI 0x18,4
(0279) while (!(PIN_DO & (1<<DO))); //check busy
0103 9BB6 SBIS 0x16,6
0104 CFFE RJMP 0x0103
(0280) delay_us();
0105 DF6B RCALL _delay_us
(0281) clr_cs();
0106 98C4 CBI 0x18,4
0107 940E0143 CALL pop_gset1
0109 9508 RET
_Write:
i --> R20
w_data --> R22
add --> R20
010A 940E013E CALL push_gset2
010C 2F62 MOV R22,R18
010D 2F40 MOV R20,R16
(0282) }
(0283) /*********************************************
(0284) 函数功能:在指定的地址写一个字节的数据
(0285) 描 述:将一个字节的数据写入指定地址
(0286) 入口参数:add,w_data
(0287) 出口参数:void
(0288) *********************************************/
(0289) void Write(uint8_t add,uint8_t w_data)
(0290) {
(0291) uint8_t i;
(0292) set_cs();
010E 9AC4 SBI 0x18,4
(0293) delay_us();
010F DF61 RCALL _delay_us
(0294) Send_str_op(WRITE);
0110 E400 LDI R16,0x40
0111 DF64 RCALL _Send_str_op
(0295) Send_bits(add);
0112 2F04 MOV R16,R20
0113 DF7F RCALL _Send_bits
(0296) for (i=0;i<8;i++,w_data <<=1)
0114 2744 CLR R20
0115 C00E RJMP 0x0124
(0297) {
(0298) delay_us();
0116 DF5A RCALL _delay_us
(0299) if (w_data & 0x80)
0117 FF67 SBRS R22,7
0118 C002 RJMP 0x011B
(0300) {
(0301) set_di();
0119 9AC5 SBI 0x18,5
(0302) }
011A C001 RJMP 0x011C
(0303) else
(0304) {
(0305) clr_di();
011B 98C5 CBI 0x18,5
(0306) }
(0307) delay_us();
011C DF54 RCALL _delay_us
(0308) set_sk();
011D 9AC7 SBI 0x18,7
(0309) delay_us();
011E DF52 RCALL _delay_us
(0310) clr_sk();
011F 98C7 CBI 0x18,7
(0311) delay_us();
0120 DF50 RCALL _delay_us
(0312) clr_di();
0121 98C5 CBI 0x18,5
0122 9543 INC R20
0123 0F66 LSL R22
0124 3048 CPI R20,0x8
0125 F380 BCS 0x0116
(0313) }
(0314) delay_us();
0126 DF4A RCALL _delay_us
(0315) clr_cs();
0127 98C4 CBI 0x18,4
(0316) delay_us();
0128 DF48 RCALL _delay_us
(0317) delay_us();
0129 DF47 RCALL _delay_us
(0318) set_cs();
012A 9AC4 SBI 0x18,4
(0319) while (!(PIN_DO & (1<<DO))); //check busy
012B 9BB6 SBIS 0x16,6
012C CFFE RJMP 0x012B
(0320) delay_us();
012D DF43 RCALL _delay_us
(0321) clr_cs();
FILE: <library>
012E 98C4 CBI 0x18,4
012F 940E0132 CALL pop_gset2
0131 9508 RET
pop_gset2:
0132 E0E2 LDI R30,2
0133 940C0144 JMP pop
pop_gset3:
0135 E0E4 LDI R30,4
0136 940C0144 JMP pop
push_gset5:
0138 92FA ST R15,-Y
0139 92EA ST R14,-Y
push_gset4:
013A 92DA ST R13,-Y
013B 92CA ST R12,-Y
push_gset3:
013C 92BA ST R11,-Y
013D 92AA ST R10,-Y
push_gset2:
013E 937A ST R23,-Y
013F 936A ST R22,-Y
push_gset1:
0140 935A ST R21,-Y
0141 934A ST R20,-Y
0142 9508 RET
pop_gset1:
0143 E0E1 LDI R30,1
pop:
0144 9149 LD R20,Y+
0145 9159 LD R21,Y+
0146 FDE0 SBRC R30,0
0147 9508 RET
0148 9169 LD R22,Y+
0149 9179 LD R23,Y+
014A FDE1 SBRC R30,1
014B 9508 RET
014C 90A9 LD R10,Y+
014D 90B9 LD R11,Y+
014E FDE2 SBRC R30,2
014F 9508 RET
0150 90C9 LD R12,Y+
0151 90D9 LD R13,Y+
0152 FDE3 SBRC R30,3
0153 9508 RET
0154 90E9 LD R14,Y+
0155 90F9 LD R15,Y+
0156 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -