📄 main.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 + -