📄 main.lis
字号:
.module main.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\zhuji\桌面\新建文件夹\spi主\main.c
0000 .dbfunc e SPIMasterInit _SPIMasterInit fV
.even
0000 _SPIMasterInit::
0000 .dbline -1
0000 .dbline 48
0000 ; #include "iom16v.h"
0000 ; #include "macros.h"
0000 ; #define uchar unsigned char
0000 ; #define uint unsigned int
0000 ; //串口波特率9600
0000 ; /*void uart0_init(void)
0000 ; {
0000 ; UCSRB = 0x00; //disable while setting baud rate
0000 ; UCSRA = 0x00;
0000 ; UCSRC = BIT(URSEL) | 0x06;
0000 ; UBRRL = 0x0C; //set baud rate lo
0000 ; UBRRH = 0x00; //set baud rate hi
0000 ; UCSRB = 0x98;
0000 ; }*//*
0000 ; void uart0_init(void)
0000 ; {
0000 ; UCSRB = 0x00; //disable while setting baud rate
0000 ; UCSRA = 0x00;
0000 ; UCSRC = 0x0B;//
0000 ; UBRRL = 0x2F; //set baud rate lo
0000 ; UBRRH = 0x00; //set baud rate hi fosc=7372800HZ,Baud=115200
0000 ; UCSRB = (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);//0xD8;//发送接受使能 中断使能
0000 ; }
0000 ; uchar RecvFlag = 0;
0000 ; uchar RecvData = 0;
0000 ;
0000 ; #pragma interrupt_handler uart0_rx_isr:12
0000 ; void uart0_rx_isr(void)
0000 ; {
0000 ; RecvFlag = 1;
0000 ; RecvData = UDR;
0000 ; while(!(UCSRA&0x20));
0000 ; UDR = RecvData;
0000 ; }*/
0000 ; #define DDR_MISO 6
0000 ; #define DDR_MOSI 5
0000 ; #define DDR_SCK 7
0000 ; #define DDR_SS 4
0000 ; #define DDR_SPI DDRB
0000 ; #define PORT_SPI PORTB
0000 ; /*-----------------------------------------------------------------
0000 ; 函数名称: void SPIMasterInit(void)
0000 ; 函数功能: SPI主机初始化
0000 ; 参 数:
0000 ; 返 回 值: 无
0000 ; -----------------------------------------------------------------*/
0000 ; void SPIMasterInit(void)
0000 ; {
0000 .dbline 49
0000 ; DDR_SPI |= (1<<DDR_SCK)|(1<<DDR_MOSI);//输出
0000 87B3 in R24,0x17
0002 806A ori R24,160
0004 87BB out 0x17,R24
0006 .dbline 50
0006 ; DDR_SPI &=~(1<<DDR_MISO);//输入
0006 BE98 cbi 0x17,6
0008 .dbline 51
0008 ; SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0);//|(1<<CPOL)|(1<<CPHA)
0008 83E5 ldi R24,83
000A 8DB9 out 0xd,R24
000C .dbline -2
000C .dbline 52
000C ; }
000C L1:
000C .dbline 0 ; func end
000C 0895 ret
000E .dbend
000E .dbfunc e SPIMasterTransmit _SPIMasterTransmit fV
000E ; TranData -> R16
.even
000E _SPIMasterTransmit::
000E .dbline -1
000E .dbline 60
000E ; /*-----------------------------------------------------------------
000E ; 函数名称: void SPIMasterTransmit(unsigned char i)
000E ; 函数功能: SPI数据发送
000E ; 参 数:
000E ; 返 回 值: 无
000E ; -----------------------------------------------------------------*/
000E ; void SPIMasterTransmit(uchar TranData)
000E ; {
000E .dbline 61
000E ; SPDR = TranData; // 启动数据传输
000E 0FB9 out 0xf,R16
0010 L3:
0010 .dbline 62
0010 L4:
0010 .dbline 62
0010 ; while (!(SPSR & (1<<SPIF))); // 等待传输结束
0010 779B sbis 0xe,7
0012 FECF rjmp L3
0014 .dbline -2
0014 .dbline 63
0014 ; }
0014 L2:
0014 .dbline 0 ; func end
0014 0895 ret
0016 .dbsym r TranData 16 c
0016 .dbend
0016 .dbfunc e DeviceInit _DeviceInit fV
.even
0016 _DeviceInit::
0016 .dbline -1
0016 .dbline 65
0016 ; void DeviceInit(void)
0016 ; {
0016 .dbline 66
0016 ; CLI();
0016 F894 cli
0018 .dbline 68
0018 ; //uart0_init();
0018 ; SPIMasterInit();
0018 F3DF xcall _SPIMasterInit
001A .dbline 70
001A ;
001A ; MCUCR = 0;
001A 2224 clr R2
001C 25BE out 0x35,R2
001E .dbline 71
001E ; TIMSK = 0;
001E 29BE out 0x39,R2
0020 .dbline 72
0020 ; GICR = 0;
0020 2BBE out 0x3b,R2
0022 .dbline 73
0022 ; SEI();
0022 7894 sei
0024 .dbline -2
0024 .dbline 74
0024 ; }
0024 L6:
0024 .dbline 0 ; func end
0024 0895 ret
0026 .dbend
0026 .dbfunc e delay _delay fV
0026 ; num -> R16,R17
.even
0026 _delay::
0026 .dbline -1
0026 .dbline 76
0026 ; void delay(int num )
0026 ; {
0026 L8:
0026 .dbline 77
0026 L9:
0026 .dbline 77
0026 ; while(num--);
0026 1801 movw R2,R16
0028 0150 subi R16,1
002A 1040 sbci R17,0
002C 2220 tst R2
002E D9F7 brne L8
0030 3320 tst R3
0032 C9F7 brne L8
0034 X0:
0034 .dbline -2
0034 .dbline 78
0034 ; }
0034 L7:
0034 .dbline 0 ; func end
0034 0895 ret
0036 .dbsym r num 16 I
0036 .dbend
0036 .dbfunc e main _main fV
.even
0036 _main::
0036 .dbline -1
0036 .dbline 80
0036 ; void main(void)
0036 ; {
0036 .dbline 81
0036 ; PORT_SPI &=~(1<<DDR_SS);
0036 C498 cbi 0x18,4
0038 .dbline 82
0038 ; DDR_SPI |= (1<<DDR_SS);
0038 BC9A sbi 0x17,4
003A .dbline 83
003A ; DeviceInit();
003A EDDF xcall _DeviceInit
003C .dbline 85
003C ;
003C ; SPIMasterTransmit(0x05);
003C 05E0 ldi R16,5
003E E7DF xcall _SPIMasterTransmit
0040 .dbline 87
0040 ;
0040 ; SPIMasterTransmit(0x32);
0040 02E3 ldi R16,50
0042 E5DF xcall _SPIMasterTransmit
0044 L12:
0044 .dbline 89
0044 .dbline 99
0044 L13:
0044 .dbline 88
0044 FFCF xjmp L12
0046 X1:
0046 .dbline -2
0046 .dbline 100
0046 ; while(1)
0046 ; {
0046 ;
0046 ;
0046 ;
0046 ;
0046 ; /*if(RecvFlag)
0046 ; {
0046 ; RecvFlag = 0;
0046 ; SPIMasterTransmit(RecvData);
0046 ; }*/
0046 ; }
0046 ; }
0046 L11:
0046 .dbline 0 ; func end
0046 0895 ret
0048 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -