📄 m16t1.lst
字号:
i --> R20
0099 940E0181 CALL push_gset1
009B 2F40 MOV R20,R16
(0071) }
(0072) /*-----------------------------------------------------------------
(0073) 函数名称: void SPI595Out(unsigned char i)
(0074) 函数功能: 通过74HC595输出数据
(0075) 参 数:
(0076) 返 回 值: 无
(0077) -----------------------------------------------------------------*/
(0078) void SPI595Out(unsigned char i)
(0079) {
(0080) PORTB &= ~(1 << 4); //准备锁存
009C 98C4 CBI 0x18,4
(0081) SPIMasterTransmit(i);
009D 2F04 MOV R16,R20
009E DFF6 RCALL _SPIMasterTransmit
(0082) PORTB |= (1 << 4); //锁存数据
009F 9AC4 SBI 0x18,4
00A0 940E0184 CALL pop_gset1
00A2 9508 RET
(0083) }
(0084) /*-----------------------------------------------------------------
(0085) 函数名称: void Timer1Init(void)
(0086) 函数功能: 定时器1初始化 256预分频 定时一秒
(0087) 参 数:
(0088) 返 回 值: 无
(0089) -----------------------------------------------------------------*/
(0090) void Timer1Init(void)
(0091) {
(0092) TCCR1B = 0x00; //关定时器
_Timer1Init:
00A3 2422 CLR R2
00A4 BC2E OUT 0x2E,R2
(0093) TCNT1H = 0xF0; //设置定时初值
00A5 EF80 LDI R24,0xF0
00A6 BD8D OUT 0x2D,R24
(0094) TCNT1L = 0xBE;
00A7 EB8E LDI R24,0xBE
00A8 BD8C OUT 0x2C,R24
(0095) OCR1AH = 0x0F;
00A9 E08F LDI R24,0xF
00AA BD8B OUT 0x2B,R24
(0096) OCR1AL = 0x42;
00AB E482 LDI R24,0x42
00AC BD8A OUT 0x2A,R24
(0097) OCR1BH = 0x0F;
00AD E08F LDI R24,0xF
00AE BD89 OUT 0x29,R24
(0098) OCR1BL = 0x42;
00AF E482 LDI R24,0x42
00B0 BD88 OUT 0x28,R24
(0099) ICR1H = 0x0F;
00B1 E08F LDI R24,0xF
00B2 BD87 OUT 0x27,R24
(0100) ICR1L = 0x42;
00B3 E482 LDI R24,0x42
00B4 BD86 OUT 0x26,R24
(0101) TCCR1A = 0x00;
00B5 BC2F OUT 0x2F,R2
(0102) TCCR1B = 0x04; //开始计数
00B6 E084 LDI R24,4
00B7 BD8E OUT 0x2E,R24
00B8 9508 RET
_timer1_ovf_isr:
00B9 938A ST R24,-Y
00BA 939A ST R25,-Y
00BB B78F IN R24,0x3F
00BC 938A ST R24,-Y
(0103) }
(0104)
(0105) #pragma interrupt_handler timer1_ovf_isr:9
(0106) void timer1_ovf_isr(void)
(0107) {
(0108) TCNT1H = 0xF0; //重新装载计数值
00BD EF80 LDI R24,0xF0
00BE BD8D OUT 0x2D,R24
(0109) TCNT1L = 0xBE;
00BF EB8E LDI R24,0xBE
00C0 BD8C OUT 0x2C,R24
(0110) TimerCnt++;
00C1 91800060 LDS R24,TimerCnt
00C3 5F8F SUBI R24,0xFF
00C4 93800060 STS TimerCnt,R24
00C6 9189 LD R24,Y+
00C7 BF8F OUT 0x3F,R24
00C8 9199 LD R25,Y+
00C9 9189 LD R24,Y+
00CA 9518 RETI
(0111) }
(0112) /*-----------------------------------------------------------------
(0113) 函数名称: void InitDevices(void)
(0114) 函数功能: 初始化各种信息
(0115) 参 数:
(0116) 返 回 值: 无
(0117) -----------------------------------------------------------------*/
(0118) void InitDevices(void)
(0119) {
(0120) CLI(); //关全部中断
_InitDevices:
00CB 94F8 BCLR 7
(0121) SPIMasterInit(); //SPI初始化为主机
00CC DFC2 RCALL _SPIMasterInit
(0122) Timer1Init();
00CD DFD5 RCALL _Timer1Init
(0123)
(0124) TIMSK = 0x04; //timer interrupt sources
00CE E084 LDI R24,4
00CF BF89 OUT 0x39,R24
(0125) SEI(); //开中断
00D0 9478 BSET 7
00D1 9508 RET
(0126) }
(0127)
(0128) void main(void)
(0129) {
(0130) uchar temp;
(0131) DDRA = 0x00; //方向输入
_main:
temp --> R20
00D2 2422 CLR R2
00D3 BA2A OUT 0x1A,R2
(0132) PORTA = 0xFF; //打开上拉
00D4 EF8F LDI R24,0xFF
00D5 BB8B OUT 0x1B,R24
(0133) DDRB = 0xFF; //方向输出
00D6 BB87 OUT 0x17,R24
(0134) PORTB = 0xF0; //电平设置
00D7 EF80 LDI R24,0xF0
00D8 BB88 OUT 0x18,R24
(0135) DDRC = 0x00;
00D9 BA24 OUT 0x14,R2
(0136) PORTC = 0xFF;
00DA EF8F LDI R24,0xFF
00DB BB85 OUT 0x15,R24
(0137) DDRD = 0xFF;
00DC BB81 OUT 0x11,R24
(0138) PORTD = 0xFF;
00DD BB82 OUT 0x12,R24
(0139) InitDevices();
00DE DFEC RCALL _InitDevices
00DF C07F RJMP 0x015F
(0140) while (1)
(0141) {
(0142) if( TimerCnt > 9)
00E0 E089 LDI R24,0x9
00E1 90200060 LDS R2,TimerCnt
00E3 1582 CP R24,R2
00E4 F008 BCS 0x00E6
00E5 C06A RJMP 0x0150
(0143) {
(0144) if( TimerCnt > 99)
00E6 E683 LDI R24,0x63
00E7 1582 CP R24,R2
00E8 F008 BCS 0x00EA
00E9 C03E RJMP 0x0128
(0145) {
(0146) DDRB = 0xff;
00EA EF8F LDI R24,0xFF
00EB BB87 OUT 0x17,R24
(0147) PORTB = 0xff;
00EC BB88 OUT 0x18,R24
(0148) temp = TimerCnt / 100;
00ED E614 LDI R17,0x64
00EE 2D02 MOV R16,R2
00EF 940E0163 CALL div8u
00F1 2F40 MOV R20,R16
(0149) SPI595Out(disp[temp]);
00F2 E681 LDI R24,0x61
00F3 E090 LDI R25,0
00F4 2FE4 MOV R30,R20
00F5 27FF CLR R31
00F6 0FE8 ADD R30,R24
00F7 1FF9 ADC R31,R25
00F8 8100 LDD R16,Z+0
00F9 DF9F RCALL _SPI595Out
(0150) PORTB = 0xfb;
00FA EF8B LDI R24,0xFB
00FB BB88 OUT 0x18,R24
(0151) DelayMs(1);
00FC E001 LDI R16,1
00FD DF80 RCALL _DelayMs
(0152) PORTB = 0xff;
00FE EF8F LDI R24,0xFF
00FF BB88 OUT 0x18,R24
(0153) temp = TimerCnt%100/10;
0100 E614 LDI R17,0x64
0101 91000060 LDS R16,TimerCnt
0103 940E0161 CALL mod8u
0105 E01A LDI R17,0xA
0106 940E0163 CALL div8u
0108 2F40 MOV R20,R16
(0154) SPI595Out(disp[temp]);
0109 E681 LDI R24,0x61
010A E090 LDI R25,0
010B 2FE4 MOV R30,R20
010C 27FF CLR R31
010D 0FE8 ADD R30,R24
010E 1FF9 ADC R31,R25
010F 8100 LDD R16,Z+0
0110 DF88 RCALL _SPI595Out
(0155) PORTB = 0xfd;
0111 EF8D LDI R24,0xFD
0112 BB88 OUT 0x18,R24
(0156) DelayMs(1);
0113 E001 LDI R16,1
0114 DF69 RCALL _DelayMs
(0157) PORTB = 0xff;
0115 EF8F LDI R24,0xFF
0116 BB88 OUT 0x18,R24
(0158) temp = TimerCnt%10;
0117 E01A LDI R17,0xA
0118 91000060 LDS R16,TimerCnt
011A 940E0161 CALL mod8u
011C 2F40 MOV R20,R16
(0159) SPI595Out(disp[temp]);
011D E681 LDI R24,0x61
011E E090 LDI R25,0
011F 2FE4 MOV R30,R20
0120 27FF CLR R31
0121 0FE8 ADD R30,R24
0122 1FF9 ADC R31,R25
0123 8100 LDD R16,Z+0
0124 DF74 RCALL _SPI595Out
(0160) PORTB = 0xfe;
0125 EF8E LDI R24,0xFE
0126 BB88 OUT 0x18,R24
(0161) }
0127 C035 RJMP 0x015D
(0162) else
(0163) {
(0164) DDRB = 0xff;
0128 EF8F LDI R24,0xFF
0129 BB87 OUT 0x17,R24
(0165) PORTB = 0xff;
012A BB88 OUT 0x18,R24
(0166) temp = TimerCnt/10;
012B E01A LDI R17,0xA
012C 91000060 LDS R16,TimerCnt
012E 940E0163 CALL div8u
0130 2F40 MOV R20,R16
(0167) SPI595Out(disp[temp]);
0131 E681 LDI R24,0x61
0132 E090 LDI R25,0
0133 2FE4 MOV R30,R20
0134 27FF CLR R31
0135 0FE8 ADD R30,R24
0136 1FF9 ADC R31,R25
0137 8100 LDD R16,Z+0
0138 DF60 RCALL _SPI595Out
(0168) PORTB = 0xfd;
0139 EF8D LDI R24,0xFD
013A BB88 OUT 0x18,R24
(0169) DelayMs(1);
013B E001 LDI R16,1
013C DF41 RCALL _DelayMs
(0170) PORTB = 0xff;
013D EF8F LDI R24,0xFF
013E BB88 OUT 0x18,R24
(0171) temp = TimerCnt%10;
013F E01A LDI R17,0xA
0140 91000060 LDS R16,TimerCnt
0142 940E0161 CALL mod8u
0144 2F40 MOV R20,R16
(0172) SPI595Out(disp[temp]);
0145 E681 LDI R24,0x61
0146 E090 LDI R25,0
0147 2FE4 MOV R30,R20
0148 27FF CLR R31
0149 0FE8 ADD R30,R24
014A 1FF9 ADC R31,R25
014B 8100 LDD R16,Z+0
014C DF4C RCALL _SPI595Out
(0173) PORTB = 0xfe;
014D EF8E LDI R24,0xFE
014E BB88 OUT 0x18,R24
(0174) }
(0175) }
014F C00D RJMP 0x015D
(0176) else
(0177) {
(0178) DDRB = 0xff;
0150 EF8F LDI R24,0xFF
0151 BB87 OUT 0x17,R24
(0179) PORTB = 0xfe;
0152 EF8E LDI R24,0xFE
0153 BB88 OUT 0x18,R24
(0180) SPI595Out(disp[TimerCnt]);
0154 E681 LDI R24,0x61
0155 E090 LDI R25,0
0156 91E00060 LDS R30,TimerCnt
0158 27FF CLR R31
0159 0FE8 ADD R30,R24
015A 1FF9 ADC R31,R25
015B 8100 LDD R16,Z+0
015C DF3C RCALL _SPI595Out
(0181) }
(0182) DelayMs(1);
FILE: <library>
015D E001 LDI R16,1
015E DF1F RCALL _DelayMs
015F CF80 RJMP 0x00E0
0160 9508 RET
mod8u:
0161 9468 BSET 6
0162 C001 RJMP xdiv8u
div8u:
0163 94E8 BCLR 6
xdiv8u:
0164 932A ST R18,-Y
0165 92FA ST R15,-Y
0166 92EA ST R14,-Y
0167 24FF CLR R15
0168 24EE CLR R14
0169 E120 LDI R18,0x10
016A 0F00 LSL R16
016B 1CFF ROL R15
016C 1CEE ROL R14
016D 16E1 CP R14,R17
016E F010 BCS 0x0171
016F 1AE1 SUB R14,R17
0170 9503 INC R16
0171 952A DEC R18
0172 F7B9 BNE 0x016A
0173 F40E BRTC 0x0175
0174 2D0E MOV R16,R14
0175 90E9 LD R14,Y+
0176 90F9 LD R15,Y+
0177 9129 LD R18,Y+
0178 9508 RET
push_gset5:
0179 92FA ST R15,-Y
017A 92EA ST R14,-Y
push_gset4:
017B 92DA ST R13,-Y
017C 92CA ST R12,-Y
push_gset3:
017D 92BA ST R11,-Y
017E 92AA ST R10,-Y
push_gset2:
017F 937A ST R23,-Y
0180 936A ST R22,-Y
push_gset1:
0181 935A ST R21,-Y
0182 934A ST R20,-Y
0183 9508 RET
pop_gset1:
0184 E0E1 LDI R30,1
pop:
0185 9149 LD R20,Y+
0186 9159 LD R21,Y+
0187 FDE0 SBRC R30,0
0188 9508 RET
0189 9169 LD R22,Y+
018A 9179 LD R23,Y+
018B FDE1 SBRC R30,1
018C 9508 RET
018D 90A9 LD R10,Y+
018E 90B9 LD R11,Y+
018F FDE2 SBRC R30,2
0190 9508 RET
0191 90C9 LD R12,Y+
0192 90D9 LD R13,Y+
0193 FDE3 SBRC R30,3
0194 9508 RET
0195 90E9 LD R14,Y+
0196 90F9 LD R15,Y+
0197 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -