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

📄 twi.lst

📁 ICCavr编写的TWI总线协议读写函数
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0002) #include<macros.h>
(0003) 
(0004) void put(unsigned int i)
(0005) {
(0006)  char d[8]={0};
    00C5 E286      LDI	R24,0x26
    00C6 E090      LDI	R25,0
    00C7 01FE      MOVW	R30,R28
    00C8 E008      LDI	R16,0x8
    00C9 E010      LDI	R17,0
    00CA 93FA      ST	R31,-Y
    00CB 93EA      ST	R30,-Y
    00CC 939A      ST	R25,-Y
    00CD 938A      ST	R24,-Y
    00CE D09F      RCALL	asgncblk
(0007)  Int_to_Char(i,d);
    00CF 019E      MOVW	R18,R28
    00D0 018A      MOVW	R16,R20
    00D1 D005      RCALL	_Int_to_Char
(0008)  puts(d);
    00D2 018E      MOVW	R16,R28
    00D3 D039      RCALL	_puts
(0009)  }
    00D4 9628      ADIW	R28,0x8
    00D5 D081      RCALL	pop_gset1
    00D6 9508      RET
_Int_to_Char:
  p                    --> R20
  i                    --> R22
    00D7 D093      RCALL	push_gset2
    00D8 01A9      MOVW	R20,R18
    00D9 01B8      MOVW	R22,R16
(0010)  void Int_to_Char(unsigned int i,char *p)
(0011)  {p[0]=i/1000+48;
    00DA EE28      LDI	R18,0xE8
    00DB E033      LDI	R19,3
    00DC 018B      MOVW	R16,R22
    00DD D05A      RCALL	div16u
    00DE 01C8      MOVW	R24,R16
    00DF 96C0      ADIW	R24,0x30
    00E0 01FA      MOVW	R30,R20
    00E1 8380      STD	Z+0,R24
(0012)   p[1]=(i/100)%10+48;
    00E2 E624      LDI	R18,0x64
    00E3 E030      LDI	R19,0
    00E4 018B      MOVW	R16,R22
    00E5 D052      RCALL	div16u
    00E6 E02A      LDI	R18,0xA
    00E7 E030      LDI	R19,0
    00E8 D04D      RCALL	mod16u
    00E9 01C8      MOVW	R24,R16
    00EA 96C0      ADIW	R24,0x30
    00EB 01FA      MOVW	R30,R20
    00EC 8381      STD	Z+1,R24
(0013)   p[2]=(i%100)/10+48;
    00ED E624      LDI	R18,0x64
    00EE E030      LDI	R19,0
    00EF 018B      MOVW	R16,R22
    00F0 D045      RCALL	mod16u
    00F1 E02A      LDI	R18,0xA
    00F2 E030      LDI	R19,0
    00F3 D044      RCALL	div16u
    00F4 01C8      MOVW	R24,R16
    00F5 96C0      ADIW	R24,0x30
    00F6 01FA      MOVW	R30,R20
    00F7 8382      STD	Z+2,R24
(0014)   p[3]=(i%100)%10+48;
    00F8 E624      LDI	R18,0x64
    00F9 E030      LDI	R19,0
    00FA 018B      MOVW	R16,R22
    00FB D03A      RCALL	mod16u
    00FC E02A      LDI	R18,0xA
    00FD E030      LDI	R19,0
    00FE D037      RCALL	mod16u
    00FF 01C8      MOVW	R24,R16
    0100 96C0      ADIW	R24,0x30
    0101 01FA      MOVW	R30,R20
    0102 8383      STD	Z+3,R24
(0015)  }
    0103 D04E      RCALL	pop_gset2
    0104 9508      RET
(0016) /*          字符输出函数         */
(0017) void putchar(char c)
(0018)     {    
(0019)      while (!(UCSRA&(1<<UDRE)));
_putchar:
  c                    --> R16
    0105 9B5D      SBIS	0x0B,5
    0106 CFFE      RJMP	_putchar
(0020)      UDR=c;    
    0107 B90C      OUT	0x0C,R16
(0021)     }
    0108 9508      RET
(0022) /*          字符输入函数         */	
(0023) unsigned char getchar(void)
(0024)     {
(0025)      while(!(UCSRA& (1<<RXC)));
_getchar:
    0109 9B5F      SBIS	0x0B,7
    010A CFFE      RJMP	_getchar
(0026)      
(0027) 	 return UDR;
    010B B10C      IN	R16,0x0C
    010C 9508      RET
_puts:
  s                    --> R20
    010D D046      RCALL	push_gset1
    010E 01A8      MOVW	R20,R16
(0028)     }   	
(0029) /*          字符串输出函数       */ 
(0030) void puts(char * s)
(0031)     {
    010F C005      RJMP	0x0115
(0032)     while (*s)
(0033)         {
(0034)         putchar(*s);
    0110 01FA      MOVW	R30,R20
    0111 8100      LDD	R16,Z+0
    0112 DFF2      RCALL	_putchar
(0035)         s++;
    0113 5F4F      SUBI	R20,0xFF
    0114 4F5F      SBCI	R21,0xFF
    0115 01FA      MOVW	R30,R20
    0116 8020      LDD	R2,Z+0
    0117 2022      TST	R2
    0118 F7B9      BNE	0x0110
(0036)         }	
(0037)     putchar(0x0a);//回车换行
    0119 E00A      LDI	R16,0xA
    011A DFEA      RCALL	_putchar
(0038)     putchar(0x0d);
    011B E00D      LDI	R16,0xD
    011C DFE8      RCALL	_putchar
(0039)     
(0040)     }
    011D D039      RCALL	pop_gset1
    011E 9508      RET
_putstr:
  s                    --> R20
    011F D034      RCALL	push_gset1
    0120 01A8      MOVW	R20,R16
(0041) /*         不含回车换行的字符串输出函数      */ 
(0042) void putstr(char * s)
(0043)     {
    0121 C005      RJMP	0x0127
(0044)     while (*s)
(0045)         {
(0046)         putchar(*s);
    0122 01FA      MOVW	R30,R20
    0123 8100      LDD	R16,Z+0
    0124 DFE0      RCALL	_putchar
(0047)         s++;
    0125 5F4F      SUBI	R20,0xFF
    0126 4F5F      SBCI	R21,0xFF
    0127 01FA      MOVW	R30,R20
    0128 8020      LDD	R2,Z+0
    0129 2022      TST	R2
    012A F7B9      BNE	0x0122
(0048)         }	
(0049)     }   
    012B D02B      RCALL	pop_gset1
    012C 9508      RET
(0050) /*          UART初始化          	*/	
(0051) void uart_init(void)
(0052) {
(0053)  
(0054)  UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);;//允许发送和接收
_uart_init:
    012D E988      LDI	R24,0x98
    012E B98A      OUT	0x0A,R24
(0055)  UBRRL=47;  // 4M 25        8M 51    7.3728M 47
    012F E28F      LDI	R24,0x2F
    0130 B989      OUT	0x09,R24
(0056)  UBRRH=0;  //       9600;   
    0131 2422      CLR	R2
    0132 BC20      OUT	0x20,R2
(0057)  UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
    0133 E886      LDI	R24,0x86
    0134 BD80      OUT	0x20,R24
(0058) }
FILE: <library>
    0135 9508      RET
mod16u:
    0136 9468      BSET	6
    0137 C001      RJMP	xdiv16u
div16u:
    0138 94E8      BCLR	6
xdiv16u:
    0139 92EA      ST	R14,-Y
    013A 92FA      ST	R15,-Y
    013B 938A      ST	R24,-Y
    013C 24EE      CLR	R14
    013D 24FF      CLR	R15
    013E E180      LDI	R24,0x10
    013F 0F00      LSL	R16
    0140 1F11      ROL	R17
    0141 1CEE      ROL	R14
    0142 1CFF      ROL	R15
    0143 16E2      CP	R14,R18
    0144 06F3      CPC	R15,R19
    0145 F018      BCS	0x0149
    0146 1AE2      SUB	R14,R18
    0147 0AF3      SBC	R15,R19
    0148 9503      INC	R16
    0149 958A      DEC	R24
    014A F7A1      BNE	0x013F
    014B F416      BRTC	0x014E
    014C 2D0E      MOV	R16,R14
    014D 2D1F      MOV	R17,R15
    014E 9189      LD	R24,Y+
    014F 90F9      LD	R15,Y+
    0150 90E9      LD	R14,Y+
    0151 9508      RET
pop_gset2:
    0152 E0E2      LDI	R30,2
    0153 C004      RJMP	pop
push_gset1:
    0154 935A      ST	R21,-Y
    0155 934A      ST	R20,-Y
    0156 9508      RET
pop_gset1:
    0157 E0E1      LDI	R30,1
pop:
    0158 9149      LD	R20,Y+
    0159 9159      LD	R21,Y+
    015A FDE0      SBRC	R30,0
    015B 9508      RET
    015C 9169      LD	R22,Y+
    015D 9179      LD	R23,Y+
    015E FDE1      SBRC	R30,1
    015F 9508      RET
    0160 90A9      LD	R10,Y+
    0161 90B9      LD	R11,Y+
    0162 FDE2      SBRC	R30,2
    0163 9508      RET
    0164 90C9      LD	R12,Y+
    0165 90D9      LD	R13,Y+
    0166 FDE3      SBRC	R30,3
    0167 9508      RET
    0168 90E9      LD	R14,Y+
    0169 90F9      LD	R15,Y+
    016A 9508      RET
push_gset2:
    016B 937A      ST	R23,-Y
    016C 936A      ST	R22,-Y
    016D CFE6      RJMP	push_gset1
asgncblk:
    016E 93AA      ST	R26,-Y
    016F 93BA      ST	R27,-Y
    0170 93EA      ST	R30,-Y
    0171 93FA      ST	R31,-Y
    0172 920A      ST	R0,-Y
    0173 81AF      LDD	R26,Y+7
    0174 85B8      LDD	R27,Y+8
    0175 81ED      LDD	R30,Y+5
    0176 81FE      LDD	R31,Y+6
    0177 3000      CPI	R16,0
    0178 0701      CPC	R16,R17
    0179 F031      BEQ	0x0180
    017A 95C8      LPM
    017B 920D      ST	R0,X+
    017C 9631      ADIW	R30,1
    017D 5001      SUBI	R16,1
    017E 4010      SBCI	R17,0
    017F CFF7      RJMP	0x0177
    0180 9009      LD	R0,Y+
    0181 91F9      LD	R31,Y+
    0182 91E9      LD	R30,Y+
    0183 91B9      LD	R27,Y+
    0184 91A9      LD	R26,Y+
    0185 9624      ADIW	R28,4
    0186 9508      RET
<created procedures>:
    0187 BF86      OUT	0x36,R24
    0188 B626      IN	R2,0x36
    0189 FE27      SBRS	R2,7
    018A CFFD      RJMP	0x0188
    018B 9508      RET
    018C E081      LDI	R24,1
    018D E090      LDI	R25,0
    018E 1784      CP	R24,R20
    018F 0795      CPC	R25,R21
    0190 9508      RET

⌨️ 快捷键说明

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