📄 spi_test.lst
字号:
0100 98C4 CBI 0x18,4
0101 C016 RJMP 0x0118
(0093) while(j<1)
(0094) {
(0095) for (i=0;i<5;i++)
0102 2766 CLR R22
0103 C011 RJMP 0x0115
(0096) {
(0097) putSPIchar(0xaa);
0104 EA0A LDI R16,0xAA
0105 DFB9 RCALL _putSPIchar
(0098) while(!SPI_datain);
0106 90200060 LDS R2,SPI_datain
0108 2022 TST R2
0109 F3E1 BEQ 0x0106
(0099) data[i]=getSPIchar();
010A DF95 RCALL _getSPIchar
010B 01CE MOVW R24,R28
010C 2FE6 MOV R30,R22
010D 27FF CLR R31
010E 0FE8 ADD R30,R24
010F 1FF9 ADC R31,R25
0110 8300 STD Z+0,R16
(0100) SPI_datain=0;
0111 2422 CLR R2
0112 92200060 STS SPI_datain,R2
0114 9563 INC R22
0115 3065 CPI R22,5
0116 F368 BCS 0x0104
(0101) }
(0102) j++;
0117 9543 INC R20
0118 3041 CPI R20,1
0119 F340 BCS 0x0102
(0103) }
(0104) PORTB|=BIT(SS);
011A 9AC4 SBI 0x18,4
(0105) Disp_Init();
011B 940E0185 CALL _Disp_Init
(0106) Display(*(unsigned int*)(data+1),0);
011D 2722 CLR R18
011E 01FE MOVW R30,R28
011F 8101 LDD R16,Z+1
0120 8112 LDD R17,Z+2
0121 940E0126 CALL _Display
(0107)
(0108)
(0109) while(1);
0123 CFFF RJMP 0x0123
0124 9625 ADIW R28,5
0125 9508 RET
_Display:
i --> R20
DispContent --> R22
gate --> R10
content --> R12
0126 940E01B1 CALL push_gset5
0128 2EA2 MOV R10,R18
0129 0168 MOVW R12,R16
FILE: F:\IccAvr_Pro\Display.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003)
(0004) #include "Display.h"
(0005)
(0006) void Display(unsigned int content,unsigned char gate)
(0007) {
(0008) unsigned int DispContent=0;
012A 2766 CLR R22
012B 2777 CLR R23
(0009) unsigned char i;
(0010) for(i=0;i<4;i++) //gain the BCD code of the number
012C 2744 CLR R20
012D C016 RJMP 0x0144
(0011) {
(0012) DispContent<<=4;
012E 0F66 LSL R22
012F 1F77 ROL R23
0130 0F66 LSL R22
0131 1F77 ROL R23
0132 0F66 LSL R22
0133 1F77 ROL R23
0134 0F66 LSL R22
0135 1F77 ROL R23
(0013) DispContent=DispContent|(content%10);
0136 E02A LDI R18,0xA
0137 E030 LDI R19,0
0138 0186 MOVW R16,R12
0139 940E0192 CALL mod16u
013B 2B60 OR R22,R16
013C 2B71 OR R23,R17
(0014) content=content/10;
013D E02A LDI R18,0xA
013E E030 LDI R19,0
013F 0186 MOVW R16,R12
0140 940E0194 CALL div16u
0142 0168 MOVW R12,R16
0143 9543 INC R20
0144 3044 CPI R20,4
0145 F340 BCS 0x012E
(0015) }
(0016)
(0017) switch(gate)
0146 2CEA MOV R14,R10
0147 24FF CLR R15
0148 20EE TST R14
0149 F411 BNE 0x014C
014A 20FF TST R15
014B F071 BEQ 0x015A
014C 01C7 MOVW R24,R14
014D 3081 CPI R24,1
014E E0E0 LDI R30,0
014F 079E CPC R25,R30
0150 F059 BEQ 0x015C
0151 3082 CPI R24,2
0152 E0E0 LDI R30,0
0153 079E CPC R25,R30
0154 F049 BEQ 0x015E
0155 3083 CPI R24,3
0156 E0E0 LDI R30,0
0157 079E CPC R25,R30
0158 F039 BEQ 0x0160
0159 C008 RJMP 0x0162
(0018) {
(0019) case 0: PORTB&=~BIT(Gate0);break; //Open the gate
015A 98C4 CBI 0x18,4
015B C009 RJMP 0x0165
(0020) case 1: PORTB&=~BIT(Gate1);break;
015C 98C5 CBI 0x18,5
015D C007 RJMP 0x0165
(0021) case 2: PORTB&=~BIT(Gate2);break;
015E 98C6 CBI 0x18,6
015F C005 RJMP 0x0165
(0022) case 3: PORTB&=~BIT(Gate3);break;
0160 98C7 CBI 0x18,7
0161 C003 RJMP 0x0165
(0023) default: PORTB|=0xF0;break;
0162 B388 IN R24,0x18
0163 6F80 ORI R24,0xF0
0164 BB88 OUT 0x18,R24
(0024) }
(0025) for (i=0;i<=15;i++) //Send the number by serial
0165 2744 CLR R20
0166 C015 RJMP 0x017C
(0026) {
(0027) PORTC|=BIT(DispClk);
0167 9AAE SBI 0x15,6
(0028) NOP();
0168 0000 NOP
(0029) NOP();
0169 0000 NOP
(0030) if(DispContent&0x01)
016A 01CB MOVW R24,R22
016B 7081 ANDI R24,1
016C 7090 ANDI R25,0
016D 3080 CPI R24,0
016E 0789 CPC R24,R25
016F F011 BEQ 0x0172
(0031) PORTC|=BIT(DispData);
0170 9AAF SBI 0x15,7
0171 C001 RJMP 0x0173
(0032) else
(0033) PORTC&=~BIT(DispData);
0172 98AF CBI 0x15,7
(0034) NOP();
0173 0000 NOP
(0035) NOP();
0174 0000 NOP
(0036) NOP();
0175 0000 NOP
(0037) NOP();
0176 0000 NOP
(0038) asm("clc");
0177 9488 BCLR 0
(0039) DispContent>>=1;
0178 9576 LSR R23
0179 9567 ROR R22
(0040) PORTC&=~BIT(DispClk);
017A 98AE CBI 0x15,6
017B 9543 INC R20
017C E08F LDI R24,0xF
017D 1784 CP R24,R20
017E F740 BCC 0x0167
(0041) }
(0042) PORTB|=0xF0;
017F B388 IN R24,0x18
0180 6F80 ORI R24,0xF0
0181 BB88 OUT 0x18,R24
0182 940E01AE CALL pop_gset5
0184 9508 RET
(0043) }
(0044)
(0045) void Disp_Init(void) //Set all control signal high
(0046) {
(0047) DDRB|=0xFF;
_Disp_Init:
0185 B387 IN R24,0x17
0186 6F8F ORI R24,0xFF
0187 BB87 OUT 0x17,R24
(0048) PORTB|=0xF0;
0188 B388 IN R24,0x18
0189 6F80 ORI R24,0xF0
018A BB88 OUT 0x18,R24
(0049) PORTC|=BIT(DispData)|BIT(DispClk);
018B B385 IN R24,0x15
018C 6C80 ORI R24,0xC0
018D BB85 OUT 0x15,R24
(0050) DDRC|=BIT(DispData)|BIT(DispClk);
FILE: <library>
018E B384 IN R24,0x14
018F 6C80 ORI R24,0xC0
0190 BB84 OUT 0x14,R24
0191 9508 RET
mod16u:
0192 9468 BSET 6
0193 C001 RJMP xdiv16u
div16u:
0194 94E8 BCLR 6
xdiv16u:
0195 92EA ST R14,-Y
0196 92FA ST R15,-Y
0197 938A ST R24,-Y
0198 24EE CLR R14
0199 24FF CLR R15
019A E180 LDI R24,0x10
019B 0F00 LSL R16
019C 1F11 ROL R17
019D 1CEE ROL R14
019E 1CFF ROL R15
019F 16E2 CP R14,R18
01A0 06F3 CPC R15,R19
01A1 F018 BCS 0x01A5
01A2 1AE2 SUB R14,R18
01A3 0AF3 SBC R15,R19
01A4 9503 INC R16
01A5 958A DEC R24
01A6 F7A1 BNE 0x019B
01A7 F416 BRTC 0x01AA
01A8 2D0E MOV R16,R14
01A9 2D1F MOV R17,R15
01AA 9189 LD R24,Y+
01AB 90F9 LD R15,Y+
01AC 90E9 LD R14,Y+
01AD 9508 RET
pop_gset5:
01AE 27EE CLR R30
01AF 940C01BD JMP pop
push_gset5:
01B1 92FA ST R15,-Y
01B2 92EA ST R14,-Y
push_gset4:
01B3 92DA ST R13,-Y
01B4 92CA ST R12,-Y
push_gset3:
01B5 92BA ST R11,-Y
01B6 92AA ST R10,-Y
push_gset2:
01B7 937A ST R23,-Y
01B8 936A ST R22,-Y
push_gset1:
01B9 935A ST R21,-Y
01BA 934A ST R20,-Y
01BB 9508 RET
pop_gset1:
01BC E0E1 LDI R30,1
pop:
01BD 9149 LD R20,Y+
01BE 9159 LD R21,Y+
01BF FDE0 SBRC R30,0
01C0 9508 RET
01C1 9169 LD R22,Y+
01C2 9179 LD R23,Y+
01C3 FDE1 SBRC R30,1
01C4 9508 RET
01C5 90A9 LD R10,Y+
01C6 90B9 LD R11,Y+
01C7 FDE2 SBRC R30,2
01C8 9508 RET
01C9 90C9 LD R12,Y+
01CA 90D9 LD R13,Y+
01CB FDE3 SBRC R30,3
01CC 9508 RET
01CD 90E9 LD R14,Y+
01CE 90F9 LD R15,Y+
01CF 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -