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

📄 test_7135.lst

📁 ad7135的avr16的源程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_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 940E0180  CALL	_main
_exit:
    004C CFFF      RJMP	_exit
FILE: test_7135.c
(0001) //************************************************* 
(0002) //测试功能:7135的ad功能。
(0003) //测试方法:注意:采集到的电压单位为mv
(0004) //测试结果:ok
(0005) //时钟频率:外部8m
(0006) //管脚分配:1脚(pb0)接7135的25,4脚(pb3)接7135的22
(0007) //16脚(pd2)接7135的21
(0008) //注意事项:基准电压为:1v.输入电压不大于2v
(0009) //完成时间:2009.03.17
(0010) //**************************************************
(0011) 
(0012) //************************************************** 
(0013) //头文件
(0014) //************************************************** 
(0015) #include <iom16v.h>
(0016) #include <macros.h>
(0017) //************************************************** 
(0018) 
(0019) 
(0020) //***************************************************** 
(0021) //全局变量定义
(0022) //*****************************************************
(0023) unsigned char N=0;//用来区别是第一次外部中断还是第二次中断
(0024) unsigned int T1OVF_NUM=0;//用来计定时器T1的溢出次数
(0025) unsigned long int T1_NUM;//T1计的总时钟的个数
(0026) unsigned int VIN;//测到的电压,单位为mv
(0027) 
(0028) //***************************************************** 
(0029) //函数声明
(0030) //*****************************************************
(0031) void DELAY_1MS(void);
(0032) void DELAY_NMS(unsigned int n);
(0033) void PORT_INIT(void);
(0034) void INT0_INIT(void);
(0035) void T1_INIT(void);
(0036) void T0_125K(void);
(0037) void USART_INIT(void);
(0038) void USART_TX(unsigned char data);
(0039) void DATA_DISPLAY(unsigned int data);
(0040) 
(0041) //***************************************************** 
(0042) //函数名称:void DELAY_1MS(void)
(0043) //函数功能:延时1ms
(0044) //注意事项:i=143*n-2
(0045) //*****************************************************
(0046) void DELAY_1MS(void)
(0047) {    
(0048) 	 unsigned int i;
(0049) 	 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 940E0251  CALL	push_gset1
    0058 01A8      MOVW	R20,R16
(0050)      ;
(0051) }
(0052) //***************************************************** 
(0053) //函数名称:void DELAY_NMS(void)
(0054) //函数功能:延时Nms
(0055) //注意事项:
(0056) //*****************************************************
(0057) void DELAY_NMS(unsigned int n)
(0058) {	 
(0059) 	 for(;n>0;n--)
    0059 C003      RJMP	0x005D
(0060) 	      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 940E0254  CALL	pop_gset1
    0062 9508      RET
(0061) }
(0062) //***************************************************** 
(0063) //函数名称:void INT0_INIT(void)  
(0064) //函数功能:int0初始化,上升沿产生中断,使能中断
(0065) //注意事项:未开总中断
(0066) //*****************************************************
(0067) void PORT_INIT(void)
(0068) {	 
(0069) 	 DDRB=0X09;
_PORT_INIT:
    0063 E089      LDI	R24,0x9
    0064 BB87      OUT	0x17,R24
(0070) 	 PORTB=0X00;
    0065 2422      CLR	R2
    0066 BA28      OUT	0x18,R2
(0071) 	 DDRD=0X00;
    0067 BA21      OUT	0x11,R2
(0072) 	 PORTD=0XFF;
    0068 EF8F      LDI	R24,0xFF
    0069 BB82      OUT	0x12,R24
    006A 9508      RET
(0073) }
(0074) 	 
(0075) //********************************************************** 
(0076) //函数名称:void T0_250K(void)   
(0077) //函数功能:t0工作于CTC模式,产生250k方波
(0078) //注意事项:一分频,pb3(oc0)接7135 clk
(0079) //********************************************************** 
(0080) void T0_125K(void)
(0081) {    
(0082) 	TCCR0=0X00;
_T0_125K:
    006B 2422      CLR	R2
    006C BE23      OUT	0x33,R2
(0083) 	TCNT0=0X00;
    006D BE22      OUT	0x32,R2
(0084) 	OCR0=31;
    006E E18F      LDI	R24,0x1F
    006F BF8C      OUT	0x3C,R24
(0085) 	TIMSK&=~(1<<OCIE0);
    0070 B789      IN	R24,0x39
    0071 7F8D      ANDI	R24,0xFD
    0072 BF89      OUT	0x39,R24
(0086) 	TCCR0=0X19;
    0073 E189      LDI	R24,0x19
    0074 BF83      OUT	0x33,R24
    0075 9508      RET
(0087) }
(0088) //***************************************************** 
(0089) //函数名称:void INT0_INIT(void)  
(0090) //函数功能:int0初始化,上升沿产生中断,使能中断
(0091) //注意事项:未开总中断
(0092) //*****************************************************
(0093) void INT0_INIT(void)
(0094) {	 
(0095) 	 MCUCR|=((1<<ISC01)|(1<<ISC00));
_INT0_INIT:
    0076 B785      IN	R24,0x35
    0077 6083      ORI	R24,3
    0078 BF85      OUT	0x35,R24
(0096) 	 GICR|=(1<<INT0);
    0079 B78B      IN	R24,0x3B
    007A 6480      ORI	R24,0x40
    007B BF8B      OUT	0x3B,R24
    007C 9508      RET
_INT0_INTERRUPT:
    007D 940E028D  CALL	push_lset
    007F 940E024F  CALL	push_gset2
(0097) }
(0098) //***************************************************** 
(0099) //函数名称:void INT0_INTERRUPT(void) 
(0100) //函数功能:中断处理,N+1
(0101) //注意事项: 
(0102) //*****************************************************
(0103) #pragma interrupt_handler INT0_INTERRUPT:2
(0104) void INT0_INTERRUPT(void)
(0105) {	 
(0106) 	 if(!N)
    0081 90200060  LDS	R2,N
    0083 2022      TST	R2
    0084 F449      BNE	0x008E
(0107) 	 {    
(0108) 	 	  TCCR1B=0X01;//开始内部计数
    0085 E081      LDI	R24,1
    0086 BD8E      OUT	0x2E,R24
(0109) 		  MCUCR=0X02;//设置外部中断0下降沿产生中断
    0087 E082      LDI	R24,2
    0088 BF85      OUT	0x35,R24
(0110) 		  N++;
    0089 2D82      MOV	R24,R2
    008A 5F8F      SUBI	R24,0xFF
    008B 93800060  STS	N,R24
(0111) 	 }
    008D C077      RJMP	0x0105
(0112) 	 else
(0113) 	 {    
(0114) 	 	  TCCR1B=0X00;//定时器t1停止工作
    008E 2422      CLR	R2
    008F BC2E      OUT	0x2E,R2
(0115) 		  CLI();//关中断,进行数据处理
    0090 94F8      BCLR	7
(0116) 		  //数据处理
(0117) 		  T1_NUM=T1OVF_NUM;
    0091 90200061  LDS	R2,T1OVF_NUM
    0093 90300062  LDS	R3,T1OVF_NUM+1
    0095 2444      CLR	R4
    0096 2455      CLR	R5
    0097 92300066  STS	T1_NUM+1,R3
    0099 92200065  STS	T1_NUM,R2
    009B 92500068  STS	T1_NUM+3,R5
    009D 92400067  STS	T1_NUM+2,R4
(0118) 		  T1_NUM=(T1_NUM*65536+TCNT1);
    009F 90400067  LDS	R4,T1_NUM+2
    00A1 90500068  LDS	R5,T1_NUM+3
    00A3 90200065  LDS	R2,T1_NUM
    00A5 90300066  LDS	R3,T1_NUM+1
    00A7 E040      LDI	R20,0
    00A8 E050      LDI	R21,0
    00A9 E061      LDI	R22,1
    00AA E070      LDI	R23,0
    00AB 925A      ST	R5,-Y
    00AC 924A      ST	R4,-Y
    00AD 923A      ST	R3,-Y
    00AE 922A      ST	R2,-Y
    00AF 018A      MOVW	R16,R20
    00B0 019B      MOVW	R18,R22
    00B1 940E0216  CALL	empy32u
    00B3 0118      MOVW	R2,R16
    00B4 0129      MOVW	R4,R18
    00B5 B46C      IN	R6,0x2C
    00B6 B47D      IN	R7,0x2D
    00B7 2488      CLR	R8
    00B8 2499      CLR	R9
    00B9 0C26      ADD	R2,R6
    00BA 1C37      ADC	R3,R7
    00BB 1C48      ADC	R4,R8
    00BC 1C59      ADC	R5,R9
    00BD 92300066  STS	T1_NUM+1,R3
    00BF 92200065  STS	T1_NUM,R2
    00C1 92500068  STS	T1_NUM+3,R5
    00C3 92400067  STS	T1_NUM+2,R4
(0119) 		  T1_NUM/=64;
    00C5 E086      LDI	R24,6
    00C6 E090      LDI	R25,0
    00C7 938A      ST	R24,-Y
    00C8 0181      MOVW	R16,R2
    00C9 0192      MOVW	R18,R4
    00CA 940E02BB  CALL	lsr32
    00CC 93100066  STS	T1_NUM+1,R17
    00CE 93000065  STS	T1_NUM,R16
    00D0 93300068  STS	T1_NUM+3,R19
    00D2 93200067  STS	T1_NUM+2,R18
(0120) 		  T1_NUM-=10001;
    00D4 E141      LDI	R20,0x11
    00D5 E257      LDI	R21,0x27
    00D6 E060      LDI	R22,0
    00D7 E070      LDI	R23,0
    00D8 0118      MOVW	R2,R16
    00D9 0129      MOVW	R4,R18
    00DA 1A24      SUB	R2,R20
    00DB 0A35      SBC	R3,R21
    00DC 0A46      SBC	R4,R22
    00DD 0A57      SBC	R5,R23
    00DE 92300066  STS	T1_NUM+1,R3
    00E0 92200065  STS	T1_NUM,R2
    00E2 92500068  STS	T1_NUM+3,R5
    00E4 92400067  STS	T1_NUM+2,R4
(0121) 		  VIN=T1_NUM/10;
    00E6 E04A      LDI	R20,0xA
    00E7 E050      LDI	R21,0
    00E8 E060      LDI	R22,0
    00E9 E070      LDI	R23,0
    00EA 937A      ST	R23,-Y
    00EB 936A      ST	R22,-Y
    00EC 935A      ST	R21,-Y
    00ED 934A      ST	R20,-Y
    00EE 0181      MOVW	R16,R2
    00EF 0192      MOVW	R18,R4
    00F0 940E01A5  CALL	div32u
    00F2 93100064  STS	VIN+1,R17
    00F4 93000063  STS	VIN,R16
(0122) 		  DATA_DISPLAY(VIN);
    00F6 D052      RCALL	_DATA_DISPLAY
(0123) 		  //数据处理结束
(0124) 		  T1OVF_NUM=0;
    00F7 2422      CLR	R2
    00F8 2433      CLR	R3
    00F9 92300062  STS	T1OVF_NUM+1,R3
    00FB 92200061  STS	T1OVF_NUM,R2
(0125) 		  TCNT1=0X0000;
    00FD BC3D      OUT	0x2D,R3
    00FE BC2C      OUT	0x2C,R2
(0126) 		  MCUCR|=((1<<ISC01)|(1<<ISC00));//设置外部上升沿中断
    00FF B785      IN	R24,0x35
    0100 6083      ORI	R24,3
    0101 BF85      OUT	0x35,R24
(0127) 		  N=0;//
    0102 92200060  STS	N,R2
(0128) 		  PORTB&=~(1<<0);//上位机发0x01,测量一次,停止ad
    0104 98C0      CBI	0x18,0
(0129) 		  //SEI();先进行1次采样
(0130) 	 }
    0105 940E0246  CALL	pop_gset2
    0107 940E02A4  CALL	pop_lset
    0109 9518      RETI
(0131) }
(0132) //************************************************** 
(0133) //函数名称:void T1_INIT(void)  
(0134) //函数功能:内部定时
(0135) //注意事项,定时器未工作,定时器工作,需+TCCR1B=0X01;
(0136) //************************************************** 
(0137) void T1_INIT(void)
(0138) {	 
(0139) 	 TCCR1A=0X00;
_T1_INIT:
    010A 2422      CLR	R2
    010B BC2F      OUT	0x2F,R2
(0140) 	 TCNT1=0X0000;
    010C 2433      CLR	R3
    010D BC3D      OUT	0x2D,R3
    010E BC2C      OUT	0x2C,R2
(0141) 	 TIMSK|=(1<<TOIE1);
    010F B789      IN	R24,0x39
    0110 6084      ORI	R24,4
    0111 BF89      OUT	0x39,R24
    0112 9508      RET
_T1_OVF:
    0113 938A      ST	R24,-Y
    0114 939A      ST	R25,-Y
    0115 B78F      IN	R24,0x3F
    0116 938A      ST	R24,-Y
(0142) }
(0143) //************************************************** 
(0144) //函数名称:void T1_OVF(void)  
(0145) //函数功能:ti溢出处理
(0146) //注意事项:
(0147) //**************************************************
(0148) #pragma interrupt_handler T1_OVF:9
(0149) void T1_OVF(void)
(0150) {	 
(0151) 	 T1OVF_NUM++;
    0117 91800061  LDS	R24,T1OVF_NUM
    0119 91900062  LDS	R25,T1OVF_NUM+1
    011B 9601      ADIW	R24,1
    011C 93900062  STS	T1OVF_NUM+1,R25
    011E 93800061  STS	T1OVF_NUM,R24
    0120 9189      LD	R24,Y+
    0121 BF8F      OUT	0x3F,R24
    0122 9199      LD	R25,Y+
    0123 9189      LD	R24,Y+
    0124 9518      RETI
(0152) }
(0153) //***************************************************** 
(0154) //函数名称:void USART_INIT(void) 
(0155) //函数功能:8M,波特率9600
(0156) //注意事项:
(0157) //*****************************************************
(0158) void USART_INIT(void)
(0159) {	 
(0160) 	 UBRR=0X33;//fosc=8mhz,波特率9600
_USART_INIT:
    0125 E383      LDI	R24,0x33
    0126 B989      OUT	0x09,R24
(0161) 	 UCSRA=0X20;
    0127 E280      LDI	R24,0x20
    0128 B98B      OUT	0x0B,R24
(0162) 	 UCSRC=0X86;
    0129 E886      LDI	R24,0x86
    012A BD80      OUT	0x20,R24
(0163) 	 UCSRB=0X98;
    012B E988      LDI	R24,0x98
    012C B98A      OUT	0x0A,R24
    012D 9508      RET
_USART_TX:
  data                 --> R20
    012E 940E0251  CALL	push_gset1
    0130 2F40      MOV	R20,R16
(0164) }
(0165) //***************************************************** 
(0166) //函数名称:void USART_INIT(void) 
(0167) //函数功能:8M,波特率9600
(0168) //注意事项:
(0169) //*****************************************************
(0170) void USART_TX(unsigned char data)
(0171) {	 
(0172) 	 UDR=data;
    0131 B94C      OUT	0x0C,R20
(0173) 	 while(!(UCSRA&(1<<TXC)))
    0132 9B5E      SBIS	0x0B,6
    0133 CFFE      RJMP	0x0132
(0174) 	 ;
(0175) 	 DELAY_NMS(1);
    0134 E001      LDI	R16,1
    0135 E010      LDI	R17,0
    0136 DF1F      RCALL	_DELAY_NMS
    0137 940E0254  CALL	pop_gset1
    0139 9508      RET
_usart_receive:
  d                    --> R16
    013A 930A      ST	R16,-Y
    013B B70F      IN	R16,0x3F
    013C 930A      ST	R16,-Y
(0176) }
(0177) //***************************************************** 
(0178) //函数名称:void USART_INIT(void) 
(0179) //函数功能:下位机收到0x01,则进行1次ad转换
(0180) //注意事项:
(0181) //*****************************************************
(0182) #pragma interrupt_handler usart_receive:12
(0183) void usart_receive(void)
(0184) {	 
(0185) 	 unsigned char d;
(0186) 	 d=UDR;
    013D B10C      IN	R16,0x0C
(0187) 	 if(d==0x01)
    013E 3001      CPI	R16,1
    013F F419      BNE	0x0143
(0188) 	 {    
(0189) 	 	  PORTB|=(1<<0);
    0140 9AC0      SBI	0x18,0
(0190) 		  SEI();
    0141 9478      BSET	7
(0191) 	 }
    0142 C002      RJMP	0x0145
(0192) 	 else
(0193) 	 {    
(0194) 	 	  PORTB&=~(1<<0);

⌨️ 快捷键说明

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