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

📄 cscj_timer0.lst

📁 超声测距c语言程序 利用定时器产生40khz站空比50 的方波 通过检测收到超声波的时间来测距
💻 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 + -