📄 light.lst
字号:
__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 + -