📄 灯亮.lis
字号:
.module _灯亮.c
.area text(rom, con, rel)
0000 .dbfile 灯亮.c
0000 .dbfunc e main _main fV
.even
0000 _main::
0000 .dbline -1
0000 .dbline 6
0000 ; #include <iom16v.h> //和单片机类型相对应的头文件,选择Atmega8做实验;
0000 ; #include <macros.h>
0000 ; void delay_1ms(void); //函数声明,本实验中会用到这两个函数
0000 ; void delay_nms(unsigned int n);
0000 ; void main(void) //主函数
0000 ; {
0000 .dbline 7
0000 ; OSCCAL=0X9E;//系统时钟校准,不同的芯片和不同的频率,
0000 8EE9 ldi R24,158
0002 81BF out 0x31,R24
0004 .dbline 8
0004 ; DDRC=0B00000011; //定义B口的PB0、PB1为输出口
0004 83E0 ldi R24,3
0006 84BB out 0x14,R24
0008 .dbline 9
0008 ; PORTC=0B00000001; //PB0口输出高电平,PB1口输出低电平,绿灯亮
0008 81E0 ldi R24,1
000A 85BB out 0x15,R24
000C .dbline 10
000C ; delay_nms(5000); //延时5秒
000C 08E8 ldi R16,5000
000E 13E1 ldi R17,19
0010 19D0 xcall _delay_nms
0012 .dbline 11
0012 ; PORTC=0B00000010; //PB1口输出高电平,PB0口输出低电平,关闭绿灯,红灯亮
0012 82E0 ldi R24,2
0014 85BB out 0x15,R24
0016 .dbline 12
0016 ; delay_nms(5000); //延时5秒
0016 08E8 ldi R16,5000
0018 13E1 ldi R17,19
001A 14D0 xcall _delay_nms
001C 07C0 xjmp L3
001E L2:
001E .dbline 14
001E .dbline 15
001E 83E0 ldi R24,3
0020 25B2 in R2,0x15
0022 2826 eor R2,R24
0024 25BA out 0x15,R2
0026 .dbline 16
0026 08EE ldi R16,1000
0028 13E0 ldi R17,3
002A 0CD0 xcall _delay_nms
002C .dbline 17
002C L3:
002C .dbline 13
002C F8CF xjmp L2
002E X0:
002E .dbline -2
002E L1:
002E .dbline 0 ; func end
002E 0895 ret
0030 .dbend
0030 .dbfunc e delay_1ms _delay_1ms fV
0030 ; i -> R16,R17
.even
0030 _delay_1ms::
0030 .dbline -1
0030 .dbline 20
0030 ; while(1) //程序一直执行该循环
0030 ; {
0030 ; PORTC^=0B00000011; //翻转PB0和PB1口
0030 ; delay_nms(1000);
0030 ; }
0030 ; }
0030 ; void delay_1ms(void)//1ms延时函数
0030 ; {
0030 .dbline 22
0030 ; unsigned int i;
0030 ; for (i=0;i<150;i++)
0030 0027 clr R16
0032 1127 clr R17
0034 02C0 xjmp L9
0036 L6:
0036 .dbline 23
0036 .dbline 24
0036 L7:
0036 .dbline 22
0036 0F5F subi R16,255 ; offset = 1
0038 1F4F sbci R17,255
003A L9:
003A .dbline 22
003A 0639 cpi R16,150
003C E0E0 ldi R30,0
003E 1E07 cpc R17,R30
0040 D0F3 brlo L6
0042 .dbline -2
0042 L5:
0042 .dbline 0 ; func end
0042 0895 ret
0044 .dbsym r i 16 i
0044 .dbend
0044 .dbfunc e delay_nms _delay_nms fV
0044 ; i -> R20,R21
0044 ; n -> R22,R23
.even
0044 _delay_nms::
0044 0E940000 xcall push_gset2
0048 B801 movw R22,R16
004A .dbline -1
004A .dbline 27
004A ; {
004A ; }
004A ; }
004A ; void delay_nms(unsigned int n)//延时n毫秒
004A ; {
004A .dbline 29
004A ; unsigned int i;
004A ; for (i=0;i<n;i++)//执行n次1毫秒延时
004A 4427 clr R20
004C 5527 clr R21
004E 03C0 xjmp L14
0050 L11:
0050 .dbline 30
0050 EFDF xcall _delay_1ms
0052 L12:
0052 .dbline 29
0052 4F5F subi R20,255 ; offset = 1
0054 5F4F sbci R21,255
0056 L14:
0056 .dbline 29
0056 4617 cp R20,R22
0058 5707 cpc R21,R23
005A D0F3 brlo L11
005C .dbline -2
005C L10:
005C 0E940000 xcall pop_gset2
0060 .dbline 0 ; func end
0060 0895 ret
0062 .dbsym r i 20 i
0062 .dbsym r n 22 i
0062 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -