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

📄 main.lis

📁 很实用的单片机例程
💻 LIS
字号:
                        .module main.c
                        .area text(rom, con, rel)
 0000                   .dbfile ..\1LED~1\main.c
 0000                   .dbfile C:\iccv7avr\include\HJ-1G_AVR.H
 0000                   .dbfunc e Delayus _Delayus fV
 0000           ;              i -> R20,R21
 0000           ;             US -> R10,R11
                        .even
 0000           _Delayus::
 0000 0E940000          xcall push_xgset300C
 0004 5801              movw R10,R16
 0006                   .dbline -1
 0006                   .dbline 28
 0006           ; /*******************************************
 0006           ;   文件:HJ-1G_AVR.H
 0006           ;   功能:定义一些AVR_HJ-2G开发板上应用程序用到的常量
 0006           ; /******************************************/
 0006           ; 
 0006           ; #include <iom16v.h>                   //包含型号头文件
 0006           ; #include <macros.h>                   //包含"位"操作头文件
 0006           ; 
 0006           ; /******************数据类型宏定义******************/
 0006           ; #define uchar unsigned char
 0006           ; #define uint unsigned int
 0006           ; 
 0006           ; /******************数码管和LED常量******************/
 0006           ; #define LEDLK PA2     //LED锁存器控制端
 0006           ; #define SEGLK PA3     //数码管段选锁存器控制端
 0006           ; #define BITLK PA4     //数码管位选锁存器控制端
 0006           ; 
 0006           ; #define TRUE 1
 0006           ; #define FALSE 0
 0006           ; #define ALLLED 0XFF
 0006           ; /*******************************************
 0006           ; 函数名称: Delayus
 0006           ; 功    能: 延时指定微秒(8M晶振)
 0006           ; 参    数: US--延时的微秒数(大约,不是很精确,MS越大越准确)
 0006           ; 返回值  : 无
 0006           ; /********************************************/
 0006           ; void Delayus(uint US)           
 0006           ; {
 0006                   .dbline 30
 0006           ;  uint i;
 0006           ;  US=US*5/4;                    //5/4是在8MHz晶振下,通过软件仿真反复实验得到的数值
 0006 05E0              ldi R16,5
 0008 10E0              ldi R17,0
 000A 9501              movw R18,R10
 000C 0E940000          xcall empy16s
 0010 5801              movw R10,R16
 0012 B694              lsr R11
 0014 A794              ror R10
 0016 B694              lsr R11
 0018 A794              ror R10
 001A                   .dbline 31
 001A           ;  for( i=0;i<US;i++); 
 001A 4427              clr R20
 001C 5527              clr R21
 001E 02C0              xjmp L5
 0020           L2:
 0020                   .dbline 31
 0020           L3:
 0020                   .dbline 31
 0020 4F5F              subi R20,255  ; offset = 1
 0022 5F4F              sbci R21,255
 0024           L5:
 0024                   .dbline 31
 0024 4A15              cp R20,R10
 0026 5B05              cpc R21,R11
 0028 D8F3              brlo L2
 002A           X0:
 002A                   .dbline -2
 002A           L1:
 002A                   .dbline 0 ; func end
 002A 0C940000          xjmp pop_xgset300C
 002E                   .dbsym r i 20 i
 002E                   .dbsym r US 10 i
 002E                   .dbend
 002E                   .dbfunc e Delayms _Delayms fV
 002E           ;              i -> R20,R21
 002E           ;              j -> R22,R23
 002E           ;             MS -> R16,R17
                        .even
 002E           _Delayms::
 002E 0E940000          xcall push_xgsetF000
 0032                   .dbline -1
 0032                   .dbline 40
 0032           ; }
 0032           ; /*******************************************
 0032           ; 函数名称: Delayms
 0032           ; 功    能: 延时指定毫秒(8M晶振)
 0032           ; 参    数: MS--延时的毫秒数
 0032           ; 返回值  : 无
 0032           ; /********************************************/
 0032           ; void Delayms(uint MS)           
 0032           ; {
 0032                   .dbline 42
 0032           ;  uint i,j;
 0032           ;  for( i=0;i<MS;i++)
 0032 4427              clr R20
 0034 5527              clr R21
 0036 0BC0              xjmp L10
 0038           L7:
 0038                   .dbline 43
 0038           ;  for(j=0;j<1141;j++); //1141是在8MHz晶振下,通过软件仿真反复实验得到的数值
 0038 6627              clr R22
 003A 7727              clr R23
 003C 02C0              xjmp L14
 003E           L11:
 003E                   .dbline 43
 003E           L12:
 003E                   .dbline 43
 003E 6F5F              subi R22,255  ; offset = 1
 0040 7F4F              sbci R23,255
 0042           L14:
 0042                   .dbline 43
 0042 6537              cpi R22,117
 0044 E4E0              ldi R30,4
 0046 7E07              cpc R23,R30
 0048 D0F3              brlo L11
 004A           X1:
 004A           L8:
 004A                   .dbline 42
 004A 4F5F              subi R20,255  ; offset = 1
 004C 5F4F              sbci R21,255
 004E           L10:
 004E                   .dbline 42
 004E 4017              cp R20,R16
 0050 5107              cpc R21,R17
 0052 90F3              brlo L7
 0054           X2:
 0054                   .dbline -2
 0054           L6:
 0054                   .dbline 0 ; func end
 0054 0C940000          xjmp pop_xgsetF000
 0058                   .dbsym r i 20 i
 0058                   .dbsym r j 22 i
 0058                   .dbsym r MS 16 i
 0058                   .dbend
 0058                   .dbfunc e Board_init _Board_init fV
                        .even
 0058           _Board_init::
 0058                   .dbline -1
 0058                   .dbline 52
 0058           ; }
 0058           ; /*******************************************
 0058           ; 函数名称: Board_init
 0058           ; 功    能: 初始化实验板,关闭全部功能
 0058           ; 参    数: 无
 0058           ; 返回值  : 无
 0058           ; /********************************************/
 0058           ; void Board_init(void)
 0058           ; {
 0058                   .dbline 53
 0058           ;       DDRA=0xFF;      //将四个IO口全部配置为输出
 0058 8FEF              ldi R24,255
 005A 8ABB              out 0x1a,R24
 005C                   .dbline 54
 005C           ;       DDRB=0xFF;
 005C 87BB              out 0x17,R24
 005E                   .dbline 55
 005E           ;       DDRC=0xFF;
 005E 84BB              out 0x14,R24
 0060                   .dbline 56
 0060           ;       DDRD=0xFF;
 0060 81BB              out 0x11,R24
 0062                   .dbline 58
 0062           ; 
 0062           ;       SPCR=0x00;      //还原SPI口,使其为正常端口     
 0062 2224              clr R2
 0064 2DB8              out 0xd,R2
 0066                   .dbline 60
 0066           ; 
 0066           ;       PORTA|=BIT(PA6);//(BEEP)关闭蜂鸣器
 0066 DE9A              sbi 0x1b,6
 0068                   .dbline 61
 0068           ;       PORTC&=~BIT(PC6);         //(RELAY)初始化继电器为常闭连接状态   
 0068 AE98              cbi 0x15,6
 006A                   .dbline 62
 006A           ;       PORTA&=~BIT(PA1);       //关闭SPI总线DA
 006A D998              cbi 0x1b,1
 006C                   .dbline 63
 006C           ;       PORTB=0xFF;     //关闭LED
 006C 88BB              out 0x18,R24
 006E                   .dbline 64
 006E           ;       PORTA|=BIT(LEDLK);      //锁存数据,使LED熄灭
 006E DA9A              sbi 0x1b,2
 0070                   .dbline 65
 0070           ;       Delayus(5);             
 0070 05E0              ldi R16,5
 0072 10E0              ldi R17,0
 0074 C5DF              xcall _Delayus
 0076                   .dbline 66
 0076           ;       PORTA&=~BIT(LEDLK);
 0076 DA98              cbi 0x1b,2
 0078                   .dbline 68
 0078           ;       
 0078           ;       PORTB=0x00;        //输出段选
 0078 2224              clr R2
 007A 28BA              out 0x18,R2
 007C                   .dbline 69
 007C           ;       PORTA|=BIT(SEGLK);                
 007C DB9A              sbi 0x1b,3
 007E                   .dbline 70
 007E           ;       Delayus(50);                      
 007E 02E3              ldi R16,50
 0080 10E0              ldi R17,0
 0082 BEDF              xcall _Delayus
 0084                   .dbline 71
 0084           ;       PORTA&=~BIT(SEGLK);         
 0084 DB98              cbi 0x1b,3
 0086                   .dbline 73
 0086           ;       
 0086           ;       PORTB=0xFF;        //输出位选
 0086 8FEF              ldi R24,255
 0088 88BB              out 0x18,R24
 008A                   .dbline 74
 008A           ;       PORTA|=BIT(BITLK);                 
 008A DC9A              sbi 0x1b,4
 008C                   .dbline 75
 008C           ;       Delayus(50);                               
 008C 02E3              ldi R16,50
 008E 10E0              ldi R17,0
 0090 B7DF              xcall _Delayus
 0092                   .dbline 76
 0092           ;       PORTA&=~BIT(BITLK);        
 0092 DC98              cbi 0x1b,4
 0094                   .dbline 78
 0094           ;       
 0094           ;       PORTD=0xFF;
 0094 8FEF              ldi R24,255
 0096 82BB              out 0x12,R24
 0098                   .dbline 79
 0098           ;       PORTA|=BIT(PA7);
 0098 DF9A              sbi 0x1b,7
 009A                   .dbline 80
 009A           ;       Delayus(50);
 009A 02E3              ldi R16,50
 009C 10E0              ldi R17,0
 009E B0DF              xcall _Delayus
 00A0                   .dbline 81
 00A0           ;       PORTA&=~BIT(PA7);
 00A0 DF98              cbi 0x1b,7
 00A2                   .dbline -2
 00A2           L15:
 00A2                   .dbline 0 ; func end
 00A2 0895              ret
 00A4                   .dbend
 00A4                   .dbfile C:\HJ-1G-AVR\1LED~1\main.c
 00A4                   .dbfunc e main _main fV
                        .even
 00A4           _main::
 00A4                   .dbline -1
 00A4                   .dbline 11
 00A4           ; //开发环境:HJ-1G HJ-3G 开发板+AVR增强包套装
 00A4           ; //芯片:ATMEGA16A
 00A4           ; //编译器:ICCV7
 00A4           ; //编写:慧净电子
 00A4           ; //网址:WWW.HLMCU.COM   QQ:121350852
 00A4           ; //点亮HJ-1G/3G开发板上的1个LED灯
 00A4           ; #include "iom16v.h"
 00A4           ; #include "macros.h"
 00A4           ; #include <HJ-1G_AVR.H>                //包含自定义常量头文件
 00A4           ; void main()
 00A4           ; {
 00A4                   .dbline 15
 00A4           ;        //DDRA=DDRA|BIT(2);            //PA2为输出状态
 00A4           ;        //PORTA=PORTA|BIT(2);    //PA2输出高电平
 00A4           ;        
 00A4           ;        DDRB=0xff;                               //PB0~7为输出状态
 00A4 8FEF              ldi R24,255
 00A6 87BB              out 0x17,R24
 00A8 0AC0              xjmp L18
 00AA           L17:
 00AA                   .dbline 18
 00AA           ; 
 00AA           ;        while(1)                               //程式停止。
 00AA           ;        {
 00AA                   .dbline 19
 00AA           ;               PORTB=0x00;                             //PB0为输出低电平,而其余为高电平,亦即打亮LED0         
 00AA 2224              clr R2
 00AC 28BA              out 0x18,R2
 00AE                   .dbline 21
 00AE           ;               //PORTB&=~BIT(0)                //等价
 00AE           ;           Delayms(50);
 00AE 02E3              ldi R16,50
 00B0 10E0              ldi R17,0
 00B2 BDDF              xcall _Delayms
 00B4                   .dbline 22
 00B4           ;           PORTB=0xff; 
 00B4 8FEF              ldi R24,255
 00B6 88BB              out 0x18,R24
 00B8                   .dbline 23
 00B8           ;               Delayms(50);
 00B8 02E3              ldi R16,50
 00BA 10E0              ldi R17,0
 00BC B8DF              xcall _Delayms
 00BE                   .dbline 24
 00BE           ;        }
 00BE           L18:
 00BE                   .dbline 17
 00BE F5CF              xjmp L17
 00C0           X3:
 00C0                   .dbline -2
 00C0           L16:
 00C0                   .dbline 0 ; func end
 00C0 0895              ret
 00C2                   .dbend
 00C2           ; }

⌨️ 快捷键说明

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