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

📄 wave50%.lst

📁 利用ATmega16单片机的T2定时器产生方波的控制程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
__text_start:
__start:
    0013 E5CF      LDI	R28,0x5F
    0014 E0D4      LDI	R29,4
    0015 BFCD      OUT	0x3D,R28
    0016 BFDE      OUT	0x3E,R29
    0017 51C0      SUBI	R28,0x10
    0018 40D0      SBCI	R29,0
    0019 EA0A      LDI	R16,0xAA
    001A 8308      STD	Y+0,R16
    001B 2400      CLR	R0
    001C E6E0      LDI	R30,0x60
    001D E0F0      LDI	R31,0
    001E E010      LDI	R17,0
    001F 36E6      CPI	R30,0x66
    0020 07F1      CPC	R31,R17
    0021 F011      BEQ	0x0024
    0022 9201      ST	R0,Z+
    0023 CFFB      RJMP	0x001F
    0024 8300      STD	Z+0,R16
    0025 E2E6      LDI	R30,0x26
    0026 E0F0      LDI	R31,0
    0027 E6A0      LDI	R26,0x60
    0028 E0B0      LDI	R27,0
    0029 E010      LDI	R17,0
    002A 32E6      CPI	R30,0x26
    002B 07F1      CPC	R31,R17
    002C F021      BEQ	0x0031
    002D 95C8      LPM
    002E 9631      ADIW	R30,1
    002F 920D      ST	R0,X+
    0030 CFF9      RJMP	0x002A
    0031 D0C4      RCALL	_main
_exit:
    0032 CFFF      RJMP	_exit
FILE: C:\DOCUME~1\hb\MYDOCU~1\喷吗机--2代\单片机程序\定时器(方波输出,TC0控制)\Wave50%.c
(0001) //ICC-AVR application builder : 2006-12-10 11:12:46
(0002) // Target : M8
(0003) // Crystal: 4.0000Mhz
(0004) 
(0005) #include <iom8v.h>
(0006) #include <macros.h>
(0007) long Ddummy;
(0008) char Settings_PerDotGroupNum,Settings_PrintPhase;
(0009) 
(0010) void port_init(void)
(0011) {
(0012)  PORTB = 0x00;
_port_init:
    0033 2422      CLR	R2
    0034 BA28      OUT	0x18,R2
(0013)  DDRB  = 0xFF;
    0035 EF8F      LDI	R24,0xFF
    0036 BB87      OUT	0x17,R24
(0014)  PORTC = 0x7F; //m103 output only
    0037 E78F      LDI	R24,0x7F
    0038 BB85      OUT	0x15,R24
(0015)  DDRC  = 0x00;
    0039 BA24      OUT	0x14,R2
(0016)  PORTD = 0xFF;
    003A EF8F      LDI	R24,0xFF
    003B BB82      OUT	0x12,R24
(0017)  DDRD  = 0x00;
    003C BA21      OUT	0x11,R2
(0018) }
    003D 9508      RET
(0019) 
(0020) //TIMER0 initialisation - prescale:1
(0021) // WGM: Normal
(0022) // desired value: 125KHz
(0023) // actual value: 125.000KHz (0.0%)
(0024) void timer0_init(void)
(0025) {
(0026)  TCCR0 = 0x00; //stop
_timer0_init:
    003E 2422      CLR	R2
    003F BE23      OUT	0x33,R2
(0027)  TCNT0 = 0xE0; //set count
    0040 EE80      LDI	R24,0xE0
    0041 BF82      OUT	0x32,R24
(0028)  TCCR0 = 0x01; //start timer
    0042 E081      LDI	R24,1
    0043 BF83      OUT	0x33,R24
(0029) }
    0044 9508      RET
_timer0_ovf_isr:
    0045 922A      ST	R2,-Y
    0046 923A      ST	R3,-Y
    0047 924A      ST	R4,-Y
    0048 925A      ST	R5,-Y
    0049 926A      ST	R6,-Y
    004A 927A      ST	R7,-Y
    004B 928A      ST	R8,-Y
    004C 929A      ST	R9,-Y
    004D 930A      ST	R16,-Y
    004E 931A      ST	R17,-Y
    004F 932A      ST	R18,-Y
    0050 933A      ST	R19,-Y
    0051 938A      ST	R24,-Y
    0052 939A      ST	R25,-Y
    0053 93AA      ST	R26,-Y
    0054 93BA      ST	R27,-Y
    0055 93EA      ST	R30,-Y
    0056 B62F      IN	R2,0x3F
    0057 922A      ST	R2,-Y
    0058 D166      RCALL	push_gset2
(0030) 
(0031) #pragma interrupt_handler timer0_ovf_isr:10
(0032) void timer0_ovf_isr(void)
(0033) {
(0034)     Ddummy++;
    0059 E041      LDI	R20,1
    005A E050      LDI	R21,0
    005B E060      LDI	R22,0
    005C E070      LDI	R23,0
    005D 90400064  LDS	R4,_Ddummy+2
    005F 90500065  LDS	R5,_Ddummy+3
    0061 90200062  LDS	R2,_Ddummy
    0063 90300063  LDS	R3,_Ddummy+1
    0065 0E24      ADD	R2,R20
    0066 1E35      ADC	R3,R21
    0067 1E46      ADC	R4,R22
    0068 1E57      ADC	R5,R23
    0069 92300063  STS	_Ddummy+1,R3
    006B 92200062  STS	_Ddummy,R2
    006D 92500065  STS	_Ddummy+3,R5
    006F 92400064  STS	_Ddummy+2,R4
(0035)     if(2*(Ddummy/2)==Ddummy){PORTB &=0xFD;} //PB1脚置低电平
    0071 E042      LDI	R20,2
    0072 E050      LDI	R21,0
    0073 E060      LDI	R22,0
    0074 E070      LDI	R23,0
    0075 937A      ST	R23,-Y
    0076 936A      ST	R22,-Y
    0077 935A      ST	R21,-Y
    0078 934A      ST	R20,-Y
    0079 0181      MOVW	R16,R2
    007A 0192      MOVW	R18,R4
    007B D093      RCALL	div32s
    007C E042      LDI	R20,2
    007D E050      LDI	R21,0
    007E E060      LDI	R22,0
    007F E070      LDI	R23,0
    0080 933A      ST	R19,-Y
    0081 932A      ST	R18,-Y
    0082 931A      ST	R17,-Y
    0083 930A      ST	R16,-Y
    0084 018A      MOVW	R16,R20
    0085 019B      MOVW	R18,R22
    0086 D0F3      RCALL	empy32u
    0087 90400064  LDS	R4,_Ddummy+2
    0089 90500065  LDS	R5,_Ddummy+3
    008B 90200062  LDS	R2,_Ddummy
    008D 90300063  LDS	R3,_Ddummy+1
    008F 1502      CP	R16,R2
    0090 0513      CPC	R17,R3
    0091 0524      CPC	R18,R4
    0092 0535      CPC	R19,R5
    0093 F421      BNE	0x0098
    0094 B388      IN	R24,0x18
    0095 7F8D      ANDI	R24,0xFD
    0096 BB88      OUT	0x18,R24
    0097 C001      RJMP	0x0099
(0036) 	else{PORTB |=0X02;} //PB1脚置高电平
    0098 9AC1      SBI	0x18,1
(0037) 	
(0038)     if(Ddummy==1) PORTB &=0xFE;    //PB0脚置低电平
    0099 E041      LDI	R20,1
    009A E050      LDI	R21,0
    009B E060      LDI	R22,0
    009C E070      LDI	R23,0
    009D 90400064  LDS	R4,_Ddummy+2
    009F 90500065  LDS	R5,_Ddummy+3
    00A1 90200062  LDS	R2,_Ddummy
    00A3 90300063  LDS	R3,_Ddummy+1
    00A5 1624      CP	R2,R20
    00A6 0635      CPC	R3,R21
    00A7 0646      CPC	R4,R22
    00A8 0657      CPC	R5,R23
    00A9 F419      BNE	0x00AD
    00AA B388      IN	R24,0x18
    00AB 7F8E      ANDI	R24,0xFE
    00AC BB88      OUT	0x18,R24
(0039) 	if(Ddummy >=Settings_PerDotGroupNum){
    00AD 90200061  LDS	R2,_Settings_PerDotGroupNum
    00AF 2433      CLR	R3
    00B0 2444      CLR	R4
    00B1 2455      CLR	R5
    00B2 90800064  LDS	R8,_Ddummy+2
    00B4 90900065  LDS	R9,_Ddummy+3
    00B6 90600062  LDS	R6,_Ddummy
    00B8 90700063  LDS	R7,_Ddummy+1
    00BA 1462      CP	R6,R2
    00BB 0473      CPC	R7,R3
    00BC 0484      CPC	R8,R4
    00BD 0495      CPC	R9,R5
    00BE F06C      BLT	0x00CC
(0040) 	   Ddummy =0; //恢复计数初值
    00BF E040      LDI	R20,0
    00C0 E050      LDI	R21,0
    00C1 E060      LDI	R22,0
    00C2 E070      LDI	R23,0
    00C3 93500063  STS	_Ddummy+1,R21
    00C5 93400062  STS	_Ddummy,R20
    00C7 93700065  STS	_Ddummy+3,R23
    00C9 93600064  STS	_Ddummy+2,R22
(0041)        PORTB |=0X01;   //PB0脚置高电平
    00CB 9AC0      SBI	0x18,0
(0042) 	}  
(0043)     TCNT0 = 0xF0; //reload counter value
    00CC EF80      LDI	R24,0xF0
    00CD BF82      OUT	0x32,R24
(0044) }
    00CE D0D7      RCALL	pop_gset2
    00CF 9029      LD	R2,Y+
    00D0 BE2F      OUT	0x3F,R2
    00D1 91E9      LD	R30,Y+
    00D2 91B9      LD	R27,Y+
    00D3 91A9      LD	R26,Y+
    00D4 9199      LD	R25,Y+
    00D5 9189      LD	R24,Y+
    00D6 9139      LD	R19,Y+
    00D7 9129      LD	R18,Y+
    00D8 9119      LD	R17,Y+
    00D9 9109      LD	R16,Y+
    00DA 9099      LD	R9,Y+
    00DB 9089      LD	R8,Y+
    00DC 9079      LD	R7,Y+
    00DD 9069      LD	R6,Y+
    00DE 9059      LD	R5,Y+
    00DF 9049      LD	R4,Y+
    00E0 9039      LD	R3,Y+
    00E1 9029      LD	R2,Y+
    00E2 9518      RETI
(0045) 
(0046) //ADC initialisation
(0047) // Conversion time: 6uS
(0048) void adc_init(void)
(0049) {
(0050)  ADCSR = 0x00; //disable adc
_adc_init:
    00E3 2422      CLR	R2
    00E4 B826      OUT	0x06,R2
(0051)  ADMUX = 0x00; //select adc input 0
    00E5 B827      OUT	0x07,R2
(0052)  ACSR  = 0x00;
    00E6 B828      OUT	0x08,R2
(0053)  ADCSR = 0xA9;
    00E7 EA89      LDI	R24,0xA9
    00E8 B986      OUT	0x06,R24
(0054) }
    00E9 9508      RET
(0055) 
(0056) #pragma interrupt_handler adc_isr:15
(0057) void adc_isr(void)
(0058) {
(0059)  //conversion complete, read value (int) using...
(0060)  // value=ADCL;            //Read 8 low bits first (important)
(0061)  // value|=(int)ADCH << 8; //read 2 high bits and shift into top byte
(0062) }
_adc_isr:
    00EA 9518      RETI
(0063) 
(0064) //call this routine to initialise all peripherals
(0065) void init_devices(void)
(0066) {
(0067)  //stop errant interrupts until set up
(0068)  CLI(); //disable all interrupts
_init_devices:
    00EB 94F8      BCLR	7
(0069)  port_init();
    00EC DF46      RCALL	_port_init
(0070)  timer0_init();
    00ED DF50      RCALL	_timer0_init
(0071)  adc_init();
    00EE DFF4      RCALL	_adc_init
(0072) 
(0073)  MCUCR = 0x00;
    00EF 2422      CLR	R2

⌨️ 快捷键说明

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