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

📄 main.lis

📁 用AVR单片机做的一些程序,包括跑马灯显示,PWM产生,ADC转换等
💻 LIS
字号:
                        .module main.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\ICCAVR\project\AVRMEG~3\icc\016-DS18B20-LED4\main.c
 0000                   .dbfunc e delay_ms _delay_ms fV
 0000           ;              b -> R20
 0000           ;              i -> R16,R17
                        .even
 0000           _delay_ms::
 0000 0E940000          xcall push_gset1
 0004                   .dbline -1
 0004                   .dbline 30
 0004           ; /*
 0004           ; 实验十六:
 0004           ; 
 0004           ;       DS18B20实验,动态LED数据管显示温度。
 0004           ;       1、AVR单片机读取DS18B20实验,并通过学习板上在LED数码管显示温度。
 0004           ;       2、晶振频率为内部1MHz。
 0004           ;       3、DS18B20由PA7口实现单总线访问,实现读取温度。
 0004           ;       4、低层驱动函数中带有中断保护,程序可直接用于商业产品中。
 0004           ;       5、LED数码管显示采用定时器中断方式,全中断驱动,不需要主程序管理,
 0004           ;               只要把要显示的内部放到显示缓存区就行了。
 0004           ;       6、进行此实验请插上SPI短路块。
 0004           ;       7、DS18B20的电源脚接到VCC及GND上面,数据线接到PF2口。
 0004           ; 
 0004           ;       AVR  mega128学习板
 0004           ;       AVR_AFA
 0004           ;       www.iccavr.com
 0004           ;       11:48 2007-10-170
 0004           ; */
 0004           ; 
 0004           ; #include "iom128v.h"                                                                  /*包含相关头文件*/
 0004           ; #include "ds1820.h"
 0004           ; #include "led4.h"
 0004           ; 
 0004           ; /*
 0004           ; 延时函数
 0004           ; 
 0004           ; 延时单位为:mS。
 0004           ; CPU频率为:1MHz。
 0004           ; */
 0004           ; void delay_ms(unsigned int i) {
 0004 05C0              xjmp L3
 0006           L2:
 0006                   .dbline 33
 0006           ; 
 0006           ;       unsigned char b;
 0006           ;       while (i --) {
 0006                   .dbline 34
 0006 41E0              ldi R20,1
 0008 01C0              xjmp L8
 000A           L5:
 000A                   .dbline 34
 000A           L6:
 000A                   .dbline 34
 000A 4395              inc R20
 000C           L8:
 000C                   .dbline 34
 000C 4423              tst R20
 000E E9F7              brne L5
 0010                   .dbline 35
 0010           L3:
 0010                   .dbline 33
 0010 1801              movw R2,R16
 0012 0150              subi R16,1
 0014 1040              sbci R17,0
 0016 2220              tst R2
 0018 B1F7              brne L2
 001A 3320              tst R3
 001C A1F7              brne L2
 001E           X0:
 001E                   .dbline -2
 001E           L1:
 001E 0E940000          xcall pop_gset1
 0022                   .dbline 0 ; func end
 0022 0895              ret
 0024                   .dbsym r b 20 c
 0024                   .dbsym r i 16 i
 0024                   .dbend
 0024                   .dbfunc e io_init _io_init fV
                        .even
 0024           _io_init::
 0024                   .dbline -1
 0024                   .dbline 39
 0024           ;               for (b = 1; b; b++);
 0024           ;               }
 0024           ; }
 0024           ; 
 0024           ; /*IO口初始化函数*/
 0024           ; void io_init(void) {
 0024                   .dbline 41
 0024           ; 
 0024           ;       DDRA = 0x00;                                                                            /*方向输入*/
 0024 2224              clr R2
 0026 2ABA              out 0x1a,R2
 0028                   .dbline 42
 0028           ;       PORTA = 0xFF;                                                                           /*打开上拉*/
 0028 8FEF              ldi R24,255
 002A 8BBB              out 0x1b,R24
 002C                   .dbline 43
 002C           ;       DDRB = 0xFF;                                                                            /*方向输出*/
 002C 87BB              out 0x17,R24
 002E                   .dbline 44
 002E           ;       PORTB = 0xFF;                                                                           /*输出高电平*/
 002E 88BB              out 0x18,R24
 0030                   .dbline 45
 0030           ;       DDRC = 0x00;                                                                            /*不用的IO口建议设置为输入带上拉*/
 0030 24BA              out 0x14,R2
 0032                   .dbline 46
 0032           ;       PORTC = 0xFF;
 0032 85BB              out 0x15,R24
 0034                   .dbline 47
 0034           ;       DDRD = 0x00;
 0034 21BA              out 0x11,R2
 0036                   .dbline 48
 0036           ;       PORTD = 0xFF;
 0036 82BB              out 0x12,R24
 0038                   .dbline 49
 0038           ;       DDRE = 0x00;
 0038 22B8              out 0x2,R2
 003A                   .dbline 50
 003A           ;       PORTE = 0xFF;
 003A 83B9              out 0x3,R24
 003C                   .dbline 51
 003C           ;       DDRF = 0x00;
 003C 20926100          sts 97,R2
 0040                   .dbline 52
 0040           ;       PORTF = 0xFF;
 0040 80936200          sts 98,R24
 0044                   .dbline 53
 0044           ;       DDRG = 0x00;
 0044 20926400          sts 100,R2
 0048                   .dbline 54
 0048           ;       PORTG = 0xFF;
 0048 80936500          sts 101,R24
 004C                   .dbline -2
 004C           L9:
 004C                   .dbline 0 ; func end
 004C 0895              ret
 004E                   .dbend
 004E                   .dbfunc e int_to_bcd _int_to_bcd fV
 004E           ;              i -> R20
 004E           ;           temp -> R22,R23
                        .even
 004E           _int_to_bcd::
 004E 0E940000          xcall push_gset2
 0052 B801              movw R22,R16
 0054                   .dbline -1
 0054                   .dbline 58
 0054           ; }
 0054           ; 
 0054           ; /*十六进制转十进制函数*/
 0054           ; void int_to_bcd(unsigned int temp) { 
 0054                   .dbline 61
 0054 4427              clr R20
 0056 13C0              xjmp L14
 0058           L11:
 0058                   .dbline 61
 0058                   .dbline 62
 0058 2AE0              ldi R18,10
 005A 30E0              ldi R19,0
 005C 8B01              movw R16,R22
 005E 0E940000          xcall mod16u
 0062 80E0              ldi R24,<_led_buf
 0064 90E0              ldi R25,>_led_buf
 0066 E42F              mov R30,R20
 0068 FF27              clr R31
 006A E80F              add R30,R24
 006C F91F              adc R31,R25
 006E 0083              std z+0,R16
 0070                   .dbline 63
 0070 2AE0              ldi R18,10
 0072 30E0              ldi R19,0
 0074 8B01              movw R16,R22
 0076 0E940000          xcall div16u
 007A B801              movw R22,R16
 007C                   .dbline 64
 007C           L12:
 007C                   .dbline 61
 007C 4395              inc R20
 007E           L14:
 007E                   .dbline 61
 007E           ;       unsigned char i;
 007E           ; 
 007E           ;       for (i = 0; i < 4; i++) {
 007E 4430              cpi R20,4
 0080 58F3              brlo L11
 0082                   .dbline -2
 0082           L10:
 0082 0E940000          xcall pop_gset2
 0086                   .dbline 0 ; func end
 0086 0895              ret
 0088                   .dbsym r i 20 c
 0088                   .dbsym r temp 22 i
 0088                   .dbend
 0088                   .dbfunc e main _main fV
 0088           ;              i -> R20,R21
                        .even
 0088           _main::
 0088                   .dbline -1
 0088                   .dbline 75
 0088           ;       led_buf[i] = temp % 10;                                                         /*提取当前变量最低位*/
 0088           ;       temp = temp / 10;                                                                       /*去掉当前最低位值*/
 0088           ;     }
 0088           ; }
 0088           ; 
 0088           ; /*
 0088           ; 主函数
 0088           ; 
 0088           ; 实现系统的初始化操作。
 0088           ; 周期性读取温度。
 0088           ; 然后放入显示缓存区。
 0088           ; 上面两个任务之间完全独立运行,方便移植。
 0088           ; */
 0088           ; void main(void) {
 0088                   .dbline 79
 0088           ; 
 0088           ;       unsigned int i;
 0088           ; 
 0088           ;       io_init();
 0088 CDDF              xcall _io_init
 008A                   .dbline 80
 008A           ;       delay_ms(200);
 008A 08EC              ldi R16,200
 008C 10E0              ldi R17,0
 008E B8DF              xcall _delay_ms
 0090                   .dbline 81
 0090           ;       ds1820_reset();                                                                         /*复位D18B20*/
 0090 0E940000          xcall _ds1820_reset
 0094                   .dbline 82
 0094           ;       disp_init();                                                                            /*启动显示任务*/
 0094 0E940000          xcall _disp_init
 0098                   .dbline 83
 0098           ;       led_buf[4] = 1;                                                                         /*小数点位置*/
 0098 81E0              ldi R24,1
 009A 80930400          sts _led_buf+4,R24
 009E 18C0              xjmp L18
 00A0           L17:
 00A0                   .dbline 84
 00A0                   .dbline 85
 00A0 0E940000          xcall _ds1820_start
 00A4                   .dbline 86
 00A4 00ED              ldi R16,2000
 00A6 17E0              ldi R17,7
 00A8 ABDF              xcall _delay_ms
 00AA                   .dbline 87
 00AA 0E940000          xcall _ds1820_read_temp
 00AE A801              movw R20,R16
 00B0                   .dbline 88
 00B0 0AE0              ldi R16,10
 00B2 10E0              ldi R17,0
 00B4 9A01              movw R18,R20
 00B6 0E940000          xcall empy16s
 00BA A801              movw R20,R16
 00BC 5695              lsr R21
 00BE 4795              ror R20
 00C0 5695              lsr R21
 00C2 4795              ror R20
 00C4 5695              lsr R21
 00C6 4795              ror R20
 00C8 5695              lsr R21
 00CA 4795              ror R20
 00CC                   .dbline 89
 00CC 8A01              movw R16,R20
 00CE BFDF              xcall _int_to_bcd
 00D0                   .dbline 90
 00D0           L18:
 00D0                   .dbline 84
 00D0 E7CF              xjmp L17
 00D2           X1:
 00D2                   .dbline -2
 00D2           L15:
 00D2                   .dbline 0 ; func end
 00D2 0895              ret
 00D4                   .dbsym r i 20 i
 00D4                   .dbend

⌨️ 快捷键说明

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