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