📄 cscj_timer0.lst
字号:
__start:
__text_start:
0047 EFCF LDI R28,0xFF
0048 E1D0 LDI R29,0x10
0049 BFCD OUT P3D,R28
004A BFDE OUT P3E,R29
004B 51C0 SUBI R28,0x10
004C 40D0 SBCI R29,0
004D EA0A LDI R16,0xAA
004E 8308 STD R16,0+Y
004F 2400 CLR R0
0050 E0E1 LDI R30,1
0051 E0F1 LDI R31,1
0052 E011 LDI R17,1
0053 30E1 CPI R30,1
0054 07F1 CPC R31,R17
0055 F011 BEQ 0x0058
0056 9201 ST R0,Z+
0057 CFFB RJMP 0x0053
0058 8300 STD R16,0+Z
0059 E8EC LDI R30,0x8C
005A E0F0 LDI R31,0
005B E0A0 LDI R26,0
005C E0B1 LDI R27,1
005D E010 LDI R17,0
005E 38ED CPI R30,0x8D
005F 07F1 CPC R31,R17
0060 F021 BEQ 0x0065
0061 95C8 LPM
0062 9631 ADIW R30,1
0063 920D ST R0,X+
0064 CFF9 RJMP 0x005E
0065 940E00B1 CALL _main
_exit:
0067 CFFF RJMP _exit
_delayus:
i --> R20
us --> R22
0068 940E010B CALL push_gset2
006A 01B8 MOVW R22,R16
FILE: E:\重新整理的文件\控制类\超声波检测电路\程序\avr\cscj_timer0.C
(0001) #include <iom128v.h>
(0002) #include <iom128.h>
(0003) #include <macros.h>
(0004) #define uchar unsigned char
(0005) #define uint unsigned int
(0006) #pragma interrupt_handler int0:2
(0007)
(0008) uchar flag=0;
(0009) /*******************************************
(0010) 函数名称: delayus
(0011) 功 能: 延时指定微秒(8.31M晶振)
(0012) 参 数: us--延时的微秒数(大约,不是很精确,MS越大越准确)
(0013) 返回值 : 无
(0014) /********************************************/
(0015) void delayus(uint us)
(0016) {
(0017) uint i;
(0018) us=us*13/10; //13/10是在8.31MHz晶振下,通过反复实验得到的数值
006B E00D LDI R16,0xD
006C E010 LDI R17,0
006D 019B MOVW R18,R22
006E 940E00E4 CALL empy16s
0070 E02A LDI R18,0xA
0071 E030 LDI R19,0
0072 940E00CA CALL div16u
0074 01B8 MOVW R22,R16
(0019) for( i=0;i<us;i++);
0075 2744 CLR R20
0076 2755 CLR R21
0077 C002 RJMP 0x007A
0078 5F4F SUBI R20,0xFF
0079 4F5F SBCI R21,0xFF
007A 1746 CP R20,R22
007B 0757 CPC R21,R23
007C F3D8 BCS 0x0078
(0020) }
007D 940E010F CALL pop_gset2
007F 9508 RET
_delayms:
x --> R20
y --> R22
z --> R16
0080 940E010B CALL push_gset2
(0021)
(0022) /*******************************************
(0023) 函数名称: delay()
(0024) 功 能: 8.31MHz晶振下延时 z ms
(0025) 参 数: z
(0026) 返回值 : 无
(0027) /********************************************/
(0028) void delayms(uint z)
(0029) {
(0030) uint x,y;
(0031) for(x=z;x>0;x--)
0082 01A8 MOVW R20,R16
0083 C00A RJMP 0x008E
(0032) for(y=1185;y>0;y--);
0084 EA61 LDI R22,0xA1
0085 E074 LDI R23,4
0086 C002 RJMP 0x0089
0087 5061 SUBI R22,1
0088 4070 SBCI R23,0
0089 3060 CPI R22,0
008A 0767 CPC R22,R23
008B F7D9 BNE 0x0087
008C 5041 SUBI R20,1
008D 4050 SBCI R21,0
008E 3040 CPI R20,0
008F 0745 CPC R20,R21
0090 F799 BNE 0x0084
(0033) }
0091 940E010F CALL pop_gset2
0093 9508 RET
_int0:
0094 938A ST R24,-Y
0095 B78F IN R24,P3F
0096 938A ST R24,-Y
(0034) /*******************************************
(0035) 函数名称: int0()
(0036) 功 能: 进入中断后让发光二极管点亮
(0037) 检测是否收到超声波
(0038) 返回值 : 无
(0039) /********************************************/
(0040) void int0()
(0041) {
(0042) flag=1;
0097 E081 LDI R24,1
0098 93800100 STS R24,0x100
(0043) }
009A 9189 LD R24,Y+
009B BF8F OUT P3F,R24
009C 9189 LD R24,Y+
009D 9518 RETI
(0044)
(0045) /*******************************************
(0046) 函数名称: int0_init()
(0047) 功 能: 中断初始化
(0048) 参 数: 无
(0049) 返回值 : 无
(0050) /********************************************/
(0051) void int0_init()
(0052) {
(0053) DDRD&=~BIT(0);
_int0_init:
009E 9888 CBI P11,0
(0054) PORTD|=BIT(0); //设置输出口上拉
009F 9A90 SBI P12,0
(0055) EICRA=0X02;
00A0 E082 LDI R24,2
00A1 9380006A STS R24,0x6A
(0056) EIMSK=0X01;
00A3 E081 LDI R24,1
00A4 BF89 OUT P39,R24
(0057) SREG=BIT(7);
00A5 E880 LDI R24,0x80
00A6 BF8F OUT P3F,R24
(0058) }
00A7 9508 RET
(0059)
(0060) /*******************************************
(0061) 函数名称: timer0_init()
(0062) 功 能: 定时器0初始化 配置输出40khz占空比50%的方波
(0063) 参 数: 无
(0064) 返回值 : 无
(0065) /********************************************/
(0066) void timer0_init()
(0067) {
(0068) DDRB|=BIT(PB4);
_timer0_init:
00A8 9ABC SBI P17,4
(0069) ASSR&=~BIT(3);
00A9 B780 IN R24,P30
00AA 7F87 ANDI R24,0xF7
00AB BF80 OUT P30,R24
(0070) TCCR0=0X19;
00AC E189 LDI R24,0x19
00AD BF83 OUT P33,R24
(0071) OCR0=0XC7;//经示波器测试产生39.92kHZ的正弦方波
00AE EC87 LDI R24,0xC7
00AF BF81 OUT P31,R24
(0072) }
00B0 9508 RET
(0073)
(0074) void main()
(0075) {
(0076) DDRA=0XFF;
_main:
00B1 EF8F LDI R24,0xFF
00B2 BB8A OUT P1A,R24
(0077) PORTA=0X00;
00B3 2422 CLR R2
00B4 BA2B OUT P1B,R2
(0078) timer0_init();
00B5 DFF2 RCALL _timer0_init
(0079) int0_init();
00B6 DFE7 RCALL _int0_init
00B7 C00E RJMP 0x00C6
(0080) while(1)
(0081) {
(0082) if(flag==1)
00B8 91800100 LDS R24,0x100
00BA 3081 CPI R24,1
00BB F451 BNE 0x00C6
(0083) {
(0084) flag=0;
00BC 2422 CLR R2
00BD 92200100 STS R2,0x100
(0085) PORTA=0X55;
00BF E585 LDI R24,0x55
00C0 BB8B OUT P1B,R24
(0086) delayms(500);
00C1 EF04 LDI R16,0xF4
00C2 E011 LDI R17,1
00C3 DFBC RCALL _delayms
(0087) PORTA=0X00;
00C4 2422 CLR R2
00C5 BA2B OUT P1B,R2
00C6 CFF1 RJMP 0x00B8
(0088) // delayms(500);
(0089) }
(0090) }
(0091) }FILE: <library>
00C7 9508 RET
mod16u:
00C8 9468 BSET 6
00C9 C001 RJMP xdiv16u
div16u:
00CA 94E8 BCLR 6
xdiv16u:
00CB 92EA ST R14,-Y
00CC 92FA ST R15,-Y
00CD 938A ST R24,-Y
00CE 24EE CLR R14
00CF 24FF CLR R15
00D0 E180 LDI R24,0x10
00D1 0F00 LSL R16
00D2 1F11 ROL R17
00D3 1CEE ROL R14
00D4 1CFF ROL R15
00D5 16E2 CP R14,R18
00D6 06F3 CPC R15,R19
00D7 F018 BCS 0x00DB
00D8 1AE2 SUB R14,R18
00D9 0AF3 SBC R15,R19
00DA 9503 INC R16
00DB 958A DEC R24
00DC F7A1 BNE 0x00D1
00DD F416 BRTC 0x00E0
00DE 2D0E MOV R16,R14
00DF 2D1F MOV R17,R15
00E0 9189 LD R24,Y+
00E1 90F9 LD R15,Y+
00E2 90E9 LD R14,Y+
00E3 9508 RET
empy16s:
00E4 920A ST R0,-Y
00E5 921A ST R1,-Y
00E6 938A ST R24,-Y
00E7 939A ST R25,-Y
00E8 9F02 MUL R16,R18
00E9 01C0 MOVW R24,R0
00EA 9F12 MUL R17,R18
00EB 0D90 ADD R25,R0
00EC 9F03 MUL R16,R19
00ED 0D90 ADD R25,R0
00EE 018C MOVW R16,R24
00EF 9199 LD R25,Y+
00F0 9189 LD R24,Y+
00F1 9019 LD R1,Y+
00F2 9009 LD R0,Y+
00F3 9508 RET
push_gset1:
00F4 935A ST R21,-Y
00F5 934A ST R20,-Y
00F6 9508 RET
pop_gset1:
00F7 E0E1 LDI R30,1
pop:
00F8 9149 LD R20,Y+
00F9 9159 LD R21,Y+
00FA FDE0 SBRC R30,0
00FB 9508 RET
00FC 9169 LD R22,Y+
00FD 9179 LD R23,Y+
00FE FDE1 SBRC R30,1
00FF 9508 RET
0100 90A9 LD R10,Y+
0101 90B9 LD R11,Y+
0102 FDE2 SBRC R30,2
0103 9508 RET
0104 90C9 LD R12,Y+
0105 90D9 LD R13,Y+
0106 FDE3 SBRC R30,3
0107 9508 RET
0108 90E9 LD R14,Y+
0109 90F9 LD R15,Y+
010A 9508 RET
push_gset2:
010B 937A ST R23,-Y
010C 936A ST R22,-Y
010D 940C00F4 JMP push_gset1
pop_gset2:
010F E0E2 LDI R30,2
0110 940C00F8 JMP pop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -