?? master.lst
字號:
__start:
__text_start:
2B E5CF LDI R28,0x5F
2C E0D4 LDI R29,4
2D BFCD OUT 0x3D,R28
2E BFDE OUT 0x3E,R29
2F 51CE SUBI R28,0x1E
30 40D0 SBCI R29,0
31 EA0A LDI R16,0xAA
32 8308 STD Y+0,R16
33 2400 CLR R0
34 E6E1 LDI R30,0x61
35 E0F0 LDI R31,0
36 E010 LDI R17,0
37 36E1 CPI R30,0x61
38 07F1 CPC R31,R17
39 F011 BEQ 0x003C
3A 9201 ST R0,Z+
3B CFFB RJMP 0x0037
3C 8300 STD Z+0,R16
3D E5E4 LDI R30,0x54
3E E0F0 LDI R31,0
3F E6A0 LDI R26,0x60
40 E0B0 LDI R27,0
41 E010 LDI R17,0
42 E000 LDI R16,0
43 BF0B OUT 0x3B,R16
44 35E5 CPI R30,0x55
45 07F1 CPC R31,R17
46 F021 BEQ 0x004B
47 95C8 LPM
48 9631 ADIW R30,1
49 920D ST R0,X+
4A CFF9 RJMP 0x0044
4B 940E 008F CALL _main
_exit:
4D CFFF RJMP _exit
_delay:
i --> R10
j --> R12
z --> R16
4E 940E 00B3 CALL push_xgset003C
FILE: D:\MYDOCU~1\MYMCUW~1\AVR\spi\master.c
(0001) //包含所需頭文件
(0002) #include <ioM16v.h>
(0003) #include <macros.h>
(0004)
(0005)
(0006)
(0007)
(0008) /*------宏定義------*/
(0009) #define uchar unsigned char
(0010) #define uint unsigned int
(0011)
(0012) uchar k=1;
(0013)
(0014) /*------函數定義------*/
(0015) //SPI函數
(0016) void spi_write(uchar sData);
(0017) uchar spi_read(void);
(0018)
(0019) void delay(uint z)
(0020) {
(0021) uint i,j;
(0022) for(i=0;i<z;i++)
50 24AA CLR R10
51 24BB CLR R11
52 C00E RJMP 0x0061
(0023) for(j=0;j<1000;j++);
53 24CC CLR R12
54 24DD CLR R13
55 C003 RJMP 0x0059
56 01C6 MOVW R24,R12
57 9601 ADIW R24,1
58 016C MOVW R12,R24
59 01C6 MOVW R24,R12
5A 3E88 CPI R24,0xE8
5B E0E3 LDI R30,3
5C 079E CPC R25,R30
5D F3C0 BCS 0x0056
5E 01C5 MOVW R24,R10
5F 9601 ADIW R24,1
60 015C MOVW R10,R24
61 16A0 CP R10,R16
62 06B1 CPC R11,R17
63 F378 BCS 0x0053
64 940C 00A8 JMP pop_xgset003C
(0024) }
(0025)
(0026)
(0027) //端口初始化
(0028) void port_init(void)
(0029) {
(0030) PORTA = 0x00;
_port_init:
66 2422 CLR R2
67 BA2B OUT 0x1B,R2
(0031) DDRA = 0x00;
68 BA2A OUT 0x1A,R2
(0032) PORTB = 0x00;
69 BA28 OUT 0x18,R2
(0033) DDRB = 0x00;
6A BA27 OUT 0x17,R2
(0034) PORTC = 0x00;
6B BA25 OUT 0x15,R2
(0035) DDRC = 0x00;
6C BA24 OUT 0x14,R2
(0036) PORTD = 0x00;
6D BA22 OUT 0x12,R2
(0037) DDRD = 0x00;
6E BA21 OUT 0x11,R2
6F 9508 RET
(0038) }
(0039)
(0040)
(0041) void spi_init(void)
(0042) {
(0043) //spi初始化
(0044) PORTB |= (1<<PB4) | (1<<PB5) | (1<<PB6) | (1<<PB7);
_spi_init:
70 B388 IN R24,0x18
71 6F80 ORI R24,0xF0
72 BB88 OUT 0x18,R24
(0045) DDRB|=BIT(PB7)|BIT(PB5)|BIT(PB4);
73 B387 IN R24,0x17
74 6B80 ORI R24,0xB0
75 BB87 OUT 0x17,R24
(0046) SPCR = 0x50;
76 E580 LDI R24,0x50
77 B98D OUT 0x0D,R24
(0047) SPSR = 0x00;
78 2422 CLR R2
79 B82E OUT 0x0E,R2
7A 9508 RET
(0048) }
(0049)
(0050)
(0051) //功能:使用SPI發送一個字節
(0052) void spi_write(uchar sData)
(0053) {
(0054)
(0055) SPDR = sData;
_spi_write:
sData --> R16
7B B90F OUT 0x0F,R16
(0056) while(!(SPSR & BIT(SPIF)));
7C 9B77 SBIS 0x0E,7
7D CFFE RJMP 0x007C
7E 9508 RET
(0057) //sData=SPDR;//讀從機發回來的數據
(0058) }
(0059)
(0060)
(0061) //功能:使用SPI接收一個字節
(0062) uchar spi_read(void)
(0063) {
(0064) SPDR = 0x00;
_spi_read:
7F 2422 CLR R2
80 B82F OUT 0x0F,R2
(0065) while(!(SPSR & BIT(SPIF)));
81 9B77 SBIS 0x0E,7
82 CFFE RJMP 0x0081
(0066) return SPDR;
83 B10F IN R16,0x0F
84 9508 RET
(0067) }
(0068)
(0069)
(0070) void init_devices(void)
(0071) {
(0072) CLI(); //禁止所有中斷
_init_devices:
85 94F8 BCLR 7
(0073) MCUCR = 0x00;
86 2422 CLR R2
87 BE25 OUT 0x35,R2
(0074) MCUCSR = 0x80;//禁止JTAG
88 E880 LDI R24,0x80
89 BF84 OUT 0x34,R24
(0075) GICR = 0x00;
8A BE2B OUT 0x3B,R2
(0076) port_init();
8B DFDA RCALL _port_init
(0077) spi_init();
8C DFE3 RCALL _spi_init
(0078) SEI();//開全局中斷
8D 9478 BSET 7
8E 9508 RET
(0079) }
(0080) //主函數
(0081) void main(void)
(0082) {
(0083) uint a=1000;
_main:
a --> R10
8F EE88 LDI R24,0xE8
90 E093 LDI R25,3
91 015C MOVW R10,R24
(0084) init_devices();
92 DFF2 RCALL _init_devices
(0085) //在這繼續添加你的代碼
(0086) do{
(0087) PORTB&=~BIT(PB4);
93 98C4 CBI 0x18,4
(0088) spi_write(k*25);
94 9020 0060 LDS R2,k
96 E189 LDI R24,0x19
97 9D82 MUL R24,R2
98 2D00 MOV R16,R0
99 DFE1 RCALL _spi_write
(0089) PORTB|=BIT(PB4);
9A 9AC4 SBI 0x18,4
(0090) delay(100);
9B E604 LDI R16,0x64
9C E010 LDI R17,0
9D DFB0 RCALL _delay
(0091) k++;
9E 9180 0060 LDS R24,k
A0 5F8F SUBI R24,0xFF
A1 9380 0060 STS k,R24
(0092) }
(0093) while(!(spi_read()==255));
A3 DFDB RCALL _spi_read
A4 3F0F CPI R16,0xFF
A5 F769 BNE 0x0093
(0094) while(1)
FILE: <library>
A6 CFFF RJMP 0x00A6
A7 9508 RET
pop_xgset003C:
A8 90A9 LD R10,Y+
A9 90B9 LD R11,Y+
AA 90C9 LD R12,Y+
AB 90D9 LD R13,Y+
AC 9508 RET
push_xgsetF0FC:
AD 937A ST R23,-Y
AE 936A ST R22,-Y
push_xgset30FC:
AF 935A ST R21,-Y
B0 934A ST R20,-Y
push_xgset00FC:
B1 92FA ST R15,-Y
B2 92EA ST R14,-Y
push_xgset003C:
B3 92DA ST R13,-Y
B4 92CA ST R12,-Y
B5 92BA ST R11,-Y
B6 92AA ST R10,-Y
B7 9508 RET
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -