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

📄 light.lst

📁 详细介绍M8两版间通讯
💻 LST
📖 第 1 页 / 共 3 页
字号:
__start:
__text_start:
    0035 E5CF      LDI	R28,0x5F
    0036 E0D4      LDI	R29,4
    0037 BFCD      OUT	0x3D,R28
    0038 BFDE      OUT	0x3E,R29
    0039 51C0      SUBI	R28,0x10
    003A 40D0      SBCI	R29,0
    003B EA0A      LDI	R16,0xAA
    003C 8308      STD	Y+0,R16
    003D 2400      CLR	R0
    003E E8EC      LDI	R30,0x8C
    003F E0F0      LDI	R31,0
    0040 E010      LDI	R17,0
    0041 38EF      CPI	R30,0x8F
    0042 07F1      CPC	R31,R17
    0043 F011      BEQ	0x0046
    0044 9201      ST	R0,Z+
    0045 CFFB      RJMP	0x0041
    0046 8300      STD	Z+0,R16
    0047 E3EE      LDI	R30,0x3E
    0048 E0F0      LDI	R31,0
    0049 E6A0      LDI	R26,0x60
    004A E0B0      LDI	R27,0
    004B E010      LDI	R17,0
    004C 36EA      CPI	R30,0x6A
    004D 07F1      CPC	R31,R17
    004E F021      BEQ	0x0053
    004F 95C8      LPM
    0050 9631      ADIW	R30,1
    0051 920D      ST	R0,X+
    0052 CFF9      RJMP	0x004C
    0053 D01B      RCALL	_main
_exit:
    0054 CFFF      RJMP	_exit
FILE: G:\Mega8程序\TCXO评估板\LedShow\Light.c
(0001) #include <macros.h>
(0002) #include <iom8v.h>
(0003) 
(0004) #pragma data:code
(0005) const unsigned numTable[]={0b11011011,0b01010000,//"0"、"1"
(0006) 													 0b00011111,0b01011101,//"2"、"3"
(0007) 													 0b11010100,0b11001101,//"4"、"5"
(0008) 													 0b11001111,0b01011000,//"6"、"7"
(0009) 													 0b11011111,0b11011101,//"8"、"9"
(0010) 													 0b00000000,0b11111111};//全熄灭、全亮
(0011) #pragma data:data
(0012) void led_init(void)
(0013)   {
(0014)    DDRB=0xff;
_led_init:
    0055 EF8F      LDI	R24,0xFF
    0056 BB87      OUT	0x17,R24
(0015)    PORTB=0xff;
    0057 BB88      OUT	0x18,R24
(0016)    DDRD=0xff;
    0058 BB81      OUT	0x11,R24
(0017)    PORTD=0xff;
    0059 BB82      OUT	0x12,R24
    005A 9508      RET
_spark:
  num                  --> R22
  pos                  --> R20
    005B D29F      RCALL	push_gset2
    005C 2F62      MOV	R22,R18
    005D 2F40      MOV	R20,R16
(0018)    }
(0019) /*点亮pos位,数字为num*/
(0020) void spark(unsigned char pos,unsigned char num)
(0021)   {
(0022)    PORTB=numTable[num];
    005E E082      LDI	R24,2
    005F 9F86      MUL	R24,R22
    0060 01F0      MOVW	R30,R0
    0061 E286      LDI	R24,0x26
    0062 E090      LDI	R25,0
    0063 0FE8      ADD	R30,R24
    0064 1FF9      ADC	R31,R25
    0065 9005      LPM	R0,Z+
    0066 9014      LPM	R1,0(Z)
    0067 01F0      MOVW	R30,R0
    0068 BBE8      OUT	0x18,R30
(0023)    PORTD=(1<<pos);
    0069 E001      LDI	R16,1
    006A 2F14      MOV	R17,R20
    006B D2C0      RCALL	lsl8
    006C BB02      OUT	0x12,R16
    006D D274      RCALL	pop_gset2
    006E 9508      RET
FILE: G:\Mega8程序\TCXO评估板\LedShow\main.c
(0001) #include <iom8v.h>
(0002) #include <macros.h>
(0003) extern void led_init(void);
(0004) extern void timer0_init(void);
(0005) extern void TWI_init(void);
(0006) extern unsigned char LedNum[8];
(0007) 
(0008) unsigned char StartShow=0xff;
(0009) void Delay(unsigned int ms);
(0010) //#pragma data:eeprom
(0011) char cDataBuff[]={1,3,1,0,0,6,5,1,
(0012) 									3,9,8,10,10,8,7,8,
(0013) 									0,7,2,2,6,10,10,6,
(0014) 									1,2,6,4,2,1,
(0015) 									8,10}; //10用来分隔两次显示(LED熄灭)
(0016) //#pragma data:data
(0017) void main(void)
(0018)  {
(0019) 	unsigned char cTemp;
(0020) 	unsigned char cNum;
(0021) 	unsigned char *p;
(0022) 	led_init();
_main:
  cNum                 --> R20
  p                    --> R22
  cTemp                --> R10
    006F DFE5      RCALL	_led_init
(0023) 	timer0_init();
    0070 D092      RCALL	_timer0_init
(0024) 	TWI_init();
    0071 D0AA      RCALL	_TWI_init
(0025) 	SEI();
    0072 9478      BSET	7
(0026) 	for(cNum=9;cNum!=0xff;cNum--)
    0073 E049      LDI	R20,0x9
    0074 C010      RJMP	0x0085
(0027) 	 {
(0028) 		p=LedNum;
    0075 E861      LDI	R22,0x81
    0076 E070      LDI	R23,0
(0029) 		*p++=cNum;
    0077 01FB      MOVW	R30,R22
    0078 9341      ST	R20,Z+
(0030) 		*p++=cNum;
    0079 9341      ST	R20,Z+
(0031) 		*p++=cNum;
    007A 9341      ST	R20,Z+
(0032) 		*p++=cNum;
    007B 9341      ST	R20,Z+
(0033) 		*p++=cNum;
    007C 9341      ST	R20,Z+
(0034) 		*p++=cNum;
    007D 9341      ST	R20,Z+
(0035) 		*p++=cNum;
    007E 9341      ST	R20,Z+
    007F 01BF      MOVW	R22,R30
(0036) 		*p=cNum;
    0080 8340      STD	Z+0,R20
(0037) 		Delay(200);
    0081 EC08      LDI	R16,0xC8
    0082 E010      LDI	R17,0
    0083 D057      RCALL	_Delay
    0084 954A      DEC	R20
    0085 3F4F      CPI	R20,0xFF
    0086 F771      BNE	0x0075
(0038) 	 }
(0039) 	DDRC|=0b00001000;
    0087 9AA3      SBI	0x14,3
(0040) 	PORTC&=0b11110111;//点亮指示灯
    0088 B385      IN	R24,0x15
    0089 7F87      ANDI	R24,0xF7
    008A BB85      OUT	0x15,R24
    008B C04D      RJMP	0x00D9
(0041) 
(0042) 	while(1)
(0043) 	 {
(0044) 	 	p=LedNum;
    008C E861      LDI	R22,0x81
    008D E070      LDI	R23,0
(0045) 		for(cNum=7;cNum!=0xff;cNum--)//将LED的8位数码管全部熄灭-全部置为10
    008E E047      LDI	R20,7
    008F C005      RJMP	0x0095
(0046) 		 {
(0047) 			*p++=10;
    0090 E08A      LDI	R24,0xA
    0091 01FB      MOVW	R30,R22
    0092 9381      ST	R24,Z+
    0093 01BF      MOVW	R22,R30
    0094 954A      DEC	R20
    0095 3F4F      CPI	R20,0xFF
    0096 F7C9      BNE	0x0090
(0048) 		 }
(0049) 		Delay(300);
    0097 E20C      LDI	R16,0x2C
    0098 E011      LDI	R17,1
    0099 D041      RCALL	_Delay
(0050) 	 	StartShow=0x00;
    009A 2422      CLR	R2
    009B 92200060  STS	StartShow,R2
(0051) 	 	/*For为Main程序中的主循环,如果没有要求StartShow,程序将不停循环*/
(0052) 		for(cNum=0;StartShow!=0xff;cNum++)//将LED的8位数码管向前移位,最后位用数据缓冲区的数据补充进去
    009D 2744      CLR	R20
    009E C035      RJMP	0x00D4
(0053) 		 {		 	
(0054) 		 	p=&LedNum[7];
    009F E868      LDI	R22,0x88
    00A0 E070      LDI	R23,0
(0055) 		 	cTemp=*(--p);
    00A1 01CB      MOVW	R24,R22
    00A2 9701      SBIW	R24,1
    00A3 01FC      MOVW	R30,R24
    00A4 80A0      LDD	R10,Z+0
(0056) 		 	LedNum[7]=cTemp;
    00A5 92A00088  STS	0x88,R10
(0057) 		 	cTemp=*(--p);
    00A7 9701      SBIW	R24,1
    00A8 01FC      MOVW	R30,R24
    00A9 80A0      LDD	R10,Z+0
(0058) 		 	LedNum[6]=cTemp;
    00AA 92A00087  STS	0x87,R10
(0059) 		 	cTemp=*(--p);
    00AC 9701      SBIW	R24,1
    00AD 01FC      MOVW	R30,R24
    00AE 80A0      LDD	R10,Z+0
(0060) 		 	LedNum[5]=cTemp;
    00AF 92A00086  STS	0x86,R10
(0061) 		 	cTemp=*(--p);
    00B1 9701      SBIW	R24,1
    00B2 01FC      MOVW	R30,R24
    00B3 80A0      LDD	R10,Z+0
(0062) 		 	LedNum[4]=cTemp;
    00B4 92A00085  STS	0x85,R10
(0063) 		 	cTemp=*(--p);
    00B6 9701      SBIW	R24,1
    00B7 01FC      MOVW	R30,R24
    00B8 80A0      LDD	R10,Z+0
(0064) 		 	LedNum[3]=cTemp;
    00B9 92A00084  STS	LedNum+3,R10
(0065) 		 	cTemp=*(--p);
    00BB 9701      SBIW	R24,1
    00BC 01FC      MOVW	R30,R24
    00BD 80A0      LDD	R10,Z+0
(0066) 		 	LedNum[2]=cTemp;
    00BE 92A00083  STS	LedNum+2,R10
(0067) 		 	cTemp=*(--p);
    00C0 9701      SBIW	R24,1
    00C1 01BC      MOVW	R22,R24
    00C2 01FC      MOVW	R30,R24
    00C3 80A0      LDD	R10,Z+0
(0068) 		 	LedNum[1]=cTemp;
    00C4 92A00082  STS	LedNum+1,R10
(0069) 		 	
(0070) 			cNum&=0b00011111;//如果超过数据缓冲区,则恢复的起始地址
    00C6 714F      ANDI	R20,0x1F
(0071) 		 	cTemp=cDataBuff[cNum];
    00C7 E681      LDI	R24,0x61
    00C8 E090      LDI	R25,0
    00C9 2FE4      MOV	R30,R20
    00CA 27FF      CLR	R31
    00CB 0FE8      ADD	R30,R24
    00CC 1FF9      ADC	R31,R25
    00CD 80A0      LDD	R10,Z+0
(0072) 		 	LedNum[0]=cTemp;
    00CE 92A00081  STS	LedNum,R10
(0073) 			Delay(300);			
    00D0 E20C      LDI	R16,0x2C
    00D1 E011      LDI	R17,1
    00D2 D008      RCALL	_Delay
    00D3 9543      INC	R20
    00D4 91800060  LDS	R24,StartShow
    00D6 3F8F      CPI	R24,0xFF
    00D7 F009      BEQ	0x00D9
    00D8 CFC6      RJMP	0x009F
    00D9 CFB2      RJMP	0x008C
    00DA 9508      RET
_Delay:
  iTemp                --> R20
  iUs                  --> R22
  ms                   --> R16
    00DB D21F      RCALL	push_gset2
(0074) 		 }
(0075) 	 }
(0076)  }
(0077) void Delay(unsigned int ms)
(0078)  {
(0079) 	unsigned int iTemp;
(0080) 	unsigned int iUs;
(0081) 	for(iTemp=ms;iTemp>0;iTemp--)
    00DC 01A8      MOVW	R20,R16
    00DD C00A      RJMP	0x00E8
(0082) 	 {
(0083) 		for(iUs=1000;iUs>0;iUs--);
    00DE EE68      LDI	R22,0xE8
    00DF E073      LDI	R23,3
    00E0 C002      RJMP	0x00E3
    00E1 5061      SUBI	R22,1
    00E2 4070      SBCI	R23,0
    00E3 3060      CPI	R22,0
    00E4 0767      CPC	R22,R23
    00E5 F7D9      BNE	0x00E1
    00E6 5041      SUBI	R20,1
    00E7 4050      SBCI	R21,0
    00E8 3040      CPI	R20,0
    00E9 0745      CPC	R20,R21
    00EA F799      BNE	0x00DE
    00EB D1F6      RCALL	pop_gset2
    00EC 9508      RET
_timer0:
    00ED D210      RCALL	push_lset
FILE: G:\Mega8程序\TCXO评估板\LedShow\timer0.c
(0001) #include <iom8v.h>
(0002) #include <macros.h>
(0003) extern void spark(unsigned char pos,unsigned char num);
(0004) unsigned char LedNum[8]={8,7,6,5,4,3,2,1};
(0005) #pragma interrupt_handler timer0:10
(0006) void timer0(void)
(0007)   {
(0008)    static unsigned char cPos=0;
(0009)    static unsigned char cTimes=0;
(0010)    /*
(0011)    if (++cTimes==1)
(0012)       {
(0013) 	   cTimes=0;
(0014) 	   cPos++;
(0015) 	   }
(0016) 	 */
(0017) 	 cPos++;
    00EE 91800089  LDS	R24,cPos
    00F0 5F8F      SUBI	R24,0xFF
    00F1 93800089  STS	cPos,R24
(0018)    cPos&=0b00001111;
    00F3 708F      ANDI	R24,0xF
    00F4 93800089  STS	cPos,R24
(0019)    spark(cPos,LedNum[cPos]);   
    00F6 E881      LDI	R24,0x81
    00F7 E090      LDI	R25,0
    00F8 91E00089  LDS	R30,cPos
    00FA 27FF      CLR	R31
    00FB 0FE8      ADD	R30,R24
    00FC 1FF9      ADC	R31,R25
    00FD 8120      LDD	R18,Z+0
    00FE 91000089  LDS	R16,cPos
    0100 DF5A      RCALL	_spark
    0101 D213      RCALL	pop_lset
    0102 9518      RETI
(0020)    }
(0021) void timer0_init(void)
(0022)   {
(0023)    TIMSK|=0x01;
_timer0_init:
    0103 B789      IN	R24,0x39
    0104 6081      ORI	R24,1
    0105 BF89      OUT	0x39,R24
(0024)    TCCR0=0x03;//分频系数8(1/8)
    0106 E083      LDI	R24,3
    0107 BF83      OUT	0x33,R24
(0025)    TCNT0=0xdf;//预置数
    0108 ED8F      LDI	R24,0xDF
    0109 BF82      OUT	0x32,R24
    010A 9508      RET
FILE: G:\Mega8程序\TCXO评估板\Main\RW_eeprom.c
(0001) #include <iom8v.h>
(0002) #include <macros.h>
(0003) void rom_write(unsigned int Address,unsigned  char Data)
(0004)  {
(0005) 	while(EECR&(1<<EEWE));
_rom_write:
  Data                 --> R18
  Address              --> R16

⌨️ 快捷键说明

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