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

📄 14iic.lst

📁 用AVR单片机做的一些程序,包括跑马灯显示,PWM产生,ADC转换等
💻 LST
📖 第 1 页 / 共 2 页
字号:
    00ED 90200074  LDS	R2,0x74
    00EF FE27      SBRS	R2,7
    00F0 CFFC      RJMP	0x00ED
(0055) 	if ((TWSR & 0xF8) != 0x18) {
    00F1 91800071  LDS	R24,0x71
    00F3 7F88      ANDI	R24,0xF8
    00F4 3188      CPI	R24,0x18
    00F5 F029      BEQ	0x00FB
(0056) 		error(TWSR);
    00F6 91000071  LDS	R16,0x71
    00F8 DFA7      RCALL	_error
(0057) 		return 0;
    00F9 2700      CLR	R16
    00FA C02A      RJMP	0x0125
(0058) 		}
(0059) 
(0060) 	/*addr 操作地址*/
(0061) 	TWDR = addr;
    00FB 93600073  STS	0x73,R22
(0062) 	TWCR = (1 << TWINT) | (1 << TWEN);
    00FD E884      LDI	R24,0x84
    00FE 93800074  STS	0x74,R24
(0063) 	while (!(TWCR & (1 << TWINT)));
    0100 90200074  LDS	R2,0x74
    0102 FE27      SBRS	R2,7
    0103 CFFC      RJMP	0x0100
(0064) 	if ((TWSR & 0xF8) != 0x28) {
    0104 91800071  LDS	R24,0x71
    0106 7F88      ANDI	R24,0xF8
    0107 3288      CPI	R24,0x28
    0108 F029      BEQ	0x010E
(0065) 		error(TWSR);
    0109 91000071  LDS	R16,0x71
    010B DF94      RCALL	_error
(0066) 		return 0;
    010C 2700      CLR	R16
    010D C017      RJMP	0x0125
(0067) 		}
(0068) 	
(0069) 	/*dd 写入数据*/
(0070) 	TWDR = dd;
    010E 93400073  STS	0x73,R20
(0071) 	TWCR = (1 << TWINT) | (1 << TWEN);
    0110 E884      LDI	R24,0x84
    0111 93800074  STS	0x74,R24
(0072) 	while (!(TWCR & (1 << TWINT)));
    0113 90200074  LDS	R2,0x74
    0115 FE27      SBRS	R2,7
    0116 CFFC      RJMP	0x0113
(0073) 	if ((TWSR & 0xF8) != 0x28) {
    0117 91800071  LDS	R24,0x71
    0119 7F88      ANDI	R24,0xF8
    011A 3288      CPI	R24,0x28
    011B F029      BEQ	0x0121
(0074) 		error(TWSR);
    011C 91000071  LDS	R16,0x71
    011E DF81      RCALL	_error
(0075) 		return 0;
    011F 2700      CLR	R16
    0120 C004      RJMP	0x0125
(0076) 		}
(0077) 	
(0078) 	/*stop 停止*/
(0079) 	TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO);
    0121 E984      LDI	R24,0x94
    0122 93800074  STS	0x74,R24
(0080) 	return 1;
    0124 E001      LDI	R16,1
    0125 940E01A8  CALL	pop_gset2
    0127 9508      RET
_twi_read:
  dd                   --> R20
  addr                 --> R22
    0128 940E01B1  CALL	push_gset2
    012A 01A9      MOVW	R20,R18
    012B 2F60      MOV	R22,R16
(0081) }
(0082) 
(0083) /*I2C总线单字节读取*/
(0084) unsigned char twi_read(unsigned char addr, unsigned char *dd) {
(0085) 
(0086) 	TWBR = 2;
    012C E082      LDI	R24,2
    012D 93800070  STS	0x70,R24
(0087) 
(0088) 	/*start 启动*/
(0089) 	TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
    012F EA84      LDI	R24,0xA4
    0130 93800074  STS	0x74,R24
(0090) 	while(!(TWCR&(1<<TWINT)));
    0132 90200074  LDS	R2,0x74
    0134 FE27      SBRS	R2,7
    0135 CFFC      RJMP	0x0132
(0091) 	if ((TWSR & 0xF8) != 0x08) {
    0136 91800071  LDS	R24,0x71
    0138 7F88      ANDI	R24,0xF8
    0139 3088      CPI	R24,0x8
    013A F029      BEQ	0x0140
(0092) 		error(TWSR);
    013B 91000071  LDS	R16,0x71
    013D DF62      RCALL	_error
(0093) 		return 0;
    013E 2700      CLR	R16
    013F C065      RJMP	0x01A5
(0094) 		}
(0095) 
(0096) 	/*SLA_W 芯片地址*/
(0097) 	TWDR = 0xA0;
    0140 EA80      LDI	R24,0xA0
    0141 93800073  STS	0x73,R24
(0098) 	TWCR = (1 << TWINT) | (1 << TWEN);
    0143 E884      LDI	R24,0x84
    0144 93800074  STS	0x74,R24
(0099) 	while (!(TWCR & (1 << TWINT)));
    0146 90200074  LDS	R2,0x74
    0148 FE27      SBRS	R2,7
    0149 CFFC      RJMP	0x0146
(0100) 	if ((TWSR & 0xF8) != 0x18) {
    014A 91800071  LDS	R24,0x71
    014C 7F88      ANDI	R24,0xF8
    014D 3188      CPI	R24,0x18
    014E F029      BEQ	0x0154
(0101) 		error(TWSR);
    014F 91000071  LDS	R16,0x71
    0151 DF4E      RCALL	_error
(0102) 		return 0;
    0152 2700      CLR	R16
    0153 C051      RJMP	0x01A5
(0103) 		}
(0104) 
(0105) 	/*addr 操作地址*/
(0106) 	TWDR = addr;
    0154 93600073  STS	0x73,R22
(0107) 	TWCR = (1 << TWINT) | (1 << TWEN);
    0156 E884      LDI	R24,0x84
    0157 93800074  STS	0x74,R24
(0108) 	while (!(TWCR & (1 << TWINT)));
    0159 90200074  LDS	R2,0x74
    015B FE27      SBRS	R2,7
    015C CFFC      RJMP	0x0159
(0109) 	if ((TWSR & 0xF8) != 0x28) {
    015D 91800071  LDS	R24,0x71
    015F 7F88      ANDI	R24,0xF8
    0160 3288      CPI	R24,0x28
    0161 F029      BEQ	0x0167
(0110) 		error(TWSR);
    0162 91000071  LDS	R16,0x71
    0164 DF3B      RCALL	_error
(0111) 		return 0;
    0165 2700      CLR	R16
    0166 C03E      RJMP	0x01A5
(0112) 		}
(0113) 		
(0114) 	/*start 启动*/
(0115) 	TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN);
    0167 EA84      LDI	R24,0xA4
    0168 93800074  STS	0x74,R24
(0116) 	while (!(TWCR & (1 << TWINT)));
    016A 90200074  LDS	R2,0x74
    016C FE27      SBRS	R2,7
    016D CFFC      RJMP	0x016A
(0117) 	if ((TWSR & 0xF8) != 0x10) {
    016E 91800071  LDS	R24,0x71
    0170 7F88      ANDI	R24,0xF8
    0171 3180      CPI	R24,0x10
    0172 F029      BEQ	0x0178
(0118) 		error(TWSR);
    0173 91000071  LDS	R16,0x71
    0175 DF2A      RCALL	_error
(0119) 		return 0;
    0176 2700      CLR	R16
    0177 C02D      RJMP	0x01A5
(0120) 		}
(0121) 	
(0122) 	/*SLA_R 芯片地址*/
(0123) 	TWDR = 0xA1;
    0178 EA81      LDI	R24,0xA1
    0179 93800073  STS	0x73,R24
(0124) 	TWCR = (1 << TWINT) | (1 << TWEN);
    017B E884      LDI	R24,0x84
    017C 93800074  STS	0x74,R24
(0125) 	while (!(TWCR & (1 << TWINT)));
    017E 90200074  LDS	R2,0x74
    0180 FE27      SBRS	R2,7
    0181 CFFC      RJMP	0x017E
(0126) 	if ((TWSR & 0xF8) != 0x40) {
    0182 91800071  LDS	R24,0x71
    0184 7F88      ANDI	R24,0xF8
    0185 3480      CPI	R24,0x40
    0186 F029      BEQ	0x018C
(0127) 		error(TWSR);
    0187 91000071  LDS	R16,0x71
    0189 DF16      RCALL	_error
(0128) 		return 0;
    018A 2700      CLR	R16
    018B C019      RJMP	0x01A5
(0129) 		}
(0130) 
(0131) 	/*读取数据*/
(0132) 	TWCR = (1 << TWINT) | (1 << TWEN);
    018C E884      LDI	R24,0x84
    018D 93800074  STS	0x74,R24
(0133) 	while (!(TWCR & (1 << TWINT)));
    018F 90200074  LDS	R2,0x74
    0191 FE27      SBRS	R2,7
    0192 CFFC      RJMP	0x018F
(0134) 	if ((TWSR & 0xF8) != 0x58) {
    0193 91800071  LDS	R24,0x71
    0195 7F88      ANDI	R24,0xF8
    0196 3588      CPI	R24,0x58
    0197 F029      BEQ	0x019D
(0135) 		error(TWSR);
    0198 91000071  LDS	R16,0x71
    019A DF05      RCALL	_error
(0136) 		return 0;
    019B 2700      CLR	R16
    019C C008      RJMP	0x01A5
(0137) 		}
(0138) 	*dd = TWDR;
    019D 90200073  LDS	R2,0x73
    019F 01FA      MOVW	R30,R20
    01A0 8220      STD	Z+0,R2
(0139) 		
(0140) 	/*stop 停止*/
(0141) 	TWCR = (1 << TWINT) | (1 << TWSTO) | (1 << TWEN);
    01A1 E984      LDI	R24,0x94
    01A2 93800074  STS	0x74,R24
(0142) 	return 1;
FILE: <library>
    01A4 E001      LDI	R16,1
    01A5 940E01A8  CALL	pop_gset2
    01A7 9508      RET
pop_gset2:
    01A8 E0E2      LDI	R30,2
    01A9 940C01B7  JMP	pop
push_gset5:
    01AB 92FA      ST	R15,-Y
    01AC 92EA      ST	R14,-Y
push_gset4:
    01AD 92DA      ST	R13,-Y
    01AE 92CA      ST	R12,-Y
push_gset3:
    01AF 92BA      ST	R11,-Y
    01B0 92AA      ST	R10,-Y
push_gset2:
    01B1 937A      ST	R23,-Y
    01B2 936A      ST	R22,-Y
push_gset1:
    01B3 935A      ST	R21,-Y
    01B4 934A      ST	R20,-Y
    01B5 9508      RET
pop_gset1:
    01B6 E0E1      LDI	R30,1
pop:
    01B7 9149      LD	R20,Y+
    01B8 9159      LD	R21,Y+
    01B9 FDE0      SBRC	R30,0
    01BA 9508      RET
    01BB 9169      LD	R22,Y+
    01BC 9179      LD	R23,Y+
    01BD FDE1      SBRC	R30,1
    01BE 9508      RET
    01BF 90A9      LD	R10,Y+
    01C0 90B9      LD	R11,Y+
    01C1 FDE2      SBRC	R30,2
    01C2 9508      RET
    01C3 90C9      LD	R12,Y+
    01C4 90D9      LD	R13,Y+
    01C5 FDE3      SBRC	R30,3
    01C6 9508      RET
    01C7 90E9      LD	R14,Y+
    01C8 90F9      LD	R15,Y+
    01C9 9508      RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -