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

📄 tuner.lst

📁 用AVR控制旭光高频头JS-6B1/111程序.
💻 LST
📖 第 1 页 / 共 2 页
字号:
__text_start:
__start:
      E1 EFCF      LDI	R28,0xFF
      E2 E1D0      LDI	R29,0x10
      E3 BFCD      OUT	0x3D,R28
      E4 BFDE      OUT	0x3E,R29
      E5 53CC      SUBI	R28,0x3C
      E6 40D0      SBCI	R29,0
      E7 EA0A      LDI	R16,0xAA
      E8 8308      STD	Y+0,R16
      E9 2400      CLR	R0
      EA E3E6      LDI	R30,0x36
      EB E0F2      LDI	R31,2
      EC E012      LDI	R17,2
      ED 33E6      CPI	R30,0x36
      EE 07F1      CPC	R31,R17
      EF F011      BEQ	0x00F2
      F0 9201      ST	R0,Z+
      F1 CFFB      RJMP	0x00ED
      F2 8300      STD	Z+0,R16
      F3 E8EC      LDI	R30,0x8C
      F4 E0F0      LDI	R31,0
      F5 E0A0      LDI	R26,0
      F6 E0B1      LDI	R27,1
      F7 E011      LDI	R17,1
      F8 E000      LDI	R16,0
      F9 BF0B      OUT	0x3B,R16
      FA 3CE2      CPI	R30,0xC2
      FB 07F1      CPC	R31,R17
      FC F021      BEQ	0x0101
      FD 95C8      LPM
      FE 9631      ADIW	R30,1
      FF 920D      ST	R0,X+
     100 CFF9      RJMP	0x00FA
     101 940E 01C6 CALL	_main
_exit:
     103 CFFF      RJMP	_exit
_delay_us:
  i                    --> R10
  count                --> R16
     104 92AA      ST	R10,-Y
FILE: E:\电视接收头\高频头项目\avr\SRC\I2C.c
(0001) #include "..\inc\main.h"
(0002) 
(0003) BYTE ack=0;
(0004) 
(0005) //函数声明
(0006) void delay_us(BYTE count);
(0007) void Start_I2C(void);
(0008) void Stop_I2C(void);
(0009) void Ack_I2C(BYTE a);
(0010) void SendByte(BYTE c);
(0011) BYTE ReceiveByte(void);
(0012) 
(0013) void delay_us(BYTE count)
(0014) {
(0015) 	BYTE i;
(0016) 	for(i=0;i<count;i++)
     105 24AA      CLR	R10
     106 C00B      RJMP	0x0112
(0017) 	{
(0018) 		asm("nop");
     107 0000      NOP
(0019) 		asm("nop");
     108 0000      NOP
(0020) 		asm("nop");
     109 0000      NOP
(0021) 		asm("nop");
     10A 0000      NOP
(0022) 		asm("nop");
     10B 0000      NOP
(0023) 		asm("nop");
     10C 0000      NOP
(0024) 		asm("nop");
     10D 0000      NOP
(0025) 		asm("nop");
     10E 0000      NOP
(0026) 		asm("nop");
     10F 0000      NOP
(0027) 		asm("nop");
     110 0000      NOP
     111 94A3      INC	R10
     112 16A0      CP	R10,R16
     113 F398      BCS	0x0107
     114 90A9      LD	R10,Y+
     115 9508      RET
(0028) 	}
(0029) }
(0030) 
(0031) void Start_I2C(void)
(0032) {
(0033) 	I2C_DDR=(1<<SDA)|(1<<SCL);		/*SDA端口定义为输出*/
_Start_I2C:
     116 EA80      LDI	R24,0xA0
     117 BB81      OUT	0x11,R24
(0034) 	SDA_H;							/*发送起始条件的数据信号*/
     118 9A97      SBI	0x12,7
(0035) 	delay_us(1);
     119 E001      LDI	R16,1
     11A DFE9      RCALL	_delay_us
(0036) 	SCL_H;
     11B 9A95      SBI	0x12,5
(0037) 	delay_us(5);					/*起始条件建立时间大于4.7us,延时*/
     11C E005      LDI	R16,5
     11D DFE6      RCALL	_delay_us
(0038) 	SDA_L;							/*发送起始信号*/
     11E 9897      CBI	0x12,7
(0039) 	delay_us(4);					/*起始条件锁定时间大于4μs*/
     11F E004      LDI	R16,4
     120 DFE3      RCALL	_delay_us
(0040) 	SCL_L;							/*钳住I2C总线,准备发送或接收数据 */
     121 9895      CBI	0x12,5
(0041) 	delay_us(2);
     122 E002      LDI	R16,2
     123 DFE0      RCALL	_delay_us
     124 9508      RET
(0042) }
(0043) 
(0044) void Stop_I2C(void)
(0045) {
(0046) 	I2C_DDR=(1<<SDA)|(1<<SCL);		/*SDA端口定义为输出*/
_Stop_I2C:
     125 EA80      LDI	R24,0xA0
     126 BB81      OUT	0x11,R24
(0047) 	SDA_L;							/*发送结束条件的数据信号*/
     127 9897      CBI	0x12,7
(0048) 	delay_us(1);
     128 E001      LDI	R16,1
     129 DFDA      RCALL	_delay_us
(0049) 	SCL_H;							/*结束条件建立时间大于4us*/
     12A 9A95      SBI	0x12,5
(0050) 	delay_us(5);
     12B E005      LDI	R16,5
     12C DFD7      RCALL	_delay_us
(0051) 	SDA_H;							/*发送I2C总线结束信号*/
     12D 9A97      SBI	0x12,7
(0052) 	delay_us(4);
     12E E004      LDI	R16,4
     12F DFD4      RCALL	_delay_us
(0053) 	I2C_DDR=~((1<<SDA)|(1<<SCL));
     130 E58F      LDI	R24,0x5F
     131 EF9F      LDI	R25,0xFF
     132 BB81      OUT	0x11,R24
(0054) 	SDA_H;
     133 9A97      SBI	0x12,7
(0055) 	SCL_H;	
     134 9A95      SBI	0x12,5
     135 9508      RET
_Ack_I2C:
  a                    --> R10
     136 92AA      ST	R10,-Y
     137 2EA0      MOV	R10,R16
(0056) }
(0057) 
(0058) void Ack_I2C(BYTE a)
(0059) {
(0060) 	I2C_DDR=(1<<SDA)|(1<<SCL);		/*SDA端口定义为输出*/
     138 EA80      LDI	R24,0xA0
     139 BB81      OUT	0x11,R24
(0061) 	if(a==0)						/*在此发出应答或非应答信号 */
     13A 20AA      TST	R10
     13B F411      BNE	0x013E
(0062) 	{
(0063) 		SDA_L;
     13C 9897      CBI	0x12,7
(0064) 	}
     13D C001      RJMP	0x013F
(0065) 	else
(0066) 	{
(0067) 		SDA_H;
     13E 9A97      SBI	0x12,7
(0068) 	}
(0069) 	delay_us(4);					
     13F E004      LDI	R16,4
     140 DFC3      RCALL	_delay_us
(0070) 	SCL_H;
     141 9A95      SBI	0x12,5
(0071) 	delay_us(4);					/*时钟低电平周期大于4μs*/
     142 E004      LDI	R16,4
     143 DFC0      RCALL	_delay_us
(0072) 	SCL_L;							/*清时钟线,钳住I2C总线以便继续接收*/
     144 9895      CBI	0x12,5
(0073) 	delay_us(2);
     145 E002      LDI	R16,2
     146 DFBD      RCALL	_delay_us
     147 90A9      LD	R10,Y+
     148 9508      RET
_SendByte:
  BitCnt               --> R20
  c                    --> R10
     149 92AA      ST	R10,-Y
     14A 934A      ST	R20,-Y
     14B 2EA0      MOV	R10,R16
(0074) }	
(0075) 
(0076) void SendByte(BYTE c)
(0077) {
(0078) 	BYTE BitCnt;
(0079) 	I2C_DDR=(1<<SDA)|(1<<SCL);		/*SDA SCL端口均定义为输出*/
     14C EA80      LDI	R24,0xA0
     14D BB81      OUT	0x11,R24
(0080) 	for(BitCnt=0;BitCnt<8;BitCnt++)	/*要传送的数据长度为8位*/
     14E 2744      CLR	R20
     14F C011      RJMP	0x0161
(0081) 	{
(0082) 		if((c<<BitCnt)&0x08)		/*判断发送位*/
     150 2D0A      MOV	R16,R10
     151 2F14      MOV	R17,R20
     152 940E 01F8 CALL	lsl8
     154 2F80      MOV	R24,R16
     155 7088      ANDI	R24,0x8
     156 F011      BEQ	0x0159
(0083) 		{
(0084) 			SDA_H;
     157 9A97      SBI	0x12,7
(0085) 		}
     158 C001      RJMP	0x015A
(0086) 		else
(0087) 		{
(0088) 			SDA_L;
     159 9897      CBI	0x12,7
(0089) 		}
(0090) 		delay_us(1);
     15A E001      LDI	R16,1
     15B DFA8      RCALL	_delay_us
(0091) 		SCL_H;						/*置时钟线为高,通知被控器开始接收数据位*/
     15C 9A95      SBI	0x12,5
(0092) 		delay_us(5);				/*保证时钟高电平周期大于4μs*/
     15D E005      LDI	R16,5
     15E DFA5      RCALL	_delay_us
(0093) 		SCL_L;
     15F 9895      CBI	0x12,5
     160 9543      INC	R20
     161 3048      CPI	R20,0x8
     162 F368      BCS	0x0150
(0094) 	}
(0095) 	delay_us(2);
     163 E002      LDI	R16,2
     164 DF9F      RCALL	_delay_us
(0096) 	I2C_DDR=~(1<<SDA);				/*SDA定义为输入,置数据线为输入方式*/
     165 E78F      LDI	R24,0x7F
     166 EF9F      LDI	R25,0xFF
     167 BB81      OUT	0x11,R24
(0097) 	SDA_H;							/*8位发送完后释放数据线,准备接收应答位,打开内部上拉*/
     168 9A97      SBI	0x12,7
(0098) 	delay_us(2);
     169 E002      LDI	R16,2
     16A DF99      RCALL	_delay_us
(0099) 	SCL_H;
     16B 9A95      SBI	0x12,5
(0100) 	delay_us(3);
     16C E003      LDI	R16,3
     16D DF96      RCALL	_delay_us
(0101) 	if(ACK_FAIL)					/*判断是否接收到应答信号*/
     16E B380      IN	R24,0x10
     16F 9586      LSR	R24
     170 9586      LSR	R24
     171 9586      LSR	R24
     172 9586      LSR	R24
     173 9586      LSR	R24
     174 9586      LSR	R24
     175 9586      LSR	R24
     176 7081      ANDI	R24,1
     177 F021      BEQ	0x017C
(0102) 	{
(0103) 		ack=0;
     178 2422      CLR	R2
     179 9220 0100 STS	ack,R2
(0104) 	}
     17B C003      RJMP	0x017F
(0105) 	else
(0106) 	{
(0107) 		ack=1;
     17C E081      LDI	R24,1
     17D 9380 0100 STS	ack,R24
(0108) 	}
(0109) 	SCL_L;
     17F 9895      CBI	0x12,5
(0110) 	delay_us(2);
     180 E002      LDI	R16,2
     181 DF82      RCALL	_delay_us
     182 9149      LD	R20,Y+
     183 90A9      LD	R10,Y+
     184 9508      RET
_ReceiveByte:
  retc                 --> R10
  BitCnt               --> R20
     185 92AA      ST	R10,-Y
     186 934A      ST	R20,-Y
(0111) }
(0112) 
(0113) BYTE ReceiveByte(void)
(0114) {
(0115) 	BYTE retc;
(0116) 	BYTE BitCnt;
(0117) 	retc=0;
     187 24AA      CLR	R10
(0118) 	I2C_DDR=~(1<<SDA);
     188 E78F      LDI	R24,0x7F
     189 EF9F      LDI	R25,0xFF
     18A BB81      OUT	0x11,R24
(0119) 	SDA_H;							/*SDA定义为输入,置数据线为输入方式*/		
     18B 9A97      SBI	0x12,7
(0120) 	for(BitCnt=0;BitCnt<8;BitCnt++)
     18C 2744      CLR	R20
     18D C017      RJMP	0x01A5
(0121) 	{
(0122) 		delay_us(1);
     18E E001      LDI	R16,1
     18F DF74      RCALL	_delay_us
(0123) 		SCL_L;						/*置时钟线位低,准备接收数据位*/
     190 9895      CBI	0x12,5
(0124) 		delay_us(5);				/*时钟低电平周期大于4.7μs*/
     191 E005      LDI	R16,5
     192 DF71      RCALL	_delay_us

⌨️ 快捷键说明

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