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

📄 eeprom.lst

📁 EPPROM应用,测试程序,AVR内核,供初学者参考
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
      1A EFCF      LDI	R28,0xFF
      1B E0D2      LDI	R29,2
      1C BFCD      OUT	0x3D,R28
      1D BFDE      OUT	0x3E,R29
      1E 51C0      SUBI	R28,0x10
      1F 40D0      SBCI	R29,0
      20 EA0A      LDI	R16,0xAA
      21 8308      STD	Y+0,R16
      22 2400      CLR	R0
      23 E0E0      LDI	R30,0
      24 E0F1      LDI	R31,1
      25 E011      LDI	R17,1
      26 30E4      CPI	R30,4
      27 07F1      CPC	R31,R17
      28 F011      BEQ	0x002B
      29 9201      ST	R0,Z+
      2A CFFB      RJMP	0x0026
      2B 8300      STD	Z+0,R16
      2C E3E4      LDI	R30,0x34
      2D E0F0      LDI	R31,0
      2E E0A0      LDI	R26,0
      2F E0B1      LDI	R27,1
      30 E010      LDI	R17,0
      31 E000      LDI	R16,0
      32 BF0B      OUT	0x3B,R16
      33 33E4      CPI	R30,0x34
      34 07F1      CPC	R31,R17
      35 F021      BEQ	0x003A
      36 95C8      LPM
      37 9631      ADIW	R30,1
      38 920D      ST	R0,X+
      39 CFF9      RJMP	0x0033
      3A D001      RCALL	_main
_exit:
      3B CFFF      RJMP	_exit
_main:
  flag                 --> R10
  deciMeter            --> R12
  ep_temp              --> R10
  ep_temp1             --> R10
  ep_temp2             --> R12
  speed_temp1          --> R12
  speed2               --> R12
  speed1               --> R14
  timeBlock            --> Y,+2
  speed_temp           --> Y,+0
  temp                 --> R10
      3C 9724      SBIW	R28,4
FILE: F:\AVRPRO~1\EEPROM\MAIN.C
(0001) //**************************************************
(0002) //project              :SPEED TO POWER SWITCH
(0003) //chiptype             :ATMEGA48
(0004) //Clock frequency      :8.00000MHZ
(0005) //Author               :XIEHELI
(0006) //From                 :HORN
(0007) //**************************************************
(0008) #include<iom48v.h>
(0009) #include<macros.h>
(0010) #define u08 unsigned char
(0011) #define u16 unsigned int
(0012) #define u32 unsigned long
(0013) #pragma interrupt_handler Icp_time0:17
(0014) #pragma interrupt_handler Int0:2
(0015) void sendData(u08 cbit);
(0016) void delay(u08 tick);
(0017) void port_init(void);
(0018) void time_init(void);
(0019) void delayms(u08 time);
(0020) void delays(u08 time1);
(0021) u16 speed_test(void);
(0022) void eeprom_write(u16 adrw,u08 add);
(0023) u08 eeprom_read(u16 adrr);
(0024) //u16 data;
(0025) u16 data_temp1;
(0026) u16 data_temp2;
(0027) //u08 number;
(0028) void main(void)
(0029) {
(0030)     u08 temp;
(0031) 	//u08 temp1;
(0032) 	u16 ep_temp;
(0033) 	u08 speed1;
(0034) 	u08 speed2;
(0035) 	u08 ep_temp1;
(0036) 	u08 ep_temp2;
(0037) 	u16 speed_temp;
(0038) 	u16 speed_temp1;
(0039) 	u08 flag;
(0040) 	u08 deciMeter;
(0041) 	u16 timeBlock=111;
      3D E68F      LDI	R24,0x6F
      3E E090      LDI	R25,0
      3F 839B      STD	Y+3,R25
      40 838A      STD	Y+2,R24
(0042) 	//u08 num_temp1;
(0043) 	//u08 num_temp2;
(0044) 	//u08 temp3;
(0045) 	//u08 temp2;
(0046) 	flag=0x00;
      41 24AA      CLR	R10
(0047)     port_init();                       //I/O口初始化
      42 D088      RCALL	_port_init
(0048) 	time_init();
      43 D091      RCALL	_time_init
(0049) 	//temp1=0;
(0050) 	speed_temp=0;
      44 2400      CLR	R0
      45 2411      CLR	R1
      46 8219      STD	Y+1,R1
      47 8208      STD	Y+0,R0
(0051)     SREG|=0x80;
      48 9478      BSET	7
(0052) 	NOP();
      49 0000      NOP
(0053) 	NOP();
      4A 0000      NOP
(0054) 	NOP();
      4B 0000      NOP
(0055) 	NOP();
      4C 0000      NOP
(0056) 	NOP();
      4D 0000      NOP
(0057) 	NOP();
      4E 0000      NOP
(0058) 	NOP();
      4F 0000      NOP
(0059) 	NOP();
      50 0000      NOP
      51 C076      RJMP	0x00C8
(0060) 	while(1)
(0061) 	{	 
(0062) 		temp=0; 
      52 24AA      CLR	R10
(0063) 		//delayms(10);
(0064) 		//delays(50);
(0065) 		delay(255);
      53 EF0F      LDI	R16,0xFF
      54 D09F      RCALL	_delay
(0066) 	    delay(26);
      55 E10A      LDI	R16,0x1A
      56 D09D      RCALL	_delay
(0067) 	    while((0x10&0x10)&&(++timeBlock<896));//计算距离,将距离和数据对应
      57 818A      LDD	R24,Y+2
      58 819B      LDD	R25,Y+3
      59 9601      ADIW	R24,1
      5A 011C      MOVW	R2,R24
      5B 823B      STD	Y+3,R3
      5C 822A      STD	Y+2,R2
      5D 3880      CPI	R24,0x80
      5E E0E3      LDI	R30,3
      5F 079E      CPC	R25,R30
      60 F3B0      BCS	0x0057
(0068) 	    deciMeter=(u32)timeBlock*15*18/9300;
      61 2444      CLR	R4
      62 2455      CLR	R5
      63 E04F      LDI	R20,0xF
      64 E050      LDI	R21,0
      65 E060      LDI	R22,0
      66 E070      LDI	R23,0
      67 925A      ST	R5,-Y
      68 924A      ST	R4,-Y
      69 923A      ST	R3,-Y
      6A 922A      ST	R2,-Y
      6B 018A      MOVW	R16,R20
      6C 019B      MOVW	R18,R22
      6D D169      RCALL	empy32u
      6E E142      LDI	R20,0x12
      6F E050      LDI	R21,0
      70 E060      LDI	R22,0
      71 E070      LDI	R23,0
      72 933A      ST	R19,-Y
      73 932A      ST	R18,-Y
      74 931A      ST	R17,-Y
      75 930A      ST	R16,-Y
      76 018A      MOVW	R16,R20
      77 019B      MOVW	R18,R22
      78 D15E      RCALL	empy32u
      79 E544      LDI	R20,0x54
      7A E254      LDI	R21,0x24
      7B E060      LDI	R22,0
      7C E070      LDI	R23,0
      7D 937A      ST	R23,-Y
      7E 936A      ST	R22,-Y
      7F 935A      ST	R21,-Y
      80 934A      ST	R20,-Y
      81 D0ED      RCALL	div32u
      82 2EC0      MOV	R12,R16
      83 C003      RJMP	0x0087
(0069) 		while(temp<=100)
(0070) 		{
(0071) 		    sendData(0x37);
      84 E307      LDI	R16,0x37
      85 D0C2      RCALL	_sendData
(0072) 			temp++;
      86 94A3      INC	R10
      87 E684      LDI	R24,0x64
      88 158A      CP	R24,R10
      89 F7D0      BCC	0x0084
      8A C023      RJMP	0x00AE
(0073) 		}
(0074) 	    while((PIND&0x20)&&(temp<=100))//判断按键是否按下1s,设定车速信号
(0075) 		{
(0076) 		    //temp=50;
(0077) 		    delayms(10);			
      8B E00A      LDI	R16,0xA
      8C D06D      RCALL	_delayms
(0078) 			temp++;              //speed=speed_test(); //测定车速信号
      8D 94A3      INC	R10
(0079) 			if((PIND&0x20)&&(temp==99))
      8E 9B4D      SBIS	0x09,5
      8F C01D      RJMP	0x00AD
      90 2D8A      MOV	R24,R10
      91 3683      CPI	R24,0x63
      92 F4D1      BNE	0x00AD
(0080) 			{
(0081) 			    speed_temp=data_temp2;   //测定车速信号
      93 9020 0100 LDS	R2,data_temp2
      95 9030 0101 LDS	R3,data_temp2+1
      97 8239      STD	Y+1,R3
      98 8228      STD	Y+0,R2
(0082) 			    speed_temp1=speed_temp;
      99 0161      MOVW	R12,R2
(0083) 				speed1=(u08)(speed_temp&0x00ff);
      9A 01C1      MOVW	R24,R2
      9B 7090      ANDI	R25,0
      9C 2EE8      MOV	R14,R24
(0084) 				speed2=(u08)(speed_temp1>>8);
      9D 2CCD      MOV	R12,R13
      9E 24DD      CLR	R13
(0085) 			    SREG=0x00;
      9F 2422      CLR	R2
      A0 BE2F      OUT	0x3F,R2
(0086) 			    eeprom_write(0x0025,speed1);//将用户设定车速写进EEPROM
      A1 2F28      MOV	R18,R24
      A2 E205      LDI	R16,0x25
      A3 E010      LDI	R17,0
      A4 D040      RCALL	_eeprom_write
(0087) 				//delayms(20);
(0088) 				eeprom_write(0x0026,speed2);
      A5 2D2C      MOV	R18,R12
      A6 E206      LDI	R16,0x26
      A7 E010      LDI	R17,0
      A8 D03C      RCALL	_eeprom_write
(0089) 				temp=111;
      A9 E68F      LDI	R24,0x6F
      AA 2EA8      MOV	R10,R24
(0090) 				SREG|=0x80;
      AB 9478      BSET	7
(0091) 			}
      AC C001      RJMP	0x00AE
(0092) 			else
(0093) 			NOP();
      AD 0000      NOP
      AE 9B4D      SBIS	0x09,5
      AF C003      RJMP	0x00B3
      B0 E684      LDI	R24,0x64
      B1 158A      CP	R24,R10
      B2 F6C0      BCC	0x008B
(0094) 		}
(0095) 		SREG=0x00;		
      B3 2422      CLR	R2
      B4 BE2F      OUT	0x3F,R2
(0096) 		ep_temp1=eeprom_read(0x0025);//读取EEPROM中用户设定的车速
      B5 E205      LDI	R16,0x25
      B6 E010      LDI	R17,0
      B7 D035      RCALL	_eeprom_read
      B8 2EA0      MOV	R10,R16
(0097) 		//delayms(20);
(0098) 		ep_temp2=eeprom_read(0x0026);
      B9 E206      LDI	R16,0x26
      BA E010      LDI	R17,0
      BB D031      RCALL	_eeprom_read
      BC 2EC0      MOV	R12,R16
(0099) 		SREG|=0x80;		
      BD 9478      BSET	7
(0100) 		ep_temp=(ep_temp2<<8)+ep_temp1;	
      BE 2CBC      MOV	R11,R12
(0101) 		speed_temp=data_temp2;             //调用测定车速信号
      BF 9020 0100 LDS	R2,data_temp2
      C1 9030 0101 LDS	R3,data_temp2+1
      C3 8239      STD	Y+1,R3
      C4 8228      STD	Y+0,R2
(0102) 		sendData(ep_temp2);
      C5 D082      RCALL	_sendData
(0103) 		delays(1);
      C6 E001      LDI	R16,1
      C7 D040      RCALL	_delays
      C8 CF89      RJMP	0x0052
      C9 9624      ADIW	R28,4
      CA 9508      RET
(0104) 	}
(0105) }
(0106) void port_init(void)
(0107) {
(0108)     DDRB=0x10;
_port_init:
      CB E180      LDI	R24,0x10
      CC B984      OUT	0x04,R24
(0109) 	DDRC=0x02;
      CD E082      LDI	R24,2
      CE B987      OUT	0x07,R24
(0110) 	DDRD=0x00;
      CF 2422      CLR	R2
      D0 B82A      OUT	0x0A,R2
(0111) 	PORTC=0x00;
      D1 B828      OUT	0x08,R2
(0112) 	PORTB=0x00;
      D2 B825      OUT	0x05,R2
(0113) 	PORTD=0x00;
      D3 B82B      OUT	0x0B,R2
      D4 9508      RET
(0114) }
(0115) void time_init(void)
(0116) {
(0117) 	TCCR0A=0x00;
_time_init:
      D5 2422      CLR	R2
      D6 BC24      OUT	0x24,R2
(0118) 	TCCR0B=0x03;
      D7 E083      LDI	R24,3
      D8 BD85      OUT	0x25,R24
(0119) 	TIMSK0=0x01;
      D9 E081      LDI	R24,1
      DA 9380 006E STS	0x006E,R24
(0120) 	TIFR0=0x01;
      DC BB85      OUT	0x15,R24
(0121) 	TCNT0=0xc0;
      DD EC80      LDI	R24,0xC0
      DE BD86      OUT	0x26,R24
(0122) 	EICRA=0x01;
      DF E081      LDI	R24,1
      E0 9380 0069 STS	0x0069,R24
(0123) 	EIMSK=0x01;
      E2 BB8D      OUT	0x1D,R24
(0124) 	EIFR=0x01;
      E3 BB8C      OUT	0x1C,R24
      E4 9508      RET
(0125) }
(0126) void eeprom_write(u16 adrw,u08 add)
(0127) {
(0128)     /* 等待上一次写操作结束 */
(0129)     while(EECR & (1<<EEPE));
_eeprom_write:
  add                  --> R18
  adrw                 --> R16
      E5 99F9      SBIC	0x1F,1
      E6 CFFE      RJMP	_eeprom_write
(0130)     /* 设置地址和数据寄存器 */
(0131)     EEAR=adrw;
      E7 BD12      OUT	0x22,R17
      E8 BD01      OUT	0x21,R16
(0132)     EEDR=add;
      E9 BD20      OUT	0x20,R18
(0133)     /* 置位EEMWE */
(0134)     EECR|=(1<<EEMPE);
      EA 9AFA      SBI	0x1F,2
(0135)     /* 置位EEWE 以启动写操作E */
(0136)     EECR|=(1<<EEPE);
      EB 9AF9      SBI	0x1F,1
      EC 9508      RET
(0137) }
(0138) u08 eeprom_read(u16 adrr)
(0139) {
(0140)     /* 等待上一次写操作结束 */
(0141)     while(EECR & (1<<EEPE));
_eeprom_read:
  adrr                 --> R16
      ED 99F9      SBIC	0x1F,1
      EE CFFE      RJMP	_eeprom_read
(0142)     /* 设置地址寄存器 */
(0143)     EEAR=adrr;
      EF BD12      OUT	0x22,R17
      F0 BD01      OUT	0x21,R16
(0144)     /* 设置EERE 以启动读操作 */
(0145)     EECR|=(1<<EERE);
      F1 9AF8      SBI	0x1F,0
(0146)     /* 自数据寄存器返回数据 */
(0147)     return EEDR;
      F2 B500      IN	R16,0x20
      F3 9508      RET
(0148) }
(0149) void delay(u08 tick)
(0150) {
(0151)     while(--tick);
_delay:
  tick                 --> R16
      F4 2F80      MOV	R24,R16
      F5 5081      SUBI	R24,1
      F6 2F08      MOV	R16,R24
      F7 2388      TST	R24
      F8 F7D9      BNE	0x00F4
      F9 9508      RET
_delayms:
  tim1                 --> R12
  i                    --> R10
  time                 --> R10
      FA 92AA      ST	R10,-Y
      FB 92CA      ST	R12,-Y
      FC 2EA0      MOV	R10,R16
(0152) }
(0153) void delayms(u08 time)
(0154) {
(0155)     u08 tim1,i;
(0156) 	tim1=time;
      FD 2CCA      MOV	R12,R10

⌨️ 快捷键说明

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