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

📄 main.lst

📁 avr 单片机twi源程序 功能:实现TWI主从机通讯.
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0016)  while(1)
(0017)  {
(0018)  i2c_maste_transt(0x50,i);
    00B9 2F26      MOV	R18,R22
    00BA E500      LDI	R16,0x50
    00BB 940E008F  CALL	_i2c_maste_transt
(0019)  i++;
    00BD 9563      INC	R22
(0020)  delay_1s();
    00BE 940E00D4  CALL	_delay_1s
(0021)  tmp=i2c_maste_read(0x50); //读一个数
    00C0 E500      LDI	R16,0x50
    00C1 940E009F  CALL	_i2c_maste_read
    00C3 2F40      MOV	R20,R16
(0022)  if(tmp==0x10) i=0;
    00C4 3100      CPI	R16,0x10
    00C5 F409      BNE	0x00C7
    00C6 2766      CLR	R22
    00C7 CFF1      RJMP	0x00B9
    00C8 9508      RET
FILE: F:\2007电子设计\古欣\twitest\lib\delay.c
(0001) #include "config.h"
(0002) 
(0003) /***********************
(0004) ** 8M晶振下 1us
(0005) ** 也可以宏定义 8个asm("nop");
(0006) ** #define delay_1us asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
(0007) ***********************/
(0008) void delay_1us(void)
(0009) {
(0010)  asm("nop");
_delay_1us:
    00C9 0000      NOP
    00CA 9508      RET
(0011) }
(0012) 
(0013) /***********************
(0014) **8M时为 1000.25us
(0015) **4M时为 999.5us
(0016) **xtal 为晶振频率,单位为Mhz
(0017) ************************/
(0018) void delay_1ms(void)
(0019) {
(0020)  unsigned int i;
(0021)  for(i=(xtal*143-2);i>0;i--)
_delay_1ms:
  i                    --> R16
    00CB E706      LDI	R16,0x76
    00CC E014      LDI	R17,4
    00CD C002      RJMP	0x00D0
    00CE 5001      SUBI	R16,1
    00CF 4010      SBCI	R17,0
    00D0 3000      CPI	R16,0
    00D1 0701      CPC	R16,R17
    00D2 F7D9      BNE	0x00CE
    00D3 9508      RET
_delay_1s:
  i                    --> R20
    00D4 940E0155  CALL	push_gset1
(0022)   ;
(0023) }
(0024) 
(0025) /***********************
(0026) ** 1S延时,误差可能稍大
(0027) ** 250ms*4=1000ms
(0028) ************************/
(0029) void delay_1s(void)
(0030) {
(0031)  unsigned int i;
(0032)    for(i=250;i>0;i--)   //250ms*4=1000ms
    00D6 EF4A      LDI	R20,0xFA
    00D7 E050      LDI	R21,0
    00D8 C003      RJMP	0x00DC
(0033)    delay_1ms();
    00D9 DFF1      RCALL	_delay_1ms
    00DA 5041      SUBI	R20,1
    00DB 4050      SBCI	R21,0
    00DC 3040      CPI	R20,0
    00DD 0745      CPC	R20,R21
    00DE F7D1      BNE	0x00D9
(0034)    for(i=250;i>0;i--)
    00DF EF4A      LDI	R20,0xFA
    00E0 E050      LDI	R21,0
    00E1 C003      RJMP	0x00E5
(0035)    delay_1ms();
    00E2 DFE8      RCALL	_delay_1ms
    00E3 5041      SUBI	R20,1
    00E4 4050      SBCI	R21,0
    00E5 3040      CPI	R20,0
    00E6 0745      CPC	R20,R21
    00E7 F7D1      BNE	0x00E2
(0036)    for(i=250;i>0;i--)
    00E8 EF4A      LDI	R20,0xFA
    00E9 E050      LDI	R21,0
    00EA C003      RJMP	0x00EE
(0037)    delay_1ms();
    00EB DFDF      RCALL	_delay_1ms
    00EC 5041      SUBI	R20,1
    00ED 4050      SBCI	R21,0
    00EE 3040      CPI	R20,0
    00EF 0745      CPC	R20,R21
    00F0 F7D1      BNE	0x00EB
(0038)    for(i=250;i>0;i--)
    00F1 EF4A      LDI	R20,0xFA
    00F2 E050      LDI	R21,0
    00F3 C003      RJMP	0x00F7
(0039)    delay_1ms();
    00F4 DFD6      RCALL	_delay_1ms
    00F5 5041      SUBI	R20,1
    00F6 4050      SBCI	R21,0
    00F7 3040      CPI	R20,0
    00F8 0745      CPC	R20,R21
    00F9 F7D1      BNE	0x00F4
    00FA 940E0158  CALL	pop_gset1
    00FC 9508      RET
_delay_us:
  i                    --> R20
  n                    --> R22
    00FD 940E0153  CALL	push_gset2
    00FF 01B8      MOVW	R22,R16
(0040) }
(0041) 
(0042) /***********************
(0043) **微秒级延时
(0044) ************************/
(0045) void delay_us(unsigned int n)
(0046) {
(0047)  unsigned int i;
(0048)  for(i=n;i>0;i--)
    0100 01AB      MOVW	R20,R22
    0101 C003      RJMP	0x0105
(0049)  delay_1us();
    0102 DFC6      RCALL	_delay_1us
    0103 5041      SUBI	R20,1
    0104 4050      SBCI	R21,0
    0105 3040      CPI	R20,0
    0106 0745      CPC	R20,R21
    0107 F7D1      BNE	0x0102
    0108 940E014A  CALL	pop_gset2
    010A 9508      RET
_delay_ms:
  i                    --> R20
  n                    --> R22
    010B 940E0153  CALL	push_gset2
    010D 01B8      MOVW	R22,R16
(0050) }
(0051) 
(0052) /***********************
(0053) **毫秒级延时
(0054) ************************/
(0055) void delay_ms(unsigned int n)
(0056) {
(0057)  unsigned int i;
(0058)  for(i=n;i>0;i--)
    010E 01AB      MOVW	R20,R22
    010F C003      RJMP	0x0113
(0059)  delay_1ms();
    0110 DFBA      RCALL	_delay_1ms
    0111 5041      SUBI	R20,1
    0112 4050      SBCI	R21,0
    0113 3040      CPI	R20,0
    0114 0745      CPC	R20,R21
    0115 F7D1      BNE	0x0110
    0116 940E014A  CALL	pop_gset2
    0118 9508      RET
_delay_s:
  j                    --> R20
  i                    --> R22
  n                    --> R22
    0119 940E0153  CALL	push_gset2
    011B 01B8      MOVW	R22,R16
(0060) }
(0061) 
(0062) /***********************
(0063) **秒级延时,太浪费资源,不建议使用
(0064) ************************/
(0065) void delay_s(unsigned int n)
(0066) {
(0067)  unsigned int i,j;
(0068)  for(j=n;j>0;j--)
    011C 01AB      MOVW	R20,R22
    011D C026      RJMP	0x0144
(0069)   {
(0070)    for(i=250;i>0;i--)   //250ms*4=1000ms
    011E EF6A      LDI	R22,0xFA
    011F E070      LDI	R23,0
    0120 C003      RJMP	0x0124
(0071)    delay_1ms();
    0121 DFA9      RCALL	_delay_1ms
    0122 5061      SUBI	R22,1
    0123 4070      SBCI	R23,0
    0124 3060      CPI	R22,0
    0125 0767      CPC	R22,R23
    0126 F7D1      BNE	0x0121
(0072)    for(i=250;i>0;i--)
    0127 EF6A      LDI	R22,0xFA
    0128 E070      LDI	R23,0
    0129 C003      RJMP	0x012D
(0073)    delay_1ms();
    012A DFA0      RCALL	_delay_1ms
    012B 5061      SUBI	R22,1
    012C 4070      SBCI	R23,0
    012D 3060      CPI	R22,0
    012E 0767      CPC	R22,R23
    012F F7D1      BNE	0x012A
(0074)    for(i=250;i>0;i--)
    0130 EF6A      LDI	R22,0xFA
    0131 E070      LDI	R23,0
    0132 C003      RJMP	0x0136
(0075)    delay_1ms();
    0133 DF97      RCALL	_delay_1ms
    0134 5061      SUBI	R22,1
    0135 4070      SBCI	R23,0
    0136 3060      CPI	R22,0
    0137 0767      CPC	R22,R23
    0138 F7D1      BNE	0x0133
(0076)    for(i=250;i>0;i--)
    0139 EF6A      LDI	R22,0xFA
    013A E070      LDI	R23,0
    013B C003      RJMP	0x013F
(0077)    delay_1ms();
FILE: <library>
    013C DF8E      RCALL	_delay_1ms
    013D 5061      SUBI	R22,1
    013E 4070      SBCI	R23,0
    013F 3060      CPI	R22,0
    0140 0767      CPC	R22,R23
    0141 F7D1      BNE	0x013C
    0142 5041      SUBI	R20,1
    0143 4050      SBCI	R21,0
    0144 3040      CPI	R20,0
    0145 0745      CPC	R20,R21
    0146 F6B9      BNE	0x011E
    0147 940E014A  CALL	pop_gset2
    0149 9508      RET
pop_gset2:
    014A E0E2      LDI	R30,2
    014B 940C0159  JMP	pop
push_gset5:
    014D 92FA      ST	R15,-Y
    014E 92EA      ST	R14,-Y
push_gset4:
    014F 92DA      ST	R13,-Y
    0150 92CA      ST	R12,-Y
push_gset3:
    0151 92BA      ST	R11,-Y
    0152 92AA      ST	R10,-Y
push_gset2:
    0153 937A      ST	R23,-Y
    0154 936A      ST	R22,-Y
push_gset1:
    0155 935A      ST	R21,-Y
    0156 934A      ST	R20,-Y
    0157 9508      RET
pop_gset1:
    0158 E0E1      LDI	R30,1
pop:
    0159 9149      LD	R20,Y+
    015A 9159      LD	R21,Y+
    015B FDE0      SBRC	R30,0
    015C 9508      RET
    015D 9169      LD	R22,Y+
    015E 9179      LD	R23,Y+
    015F FDE1      SBRC	R30,1
    0160 9508      RET
    0161 90A9      LD	R10,Y+
    0162 90B9      LD	R11,Y+
    0163 FDE2      SBRC	R30,2
    0164 9508      RET
    0165 90C9      LD	R12,Y+
    0166 90D9      LD	R13,Y+
    0167 FDE3      SBRC	R30,3
    0168 9508      RET
    0169 90E9      LD	R14,Y+
    016A 90F9      LD	R15,Y+
    016B 9508      RET

⌨️ 快捷键说明

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