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

📄 at93c46.lst

📁 93c46的驱动程序,C51代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
    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 + -