⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spi.lis

📁 ISD1720芯片实现录音,定点录音,播放,定点播放等.
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module SPI.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\写的程序\AVR(C)/1602显示.c
 0000                   .dbfunc e delay_1us _delay_1us fV
                        .even
 0000           _delay_1us::
 0000                   .dbline -1
 0000                   .dbline 22
 0000           ; #include "1602显示.c"
 0000           ; #include "4X4键盘.c"
 0000           ; 
 0000           ; void spi_sent_init(void)
 0000           ; { PORTB |= (1<<PB4)|(1<<PB5)|(1<<PB6)|(1<<PB7); 
 0000           ;   DDRB |= (1<<DDB5)|(1<<DDB7)|(1<<DDB4);       //设置MOSI,SCK和SS为输出 
 0000           ;   SPCR = (1<<SPE)|(1<<DORD)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0);//设置为主机,LSB先发送
 0000           ;   SPSR = 0x00;              //预分频为128
 0000           ; }
 0000           ; 
 0000           ; unsigned char SPI_sent(unsigned int Data)
 0000           ; { 
 0000           ;   unsigned char sign;
 0000           ;   PORTB &=~ (1<<PB4);            //强制接收方进入从模式
 0000           ;   SPCR |= (1<<MSTR);             // MSTR有时会被清零,这里强制进入主机模式
 0000           ;   SPDR = Data;              //启动数据传输 
 0000           ;   while(!(SPSR&(1<<SPIF)));      //等待传输结束 
 0000           ;   PORTB |= (1<<PB4);
 0000           ;   sign=SPSR;
 0000           ;   sign=SPDR;
 0000           ;   return sign;            
 0000           ; }
 0000                   .dbline 23
 0000           ; /**********************************************************
 0000 0000              nop
 0002                   .dbline -2
 0002           L1:
 0002                   .dbline 0 ; func end
 0002 0895              ret
 0004                   .dbend
 0004                   .dbfunc e delay_nus _delay_nus fV
 0004           ;              i -> R20,R21
 0004           ;              n -> R22,R23
                        .even
 0004           _delay_nus::
 0004 0E940000          xcall push_gset2
 0008 B801              movw R22,R16
 000A                   .dbline -1
 000A                   .dbline 27
 000A           ;    注意下面接到的数据是发的两位,原因可能是多接收了一位
 000A           ; /************************************************************/
 000A           ; void SPI_receive_int(void)
 000A           ; {
 000A                   .dbline 28
 000A           ;    /* 设置MISO为输出,其他为输入 */
 000A 4427              clr R20
 000C 5527              clr R21
 000E                   .dbline 29
 000E           ;     DDRB=0x02;
 000E 03C0              xjmp L6
 0010           L3:
 0010                   .dbline 30
 0010 F7DF              xcall _delay_1us
 0012           L4:
 0012                   .dbline 29
 0012 4F5F              subi R20,255  ; offset = 1
 0014 5F4F              sbci R21,255
 0016           L6:
 0016                   .dbline 29
 0016 4617              cp R20,R22
 0018 5707              cpc R21,R23
 001A D0F3              brlo L3
 001C                   .dbline -2
 001C           L2:
 001C 0E940000          xcall pop_gset2
 0020                   .dbline 0 ; func end
 0020 0895              ret
 0022                   .dbsym r i 20 i
 0022                   .dbsym r n 22 i
 0022                   .dbend
 0022                   .dbfunc e delay_1ms _delay_1ms fV
 0022           ;              i -> R16,R17
                        .even
 0022           _delay_1ms::
 0022                   .dbline -1
 0022                   .dbline 34
 0022           ;       PORTB|=BIT(4);
 0022           ; }
 0022           ; unsigned char SPI_receive()
 0022           ; {
 0022           ;    unsigned char receive;
 0022                   .dbline 36
 0022 0027              clr R16
 0024 1127              clr R17
 0026 02C0              xjmp L11
 0028           L8:
 0028                   .dbline 36
 0028           L9:
 0028                   .dbline 36
 0028 0F5F              subi R16,255  ; offset = 1
 002A 1F4F              sbci R17,255
 002C           L11:
 002C                   .dbline 36
 002C           ;    SPCR = (1<<SPE)|(1<<DORD);/* 使能 SPI */
 002C           ;    while(!(SPSR & (1<<SPIF)));/* 等待接收结束 */
 002C 0437              cpi R16,116
 002E E4E0              ldi R30,4
 0030 1E07              cpc R17,R30
 0032 D0F3              brlo L8
 0034                   .dbline -2
 0034           L7:
 0034                   .dbline 0 ; func end
 0034 0895              ret
 0036                   .dbsym r i 16 i
 0036                   .dbend
 0036                   .dbfunc e delay_nms _delay_nms fV
 0036           ;              i -> R20,R21
 0036           ;              n -> R22,R23
                        .even
 0036           _delay_nms::
 0036 0E940000          xcall push_gset2
 003A B801              movw R22,R16
 003C                   .dbline -1
 003C                   .dbline 40
 003C           ;    receive=SPSR;
 003C           ;    receive=SPDR;
 003C           ;    return receive;/* 返回数据 */
 003C           ; }
 003C                   .dbline 41
 003C           ; 
 003C 4427              clr R20
 003E 5527              clr R21
 0040                   .dbline 42
 0040           ; void main(void)
 0040 03C0              xjmp L16
 0042           L13:
 0042                   .dbline 43
 0042 EFDF              xcall _delay_1ms
 0044           L14:
 0044                   .dbline 42
 0044 4F5F              subi R20,255  ; offset = 1
 0046 5F4F              sbci R21,255
 0048           L16:
 0048                   .dbline 42
 0048 4617              cp R20,R22
 004A 5707              cpc R21,R23
 004C D0F3              brlo L13
 004E                   .dbline -2
 004E           L12:
 004E 0E940000          xcall pop_gset2
 0052                   .dbline 0 ; func end
 0052 0895              ret
 0054                   .dbsym r i 20 i
 0054                   .dbsym r n 22 i
 0054                   .dbend
 0054                   .dbfunc e LCD_init _LCD_init fV
                        .even
 0054           _LCD_init::
 0054                   .dbline -1
 0054                   .dbline 72
 0054           ; {
 0054           ;    unsigned char F_data=1,j=0;
 0054           ;   // /*
 0054           ;    LCD_init();
 0054           ;    while(1)
 0054           ;    {
 0054           ;    if(!(PINB&0x08))
 0054           ;    {
 0054           ;    SPI_receive_int();
 0054           ;    F_data=SPI_receive();
 0054           ;    LCD_write_chang_data(0,0,F_data);
 0054           ;    }
 0054           ;    }
 0054           ;   // */
 0054           ;   /*
 0054           ;       spi_sent_init();
 0054           ;   while(1)
 0054           ;    {
 0054           ;     DDRD=0xFF;
 0054           ;     if(key_press())
 0054           ;       {
 0054           ;       F_data=key_scan();
 0054           ;     //PORTB&=0xF7;
 0054           ;       j=SPI_sent(F_data);
 0054           ;       LCD_init();
 0054           ;     LCD_write_chang_data(0,0,F_data);
 0054           ;     }
 0054           ;    }
 0054           ;   // */
 0054           ; }
 0054                   .dbline 73
 0054           ; }
 0054 8FEF              ldi R24,255
 0056 8ABB              out 0x1a,R24
 0058                   .dbline 74
 0058           ; }
 0058 8BBB              out 0x1b,R24
 005A                   .dbline 75
 005A           ; }
 005A 84BB              out 0x14,R24
 005C                   .dbline 76
 005C           ; }
 005C 85BB              out 0x15,R24
 005E                   .dbline 77
 005E           ; }
 005E 0FE0              ldi R16,15
 0060 10E0              ldi R17,0
 0062 E9DF              xcall _delay_nms
 0064                   .dbline 78
 0064           ; }
 0064 2227              clr R18
 0066 3327              clr R19
 0068 08E2              ldi R16,40
 006A 10E0              ldi R17,0
 006C 16D0              xcall _LCD_write_char
 006E                   .dbline 79
 006E           ; }
 006E 2227              clr R18
 0070 3327              clr R19
 0072 0CE0              ldi R16,12
 0074 10E0              ldi R17,0
 0076 11D0              xcall _LCD_write_char
 0078                   .dbline 80
 0078           ; }
 0078 2227              clr R18
 007A 3327              clr R19
 007C 01E0              ldi R16,1
 007E 10E0              ldi R17,0
 0080 0CD0              xcall _LCD_write_char
 0082                   .dbline 81
 0082           ; }
 0082 2227              clr R18
 0084 3327              clr R19
 0086 06E0              ldi R16,6
 0088 10E0              ldi R17,0
 008A 07D0              xcall _LCD_write_char
 008C                   .dbline -2
 008C           L17:
 008C                   .dbline 0 ; func end
 008C 0895              ret
 008E                   .dbend
 008E                   .dbfunc e LCD_en_write _LCD_en_write fV
                        .even
 008E           _LCD_en_write::
 008E                   .dbline -1
 008E                   .dbline 85
 008E           ; }
 008E           ; }
 008E           ; }
 008E           ; }
 008E                   .dbline 86
 008E           ; }
 008E AF9A              sbi 0x15,7
 0090                   .dbline 87
 0090           ; }
 0090 01E0              ldi R16,1
 0092 10E0              ldi R17,0
 0094 B7DF              xcall _delay_nus
 0096                   .dbline 88
 0096           ; }
 0096 AF98              cbi 0x15,7
 0098                   .dbline -2
 0098           L18:
 0098                   .dbline 0 ; func end
 0098 0895              ret
 009A                   .dbend
 009A                   .dbfunc e LCD_write_char _LCD_write_char fV
 009A           ;      data_temp -> R22,R23
 009A           ;   command_temp -> R20,R21
 009A           ;           data -> R12,R13
 009A           ;        command -> R10,R11
                        .even
 009A           _LCD_write_char::
 009A 0E940000          xcall push_gset4
 009E 6901              movw R12,R18
 00A0 5801              movw R10,R16
 00A2                   .dbline -1
 00A2                   .dbline 100
 00A2           ; }
 00A2           ; }
 00A2           ; }
 00A2           ; }
 00A2           ; }
 00A2           ; }
 00A2           ; }
 00A2           ; }
 00A2           ; }
 00A2           ; }
 00A2           ; }
 00A2           ; }
 00A2                   .dbline 102
 00A2           ; }
 00A2           ; }
 00A2 A501              movw R20,R10
 00A4                   .dbline 103
 00A4           ; }
 00A4 B601              movw R22,R12
 00A6                   .dbline 104
 00A6           ; }
 00A6 4FD0              xcall _LCD_wait_Ready
 00A8                   .dbline 105
 00A8           ; }
 00A8 AE98              cbi 0x15,6
 00AA                   .dbline 106
 00AA           ; }
 00AA 4030              cpi R20,0
 00AC 4507              cpc R20,R21
 00AE 69F4              brne L20
 00B0           X0:
 00B0                   .dbline 107
 00B0           ; }
 00B0                   .dbline 108
 00B0           ; }
 00B0 AD9A              sbi 0x15,5
 00B2                   .dbline 109
 00B2           ; }
 00B2 8BB3              in R24,0x1b
 00B4 8F70              andi R24,15
 00B6 8BBB              out 0x1b,R24
 00B8                   .dbline 110
 00B8           ; }
 00B8 CB01              movw R24,R22
 00BA 807F              andi R24,240
 00BC 9070              andi R25,0
 00BE 2BB2              in R2,0x1b
 00C0 3324              clr R3
 00C2 282A              or R2,R24
 00C4 392A              or R3,R25
 00C6 2BBA              out 0x1b,R2
 00C8                   .dbline 111
 00C8           ; }
 00C8 0CC0              xjmp L21
 00CA           L20:
 00CA                   .dbline 113
 00CA           ; }
 00CA           ; }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -