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

📄 delay_1s.lst

📁 一个关于AVR单片机的例程
💻 LST
字号:
__start:
__text_start:
    0033 E5CF      LDI	R28,0x5F
    0034 E0D4      LDI	R29,4
    0035 BFCD      OUT	0x3D,R28
    0036 BFDE      OUT	0x3E,R29
    0037 51C0      SUBI	R28,0x10
    0038 40D0      SBCI	R29,0
    0039 EA0A      LDI	R16,0xAA
    003A 8308      STD	Y+0,R16
    003B 2400      CLR	R0
    003C E6E0      LDI	R30,0x60
    003D E0F0      LDI	R31,0
    003E E010      LDI	R17,0
    003F 36E1      CPI	R30,0x61
    0040 07F1      CPC	R31,R17
    0041 F011      BEQ	0x0044
    0042 9201      ST	R0,Z+
    0043 CFFB      RJMP	0x003F
    0044 8300      STD	Z+0,R16
    0045 E6E5      LDI	R30,0x65
    0046 E0F0      LDI	R31,0
    0047 E6A0      LDI	R26,0x60
    0048 E0B0      LDI	R27,0
    0049 E010      LDI	R17,0
    004A 36E5      CPI	R30,0x65
    004B 07F1      CPC	R31,R17
    004C F021      BEQ	0x0051
    004D 95C8      LPM
    004E 9631      ADIW	R30,1
    004F 920D      ST	R0,X+
    0050 CFF9      RJMP	0x004A
    0051 940E009A  CALL	_main
_exit:
    0053 CFFF      RJMP	_exit
FILE: E:\avr\2.2.3\main.c
(0001) // ICC-AVR application builder : 2007-5-28 22:03:35
(0002) // Target : M16
(0003) // Crystal: 7.3728Mhz
(0004) // 连接:接好电源和晶振的跳线
(0005) // 7断数码管的ABCD接VCC,a~dp接PA0~PA7
(0006) #include <iom16v.h>
(0007) #include <macros.h>
(0008) 
(0009) const unsigned char seg7_data[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//0~F and "shut"
(0010) volatile  unsigned char i; //在中断中会变化的变量,加volatile限定词定义
(0011) 
(0012) void port_init(void)
(0013) {
(0014)  PORTA = 0x00;
_port_init:
    0054 2422      CLR	R2
    0055 BA2B      OUT	0x1B,R2
(0015)  DDRA  = 0xFF;
    0056 EF8F      LDI	R24,0xFF
    0057 BB8A      OUT	0x1A,R24
(0016)  PORTB = 0x00;
    0058 BA28      OUT	0x18,R2
(0017)  DDRB  = 0x00;
    0059 BA27      OUT	0x17,R2
(0018)  PORTC = 0x00; //m103 output only
    005A BA25      OUT	0x15,R2
(0019)  DDRC  = 0x00;
    005B BA24      OUT	0x14,R2
(0020)  PORTD = 0x00;
    005C BA22      OUT	0x12,R2
(0021)  DDRD  = 0x00;
    005D BA21      OUT	0x11,R2
    005E 9508      RET
(0022) }
(0023) 
(0024) //TIMER1 initialize - prescale:256
(0025) // WGM: 0) Normal, TOP=0xFFFF
(0026) // desired value: 1Sec
(0027) // actual value:  1.000Sec (0.0%)
(0028) void timer1_init(void)
(0029) {
(0030)  TCCR1B = 0x00; //stop
_timer1_init:
    005F 2422      CLR	R2
    0060 BC2E      OUT	0x2E,R2
(0031)  TCNT1H = 0x8F; //setup
    0061 E88F      LDI	R24,0x8F
    0062 BD8D      OUT	0x2D,R24
(0032)  TCNT1L = 0x81;
    0063 E881      LDI	R24,0x81
    0064 BD8C      OUT	0x2C,R24
(0033)  OCR1AH = 0x70;
    0065 E780      LDI	R24,0x70
    0066 BD8B      OUT	0x2B,R24
(0034)  OCR1AL = 0x7F;
    0067 E78F      LDI	R24,0x7F
    0068 BD8A      OUT	0x2A,R24
(0035)  OCR1BH = 0x70;
    0069 E780      LDI	R24,0x70
    006A BD89      OUT	0x29,R24
(0036)  OCR1BL = 0x7F;
    006B E78F      LDI	R24,0x7F
    006C BD88      OUT	0x28,R24
(0037)  ICR1H  = 0x70;
    006D E780      LDI	R24,0x70
    006E BD87      OUT	0x27,R24
(0038)  ICR1L  = 0x7F;
    006F E78F      LDI	R24,0x7F
    0070 BD86      OUT	0x26,R24
(0039)  TCCR1A = 0x00;
    0071 BC2F      OUT	0x2F,R2
(0040)  TCCR1B = 0x04; //start Timer
    0072 E084      LDI	R24,4
    0073 BD8E      OUT	0x2E,R24
    0074 9508      RET
_timer1_ovf_isr:
    0075 922A      ST	R2,-Y
    0076 938A      ST	R24,-Y
    0077 939A      ST	R25,-Y
    0078 B62F      IN	R2,0x3F
    0079 922A      ST	R2,-Y
(0041) }
(0042) 
(0043) #pragma interrupt_handler timer1_ovf_isr:iv_TIMER1_OVF
(0044) void timer1_ovf_isr(void)
(0045) {
(0046)  //TIMER1 has overflowed
(0047)  TCNT1H = 0x8F; //reload counter high value
    007A E88F      LDI	R24,0x8F
    007B BD8D      OUT	0x2D,R24
(0048)  TCNT1L = 0x81; //reload counter low value
    007C E881      LDI	R24,0x81
    007D BD8C      OUT	0x2C,R24
(0049)  i++;   //在文件开始的定义,volatile unsigned char i;
    007E 91800060  LDS	R24,i
    0080 5F8F      SUBI	R24,0xFF
    0081 93800060  STS	i,R24
(0050)  if(i==10) i=0;
    0083 91800060  LDS	R24,i
    0085 308A      CPI	R24,0xA
    0086 F419      BNE	0x008A
    0087 2422      CLR	R2
    0088 92200060  STS	i,R2
    008A 9029      LD	R2,Y+
    008B BE2F      OUT	0x3F,R2
    008C 9199      LD	R25,Y+
    008D 9189      LD	R24,Y+
    008E 9029      LD	R2,Y+
    008F 9518      RETI
(0051) }
(0052) 
(0053) //call this routine to initialize all peripherals
(0054) void init_devices(void)
(0055) {
(0056)  //stop errant interrupts until set up
(0057)  CLI(); //disable all interrupts
_init_devices:
    0090 94F8      BCLR	7
(0058)  port_init();
    0091 DFC2      RCALL	_port_init
(0059)  timer1_init();
    0092 DFCC      RCALL	_timer1_init
(0060) 
(0061)  MCUCR = 0x00;
    0093 2422      CLR	R2
    0094 BE25      OUT	0x35,R2
(0062)  GICR  = 0x00;
    0095 BE2B      OUT	0x3B,R2
(0063)  TIMSK = 0x04; //timer interrupt sources ,这里允许了timer1溢出中断。
    0096 E084      LDI	R24,4
    0097 BF89      OUT	0x39,R24
(0064)  SEI(); //re-enable interrupts
    0098 9478      BSET	7
    0099 9508      RET
(0065)  //all peripherals are now initialized
(0066) }
(0067) 
(0068) void main(void)
(0069) {
(0070)  init_devices(); //初始化,包含了定时器的初始化
_main:
    009A DFF5      RCALL	_init_devices
    009B C009      RJMP	0x00A5
(0071)  while(1)
(0072)  {
(0073)   PORTA=seg7_data[i]; //一直刷新显示计时
FILE: <library>
    009C E584      LDI	R24,0x54
    009D E090      LDI	R25,0
    009E 91E00060  LDS	R30,i
    00A0 27FF      CLR	R31
    00A1 0FE8      ADD	R30,R24
    00A2 1FF9      ADC	R31,R25
    00A3 91E4      LPM	R30,0(Z)
    00A4 BBEB      OUT	0x1B,R30
    00A5 CFF6      RJMP	0x009C
    00A6 9508      RET

⌨️ 快捷键说明

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