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

📄 zong.lst

📁 ad7135的avr16的源程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
__text_start:
__start:
    002C E5CF      LDI	R28,0x5F
    002D E0D4      LDI	R29,4
    002E BFCD      OUT	0x3D,R28
    002F BFDE      OUT	0x3E,R29
    0030 51C0      SUBI	R28,0x10
    0031 40D0      SBCI	R29,0
    0032 EA0A      LDI	R16,0xAA
    0033 8308      STD	Y+0,R16
    0034 2400      CLR	R0
    0035 E6E3      LDI	R30,0x63
    0036 E0F0      LDI	R31,0
    0037 E010      LDI	R17,0
    0038 36E9      CPI	R30,0x69
    0039 07F1      CPC	R31,R17
    003A F011      BEQ	0x003D
    003B 9201      ST	R0,Z+
    003C CFFB      RJMP	0x0038
    003D 8300      STD	Z+0,R16
    003E E5E4      LDI	R30,0x54
    003F E0F0      LDI	R31,0
    0040 E6A0      LDI	R26,0x60
    0041 E0B0      LDI	R27,0
    0042 E010      LDI	R17,0
    0043 35E7      CPI	R30,0x57
    0044 07F1      CPC	R31,R17
    0045 F021      BEQ	0x004A
    0046 95C8      LPM
    0047 9631      ADIW	R30,1
    0048 920D      ST	R0,X+
    0049 CFF9      RJMP	0x0043
    004A 940E019B  CALL	_main
_exit:
    004C CFFF      RJMP	_exit
FILE: zong.c
(0001) //ICC-AVR application builder : 2009-3-19 15:44:36
(0002) // Target : M16
(0003) // Crystal: 8.0000Mhz
(0004) 
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007) 
(0008) 
(0009) //***************************************************** 
(0010) //全局变量定义
(0011) //*****************************************************
(0012) 
(0013) unsigned char N=0;//用来区别是第一次外部中断还是第二次中断
(0014) unsigned int T1OVF_NUM=0;//用来计定时器T1的溢出次数
(0015) unsigned long int T1_NUM;//T1计的总时钟的个数
(0016) unsigned int VIN;//测到的电压,单位为mv
(0017) 
(0018) 
(0019) //***************************************************** 
(0020) //函数声明
(0021) //*****************************************************
(0022) //void port_init(void);
(0023) void timer0_125Kinit(void);
(0024) //void timer1_init(void)
(0025) //void timer2_250init(void);
(0026) void init_devices(void);
(0027) void usart_tx(unsigned char data);
(0028) void delay_1ms(void);
(0029) void delay_nms(unsigned int n);
(0030) void timer1_ovf_isr(void);
(0031) void int0_isr(void);
(0032) void data_display(unsigned int data);
(0033) 
(0034) 
(0035) 
(0036) void delay_1ms(void)
(0037) {    
(0038) 	 unsigned int i;
(0039) 	 for(i=1142;i>0;i--)    
_delay_1ms:
  i                    --> R16
    004D E706      LDI	R16,0x76
    004E E014      LDI	R17,4
    004F C002      RJMP	0x0052
    0050 5001      SUBI	R16,1
    0051 4010      SBCI	R17,0
    0052 3000      CPI	R16,0
    0053 0701      CPC	R16,R17
    0054 F7D9      BNE	0x0050
    0055 9508      RET
_delay_nms:
  n                    --> R20
    0056 940E0269  CALL	push_gset1
    0058 01A8      MOVW	R20,R16
(0040)      ;
(0041) }
(0042) //***************************************************** 
(0043) //函数名称:void DELAY_NMS(void)
(0044) //函数功能:延时Nms
(0045) //注意事项:
(0046) //*****************************************************
(0047) void delay_nms(unsigned int n)
(0048) {	 
(0049) 	 for(;n>0;n--)
    0059 C003      RJMP	0x005D
(0050) 	      delay_1ms();
    005A DFF2      RCALL	_delay_1ms
    005B 5041      SUBI	R20,1
    005C 4050      SBCI	R21,0
    005D 3040      CPI	R20,0
    005E 0745      CPC	R20,R21
    005F F7D1      BNE	0x005A
    0060 940E026C  CALL	pop_gset1
    0062 9508      RET
(0051) }
(0052) 
(0053) 
(0054) void port_init(void)
(0055) {
(0056)  PORTA = 0x01;
_port_init:
    0063 E081      LDI	R24,1
    0064 BB8B      OUT	0x1B,R24
(0057)  DDRA  = 0x00;
    0065 2422      CLR	R2
    0066 BA2A      OUT	0x1A,R2
(0058)  PORTB = 0x00;
    0067 BA28      OUT	0x18,R2
(0059)  DDRB  = 0xFF;
    0068 EF8F      LDI	R24,0xFF
    0069 BB87      OUT	0x17,R24
(0060)  PORTC = 0x00; //m103 output only
    006A BA25      OUT	0x15,R2
(0061)  DDRC  = 0x00;
    006B BA24      OUT	0x14,R2
(0062)  PORTD = 0x00;
    006C BA22      OUT	0x12,R2
(0063)  DDRD  = 0xFF;
    006D BB81      OUT	0x11,R24
    006E 9508      RET
(0064) }
(0065) 
(0066) //TIMER0 initialize - prescale:Stop
(0067) // WGM: CTC
(0068) // desired value: 125KHz
(0069) // actual value: Out of range
(0070) void timer0_125Kinit(void)
(0071) {
(0072)  TCCR0 = 0x00; //stop
_timer0_125Kinit:
    006F 2422      CLR	R2
    0070 BE23      OUT	0x33,R2
(0073)  TCNT0 = 0x00 /*INVALID SETTING*/; //set count
    0071 BE22      OUT	0x32,R2
(0074)  OCR0  = 0x1F /*INVALID SETTING*/;  //set compare
    0072 E18F      LDI	R24,0x1F
    0073 BF8C      OUT	0x3C,R24
(0075)  TIMSK&=~(1<<OCIE0);
    0074 B789      IN	R24,0x39
    0075 7F8D      ANDI	R24,0xFD
    0076 BF89      OUT	0x39,R24
(0076)  TCCR0 = 0x19;
    0077 E189      LDI	R24,0x19
    0078 BF83      OUT	0x33,R24
    0079 9508      RET
(0077)  //TCCR0 = 0x08; //start timer
(0078) }
(0079) 
(0080) //TIMER2 initialize - prescale:Stop
(0081) // WGM: CTC
(0082) // desired value: 250Hz
(0083) // actual value: Out of range
(0084) void timer2_250init(void)
(0085) {
(0086)  TCCR2 = 0x00; //stop
_timer2_250init:
    007A 2422      CLR	R2
    007B BC25      OUT	0x25,R2
(0087)  //ASSR  = 0x00; //set async mode
(0088)  TCNT2 = 0x00 /*INVALID SETTING*/; //setup
    007C BC24      OUT	0x24,R2
(0089)  OCR2  = 0xF9 /*INVALID SETTING*/;
    007D EF89      LDI	R24,0xF9
    007E BD83      OUT	0x23,R24
(0090)  TIMSK&=~(1<<OCIE2);
    007F B789      IN	R24,0x39
    0080 778F      ANDI	R24,0x7F
    0081 BF89      OUT	0x39,R24
(0091)  TCCR2 = 0x1C; 
    0082 E18C      LDI	R24,0x1C
    0083 BD85      OUT	0x25,R24
    0084 9508      RET
(0092)  //TCCR2 = 0x08; //start
(0093) }
(0094) 
(0095) 
(0096) 
(0097) void timer1_init(void)
(0098) {
(0099)  TCCR1A=0x00;
_timer1_init:
    0085 2422      CLR	R2
    0086 BC2F      OUT	0x2F,R2
(0100)  TCCR1B=0x00;
    0087 BC2E      OUT	0x2E,R2
(0101)  TCNT1=0X0000;
    0088 2433      CLR	R3
    0089 BC3D      OUT	0x2D,R3
    008A BC2C      OUT	0x2C,R2
(0102)  TIMSK|=(1<<TOIE1);
    008B B789      IN	R24,0x39
    008C 6084      ORI	R24,4
    008D BF89      OUT	0x39,R24
    008E 9508      RET
(0103) }
(0104) 
(0105) 
(0106) void int0_init(void)
(0107) {	 
(0108) 	 MCUCR|=((1<<ISC01)|(1<<ISC00));
_int0_init:
    008F B785      IN	R24,0x35
    0090 6083      ORI	R24,3
    0091 BF85      OUT	0x35,R24
(0109) 	 GICR|=(1<<INT0);
    0092 B78B      IN	R24,0x3B
    0093 6480      ORI	R24,0x40
    0094 BF8B      OUT	0x3B,R24
    0095 9508      RET
_timer1_ovf_isr:
    0096 938A      ST	R24,-Y
    0097 939A      ST	R25,-Y
    0098 B78F      IN	R24,0x3F
    0099 938A      ST	R24,-Y
(0110) }
(0111) 
(0112) 
(0113) 
(0114) 
(0115) 
(0116) #pragma interrupt_handler timer1_ovf_isr:9
(0117) void timer1_ovf_isr(void)
(0118) {
(0119)  T1OVF_NUM++;
    009A 91800061  LDS	R24,T1OVF_NUM
    009C 91900062  LDS	R25,T1OVF_NUM+1
    009E 9601      ADIW	R24,1
    009F 93900062  STS	T1OVF_NUM+1,R25
    00A1 93800061  STS	T1OVF_NUM,R24
    00A3 9189      LD	R24,Y+
    00A4 BF8F      OUT	0x3F,R24
    00A5 9199      LD	R25,Y+
    00A6 9189      LD	R24,Y+
    00A7 9518      RETI
(0120)  
(0121)  //TIMER1 has overflowed
(0122)  //TCNT1H = 0x00 /*INVALID SETTING*/; //reload counter high value
(0123)  //TCNT1L = 0x00 /*INVALID SETTING*/; //reload counter low value
(0124) }
(0125) 
(0126) //UART0 initialize
(0127) // desired baud rate: 9600
(0128) // actual: baud rate:9615 (0.2%)
(0129) // char size: 8 bit
(0130) // parity: Disabled
(0131) void uart0_init(void)
(0132) {
(0133)  UCSRB = 0x98; //disable while setting baud rate
_uart0_init:
    00A8 E988      LDI	R24,0x98
    00A9 B98A      OUT	0x0A,R24
(0134)  UCSRA = 0x20;
    00AA E280      LDI	R24,0x20
    00AB B98B      OUT	0x0B,R24
(0135)  UCSRC = 0x86;
    00AC E886      LDI	R24,0x86
    00AD BD80      OUT	0x20,R24
(0136)  UBRRL = 0x33; //set baud rate lo
    00AE E383      LDI	R24,0x33
    00AF B989      OUT	0x09,R24
(0137)  UBRRH = 0x00; //set baud rate hi
    00B0 2422      CLR	R2
    00B1 BC20      OUT	0x20,R2
    00B2 9508      RET
_usart_tx:
  data                 --> R20
    00B3 940E0269  CALL	push_gset1
    00B5 2F40      MOV	R20,R16
(0138)  //UCSRB = 0x00;
(0139) }
(0140) 
(0141) 
(0142) void usart_tx(unsigned char data)
(0143) {	 
(0144) 	 UDR=data;
    00B6 B94C      OUT	0x0C,R20
(0145) 	 while(!(UCSRA&(1<<TXC)))
    00B7 9B5E      SBIS	0x0B,6
    00B8 CFFE      RJMP	0x00B7
(0146) 	 ;
(0147) 	 delay_nms(1);
    00B9 E001      LDI	R16,1
    00BA E010      LDI	R17,0
    00BB DF9A      RCALL	_delay_nms
    00BC 940E026C  CALL	pop_gset1
    00BE 9508      RET
_usart_receive:
  d                    --> R16
    00BF 930A      ST	R16,-Y
    00C0 B70F      IN	R16,0x3F
    00C1 930A      ST	R16,-Y
(0148) }
(0149) 
(0150) #pragma interrupt_handler usart_receive:12
(0151) void usart_receive(void)
(0152) {	 
(0153) 	 unsigned char d;
(0154) 	 d=UDR;
    00C2 B10C      IN	R16,0x0C
(0155) 	 if(d==0x01)
    00C3 3001      CPI	R16,1
    00C4 F419      BNE	0x00C8
(0156) 	 {    
(0157) 	 	  PORTB|=(1<<0);
    00C5 9AC0      SBI	0x18,0
(0158) 		  SEI();
    00C6 9478      BSET	7
(0159) 	 }
    00C7 C002      RJMP	0x00CA
(0160) 	 else
(0161) 	 {    
(0162) 	 	  PORTB&=~(1<<0);
    00C8 98C0      CBI	0x18,0
(0163) 		  CLI();
    00C9 94F8      BCLR	7
(0164) 	 }
    00CA 9109      LD	R16,Y+
    00CB BF0F      OUT	0x3F,R16
    00CC 9109      LD	R16,Y+
    00CD 9518      RETI
_int0_isr:
    00CE 940E02A5  CALL	push_lset
    00D0 940E0267  CALL	push_gset2
(0165) }
(0166) 
(0167) #pragma interrupt_handler int0_isr:2
(0168) void int0_isr(void)
(0169) {
(0170)    if(!N)
    00D2 90200060  LDS	R2,N
    00D4 2022      TST	R2
    00D5 F449      BNE	0x00DF
(0171) 	 {    
(0172) 	 	  TCCR1B=0X01;//开始内部计数
    00D6 E081      LDI	R24,1
    00D7 BD8E      OUT	0x2E,R24
(0173) 		  MCUCR=0X02;//设置外部中断0下降沿产生中断
    00D8 E082      LDI	R24,2
    00D9 BF85      OUT	0x35,R24
(0174) 		  N++;
    00DA 2D82      MOV	R24,R2
    00DB 5F8F      SUBI	R24,0xFF
    00DC 93800060  STS	N,R24
(0175) 	 }
    00DE C077      RJMP	0x0156
(0176) 	 else
(0177) 	 {    
(0178) 	 	  TCCR1B=0X00;//定时器t1停止工作
    00DF 2422      CLR	R2
    00E0 BC2E      OUT	0x2E,R2
(0179) 		  CLI();//关中断,进行数据处理
    00E1 94F8      BCLR	7
(0180) 		  //数据处理
(0181) 		  T1_NUM=T1OVF_NUM;
    00E2 90200061  LDS	R2,T1OVF_NUM
    00E4 90300062  LDS	R3,T1OVF_NUM+1
    00E6 2444      CLR	R4
    00E7 2455      CLR	R5
    00E8 92300066  STS	T1_NUM+1,R3
    00EA 92200065  STS	T1_NUM,R2
    00EC 92500068  STS	T1_NUM+3,R5
    00EE 92400067  STS	T1_NUM+2,R4
(0182) 		  T1_NUM=(T1_NUM*65536+TCNT1);
    00F0 90400067  LDS	R4,T1_NUM+2
    00F2 90500068  LDS	R5,T1_NUM+3
    00F4 90200065  LDS	R2,T1_NUM
    00F6 90300066  LDS	R3,T1_NUM+1
    00F8 E040      LDI	R20,0
    00F9 E050      LDI	R21,0
    00FA E061      LDI	R22,1
    00FB E070      LDI	R23,0
    00FC 925A      ST	R5,-Y
    00FD 924A      ST	R4,-Y
    00FE 923A      ST	R3,-Y
    00FF 922A      ST	R2,-Y
    0100 018A      MOVW	R16,R20
    0101 019B      MOVW	R18,R22
    0102 940E022E  CALL	empy32u
    0104 0118      MOVW	R2,R16
    0105 0129      MOVW	R4,R18
    0106 B46C      IN	R6,0x2C
    0107 B47D      IN	R7,0x2D
    0108 2488      CLR	R8
    0109 2499      CLR	R9
    010A 0C26      ADD	R2,R6
    010B 1C37      ADC	R3,R7
    010C 1C48      ADC	R4,R8
    010D 1C59      ADC	R5,R9
    010E 92300066  STS	T1_NUM+1,R3
    0110 92200065  STS	T1_NUM,R2
    0112 92500068  STS	T1_NUM+3,R5
    0114 92400067  STS	T1_NUM+2,R4
(0183) 		  T1_NUM/=64;
    0116 E086      LDI	R24,6
    0117 E090      LDI	R25,0
    0118 938A      ST	R24,-Y
    0119 0181      MOVW	R16,R2
    011A 0192      MOVW	R18,R4
    011B 940E02D3  CALL	lsr32
    011D 93100066  STS	T1_NUM+1,R17
    011F 93000065  STS	T1_NUM,R16
    0121 93300068  STS	T1_NUM+3,R19
    0123 93200067  STS	T1_NUM+2,R18
(0184) 		  T1_NUM-=10001;
    0125 E141      LDI	R20,0x11
    0126 E257      LDI	R21,0x27
    0127 E060      LDI	R22,0
    0128 E070      LDI	R23,0
    0129 0118      MOVW	R2,R16
    012A 0129      MOVW	R4,R18
    012B 1A24      SUB	R2,R20
    012C 0A35      SBC	R3,R21
    012D 0A46      SBC	R4,R22
    012E 0A57      SBC	R5,R23
    012F 92300066  STS	T1_NUM+1,R3
    0131 92200065  STS	T1_NUM,R2
    0133 92500068  STS	T1_NUM+3,R5
    0135 92400067  STS	T1_NUM+2,R4
(0185) 		  VIN=T1_NUM/10;
    0137 E04A      LDI	R20,0xA
    0138 E050      LDI	R21,0
    0139 E060      LDI	R22,0
    013A E070      LDI	R23,0
    013B 937A      ST	R23,-Y
    013C 936A      ST	R22,-Y
    013D 935A      ST	R21,-Y
    013E 934A      ST	R20,-Y
    013F 0181      MOVW	R16,R2
    0140 0192      MOVW	R18,R4
    0141 940E01BD  CALL	div32u
    0143 93100064  STS	VIN+1,R17
    0145 93000063  STS	VIN,R16
(0186) 		  data_display(VIN);
    0147 D013      RCALL	_data_display
(0187) 		  //数据处理结束
(0188) 		  T1OVF_NUM=0;
    0148 2422      CLR	R2
    0149 2433      CLR	R3
    014A 92300062  STS	T1OVF_NUM+1,R3
    014C 92200061  STS	T1OVF_NUM,R2
(0189) 		  TCNT1=0X0000;
    014E BC3D      OUT	0x2D,R3
    014F BC2C      OUT	0x2C,R2
(0190) 		  MCUCR|=((1<<ISC01)|(1<<ISC00));//设置外部上升沿中断
    0150 B785      IN	R24,0x35
    0151 6083      ORI	R24,3
    0152 BF85      OUT	0x35,R24
(0191) 		  N=0;//
    0153 92200060  STS	N,R2
(0192) 		  PORTB&=~(1<<0);//上位机发0x01,测量一次,停止ad
    0155 98C0      CBI	0x18,0
(0193) 		  //SEI();先进行1次采样
(0194) 	 }
    0156 940E025E  CALL	pop_gset2
    0158 940E02BC  CALL	pop_lset
    015A 9518      RETI
_data_display:
  temp                 --> Y+0
  i                    --> R20

⌨️ 快捷键说明

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