📄 time01.lst
字号:
__start:
__text_start:
0014 E5CF LDI R28,0x5F
0015 E0D4 LDI R29,4
0016 BFCD OUT 0x3D,R28
0017 BFDE OUT 0x3E,R29
0018 51C0 SUBI R28,0x10
0019 40D0 SBCI R29,0
001A EA0A LDI R16,0xAA
001B 8308 STD Y+0,R16
001C 2400 CLR R0
001D E6E1 LDI R30,0x61
001E E0F0 LDI R31,0
001F E010 LDI R17,0
0020 36E1 CPI R30,0x61
0021 07F1 CPC R31,R17
0022 F011 BEQ 0x0025
0023 9201 ST R0,Z+
0024 CFFB RJMP 0x0020
0025 8300 STD Z+0,R16
0026 E2E6 LDI R30,0x26
0027 E0F0 LDI R31,0
0028 E6A0 LDI R26,0x60
0029 E0B0 LDI R27,0
002A E010 LDI R17,0
002B 32E7 CPI R30,0x27
002C 07F1 CPC R31,R17
002D F021 BEQ 0x0032
002E 95C8 LPM
002F 9631 ADIW R30,1
0030 920D ST R0,X+
0031 CFF9 RJMP 0x002B
0032 D001 RCALL _main
_exit:
0033 CFFF RJMP _exit
FILE: E:\ICCAVR编程学习\步进电机驱动\time01.c
(0001) /*AD转换需要隔段时间采样一次,用这个方法可以粗略实现1秒定时,
(0002) 我也时刚刚学习AVR 吧刚做的拿出来和新入门的朋友分享 或许有
(0003) 帮助。存在问题的地方还请朋友门多斧正。*/
(0004)
(0005) //***********************************
(0006) //函数功能:基准时间100MS 总计定时1S
(0007) //编译器类型及版本:ICCAVR 6.31
(0008)
(0009) /************************************************************************/
(0010)
(0011) #include<iom8v.h> //包含定义ATmega8寄存器的头文件
(0012) #include<macros.h> //包含一些常用的宏定义
(0013) #pragma interrupt_handler TIME0:10 //中断向量号码
(0014) char i=0; //调整累加基准定时次数的全局变量
(0015) //***********************************************************************/
(0016) //主函数
(0017) void main()
(0018) {TCCR0=0X05; //时钟1024分频
_main:
0034 E085 LDI R24,5
0035 BF83 OUT 0x33,R24
(0019) TCNT0=0X3A; //定时器计数初始值 100ms
0036 E38A LDI R24,0x3A
0037 BF82 OUT 0x32,R24
(0020) TIMSK=0X01; //允许定时器0中断
0038 E081 LDI R24,1
0039 BF89 OUT 0x39,R24
(0021) SEI(); //开全局中断
003A 9478 BSET 7
(0022) DDRB=0XFF;
003B EF8F LDI R24,0xFF
003C BB87 OUT 0x17,R24
(0023) DDRD=0XFF;
003D BB81 OUT 0x11,R24
(0024) PORTB=0Xff;
003E BB88 OUT 0x18,R24
(0025) PORTD=0XFF;
003F BB82 OUT 0x12,R24
0040 9508 RET
_TIME0:
0041 922A ST R2,-Y
0042 938A ST R24,-Y
0043 939A ST R25,-Y
0044 B62F IN R2,0x3F
0045 922A ST R2,-Y
(0026) }
(0027) //***********************************************************************/
(0028) //定时器中断函数
(0029) void TIME0()
(0030) {if(i<20) //i决定循环基准时间的次数
0046 91800060 LDS R24,i
0048 3184 CPI R24,0x14
0049 F440 BCC 0x0052
(0031) {TCNT0=0X3A; //重设初始值 100ms
004A E38A LDI R24,0x3A
004B BF82 OUT 0x32,R24
(0032) i++; //累加基准时间
004C 91800060 LDS R24,i
004E 5F8F SUBI R24,0xFF
004F 93800060 STS i,R24
(0033) }
0051 C007 RJMP 0x0059
(0034) else
(0035) {PORTD^=BIT(0); //翻转PD口电平
0052 E081 LDI R24,1
0053 B222 IN R2,0x12
0054 2628 EOR R2,R24
0055 BA22 OUT 0x12,R2
(0036) i=0; //定时全局变量恢复初始值
0056 2422 CLR R2
0057 92200060 STS i,R2
(0037) }
FILE: <library>
0059 9029 LD R2,Y+
005A BE2F OUT 0x3F,R2
005B 9199 LD R25,Y+
005C 9189 LD R24,Y+
005D 9029 LD R2,Y+
005E 9518 RETI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -