📄 main.lst
字号:
(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 + -