📄 dsq0.lst
字号:
Interrupt Vectors
00000 940C 007F JMP __text_start|__start
00010 940C 00D1 JMP _miao
Program Code (text area)
__text_start|__start:
0007F EFCF LDI R28,0xFF
00080 E2D1 LDI R29,0x21
00081 BFCD OUT 0x3D,R28
00082 BFDE OUT 0x3E,R29
00083 51CE SUBI R28,0x1E
00084 40D0 SBCI R29,0
00085 EA0A LDI R16,0xAA
00086 8308 ST Y,R16
00087 2400 CLR R0
00088 E1E9 LDI R30,0x19
00089 E0F2 LDI R31,2
0008A E012 LDI R17,2
0008B 31E9 CPI R30,0x19
0008C 07F1 CPC R31,R17
0008D F011 BEQ 0x0090
0008E 9201 ST Z+,R0
0008F CFFB RJMP 0x008B
00090 8300 ST Z,R16
00091 EEE4 LDI R30,0xE4
00092 E0F0 LDI R31,0
00093 E0A0 LDI R26,0
00094 E0B2 LDI R27,2
00095 E010 LDI R17,0
00096 E000 LDI R16,0
00097 BF0B OUT 0x3B,R16
00098 3FED CPI R30,0xFD
00099 07F1 CPC R31,R17
0009A F021 BEQ 0x009F
0009B 95C8 LPM
0009C 9631 ADIW R30,1
0009D 920D ST X+,R0
0009E CFF9 RJMP 0x0098
0009F 940E 00EC CALL _main
_exit:
000A1 CFFF RJMP _exit
_delay:
i --> R20
j --> R22
ms --> R16
000A2 940E 0122 CALL push_xgsetF000
FILE: E:\AVR自编程序\11实验板\8定时器0\定时器0.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define uchar unsigned char
(0004) #define uint unsigned int
(0005) uchar num=0;
(0006) #pragma interrupt_handler miao:9
(0007)
(0008) uchar const table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
(0009) 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
(0010) uchar const LED_W[8] = {0,1,2,3,4,5,6,7};
(0011) void delay(uint ms)
(0012) {
(0013) uint i,j;
(0014) for(i=0;i<ms;i++)
000A4 2744 CLR R20
000A5 2755 CLR R21
000A6 C00B RJMP 0x00B2
(0015) {
(0016) for(j=0;j<1141;j++);
000A7 2766 CLR R22
000A8 2777 CLR R23
000A9 C002 RJMP 0x00AC
000AA 5F6F SUBI R22,0xFF
000AB 4F7F SBCI R23,0xFF
000AC 3765 CPI R22,0x75
000AD E0E4 LDI R30,4
000AE 077E CPC R23,R30
000AF F3D0 BCS 0x00AA
000B0 5F4F SUBI R20,0xFF
000B1 4F5F SBCI R21,0xFF
000B2 1740 CP R20,R16
000B3 0751 CPC R21,R17
000B4 F390 BCS 0x00A7
000B5 940C 0127 JMP pop_xgsetF000
_show:
k --> R10
j --> R12
000B7 92AA ST -Y,R10
000B8 92CA ST -Y,R12
000B9 2EA2 MOV R10,R18
000BA 2EC0 MOV R12,R16
(0017) }
(0018) }
(0019) void show(uchar j,uchar k)
(0020) {
(0021)
(0022)
(0023) PORTA = table[j]; // i 值的 个位数
000BB E081 LDI R24,1
000BC E092 LDI R25,2
000BD 2DEC MOV R30,R12
000BE 27FF CLR R31
000BF 0FE8 ADD R30,R24
000C0 1FF9 ADC R31,R25
000C1 8020 LD R2,Z
000C2 BA2B OUT 0x1B,R2
(0024) PORTC = LED_W[k]; //点亮第一位数码管
000C3 E181 LDI R24,0x11
000C4 E092 LDI R25,2
000C5 2DEA MOV R30,R10
000C6 27FF CLR R31
000C7 0FE8 ADD R30,R24
000C8 1FF9 ADC R31,R25
000C9 8020 LD R2,Z
000CA BA25 OUT 0x15,R2
(0025)
(0026) delay(2);
000CB E002 LDI R16,2
000CC E010 LDI R17,0
000CD DFD4 RCALL _delay
000CE 90C9 LD R12,Y+
000CF 90A9 LD R10,Y+
000D0 9508 RET
_miao:
000D1 922A ST -Y,R2
000D2 938A ST -Y,R24
000D3 939A ST -Y,R25
000D4 B62F IN R2,0x3F
000D5 922A ST -Y,R2
(0027)
(0028) /*j++;
(0029) i++;
(0030) if(j == 8) //利用 j 值的变化,来控制数码管数值变化间隔的时间
(0031) {
(0032) j = 0;
(0033) i = 0;
(0034) }*/
(0035)
(0036) }
(0037) void miao()
(0038) {
(0039) if(num==60)
000D6 9180 0200 LDS R24,num
000D8 338C CPI R24,0x3C
000D9 F419 BNE 0x00DD
(0040) num=0;
000DA 2422 CLR R2
000DB 9220 0200 STS num,R2
(0041) num++;
000DD 9180 0200 LDS R24,num
000DF 5F8F SUBI R24,0xFF
000E0 9380 0200 STS num,R24
(0042) TCNT1H=0X85;
000E2 E885 LDI R24,0x85
000E3 BD8D OUT 0x2D,R24
(0043) TCNT1L=0XED;
000E4 EE8D LDI R24,0xED
000E5 BD8C OUT 0x2C,R24
000E6 9029 LD R2,Y+
000E7 BE2F OUT 0x3F,R2
000E8 9199 LD R25,Y+
000E9 9189 LD R24,Y+
000EA 9029 LD R2,Y+
000EB 9518 RETI
(0044) }
(0045) void main()
(0046) {
(0047) DDRA=0xff;
_main:
000EC EF8F LDI R24,0xFF
000ED BB8A OUT 0x1A,R24
(0048) DDRC=0XFF;
000EE BB84 OUT 0x14,R24
(0049)
(0050) TCCR1B=0X04;
000EF E084 LDI R24,4
000F0 BD8E OUT 0x2E,R24
(0051) TCNT1H=0X85;
000F1 E885 LDI R24,0x85
000F2 BD8D OUT 0x2D,R24
(0052) TCNT1L=0XED;
000F3 EE8D LDI R24,0xED
000F4 BD8C OUT 0x2C,R24
(0053) TIMSK|=BIT(2);
000F5 B789 IN R24,0x39
000F6 6084 ORI R24,4
000F7 BF89 OUT 0x39,R24
(0054) SREG|=BIT(7);
000F8 9478 BSET 7
000F9 C00E RJMP 0x0108
(0055)
(0056) while(1)
(0057) {
(0058) show(num/10,1);
000FA E021 LDI R18,1
000FB E01A LDI R17,0xA
000FC 9100 0200 LDS R16,num
000FE 940E 010C CALL div8u
00100 DFB6 RCALL _show
(0059) show(num%10,0);
FILE: <library>
00101 2722 CLR R18
00102 E01A LDI R17,0xA
00103 9100 0200 LDS R16,num
00105 940E 010A CALL mod8u
00107 DFAF RCALL _show
00108 CFF1 RJMP 0x00FA
00109 9508 RET
mod8u:
0010A 9468 BSET 6
0010B C001 RJMP xdiv8u
div8u:
0010C 94E8 BCLR 6
xdiv8u:
0010D 932A ST -Y,R18
0010E 92FA ST -Y,R15
0010F 92EA ST -Y,R14
00110 24FF CLR R15
00111 24EE CLR R14
00112 E120 LDI R18,0x10
00113 0F00 LSL R16
00114 1CFF ROL R15
00115 1CEE ROL R14
00116 16E1 CP R14,R17
00117 F010 BCS 0x011A
00118 1AE1 SUB R14,R17
00119 9503 INC R16
0011A 952A DEC R18
0011B F7B9 BNE 0x0113
0011C F40E BRTC 0x011E
0011D 2D0E MOV R16,R14
0011E 90E9 LD R14,Y+
0011F 90F9 LD R15,Y+
00120 9129 LD R18,Y+
00121 9508 RET
push_xgsetF000:
00122 937A ST -Y,R23
00123 936A ST -Y,R22
00124 935A ST -Y,R21
00125 934A ST -Y,R20
00126 9508 RET
pop_xgsetF000:
00127 9149 LD R20,Y+
00128 9159 LD R21,Y+
00129 9169 LD R22,Y+
0012A 9179 LD R23,Y+
0012B 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -