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

📄 取得电压函数.lst

📁 ICC mega8例子
💻 LST
字号:
__start:
__text_start:
      1B E5CF      LDI	R28,0x5F
      1C E0D4      LDI	R29,4
      1D BFCD      OUT	0x3D,R28
      1E BFDE      OUT	0x3E,R29
      1F 51CE      SUBI	R28,0x1E
      20 40D0      SBCI	R29,0
      21 EA0A      LDI	R16,0xAA
      22 8308      STD	Y+0,R16
      23 2400      CLR	R0
      24 E6E0      LDI	R30,0x60
      25 E0F0      LDI	R31,0
      26 E010      LDI	R17,0
      27 36E0      CPI	R30,0x60
      28 07F1      CPC	R31,R17
      29 F011      BEQ	0x002C
      2A 9201      ST	R0,Z+
      2B CFFB      RJMP	0x0027
      2C 8300      STD	Z+0,R16
      2D E3E6      LDI	R30,0x36
      2E E0F0      LDI	R31,0
      2F E6A0      LDI	R26,0x60
      30 E0B0      LDI	R27,0
      31 E010      LDI	R17,0
      32 E000      LDI	R16,0
      33 BF0B      OUT	0x3B,R16
      34 33E6      CPI	R30,0x36
      35 07F1      CPC	R31,R17
      36 F021      BEQ	0x003B
      37 95C8      LPM
      38 9631      ADIW	R30,1
      39 920D      ST	R0,X+
      3A CFF9      RJMP	0x0034
      3B D068      RCALL	_main
_exit:
      3C CFFF      RJMP	_exit
FILE: E:\xiaozhiyong2009\设计资料\项目设计\mega8_C语言常用程序\ICCAVR_mega8_取得电压函数\取得电压函数.c
(0001) //ICC-AVR application builder : 2009-3-10 14:59:10
(0002) // Target : M8
(0003) // Crystal: 8.0000Mhz
(0004) 
(0005) #include <iom8v.h>
(0006) #include <macros.h>
(0007) 
(0008) void port_init(void)
(0009) {
(0010)  PORTB = 0x00;
_port_init:
      3D 2422      CLR	R2
      3E BA28      OUT	0x18,R2
(0011)  DDRB  = 0x00;
      3F BA27      OUT	0x17,R2
(0012)  PORTC = 0x00; //m103 output only
      40 BA25      OUT	0x15,R2
(0013)  DDRC  = 0x00;
      41 BA24      OUT	0x14,R2
(0014)  PORTD = 0x00;
      42 BA22      OUT	0x12,R2
(0015)  DDRD  = 0x00;
      43 BA21      OUT	0x11,R2
      44 9508      RET
(0016) }
(0017) 
(0018) //call this routine to initialize all peripherals
(0019) void init_devices(void)
(0020) {
(0021)  //stop errant interrupts until set up
(0022)  CLI(); //disable all interrupts
_init_devices:
      45 94F8      BCLR	7
(0023)  port_init();
      46 DFF6      RCALL	_port_init
(0024) 
(0025)  MCUCR = 0x00;
      47 2422      CLR	R2
      48 BE25      OUT	0x35,R2
(0026)  GICR  = 0x00;
      49 BE2B      OUT	0x3B,R2
(0027)  TIMSK = 0x00; //timer interrupt sources
      4A BE29      OUT	0x39,R2
(0028)  SEI(); //re-enable interrupts
      4B 9478      BSET	7
      4C 9508      RET
(0029)  //all peripherals are now initialized
(0030) }
(0031) 
(0032) /************************************
(0033) 用    途:微秒级延时程序
(0034) Taget   :mega8
(0035) crystal :8M
(0036) 介    绍:在8M的晶振上进行us级的延时
(0037) 入口参数:
(0038) *************************************/
(0039) void delay_us(int time)
(0040) {
(0041)     do
(0042)     {
(0043)         time--;
_delay_us:
  time                 --> R16
      4D 5001      SUBI	R16,1
      4E 4010      SBCI	R17,0
(0044)     } 
(0045)     while (time > 1);
      4F E081      LDI	R24,1
      50 E090      LDI	R25,0
      51 1780      CP	R24,R16
      52 0791      CPC	R25,R17
      53 F3CC      BLT	0x004D
      54 9508      RET
_show_2_digit:
  i                    --> Y,+1
  digi                 --> R10
      55 92AA      ST	R10,-Y
      56 2EA0      MOV	R10,R16
(0046) }
(0047) 
(0048) 
(0049) /************************************
(0050) 用    途:两位数码管显示一个数
(0051) Taget   :mega8
(0052) crystal :8M
(0053) 介    绍:共阳数码管
(0054) 	  	 1-PC1(片选)
(0055) 		 2-PC0
(0056) 		 -----
(0057) 		 a-PB0(数据)
(0058) 		 b-PB1
(0059) 		 ...
(0060) 		 h-PB6
(0061) 		 DP-PB7
(0062) 入口参数:要显示的数,十进制表示
(0063) *************************************/
(0064) const unsigned char num[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
(0065) 	   			0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
(0066) void show_2_digit(unsigned char digi)
(0067) {
(0068)  unsigned char i;
(0069)  DDRD=0xff;
      57 EF8F      LDI	R24,0xFF
      58 BB81      OUT	0x11,R24
(0070)  DDRB=0xff;
      59 BB87      OUT	0x17,R24
(0071)  PORTD=0;//关片选
      5A 2422      CLR	R2
      5B BA22      OUT	0x12,R2
(0072)  PORTB=~num[(unsigned char )(digi/10)];//显示十位
      5C E02A      LDI	R18,0xA
      5D E030      LDI	R19,0
      5E 2D0A      MOV	R16,R10
      5F 2711      CLR	R17
      60 D04F      RCALL	div16s
      61 2FE0      MOV	R30,R16
      62 27FF      CLR	R31
      63 E286      LDI	R24,0x26
      64 E090      LDI	R25,0
      65 0FE8      ADD	R30,R24
      66 1FF9      ADC	R31,R25
      67 9024      LPM	R2,0(Z)
      68 9420      COM	R2
      69 BA28      OUT	0x18,R2
(0073)  PORTD=(0x1<<1);//开十位的显示
      6A E082      LDI	R24,2
      6B BB82      OUT	0x12,R24
(0074)  delay_us(200);
      6C EC08      LDI	R16,0xC8
      6D E010      LDI	R17,0
      6E DFDE      RCALL	_delay_us
(0075)  PORTD=0;//关显示
      6F 2422      CLR	R2
      70 BA22      OUT	0x12,R2
(0076)  PORTB=~num[(unsigned char )(digi%10)];//显示个位
      71 E02A      LDI	R18,0xA
      72 E030      LDI	R19,0
      73 2D0A      MOV	R16,R10
      74 2711      CLR	R17
      75 D036      RCALL	mod16s
      76 2FE0      MOV	R30,R16
      77 27FF      CLR	R31
      78 E286      LDI	R24,0x26
      79 E090      LDI	R25,0
      7A 0FE8      ADD	R30,R24
      7B 1FF9      ADC	R31,R25
      7C 9024      LPM	R2,0(Z)
      7D 9420      COM	R2
      7E BA28      OUT	0x18,R2
(0077)  PORTD=(0x1<<0);//开个位的显示
      7F E081      LDI	R24,1
      80 BB82      OUT	0x12,R24
(0078)  delay_us(200);
      81 EC08      LDI	R16,0xC8
      82 E010      LDI	R17,0
      83 DFC9      RCALL	_delay_us
(0079)  PORTD=0x0;//关显示
      84 2422      CLR	R2
      85 BA22      OUT	0x12,R2
      86 90A9      LD	R10,Y+
      87 9508      RET
(0080) }
(0081) 
(0082) /************************************
(0083) 用    途:adc初始化
(0084) target  :atmega8
(0085) crystal :8M
(0086) 介    绍:ADC0端口输入
(0087) 	  	 10位精度,最高为5V
(0088) 入口参数:
(0089) 出口参数:
(0090) *************************************/
(0091) void adc_init()
(0092) {
(0093)  ACSR=0x80;//关掉模拟比较器的电源(禁用模拟比较器)
_adc_init:
      88 E880      LDI	R24,0x80
      89 B988      OUT	0x08,R24
(0094)  ADMUX=(1<<REFS0);
      8A E480      LDI	R24,0x40
      8B B987      OUT	0x07,R24
(0095)                   //ADMUX=7,6参考电源选择,5左对齐选择,3-0输入端口选择
(0096)  ADCSRA=(1<<ADEN);//这里选择的是连续模式
      8C E880      LDI	R24,0x80
      8D B986      OUT	0x06,R24
(0097)  				  //ADCSRA=7,adc使能,6,adc开始转换,5,连续转换模式选择
(0098)                   //4,中断标志,3,中断允许,2-0,预分频选择
(0099)  SFIOR=0x00;//4,adc高速模式选择
      8E 2422      CLR	R2
      8F BE20      OUT	0x30,R2
      90 9508      RET
_adc_get:
  temp                 --> R10
      91 92AA      ST	R10,-Y
      92 92BA      ST	R11,-Y
(0100) }
(0101) 
(0102) /************************************
(0103) 用    途:进行一次adc转换
(0104) target  :atmega8
(0105) crystal :8M
(0106) 介    绍:10位精度
(0107) 入口参数:
(0108) 出口参数:电压值(0-50)表示0-5.0V
(0109) *************************************/
(0110) unsigned char adc_get()
(0111) {
(0112)  unsigned int temp;
(0113)  
(0114)  ADCSRA|=(1<<ADSC);//开始转换
      93 9A36      SBI	0x06,6
(0115)  while(!(ADCSR&(1<<ADIF))){;}//等待转换完成
      94 9B34      SBIS	0x06,4
      95 CFFE      RJMP	0x0094
(0116)  ADCSR|=(1<<ADIF);//清标志
      96 9A34      SBI	0x06,4
(0117)  temp=ADC;//读数
      97 B0A4      IN	R10,0x04
      98 B0B5      IN	R11,0x05
(0118)  temp=temp*50/0x03ff;//转换成0-50(表示0-5.0)
      99 E302      LDI	R16,0x32
      9A E010      LDI	R17,0
      9B 0195      MOVW	R18,R10
      9C D048      RCALL	empy16s
      9D EF2F      LDI	R18,0xFF
      9E E033      LDI	R19,3
      9F D02B      RCALL	div16u
      A0 0158      MOVW	R10,R16
(0119)  return (unsigned char)(temp);
      A1 90B9      LD	R11,Y+
      A2 90A9      LD	R10,Y+
      A3 9508      RET
(0120) }
(0121) 
(0122) void main()
(0123) {
(0124)  port_init();
_main:
      A4 DF98      RCALL	_port_init
(0125)  init_devices();
      A5 DF9F      RCALL	_init_devices
(0126)  
(0127)  adc_init();
      A6 DFE1      RCALL	_adc_init
      A7 C002      RJMP	0x00AA
(0128)  while(1)
(0129)  {
(0130)   show_2_digit(adc_get());
FILE: <library>
      A8 DFE8      RCALL	_adc_get
      A9 DFAB      RCALL	_show_2_digit
      AA CFFD      RJMP	0x00A8
      AB 9508      RET
mod16s:
      AC 9468      BSET	6
      AD 92DA      ST	R13,-Y
      AE 2ED1      MOV	R13,R17
      AF C004      RJMP	0x00B4
div16s:
      B0 94E8      BCLR	6
      B1 92DA      ST	R13,-Y
      B2 2ED1      MOV	R13,R17
      B3 26D3      EOR	R13,R19
      B4 FF17      SBRS	R17,7
      B5 C004      RJMP	0x00BA
      B6 9510      COM	R17
      B7 9500      COM	R16
      B8 5F0F      SUBI	R16,0xFF
      B9 4F1F      SBCI	R17,0xFF
      BA FF37      SBRS	R19,7
      BB C004      RJMP	0x00C0
      BC 9530      COM	R19
      BD 9520      COM	R18
      BE 5F2F      SUBI	R18,0xFF
      BF 4F3F      SBCI	R19,0xFF
      C0 D00B      RCALL	xdiv16u
      C1 FED7      SBRS	R13,7
      C2 C004      RJMP	0x00C7
      C3 9510      COM	R17
      C4 9500      COM	R16
      C5 5F0F      SUBI	R16,0xFF
      C6 4F1F      SBCI	R17,0xFF
      C7 90D9      LD	R13,Y+
      C8 9508      RET
mod16u:
      C9 9468      BSET	6
      CA C001      RJMP	xdiv16u
div16u:
      CB 94E8      BCLR	6
xdiv16u:
      CC 92EA      ST	R14,-Y
      CD 92FA      ST	R15,-Y
      CE 938A      ST	R24,-Y
      CF 24EE      CLR	R14
      D0 24FF      CLR	R15
      D1 E180      LDI	R24,0x10
      D2 0F00      LSL	R16
      D3 1F11      ROL	R17
      D4 1CEE      ROL	R14
      D5 1CFF      ROL	R15
      D6 16E2      CP	R14,R18
      D7 06F3      CPC	R15,R19
      D8 F018      BCS	0x00DC
      D9 1AE2      SUB	R14,R18
      DA 0AF3      SBC	R15,R19
      DB 9503      INC	R16
      DC 958A      DEC	R24
      DD F7A1      BNE	0x00D2
      DE F416      BRTC	0x00E1
      DF 2D0E      MOV	R16,R14
      E0 2D1F      MOV	R17,R15
      E1 9189      LD	R24,Y+
      E2 90F9      LD	R15,Y+
      E3 90E9      LD	R14,Y+
      E4 9508      RET
empy16s:
      E5 920A      ST	R0,-Y
      E6 921A      ST	R1,-Y
      E7 938A      ST	R24,-Y
      E8 939A      ST	R25,-Y
      E9 9F02      MUL	R16,R18
      EA 01C0      MOVW	R24,R0
      EB 9F12      MUL	R17,R18
      EC 0D90      ADD	R25,R0
      ED 9F03      MUL	R16,R19
      EE 0D90      ADD	R25,R0
      EF 018C      MOVW	R16,R24
      F0 9199      LD	R25,Y+
      F1 9189      LD	R24,Y+
      F2 9019      LD	R1,Y+
      F3 9009      LD	R0,Y+
      F4 9508      RET

⌨️ 快捷键说明

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