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

📄 main.lis

📁 avr单片机atmage16驱动小灯的一些例程 并且包括一些收发数据的程序利用usb口
💻 LIS
字号:
                        .module main.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\ICCAVR\project\AVRMEG~2\icc\019-TEST\main.c
 0000                   .dbfunc e main _main fV
 0000           ;           temp -> y+0
                        .even
 0000           _main::
 0000 2197              sbiw R28,1
 0002                   .dbline -1
 0002                   .dbline 23
 0002           ; /*
 0002           ; 实验十三:
 0002           ; 
 0002           ;       AVR单片机I2C总线实验。
 0002           ;       1、用24C02记录CPU启动次数,并在PB口上显示出来。
 0002           ;       2、内部1 M晶振,程序采用单任务方式,软件延时。
 0002           ;       3、进行此实验请插上JP1的所有8个短路块,JP7(LED_EN)/PC0/PC1短路块。
 0002           ;       4、通过此实验,可以I2C总线操作有个初步认识。
 0002           ;       
 0002           ;       AVR  mega16学习板
 0002           ;       www.iccavr.com
 0002           ;       14:42 2007-4-9
 0002           ; */
 0002           ; 
 0002           ; #include "iom16v.h"
 0002           ; #include "beep.h"
 0002           ; #include "delay.h"
 0002           ; #include "ds1302.h"
 0002           ; #include "spi.h"
 0002           ; #include "twi.h"
 0002           ; #include "uart.h"
 0002           ; 
 0002           ; void main(void) {
 0002                   .dbline 27
 0002           ; 
 0002           ;       unsigned char temp;
 0002           ; 
 0002           ;       PORTA = 0xFF;                           /*打开上拉*/
 0002 8FEF              ldi R24,255
 0004 8BBB              out 0x1b,R24
 0006                   .dbline 28
 0006           ;       DDRA = 0x00;                            /*方向输入*/
 0006 2224              clr R2
 0008 2ABA              out 0x1a,R2
 000A                   .dbline 29
 000A           ;       PORTB = 0xFF;                           /*电平设置*/
 000A 88BB              out 0x18,R24
 000C                   .dbline 30
 000C           ;       DDRB = 0xFF;                            /*方向输出*/
 000C 87BB              out 0x17,R24
 000E                   .dbline 31
 000E           ;       PORTC = 0xFF;
 000E 85BB              out 0x15,R24
 0010                   .dbline 32
 0010           ;       DDRC = 0x00;
 0010 24BA              out 0x14,R2
 0012                   .dbline 33
 0012           ;       PORTD = 0xFF;
 0012 82BB              out 0x12,R24
 0014                   .dbline 34
 0014           ;       DDRD = 0x20;
 0014 80E2              ldi R24,32
 0016 81BB              out 0x11,R24
 0018                   .dbline 37
 0018           ; 
 0018           ;       /*蜂鸣器测验试*/
 0018           ;       delay_ms(100);
 0018 04E6              ldi R16,100
 001A 10E0              ldi R17,0
 001C 0E940000          xcall _delay_ms
 0020                   .dbline 38
 0020           ;       beep(300);
 0020 0CE2              ldi R16,300
 0022 11E0              ldi R17,1
 0024 0E940000          xcall _beep
 0028                   .dbline 41
 0028           ; 
 0028           ;       /*按键及指示灯测试*/
 0028           ;       delay_ms(1000);
 0028 08EE              ldi R16,1000
 002A 13E0              ldi R17,3
 002C 0E940000          xcall _delay_ms
 0030 10C0              xjmp L3
 0032           L2:
 0032                   .dbline 42
 0032           ;       while (1) {
 0032                   .dbline 43
 0032           ;               temp = PINA;                                    /*提取按键*/
 0032 29B2              in R2,0x19
 0034 2882              std y+0,R2
 0036                   .dbline 44
 0036           ;               if (temp != 0xFF) {
 0036 822D              mov R24,R2
 0038 8F3F              cpi R24,255
 003A 41F0              breq L5
 003C                   .dbline 44
 003C                   .dbline 45
 003C           ;                       PORTB = temp;                           /*显示按键值*/
 003C 88BB              out 0x18,R24
 003E                   .dbline 46
 003E           ;                       beep(200);
 003E 08EC              ldi R16,200
 0040 10E0              ldi R17,0
 0042 0E940000          xcall _beep
 0046           L7:
 0046                   .dbline 47
 0046           L8:
 0046                   .dbline 47
 0046           ;                       while (PINA != 0xFF);           /*等待按键松开*/
 0046 89B3              in R24,0x19
 0048 8F3F              cpi R24,255
 004A E9F7              brne L7
 004C                   .dbline 48
 004C           ;                       }
 004C           L5:
 004C                   .dbline 49
 004C           ;               if ((PIND & 0x04) == 0x00) {    /*INT键退出*/
 004C 8299              sbic 0x10,2
 004E 01C0              rjmp L10
 0050                   .dbline 49
 0050                   .dbline 50
 0050           ;                       break;
 0050 01C0              xjmp L4
 0052           L10:
 0052                   .dbline 52
 0052           L3:
 0052                   .dbline 42
 0052 EFCF              xjmp L2
 0054           L4:
 0054                   .dbline 55
 0054           ;                       }
 0054           ;               }
 0054           ; 
 0054           ;       /*SPI总线HC595芯片测试*/
 0054           ;       PORTB = 0xEF;
 0054 8FEE              ldi R24,239
 0056 88BB              out 0x18,R24
 0058                   .dbline 56
 0058           ;       delay_ms(3000);
 0058 08EB              ldi R16,3000
 005A 1BE0              ldi R17,11
 005C 0E940000          xcall _delay_ms
 0060                   .dbline 57
 0060           ;       SPI_MasterInit();                                       /*初始SPI接口*/
 0060 0E940000          xcall _SPI_MasterInit
 0064                   .dbline 58
 0064           ;       PORTB = 0xF0;                                           /*打开4位数码管*/
 0064 80EF              ldi R24,240
 0066 88BB              out 0x18,R24
 0068                   .dbline 59
 0068 2224              clr R2
 006A 2882              std y+0,R2
 006C 10C0              xjmp L15
 006E           L12:
 006E                   .dbline 59
 006E                   .dbline 60
 006E 80E0              ldi R24,<_disp
 0070 90E0              ldi R25,>_disp
 0072 E881              ldd R30,y+0
 0074 FF27              clr R31
 0076 E80F              add R30,R24
 0078 F91F              adc R31,R25
 007A 0081              ldd R16,z+0
 007C 0E940000          xcall _SPI_595_Out
 0080                   .dbline 61
 0080 04EF              ldi R16,500
 0082 11E0              ldi R17,1
 0084 0E940000          xcall _delay_ms
 0088                   .dbline 62
 0088           L13:
 0088                   .dbline 59
 0088 8881              ldd R24,y+0
 008A 8F5F              subi R24,255    ; addi 1
 008C 8883              std y+0,R24
 008E           L15:
 008E                   .dbline 59
 008E           ;       for (temp = 0; temp < 10; temp ++) {
 008E 8881              ldd R24,y+0
 0090 8A30              cpi R24,10
 0092 68F3              brlo L12
 0094                   .dbline 63
 0094           ;               SPI_595_Out(disp[temp]);                /*显示数据输出*/
 0094           ;               delay_ms(500);
 0094           ;               }
 0094           ;       SPCR = 0x00;                                            /*关闭SPI接口*/
 0094 2224              clr R2
 0096 2DB8              out 0xd,R2
 0098                   .dbline 66
 0098           ;       
 0098           ;       /*IIC总线24C02芯片测试*/
 0098           ;       PORTB = 0xDF;
 0098 8FED              ldi R24,223
 009A 88BB              out 0x18,R24
 009C                   .dbline 67
 009C           ;       delay_ms(3000);
 009C 08EB              ldi R16,3000
 009E 1BE0              ldi R17,11
 00A0 0E940000          xcall _delay_ms
 00A4                   .dbline 68
 00A4           ;       twi_write(0x08, 0x55);                          /*写入标志*/
 00A4 25E5              ldi R18,85
 00A6 08E0              ldi R16,8
 00A8 0E940000          xcall _twi_write
 00AC                   .dbline 69
 00AC           ;       delay_ms(10);
 00AC 0AE0              ldi R16,10
 00AE 10E0              ldi R17,0
 00B0 0E940000          xcall _delay_ms
 00B4                   .dbline 70
 00B4           ;       twi_read(0x08, &temp);                          /*读出标志*/
 00B4 9E01              movw R18,R28
 00B6 08E0              ldi R16,8
 00B8 0E940000          xcall _twi_read
 00BC                   .dbline 71
 00BC           ;       delay_ms(500);
 00BC 04EF              ldi R16,500
 00BE 11E0              ldi R17,1
 00C0 0E940000          xcall _delay_ms
 00C4                   .dbline 72
 00C4           ;       if (temp == 0x55) {                                     /*校验标志*/
 00C4 8881              ldd R24,y+0
 00C6 8535              cpi R24,85
 00C8 29F4              brne L16
 00CA                   .dbline 72
 00CA                   .dbline 73
 00CA           ;               beep(300);
 00CA 0CE2              ldi R16,300
 00CC 11E0              ldi R17,1
 00CE 0E940000          xcall _beep
 00D2                   .dbline 74
 00D2           ;               }
 00D2 04C0              xjmp L17
 00D4           L16:
 00D4                   .dbline 75
 00D4           ;       else {
 00D4                   .dbline 76
 00D4           ;               beep(1500);
 00D4 0CED              ldi R16,1500
 00D6 15E0              ldi R17,5
 00D8 0E940000          xcall _beep
 00DC                   .dbline 77
 00DC           ;               }
 00DC           L17:
 00DC                   .dbline 80
 00DC           ; 
 00DC           ;       /*DS302芯片测试*/
 00DC           ;       PORTB = 0xBF;
 00DC 8FEB              ldi R24,191
 00DE 88BB              out 0x18,R24
 00E0                   .dbline 81
 00E0           ;       delay_ms(1000);
 00E0 08EE              ldi R16,1000
 00E2 13E0              ldi R17,3
 00E4 0E940000          xcall _delay_ms
 00E8                   .dbline 82
 00E8           ;       ds1302_init();                                          /*初始化DS302*/
 00E8 0E940000          xcall _ds1302_init
 00EC                   .dbline 83
 00EC           ;       time_buf[5] = 0x55;
 00EC 85E5              ldi R24,85
 00EE 80930500          sts _time_buf+5,R24
 00F2                   .dbline 84
 00F2           ;       time_buf[6] = 0x00;
 00F2 2224              clr R2
 00F4 20920600          sts _time_buf+6,R2
 00F8                   .dbline 85
 00F8           ;       ds1302_write_time();                            /*写入标志*/
 00F8 0E940000          xcall _ds1302_write_time
 00FC                   .dbline 86
 00FC           ;       delay_ms(2000);
 00FC 00ED              ldi R16,2000
 00FE 17E0              ldi R17,7
 0100 0E940000          xcall _delay_ms
 0104                   .dbline 87
 0104           ;       ds1302_read_time();                                     /*读出标志*/
 0104 0E940000          xcall _ds1302_read_time
 0108                   .dbline 88
 0108           ;       if ((time_buf[5] == 0x55) && (time_buf[6] != 0x00)) {/*校验标志*/
 0108 80910500          lds R24,_time_buf+5
 010C 8535              cpi R24,85
 010E 49F4              brne L20
 0110 20900600          lds R2,_time_buf+6
 0114 2220              tst R2
 0116 29F0              breq L20
 0118                   .dbline 88
 0118                   .dbline 89
 0118           ;               beep(300);
 0118 0CE2              ldi R16,300
 011A 11E0              ldi R17,1
 011C 0E940000          xcall _beep
 0120                   .dbline 90
 0120           ;               }
 0120 04C0              xjmp L21
 0122           L20:
 0122                   .dbline 91
 0122           ;       else {
 0122                   .dbline 92
 0122           ;               beep(1500);
 0122 0CED              ldi R16,1500
 0124 15E0              ldi R17,5
 0126 0E940000          xcall _beep
 012A                   .dbline 93
 012A           ;               }
 012A           L21:
 012A                   .dbline 96
 012A           ; 
 012A           ;       /*串口测试*/
 012A           ;       PORTB = 0xF7;
 012A 87EF              ldi R24,247
 012C 88BB              out 0x18,R24
 012E                   .dbline 97
 012E           ;       delay_ms(3000);
 012E 08EB              ldi R16,3000
 0130 1BE0              ldi R17,11
 0132 0E940000          xcall _delay_ms
 0136                   .dbline 98
 0136           ;       Uart_Init();
 0136 0E940000          xcall _Uart_Init
 013A 08C0              xjmp L25
 013C           L24:
 013C                   .dbline 99
 013C                   .dbline 100
 013C 0E940000          xcall _Uart_Receive
 0140 0883              std y+0,R16
 0142                   .dbline 101
 0142 202E              mov R2,R16
 0144 2094              com R2
 0146 28BA              out 0x18,R2
 0148                   .dbline 102
 0148 0E940000          xcall _Uart_Transmit
 014C                   .dbline 103
 014C           L25:
 014C                   .dbline 99
 014C F7CF              xjmp L24
 014E           X0:
 014E                   .dbline -2
 014E           L1:
 014E 2196              adiw R28,1
 0150                   .dbline 0 ; func end
 0150 0895              ret
 0152                   .dbsym l temp 0 c
 0152                   .dbend

⌨️ 快捷键说明

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