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

📄 main.lis

📁 SPI接口实验LED显示 SPI接口实验LED显示
💻 LIS
字号:
                        .module main.c
                        .area data(ram, con, rel)
 0000           _disp::
 0000                   .blkb 2
                        .area idata
 0000 C0F9              .byte 192,249
                        .area data(ram, con, rel)
 0002                   .blkb 2
                        .area idata
 0002 A4B0              .byte 164,176
                        .area data(ram, con, rel)
 0004                   .blkb 2
                        .area idata
 0004 9992              .byte 153,146
                        .area data(ram, con, rel)
 0006                   .blkb 2
                        .area idata
 0006 82F8              .byte 130,248
                        .area data(ram, con, rel)
 0008                   .blkb 2
                        .area idata
 0008 8090              .byte 128,144
                        .area data(ram, con, rel)
 000A                   .dbfile D:\Backup\我的文档\MYDESG~1\AVR\ICC\AVRMEG~1\SPI接口实验LED显示\main.c
 000A                   .dbsym e disp _disp A[10:10]c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\Backup\我的文档\MYDESG~1\AVR\ICC\AVRMEG~1\SPI接口实验LED显示\main.c
 0000                   .dbfunc e delay_ms _delay_ms fV
 0000           ;              a -> R20
 0000           ;              b -> R22
 0000           ;              i -> R16
                        .even
 0000           _delay_ms::
 0000 0E940000          xcall push_gset2
 0004                   .dbline -1
 0004                   .dbline 18
 0004           ; /*
 0004           ; 实验四:
 0004           ;       SPI接口实险,LED数据管显示。
 0004           ;       1、程序通过SPI接口输出数据到HC595芯片驱动LED数据管简单显示。
 0004           ;       2、内部1 M晶振,程序采用单任务方式,软件延时。
 0004           ;       3、进行此实验请插上JP1的所有8个短路块,JP6(SPI_EN)短路块。
 0004           ; 
 0004           ;       AVR  mega16学习板
 0004           ;       www.iccavr.com
 0004           ;       2006-01-10
 0004           ; */
 0004           ; 
 0004           ; #include "iom16v.h"
 0004           ; 
 0004           ; unsigned char disp[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
 0004           ; 
 0004           ; /*延时函数*/
 0004           ; void delay_ms(unsigned char i) {
 0004                   .dbline 21
 0004 41E0              ldi R20,1
 0006 06C0              xjmp L5
 0008           L2:
 0008                   .dbline 21
 0008           ; 
 0008           ;       unsigned char a, b;
 0008           ;       for (a = 1; a < i; a++) {
 0008                   .dbline 22
 0008 61E0              ldi R22,1
 000A 01C0              xjmp L9
 000C           L6:
 000C                   .dbline 22
 000C                   .dbline 23
 000C                   .dbline 24
 000C           L7:
 000C                   .dbline 22
 000C 6395              inc R22
 000E           L9:
 000E                   .dbline 22
 000E 6623              tst R22
 0010 E9F7              brne L6
 0012                   .dbline 25
 0012           L3:
 0012                   .dbline 21
 0012 4395              inc R20
 0014           L5:
 0014                   .dbline 21
 0014 4017              cp R20,R16
 0016 C0F3              brlo L2
 0018                   .dbline -2
 0018           L1:
 0018 0E940000          xcall pop_gset2
 001C                   .dbline 0 ; func end
 001C 0895              ret
 001E                   .dbsym r a 20 c
 001E                   .dbsym r b 22 c
 001E                   .dbsym r i 16 c
 001E                   .dbend
 001E                   .dbfunc e SPI_MasterInit _SPI_MasterInit fV
                        .even
 001E           _SPI_MasterInit::
 001E                   .dbline -1
 001E                   .dbline 29
 001E           ;               for (b = 1; b; b++) {
 001E           ;                       ;
 001E           ;                       }
 001E           ;               }
 001E           ; }
 001E           ; 
 001E           ; /*SPI接口初始化*/
 001E           ; void SPI_MasterInit(void) {
 001E                   .dbline 31
 001E           ; 
 001E           ;       DDRB |= (1<<PB5) | (1<<PB7);            /* 设置MOSI 和SCK 为输出,其他为输入 */
 001E 87B3              in R24,0x17
 0020 806A              ori R24,160
 0022 87BB              out 0x17,R24
 0024                   .dbline 32
 0024           ;       SPCR = (1<<SPE) | (1<<MSTR)
 0024 83E5              ldi R24,83
 0026 8DB9              out 0xd,R24
 0028                   .dbline -2
 0028           L10:
 0028                   .dbline 0 ; func end
 0028 0895              ret
 002A                   .dbend
 002A                   .dbfunc e SPI_MasterTransmit _SPI_MasterTransmit fV
 002A           ;              i -> R16
                        .even
 002A           _SPI_MasterTransmit::
 002A                   .dbline -1
 002A                   .dbline 37
 002A           ;               | (1<<SPR1) | (1<<SPR0);                /* 使能SPI 主机模式,设置时钟速率为fck/128 */
 002A           ; }
 002A           ; 
 002A           ; /*SPI数据发送*/
 002A           ; void SPI_MasterTransmit(unsigned char i) {
 002A                   .dbline 39
 002A           ;       
 002A           ;       SPDR = i;                                                       /* 启动数据传输 */
 002A 0FB9              out 0xf,R16
 002C           L12:
 002C                   .dbline 40
 002C                   .dbline 41
 002C                   .dbline 42
 002C           L13:
 002C                   .dbline 40
 002C           ;       while (!(SPSR & (1<<SPIF))) {           /* 等待传输结束 */
 002C 779B              sbis 0xe,7
 002E FECF              rjmp L12
 0030                   .dbline -2
 0030           L11:
 0030                   .dbline 0 ; func end
 0030 0895              ret
 0032                   .dbsym r i 16 c
 0032                   .dbend
 0032                   .dbfunc e SPI_595_Out _SPI_595_Out fV
 0032           ;              i -> R20
                        .even
 0032           _SPI_595_Out::
 0032 0E940000          xcall push_gset1
 0036 402F              mov R20,R16
 0038                   .dbline -1
 0038                   .dbline 46
 0038           ;               ;
 0038           ;               }
 0038           ; }
 0038           ; 
 0038           ; /*595数据输出*/
 0038           ; void SPI_595_Out(unsigned char i) {
 0038                   .dbline 47
 0038           ;       PORTB &= ~(1 << 4);                                     /*准备锁存*/
 0038 C498              cbi 0x18,4
 003A                   .dbline 48
 003A           ;       SPI_MasterTransmit(i);
 003A 042F              mov R16,R20
 003C F6DF              xcall _SPI_MasterTransmit
 003E                   .dbline 49
 003E           ;       PORTB |= (1 << 4);                                      /*锁存数据*/
 003E C49A              sbi 0x18,4
 0040                   .dbline -2
 0040           L15:
 0040 0E940000          xcall pop_gset1
 0044                   .dbline 0 ; func end
 0044 0895              ret
 0046                   .dbsym r i 20 c
 0046                   .dbend
 0046                   .dbfunc e main _main fV
 0046           ;              i -> R20,R21
                        .even
 0046           _main::
 0046                   .dbline -1
 0046                   .dbline 52
 0046           ; }
 0046           ; 
 0046           ; void main(void) {
 0046                   .dbline 54
 0046           ; 
 0046           ;       unsigned int i = 0;
 0046 4427              clr R20
 0048 5527              clr R21
 004A                   .dbline 56
 004A           ; 
 004A           ;       DDRA = 0x00;                                            /*方向输入*/
 004A 2224              clr R2
 004C 2ABA              out 0x1a,R2
 004E                   .dbline 57
 004E           ;       PORTA = 0xFF;                                           /*打开上拉*/
 004E 8FEF              ldi R24,255
 0050 8BBB              out 0x1b,R24
 0052                   .dbline 58
 0052           ;       DDRB = 0xFF;                                            /*方向输出*/
 0052 87BB              out 0x17,R24
 0054                   .dbline 59
 0054           ;       PORTB = 0xFF;                                           /*电平设置*/
 0054 88BB              out 0x18,R24
 0056                   .dbline 60
 0056           ;       DDRC = 0x00;
 0056 24BA              out 0x14,R2
 0058                   .dbline 61
 0058           ;       PORTC = 0xFF;
 0058 85BB              out 0x15,R24
 005A                   .dbline 62
 005A           ;       DDRD = 0xFF;
 005A 81BB              out 0x11,R24
 005C                   .dbline 63
 005C           ;       PORTD = 0xFF;
 005C 82BB              out 0x12,R24
 005E                   .dbline 65
 005E           ; 
 005E           ;       SPI_MasterInit();
 005E DFDF              xcall _SPI_MasterInit
 0060 55C0              xjmp L18
 0062           L17:
 0062                   .dbline 67
 0062           ;       while (1) 
 0062           ;       {
 0062                   .dbline 68
 0062           ;               i ++;
 0062 4F5F              subi R20,255  ; offset = 1
 0064 5F4F              sbci R21,255
 0066                   .dbline 69
 0066           ;               if (i > 9999)
 0066 8FE0              ldi R24,9999
 0068 97E2              ldi R25,39
 006A 8417              cp R24,R20
 006C 9507              cpc R25,R21
 006E 10F4              brsh L20
 0070                   .dbline 70
 0070           ;                {
 0070                   .dbline 71
 0070           ;                       i = 0;
 0070 4427              clr R20
 0072 5527              clr R21
 0074                   .dbline 72
 0074           ;                       }
 0074           L20:
 0074                   .dbline 75
 0074 28EE              ldi R18,1000
 0076 33E0              ldi R19,3
 0078 8A01              movw R16,R20
 007A 0E940000          xcall div16u
 007E 2AE0              ldi R18,10
 0080 30E0              ldi R19,0
 0082 0E940000          xcall mod16u
 0086 F801              movw R30,R16
 0088 80E0              ldi R24,<_disp
 008A 90E0              ldi R25,>_disp
 008C E80F              add R30,R24
 008E F91F              adc R31,R25
 0090 0081              ldd R16,z+0
 0092 CFDF              xcall _SPI_595_Out
 0094                   .dbline 76
 0094 C398              cbi 0x18,3
 0096                   .dbline 77
 0096 02E3              ldi R16,50
 0098 B3DF              xcall _delay_ms
 009A                   .dbline 79
 009A C39A              sbi 0x18,3
 009C                   .dbline 81
 009C 24E6              ldi R18,100
 009E 30E0              ldi R19,0
 00A0 8A01              movw R16,R20
 00A2 0E940000          xcall div16u
 00A6 2AE0              ldi R18,10
 00A8 30E0              ldi R19,0
 00AA 0E940000          xcall mod16u
 00AE F801              movw R30,R16
 00B0 80E0              ldi R24,<_disp
 00B2 90E0              ldi R25,>_disp
 00B4 E80F              add R30,R24
 00B6 F91F              adc R31,R25
 00B8 0081              ldd R16,z+0
 00BA BBDF              xcall _SPI_595_Out
 00BC                   .dbline 82
 00BC C298              cbi 0x18,2
 00BE                   .dbline 83
 00BE 02E3              ldi R16,50
 00C0 9FDF              xcall _delay_ms
 00C2                   .dbline 85
 00C2 C29A              sbi 0x18,2
 00C4                   .dbline 87
 00C4 2AE0              ldi R18,10
 00C6 30E0              ldi R19,0
 00C8 8A01              movw R16,R20
 00CA 0E940000          xcall div16u
 00CE 2AE0              ldi R18,10
 00D0 30E0              ldi R19,0
 00D2 0E940000          xcall mod16u
 00D6 F801              movw R30,R16
 00D8 80E0              ldi R24,<_disp
 00DA 90E0              ldi R25,>_disp
 00DC E80F              add R30,R24
 00DE F91F              adc R31,R25
 00E0 0081              ldd R16,z+0
 00E2 A7DF              xcall _SPI_595_Out
 00E4                   .dbline 88
 00E4 C198              cbi 0x18,1
 00E6                   .dbline 89
 00E6 02E3              ldi R16,50
 00E8 8BDF              xcall _delay_ms
 00EA                   .dbline 91
 00EA C19A              sbi 0x18,1
 00EC                   .dbline 93
 00EC 2AE0              ldi R18,10
 00EE 30E0              ldi R19,0
 00F0 8A01              movw R16,R20
 00F2 0E940000          xcall mod16u
 00F6 F801              movw R30,R16
 00F8 80E0              ldi R24,<_disp
 00FA 90E0              ldi R25,>_disp
 00FC E80F              add R30,R24
 00FE F91F              adc R31,R25
 0100 0081              ldd R16,z+0
 0102 97DF              xcall _SPI_595_Out
 0104                   .dbline 94
 0104 C098              cbi 0x18,0
 0106                   .dbline 95
 0106 02E3              ldi R16,50
 0108 7BDF              xcall _delay_ms
 010A                   .dbline 96
 010A C09A              sbi 0x18,0
 010C                   .dbline 98
 010C           L18:
 010C                   .dbline 66
 010C AACF              xjmp L17
 010E           X0:
 010E                   .dbline -2
 010E           L16:
 010E                   .dbline 0 ; func end
 010E 0895              ret
 0110                   .dbsym r i 20 i
 0110                   .dbend

⌨️ 快捷键说明

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