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

📄 output.lst

📁 avr单片机
💻 LST
📖 第 1 页 / 共 3 页
字号:
__start:
__text_start:
    0084 EFCF      LDI	R28,0xFF
    0085 E1D0      LDI	R29,0x10
    0086 BFCD      OUT	0x3D,R28
    0087 BFDE      OUT	0x3E,R29
    0088 51C0      SUBI	R28,0x10
    0089 40D0      SBCI	R29,0
    008A EA0A      LDI	R16,0xAA
    008B 8308      STD	Y+0,R16
    008C 2400      CLR	R0
    008D E7EB      LDI	R30,0x7B
    008E E0F1      LDI	R31,1
    008F E013      LDI	R17,3
    0090 38E0      CPI	R30,0x80
    0091 07F1      CPC	R31,R17
    0092 F011      BEQ	0x0095
    0093 9201      ST	R0,Z+
    0094 CFFB      RJMP	0x0090
    0095 8300      STD	Z+0,R16
    0096 E8EC      LDI	R30,0x8C
    0097 E0F0      LDI	R31,0
    0098 E0A0      LDI	R26,0
    0099 E0B1      LDI	R27,1
    009A E011      LDI	R17,1
    009B 30E7      CPI	R30,7
    009C 07F1      CPC	R31,R17
    009D F021      BEQ	0x00A2
    009E 95C8      LPM
    009F 9631      ADIW	R30,1
    00A0 920D      ST	R0,X+
    00A1 CFF9      RJMP	0x009B
    00A2 940E044A  CALL	_main
_exit:
    00A4 CFFF      RJMP	_exit
FILE: D:\excersize\output.c
(0001) //======================================================调机自动化控车程序
(0002) //ICC-AVR application builder : 2006-9-2 0:12:00
(0003) // Target : M128
(0004) // Crystal: 16.000Mhz
(0005) //======================================================包含文件
(0006) #include <iom128v.h>
(0007) #include <macros.h>
(0008) #include <D:\excersize\output.h>
(0009) //======================================================定义外部固定地址变量CAN,IO
(0010) //define mappings
(0011) void mapping_init(void)
(0012) {
(0013)  asm(
_mapping_init:
    00A5 9508      RET
(0014)   ".area memory(abs)\n"
(0015)   ".org 0xD000\n"
(0016)   " _CAN0Addr:: .blkb 50\n"
(0017)   ".org 0xE000\n"
(0018)   " _CAN1Addr:: .blkb 50\n"
(0019)   ".org 0xF000\n"
(0020)   " _IOAddr:: .blkb 50\n"
(0021)   ".text\n"
(0022)  );
(0023) }
(0024) //======================================================控制器IO口定义
(0025) void port_init(void)
(0026) {
(0027)  PORTA = 0x00;
_port_init:
    00A6 2422      CLR	R2
    00A7 BA2B      OUT	0x1B,R2
(0028)  DDRA  = 0x00;
    00A8 BA2A      OUT	0x1A,R2
(0029)  PORTB = 0xFF;
    00A9 EF8F      LDI	R24,0xFF
    00AA BB88      OUT	0x18,R24
(0030)  DDRB  = 0xFF;
    00AB BB87      OUT	0x17,R24
(0031)  PORTC = 0xFF; //m103 output only
    00AC BB85      OUT	0x15,R24
(0032)  DDRC  = 0xFF;
    00AD BB84      OUT	0x14,R24
(0033)  PORTD = 0xFF;
    00AE BB82      OUT	0x12,R24
(0034)  DDRD  = 0xF0;
    00AF EF80      LDI	R24,0xF0
    00B0 BB81      OUT	0x11,R24
(0035)  PORTE = 0xFF;
    00B1 EF8F      LDI	R24,0xFF
    00B2 B983      OUT	0x03,R24
(0036)  DDRE  = 0x08;
    00B3 E088      LDI	R24,0x8
    00B4 B982      OUT	0x02,R24
(0037)  PORTF = 0xFC;
    00B5 EF8C      LDI	R24,0xFC
    00B6 93800062  STS	0x62,R24
(0038)  DDRF  = 0x0C;
    00B8 E08C      LDI	R24,0xC
    00B9 93800061  STS	0x61,R24
(0039)  PORTG = 0x1F;
    00BB E18F      LDI	R24,0x1F
    00BC 93800065  STS	0x65,R24
(0040)  DDRG  = 0x00;
    00BE 92200064  STS	0x64,R2
    00C0 9508      RET
(0041) }
(0042) //======================================================内部看门狗初始化
(0043) //Watchdog initialisation
(0044) // prescale: 2048K cycles
(0045) void watchdog_init(void)
(0046) {
(0047)  WDR(); //this prevents a timout on enabling//
_watchdog_init:
    00C1 95A8      WDR
(0048)  WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
    00C2 E08F      LDI	R24,0xF
    00C3 BD81      OUT	0x21,R24
    00C4 9508      RET
(0049) }
(0050) 
(0051) 
(0052) //======================================================串口初始化
(0053) //UART0 initialisation
(0054) // desired baud rate:38400
(0055) // actual baud rate:38462 (0.2%)
(0056) // char size: 8 bit
(0057) // parity: Disabled
(0058) 
(0059) void uart0_init(void)
(0060) {
(0061)  UCSR0B = 0x00; //disable while setting baud rate
_uart0_init:
    00C5 2422      CLR	R2
    00C6 B82A      OUT	0x0A,R2
(0062)  UCSR0A = 0x00;
    00C7 B82B      OUT	0x0B,R2
(0063)  UCSR0C = 0x06;
    00C8 E086      LDI	R24,6
    00C9 93800095  STS	0x95,R24
(0064)  UBRR0L = 0x19; //set baud rate lo
    00CB E189      LDI	R24,0x19
    00CC B989      OUT	0x09,R24
(0065)  UBRR0H = 0x00; //set baud rate hi
    00CD 92200090  STS	0x90,R2
(0066)  UCSR0B = 0xB8;
    00CF EB88      LDI	R24,0xB8
    00D0 B98A      OUT	0x0A,R24
    00D1 9508      RET
_uart0_udre_isr:
    00D2 922A      ST	R2,-Y
    00D3 923A      ST	R3,-Y
    00D4 938A      ST	R24,-Y
    00D5 939A      ST	R25,-Y
    00D6 93EA      ST	R30,-Y
    00D7 93FA      ST	R31,-Y
    00D8 B62F      IN	R2,0x3F
    00D9 922A      ST	R2,-Y
(0067) }
(0068) 
(0069) 
(0070) //======================================================串口0发送中断
(0071) #pragma interrupt_handler uart0_udre_isr:20
(0072) void uart0_udre_isr(void){
(0073)    if(TxOperateSp0!=TxLoadSp0){
    00DA 9020027C  LDS	R2,TxLoadSp0
    00DC 9030027B  LDS	R3,TxOperateSp0
    00DE 1432      CP	R3,R2
    00DF F071      BEQ	0x00EE
(0074) 	  UDR0=TxBuffer0[TxLoadSp0++]; 
    00E0 2433      CLR	R3
    00E1 2D82      MOV	R24,R2
    00E2 5F8F      SUBI	R24,0xFF
    00E3 9380027C  STS	TxLoadSp0,R24
    00E5 E78D      LDI	R24,0x7D
    00E6 E092      LDI	R25,2
    00E7 2DE2      MOV	R30,R2
    00E8 27FF      CLR	R31
    00E9 0FE8      ADD	R30,R24
    00EA 1FF9      ADC	R31,R25
    00EB 8020      LDD	R2,Z+0
    00EC B82C      OUT	0x0C,R2
(0075)    }
    00ED C003      RJMP	0x00F1
(0076)    else{UCSR0B&=0XDF;}
    00EE B18A      IN	R24,0x0A
    00EF 7D8F      ANDI	R24,0xDF
    00F0 B98A      OUT	0x0A,R24
    00F1 9029      LD	R2,Y+
    00F2 BE2F      OUT	0x3F,R2
    00F3 91F9      LD	R31,Y+
    00F4 91E9      LD	R30,Y+
    00F5 9199      LD	R25,Y+
    00F6 9189      LD	R24,Y+
    00F7 9039      LD	R3,Y+
    00F8 9029      LD	R2,Y+
    00F9 9518      RETI
(0077)    
(0078) }
(0079) 
(0080) 
(0081) //======================================================time0 初始化
(0082) //TIMER0 initialisation - prescale:32
(0083) // WGM: Normal
(0084) // desired value: 1KHz
(0085) // actual value:  1.000KHz (0.0%)
(0086) void timer0_init(void){
(0087)  TCCR0 = 0x00; //stop
_timer0_init:
    00FA 2422      CLR	R2
    00FB BE23      OUT	0x33,R2
(0088)  ASSR  = 0x00; //set async mode//同步方式,允许更新计数,比较输出,控制寄存器
    00FC BE20      OUT	0x30,R2
(0089)  TCNT0 = 0x83; //set count
    00FD E883      LDI	R24,0x83
    00FE BF82      OUT	0x32,R24
(0090)  OCR0  = 0x7D;
    00FF E78D      LDI	R24,0x7D
    0100 BF81      OUT	0x31,R24
(0091)  TCCR0 = 0x05; //start timer//128分频
    0101 E085      LDI	R24,5
    0102 BF83      OUT	0x33,R24
    0103 9508      RET
_timer0_comp_isr:
    0104 938A      ST	R24,-Y
    0105 939A      ST	R25,-Y
    0106 B78F      IN	R24,0x3F
    0107 938A      ST	R24,-Y
(0092) }
(0093) //======================================================time0 中断
(0094) #pragma interrupt_handler timer0_comp_isr:16
(0095) void timer0_comp_isr(void){
(0096)    TCNT0 = 0x83;
    0108 E883      LDI	R24,0x83
    0109 BF82      OUT	0x32,R24
(0097)    T0Count0++;
    010A 91800175  LDS	R24,T0Count0
    010C 91900176  LDS	R25,T0Count0+1
    010E 9601      ADIW	R24,1
    010F 93900176  STS	T0Count0+1,R25
    0111 93800175  STS	T0Count0,R24
    0113 9189      LD	R24,Y+
    0114 BF8F      OUT	0x3F,R24
    0115 9199      LD	R25,Y+
    0116 9189      LD	R24,Y+
    0117 9518      RETI
(0098) //   T0Count1++;
(0099)   // T0Count2++;
(0100)   // T0Count3++; 
(0101)   // T0Count4++;
(0102)  //compare occured TCNT0=OCR0
(0103) }
(0104) //======================================================速度中断处理函数
(0105) 
(0106) //======================================================CPU初始化
(0107) //call this routine to initialise all peripherals
(0108) void init_devices(void)
(0109) {
(0110)  //stop errant interrupts until set up
(0111)  CLI(); //disable all interrupts
_init_devices:
    0118 94F8      BCLR	7
(0112)  XDIV  = 0x00; //xtal divider//系统时钟分频控制寄存器
    0119 2422      CLR	R2
    011A BE2C      OUT	0x3C,R2
(0113)  XMCRA = 0x0E; //external memory//外部存储器控制寄存器
    011B E08E      LDI	R24,0xE
    011C 9380006D  STS	0x6D,R24
(0114)  XMCRB = 0x80;
    011E E880      LDI	R24,0x80
    011F 9380006C  STS	0x6C,R24
(0115)  mapping_init();
    0121 DF83      RCALL	_mapping_init
(0116)  port_init();
    0122 DF83      RCALL	_port_init
(0117)  //watchdog_init();
(0118) // timer1_init();
(0119)  timer0_init();
    0123 DFD6      RCALL	_timer0_init
(0120) 
(0121)  //adc_init();
(0122)  
(0123)  MCUCR = 0xC0;//MCU控制寄存器
    0124 EC80      LDI	R24,0xC0
    0125 BF85      OUT	0x35,R24
(0124)  EICRA = 0x0A; //extended ext ints//外部中断控制寄存器
    0126 E08A      LDI	R24,0xA
    0127 9380006A  STS	0x6A,R24
(0125)  EICRB = 0x0F; //extended ext ints
    0129 E08F      LDI	R24,0xF
    012A BF8A      OUT	0x3A,R24
(0126)  EIMSK = 0x33; //0x03 extended ext enable
    012B E383      LDI	R24,0x33
    012C BF89      OUT	0x39,R24
(0127)  TIMSK = 0x12; //timer interrupt sources  01:time0
    012D E182      LDI	R24,0x12
    012E BF87      OUT	0x37,R24
(0128)  ETIMSK = 0x00; //extended timer interrupt sources
    012F 2422      CLR	R2
    0130 9220007D  STS	0x7D,R2
(0129)  uart0_init();
    0132 DF92      RCALL	_uart0_init
(0130)  SEI(); //re-enable interrupts
    0133 9478      BSET	7
    0134 9508      RET
(0131) 	  // MyselfCan0Addr=1;
(0132) 	  // MyselfCan1Addr=2;
(0133) }
(0134) //======================================================看门狗处理函数
(0135) void WatchDog(void){
(0136)         DDRE|= 0x08;
_WatchDog:
    0135 9A13      SBI	0x02,3
(0137) 		PORTE&= 0xF7;
    0136 B183      IN	R24,0x03
    0137 7F87      ANDI	R24,0xF7
    0138 B983      OUT	0x03,R24
(0138) 		PORTE|= 0x08;
    0139 9A1B      SBI	0x03,3
(0139) 		PORTE&= 0xF7;
    013A B183      IN	R24,0x03
    013B 7F87      ANDI	R24,0xF7
    013C B983      OUT	0x03,R24
(0140) 		PORTE|= 0x08;
    013D 9A1B      SBI	0x03,3
(0141) 		PORTE&= 0xF7;
    013E B183      IN	R24,0x03
    013F 7F87      ANDI	R24,0xF7
    0140 B983      OUT	0x03,R24
(0142) 		PORTE|= 0x08;
    0141 9A1B      SBI	0x03,3
(0143) 		WDR();
    0142 95A8      WDR
    0143 9508      RET
(0144)      }
(0145) 
(0146) 
(0147) 
(0148) //===============================================初始设置
(0149) void set_value(void){
(0150)    
(0151) //   V_average_incept.Word=0;
(0152)   // Cr_average_incept.Word=0;
(0153)    OutputByte0Reg = 255;
_set_value:
    0144 EF8F      LDI	R24,0xFF
    0145 9380037F  STS	OutputByte0Reg,R24
(0154)    OutputByte1Reg = 255;
    0147 9380037E  STS	OutputByte1Reg,R24
(0155)    OutputByte2Reg = 255;
    0149 9380037D  STS	OutputByte2Reg,R24
    014B 9508      RET
_tx0_int_to_bcd:
  head                 --> R22
  j                    --> R10
  i                    --> R20
    014C 940E04AF  CALL	push_gset3
    014E 01A8      MOVW	R20,R16
(0156) }
(0157) 
(0158) 
(0159) //将int型变量转换为bcd码,并填充到TxBuffer0[]中
(0160) /********************************************************************************/
(0161) void tx0_int_to_bcd(int i)
(0162) {
(0163)    UC j,head=0;
    014F 2766      CLR	R22
(0164)    if(i<0){
    0150 3040      CPI	R20,0
    0151 E0E0      LDI	R30,0
    0152 075E      CPC	R21,R30
    0153 F49C      BGE	0x0167
(0165)       i=-i;
    0154 9540      COM	R20
    0155 9550      COM	R21
    0156 5F4F      SUBI	R20,0xFF
    0157 4F5F      SBCI	R21,0xFF
(0166)       TxBuffer0[TxOperateSp0++]='-';
    0158 9020027B  LDS	R2,TxOperateSp0
    015A 2433      CLR	R3
    015B 2D82      MOV	R24,R2
    015C 5F8F      SUBI	R24,0xFF
    015D 9380027B  STS	TxOperateSp0,R24
    015F E78D      LDI	R24,0x7D
    0160 E092      LDI	R25,2
    0161 2DE2      MOV	R30,R2
    0162 27FF      CLR	R31
    0163 0FE8      ADD	R30,R24
    0164 1FF9      ADC	R31,R25
    0165 E28D      LDI	R24,0x2D
    0166 8380      STD	Z+0,R24
(0167)    }	  
(0168)    j=i/10000;i%=10000;if(j){TxBuffer0[TxOperateSp0++]=j+0x30;head=1;}
    0167 E120      LDI	R18,0x10
    0168 E237      LDI	R19,0x27
    0169 018A      MOVW	R16,R20
    016A 940E0457  CALL	div16s
    016C 2EA0      MOV	R10,R16
    016D E120      LDI	R18,0x10
    016E E237      LDI	R19,0x27
    016F 018A      MOVW	R16,R20
    0170 940E0453  CALL	mod16s
    0172 01A8      MOVW	R20,R16
    0173 20AA      TST	R10
    0174 F089      BEQ	0x0186
    0175 9020027B  LDS	R2,TxOperateSp0
    0177 2433      CLR	R3
    0178 2D82      MOV	R24,R2
    0179 5F8F      SUBI	R24,0xFF
    017A 9380027B  STS	TxOperateSp0,R24
    017C E78D      LDI	R24,0x7D
    017D E092      LDI	R25,2
    017E 2DE2      MOV	R30,R2
    017F 27FF      CLR	R31
    0180 0FE8      ADD	R30,R24
    0181 1FF9      ADC	R31,R25
    0182 2D8A      MOV	R24,R10
    0183 5D80      SUBI	R24,0xD0
    0184 8380      STD	Z+0,R24
    0185 E061      LDI	R22,1
(0169)    j=i/1000;i%=1000;if(j||head){TxBuffer0[TxOperateSp0++]=j+0x30;head=1;}
    0186 EE28      LDI	R18,0xE8
    0187 E033      LDI	R19,3
    0188 018A      MOVW	R16,R20
    0189 940E0457  CALL	div16s
    018B 2EA0      MOV	R10,R16
    018C EE28      LDI	R18,0xE8
    018D E033      LDI	R19,3
    018E 018A      MOVW	R16,R20
    018F 940E0453  CALL	mod16s

⌨️ 快捷键说明

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