📄 chengxu.lst
字号:
__start:
__text_start:
001C E5CF LDI R28,0x5F
001D E0D4 LDI R29,4
001E BFCD OUT 0x3D,R28
001F BFDE OUT 0x3E,R29
0020 51C0 SUBI R28,0x10
0021 40D0 SBCI R29,0
0022 EA0A LDI R16,0xAA
0023 8308 STD Y+0,R16
0024 2400 CLR R0
0025 E7E1 LDI R30,0x71
0026 E0F0 LDI R31,0
0027 E010 LDI R17,0
0028 37ED CPI R30,0x7D
0029 07F1 CPC R31,R17
002A F011 BEQ 0x002D
002B 9201 ST R0,Z+
002C CFFB RJMP 0x0028
002D 8300 STD Z+0,R16
002E E2E6 LDI R30,0x26
002F E0F0 LDI R31,0
0030 E6A0 LDI R26,0x60
0031 E0B0 LDI R27,0
0032 E010 LDI R17,0
0033 33E7 CPI R30,0x37
0034 07F1 CPC R31,R17
0035 F021 BEQ 0x003A
0036 95C8 LPM
0037 9631 ADIW R30,1
0038 920D ST R0,X+
0039 CFF9 RJMP 0x0033
003A D087 RCALL _main
_exit:
003B CFFF RJMP _exit
_delay:
i --> R20
j --> R22
t --> R16
003C D106 RCALL push_gset2
FILE: D:\Proteus\ATMEGA8\TCA230颜色识别\icc\chengxu.c
(0001) #include <iom8v.h>
(0002) #define uchar unsigned char
(0003) #define uint unsigned int
(0004) uchar duan[10]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09}; //所需的段的位码
(0005) //uchar wei[4]={0XFE,0XFD,0XFB,0XF7}; //位的控制端 (开发板)
(0006) uchar wei[4]={0X08,0X04,0X02,0X01}; //位的控制端 (仿真)
(0007) uint z,x,c,v, date; //定义数据类型
(0008) uchar CNT=0;//计数初值
(0009) uint lck=0;
(0010) uint Load;
(0011) /******************************************************************
(0012)
(0013) 延时函数
(0014)
(0015) ******************************************************************/
(0016) void delay(uchar t)
(0017) {
(0018) uchar i,j;
(0019) for(i=0;i<t;i++)
003D 2744 CLR R20
003E C007 RJMP 0x0046
(0020) {
(0021) for(j=13;j>0;j--);
003F E06D LDI R22,0xD
0040 C001 RJMP 0x0042
0041 956A DEC R22
0042 2422 CLR R2
0043 1626 CP R2,R22
0044 F3E0 BCS 0x0041
0045 9543 INC R20
0046 1740 CP R20,R16
0047 F3B8 BCS 0x003F
0048 D0E1 RCALL pop_gset2
0049 9508 RET
(0022) { ;
(0023) }
(0024) }
(0025) }
(0026)
(0027) /**********************************************************************
(0028) 数码管动态扫描
(0029) *********************************************************************/
(0030) void xianshi()
(0031) {
(0032) /*****************数据转换*****************************/
(0033) z=date/1000; //求千位
_xianshi:
004A EE28 LDI R18,0xE8
004B E033 LDI R19,3
004C 91000073 LDS R16,_date
004E 91100074 LDS R17,_date+1
0050 D0BF RCALL div16u
0051 9310007C STS _z+1,R17
0053 9300007B STS _z,R16
(0034) x=date%1000/100; //求百位
0055 EE28 LDI R18,0xE8
0056 E033 LDI R19,3
0057 91000073 LDS R16,_date
0059 91100074 LDS R17,_date+1
005B D0B2 RCALL mod16u
005C E624 LDI R18,0x64
005D E030 LDI R19,0
005E D0B1 RCALL div16u
005F 9310007A STS _x+1,R17
0061 93000079 STS _x,R16
(0035) c=date%100/10; //求十位
0063 E624 LDI R18,0x64
0064 E030 LDI R19,0
0065 91000073 LDS R16,_date
0067 91100074 LDS R17,_date+1
0069 D0A4 RCALL mod16u
006A E02A LDI R18,0xA
006B E030 LDI R19,0
006C D0A3 RCALL div16u
006D 93100078 STS _c+1,R17
006F 93000077 STS _c,R16
(0036) v=date%10; //求个位
0071 E02A LDI R18,0xA
0072 E030 LDI R19,0
0073 91000073 LDS R16,_date
0075 91100074 LDS R17,_date+1
0077 D096 RCALL mod16u
0078 93100076 STS _v+1,R17
007A 93000075 STS _v,R16
(0037)
(0038) PORTC=wei[0];
007C 9020006A LDS R2,0x6A
007E BA25 OUT 0x15,R2
(0039) PORTB=duan[z];
007F E680 LDI R24,0x60
0080 E090 LDI R25,0
0081 91E0007B LDS R30,_z
0083 91F0007C LDS R31,_z+1
0085 0FE8 ADD R30,R24
0086 1FF9 ADC R31,R25
0087 8020 LDD R2,Z+0
0088 BA28 OUT 0x18,R2
(0040) delay(50);
0089 E302 LDI R16,0x32
008A DFB1 RCALL _delay
(0041) PORTC=wei[1];
008B 9020006B LDS R2,0x6B
008D BA25 OUT 0x15,R2
(0042) PORTB=duan[x];
008E E680 LDI R24,0x60
008F E090 LDI R25,0
0090 91E00079 LDS R30,_x
0092 91F0007A LDS R31,_x+1
0094 0FE8 ADD R30,R24
0095 1FF9 ADC R31,R25
0096 8020 LDD R2,Z+0
0097 BA28 OUT 0x18,R2
(0043) delay(50);
0098 E302 LDI R16,0x32
0099 DFA2 RCALL _delay
(0044) PORTC=wei[2];
009A 9020006C LDS R2,0x6C
009C BA25 OUT 0x15,R2
(0045) PORTB=duan[c];
009D E680 LDI R24,0x60
009E E090 LDI R25,0
009F 91E00077 LDS R30,_c
00A1 91F00078 LDS R31,_c+1
00A3 0FE8 ADD R30,R24
00A4 1FF9 ADC R31,R25
00A5 8020 LDD R2,Z+0
00A6 BA28 OUT 0x18,R2
(0046) delay(50);
00A7 E302 LDI R16,0x32
00A8 DF93 RCALL _delay
(0047) PORTC=wei[3];
00A9 9020006D LDS R2,0x6D
00AB BA25 OUT 0x15,R2
(0048) PORTB=duan[v];
00AC E680 LDI R24,0x60
00AD E090 LDI R25,0
00AE 91E00075 LDS R30,_v
00B0 91F00076 LDS R31,_v+1
00B2 0FE8 ADD R30,R24
00B3 1FF9 ADC R31,R25
00B4 8020 LDD R2,Z+0
00B5 BA28 OUT 0x18,R2
(0049) delay(50);
00B6 E302 LDI R16,0x32
00B7 DF84 RCALL _delay
00B8 9508 RET
(0050)
(0051)
(0052) }
(0053)
(0054) //////////////////////////////初始化////////////////////////////////////
(0055) void Init_IO(void)//初始化I/O
(0056) {
(0057) //设置B口为输入
(0058) DDRB=0xFF;
_Init_IO:
00B9 EF8F LDI R24,0xFF
00BA BB87 OUT 0x17,R24
(0059) PORTB=0xFF;
00BB BB88 OUT 0x18,R24
(0060) //设置C口为输出
(0061) DDRC=0xFF;
00BC BB84 OUT 0x14,R24
(0062) PORTC=0xFF;
00BD BB85 OUT 0x15,R24
(0063) //设置D口为输出
(0064) DDRD=0X00;
00BE 2422 CLR R2
00BF BA21 OUT 0x11,R2
(0065) PORTD=0x00;
00C0 BA22 OUT 0x12,R2
00C1 9508 RET
(0066) }
(0067) /////////////////////////////主函数/////////////////////////////////////
(0068) void main(void)
(0069) {
(0070)
(0071) Init_IO(); //初始化I/O
_main:
00C2 DFF6 RCALL _Init_IO
(0072) PORTC=0XFF; //点亮数码管
00C3 EF8F LDI R24,0xFF
00C4 BB85 OUT 0x15,R24
(0073) PORTB=0X00; //点亮数码管
00C5 2422 CLR R2
00C6 BA28 OUT 0x18,R2
(0074) delay(30);//延时
00C7 E10E LDI R16,0x1E
00C8 DF73 RCALL _delay
(0075) PORTB=0xff; //关闭数码管
00C9 EF8F LDI R24,0xFF
00CA BB88 OUT 0x18,R24
(0076)
(0077) TCCR0=0x02; //T/C0工作方式选择,8分频
00CB E082 LDI R24,2
00CC BF83 OUT 0x33,R24
(0078) //TCNT0=0x00; //计数初始值9c
(0079)
(0080) TCCR1B=0x07; //T/C0工作方式选择,上升沿触发
00CD E087 LDI R24,7
00CE BD8E OUT 0x2E,R24
(0081) TCNT1H=0X00;
00CF 2422 CLR R2
00D0 BC2D OUT 0x2D,R2
(0082) TCNT1L=0X00;
00D1 BC2C OUT 0x2C,R2
(0083) TIMSK=0x01; //使能T0溢出中断
00D2 E081 LDI R24,1
00D3 BF89 OUT 0x39,R24
(0084) SREG=0x80; //使能全局中断
00D4 E880 LDI R24,0x80
00D5 BF8F OUT 0x3F,R24
00D6 C009 RJMP 0x00E0
(0085) while(1)
(0086) {
(0087) date=Load; //计数值
00D7 90200071 LDS R2,_Load
00D9 90300072 LDS R3,_Load+1
00DB 92300074 STS _date+1,R3
00DD 92200073 STS _date,R2
(0088) //date=1234; //计数值
(0089) xianshi(); //动态扫秒显示
00DF DF6A RCALL _xianshi
00E0 CFF6 RJMP 0x00D7
00E1 9508 RET
_Timer0:
00E2 922A ST R2,-Y
00E3 923A ST R3,-Y
00E4 938A ST R24,-Y
00E5 939A ST R25,-Y
00E6 93EA ST R30,-Y
00E7 B62F IN R2,0x3F
00E8 922A ST R2,-Y
(0090) }
(0091) }
(0092) //////////////////////////T/CO中断服务函数//////////////////////////////////////////
(0093) #pragma interrupt_handler Timer0:10
(0094) void Timer0(void)
(0095) {
(0096) TCNT0=0xa0; //计数初始值
00E9 EA80 LDI R24,0xA0
00EA BF82 OUT 0x32,R24
(0097) lck++;
00EB 9180006F LDS R24,0x6F
00ED 91900070 LDS R25,0x70
00EF 9601 ADIW R24,1
00F0 93900070 STS 0x70,R25
00F2 9380006F STS 0x6F,R24
(0098) if(lck==1000)
00F4 3E88 CPI R24,0xE8
00F5 E0E3 LDI R30,3
00F6 079E CPC R25,R30
00F7 F471 BNE 0x0106
(0099) {
(0100) Load=TCNT1;//H+TCNT1L;//求出计数值
00F8 B42C IN R2,0x2C
00F9 B43D IN R3,0x2D
00FA 92300072 STS _Load+1,R3
00FC 92200071 STS _Load,R2
(0101) lck=0;
00FE 2422 CLR R2
00FF 2433 CLR R3
0100 92300070 STS 0x70,R3
0102 9220006F STS 0x6F,R2
(0102) TCNT1=0X00;
0104 BC3D OUT 0x2D,R3
0105 BC2C OUT 0x2C,R2
(0103) //TCNT1L=0X00;
(0104) }
FILE: <library>
0106 9029 LD R2,Y+
0107 BE2F OUT 0x3F,R2
0108 91E9 LD R30,Y+
0109 9199 LD R25,Y+
010A 9189 LD R24,Y+
010B 9039 LD R3,Y+
010C 9029 LD R2,Y+
010D 9518 RETI
mod16u:
010E 9468 BSET 6
010F C001 RJMP xdiv16u
div16u:
0110 94E8 BCLR 6
xdiv16u:
0111 92EA ST R14,-Y
0112 92FA ST R15,-Y
0113 938A ST R24,-Y
0114 24EE CLR R14
0115 24FF CLR R15
0116 E180 LDI R24,0x10
0117 0F00 LSL R16
0118 1F11 ROL R17
0119 1CEE ROL R14
011A 1CFF ROL R15
011B 16E2 CP R14,R18
011C 06F3 CPC R15,R19
011D F018 BCS 0x0121
011E 1AE2 SUB R14,R18
011F 0AF3 SBC R15,R19
0120 9503 INC R16
0121 958A DEC R24
0122 F7A1 BNE 0x0117
0123 F416 BRTC 0x0126
0124 2D0E MOV R16,R14
0125 2D1F MOV R17,R15
0126 9189 LD R24,Y+
0127 90F9 LD R15,Y+
0128 90E9 LD R14,Y+
0129 9508 RET
pop_gset2:
012A E0E2 LDI R30,2
012B C004 RJMP pop
push_gset1:
012C 935A ST R21,-Y
012D 934A ST R20,-Y
012E 9508 RET
pop_gset1:
012F E0E1 LDI R30,1
pop:
0130 9149 LD R20,Y+
0131 9159 LD R21,Y+
0132 FDE0 SBRC R30,0
0133 9508 RET
0134 9169 LD R22,Y+
0135 9179 LD R23,Y+
0136 FDE1 SBRC R30,1
0137 9508 RET
0138 90A9 LD R10,Y+
0139 90B9 LD R11,Y+
013A FDE2 SBRC R30,2
013B 9508 RET
013C 90C9 LD R12,Y+
013D 90D9 LD R13,Y+
013E FDE3 SBRC R30,3
013F 9508 RET
0140 90E9 LD R14,Y+
0141 90F9 LD R15,Y+
0142 9508 RET
push_gset2:
0143 937A ST R23,-Y
0144 936A ST R22,-Y
0145 CFE6 RJMP push_gset1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -