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

📄 smg.lst

📁 是一款开发板的外围电路试验程序(附有原理图)
💻 LST
字号:
__start:
__text_start:
    0035 E5CF      LDI	R28,0x5F
    0036 E0D4      LDI	R29,4
    0037 BFCD      OUT	0x3D,R28
    0038 BFDE      OUT	0x3E,R29
    0039 51C0      SUBI	R28,0x10
    003A 40D0      SBCI	R29,0
    003B EA0A      LDI	R16,0xAA
    003C 8308      STD	Y+0,R16
    003D 2400      CLR	R0
    003E E7E6      LDI	R30,0x76
    003F E0F0      LDI	R31,0
    0040 E010      LDI	R17,0
    0041 37E6      CPI	R30,0x76
    0042 07F1      CPC	R31,R17
    0043 F011      BEQ	0x0046
    0044 9201      ST	R0,Z+
    0045 CFFB      RJMP	0x0041
    0046 8300      STD	Z+0,R16
    0047 E5E4      LDI	R30,0x54
    0048 E0F0      LDI	R31,0
    0049 E6A0      LDI	R26,0x60
    004A E0B0      LDI	R27,0
    004B E010      LDI	R17,0
    004C 36EA      CPI	R30,0x6A
    004D 07F1      CPC	R31,R17
    004E F021      BEQ	0x0053
    004F 95C8      LPM
    0050 9631      ADIW	R30,1
    0051 920D      ST	R0,X+
    0052 CFF9      RJMP	0x004C
    0053 940E00AE  CALL	_main
_exit:
    0055 CFFF      RJMP	_exit
FILE: F:\最新\数码管\main.c
(0001) //ICC-AVR application builder : 2007-6-11 20:45:01
(0002) // Target : M16
(0003) // Crystal: 4.0000Mhz
(0004) //使用了PA口和PB口,其中PA口作为数据口,PB口作为地址口。
(0005) //该程序使用了定时器T0,采用循环扫描方式显示8位数据
(0006) #include "seg7.h"
(0007) #include <iom16v.h>
(0008) #include <macros.h>
(0009) 
(0010) unsigned char addr=1,ldata = 0,jdata = 0,i=0;
(0011) 
(0012) unsigned char kdata[] = {1,2,3,4,5,6,7,8};
(0013) void port_init(void)
(0014) {
(0015)  PORTA = 0xFF;
_port_init:
    0056 EF8F      LDI	R24,0xFF
    0057 BB8B      OUT	0x1B,R24
(0016)  DDRA  = 0xFF;
    0058 BB8A      OUT	0x1A,R24
(0017)  PORTB = 0xFF;
    0059 BB88      OUT	0x18,R24
(0018)  DDRB  = 0xFF;
    005A BB87      OUT	0x17,R24
(0019)  PORTC = 0x00; //m103 output only
    005B 2422      CLR	R2
    005C BA25      OUT	0x15,R2
(0020)  DDRC  = 0x00;
    005D BA24      OUT	0x14,R2
(0021)  PORTD = 0x00;
    005E BA22      OUT	0x12,R2
(0022)  DDRD  = 0x00;
    005F BA21      OUT	0x11,R2
    0060 9508      RET
(0023) }
(0024) 
(0025) //TIMER0 initialize - prescale:64
(0026) // WGM: Normal
(0027) // desired value: 1KHz
(0028) // actual value:  1.008KHz (0.8%)
(0029) void timer0_init(void)
(0030) {
(0031)  TCCR0 = 0x00; //stop
_timer0_init:
    0061 2422      CLR	R2
    0062 BE23      OUT	0x33,R2
(0032)  TCNT0 = 0xC2; //set count
    0063 EC82      LDI	R24,0xC2
    0064 BF82      OUT	0x32,R24
(0033)  OCR0  = 0x3E;  //set compare
    0065 E38E      LDI	R24,0x3E
    0066 BF8C      OUT	0x3C,R24
(0034)  TCCR0 = 0x03; //start timer
    0067 E083      LDI	R24,3
    0068 BF83      OUT	0x33,R24
    0069 9508      RET
_timer0_ovf_isr:
    006A 922A      ST	R2,-Y
    006B 938A      ST	R24,-Y
    006C 939A      ST	R25,-Y
    006D 93EA      ST	R30,-Y
    006E 93FA      ST	R31,-Y
    006F B62F      IN	R2,0x3F
    0070 922A      ST	R2,-Y
(0035) }
(0036) 
(0037) #pragma interrupt_handler timer0_ovf_isr:10
(0038) void timer0_ovf_isr(void)
(0039) {
(0040)  TCNT0 = 0xC2; //reload counter value
    0071 EC82      LDI	R24,0xC2
    0072 BF82      OUT	0x32,R24
(0041)  PORTB = addr; 
    0073 9020006A  LDS	R2,addr
    0075 BA28      OUT	0x18,R2
(0042)  jdata = kdata[i];
    0076 E68E      LDI	R24,0x6E
    0077 E090      LDI	R25,0
    0078 91E0006D  LDS	R30,i
    007A 27FF      CLR	R31
    007B 0FE8      ADD	R30,R24
    007C 1FF9      ADC	R31,R25
    007D 8020      LDD	R2,Z+0
    007E 9220006C  STS	jdata,R2
(0043)  ldata = seg7[jdata];
    0080 E680      LDI	R24,0x60
    0081 E090      LDI	R25,0
    0082 2DE2      MOV	R30,R2
    0083 27FF      CLR	R31
    0084 0FE8      ADD	R30,R24
    0085 1FF9      ADC	R31,R25
    0086 8020      LDD	R2,Z+0
    0087 9220006B  STS	ldata,R2
(0044)  PORTA = ldata;
    0089 BA2B      OUT	0x1B,R2
(0045)  
(0046)  i++;
    008A 9180006D  LDS	R24,i
    008C 5F8F      SUBI	R24,0xFF
    008D 9380006D  STS	i,R24
(0047)  addr = addr<<1;
    008F 9020006A  LDS	R2,addr
    0091 0C22      LSL	R2
    0092 9220006A  STS	addr,R2
(0048)  if(addr == 0)
    0094 2022      TST	R2
    0095 F431      BNE	0x009C
(0049)   {addr = 1;
    0096 E081      LDI	R24,1
    0097 9380006A  STS	addr,R24
(0050)    i = 0;
    0099 2422      CLR	R2
    009A 9220006D  STS	i,R2
(0051)   }
    009C 9029      LD	R2,Y+
    009D BE2F      OUT	0x3F,R2
    009E 91F9      LD	R31,Y+
    009F 91E9      LD	R30,Y+
    00A0 9199      LD	R25,Y+
    00A1 9189      LD	R24,Y+
    00A2 9029      LD	R2,Y+
    00A3 9518      RETI
(0052)  
(0053)  
(0054) }
(0055) 
(0056) //call this routine to initialize all peripherals
(0057) void init_devices(void)
(0058) {
(0059)  //stop errant interrupts until set up
(0060)  CLI(); //disable all interrupts
_init_devices:
    00A4 94F8      BCLR	7
(0061)  port_init();
    00A5 DFB0      RCALL	_port_init
(0062)  timer0_init();
    00A6 DFBA      RCALL	_timer0_init
(0063) 
(0064)  MCUCR = 0x00;
    00A7 2422      CLR	R2
    00A8 BE25      OUT	0x35,R2
(0065)  GICR  = 0x00;
    00A9 BE2B      OUT	0x3B,R2
(0066)  TIMSK = 0x01; //timer interrupt sources
    00AA E081      LDI	R24,1
    00AB BF89      OUT	0x39,R24
(0067)  SEI(); //re-enable interrupts
    00AC 9478      BSET	7
    00AD 9508      RET
(0068)  //all peripherals are now initialized
(0069) }
(0070) 
(0071) //
(0072) void main(void)
(0073) {
(0074)  init_devices();
FILE: <library>
_main:
    00AE DFF5      RCALL	_init_devices
    00AF 9508      RET

⌨️ 快捷键说明

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