📄 02-8a-10.lst
字号:
__start:
__text_start:
001A EFCF LDI R28,0xFF
001B E0D2 LDI R29,2
001C BFCD OUT 0x3D,R28
001D BFDE OUT 0x3E,R29
001E 51C0 SUBI R28,0x10
001F 40D0 SBCI R29,0
0020 EA0A LDI R16,0xAA
0021 8308 STD Y+0,R16
0022 2400 CLR R0
0023 E0E0 LDI R30,0
0024 E0F1 LDI R31,1
0025 E011 LDI R17,1
0026 30E1 CPI R30,1
0027 07F1 CPC R31,R17
0028 F011 BEQ 0x002B
0029 9201 ST R0,Z+
002A CFFB RJMP 0x0026
002B 8300 STD Z+0,R16
002C E3E4 LDI R30,0x34
002D E0F0 LDI R31,0
002E E0A0 LDI R26,0
002F E0B1 LDI R27,1
0030 E010 LDI R17,0
0031 33E4 CPI R30,0x34
0032 07F1 CPC R31,R17
0033 F021 BEQ 0x0038
0034 95C8 LPM
0035 9631 ADIW R30,1
0036 920D ST R0,X+
0037 CFF9 RJMP 0x0031
0038 D036 RCALL _main
_exit:
0039 CFFF RJMP _exit
FILE: D:\xij\demo\demo_diy02-8a\1\C语言\02-8a-10\10.c
(0001) //ICC-AVR application builder : 2005-3-11 15:28:29
(0002) // Target : M48
(0003) // Crystal: 8.0000Mhz
(0004)
(0005) #include <iom48v.h>
(0006) #include <macros.h>
(0007) unsigned char size;
(0008)
(0009) void port_init(void)
(0010) {
(0011) PORTB = 0xFF;
_port_init:
003A EF8F LDI R24,0xFF
003B B985 OUT 0x05,R24
(0012) DDRB = 0xff;
003C B984 OUT 0x04,R24
(0013) PORTC = 0x7F; //m103 output only
003D E78F LDI R24,0x7F
003E B988 OUT 0x08,R24
(0014) DDRC = 0x00;
003F 2422 CLR R2
0040 B827 OUT 0x07,R2
(0015) PORTD = 0xFF;
0041 EF8F LDI R24,0xFF
0042 B98B OUT 0x0B,R24
(0016) DDRD = 0xF0;
0043 EF80 LDI R24,0xF0
0044 B98A OUT 0x0A,R24
0045 9508 RET
(0017) }
(0018)
(0019) //call this routine to initialize all peripherals
(0020) void init_devices(void)
(0021) {
(0022) //stop errant interrupts until set up
(0023) CLI(); //disable all interrupts
_init_devices:
0046 94F8 BCLR 7
(0024) port_init();
0047 DFF2 RCALL _port_init
(0025)
(0026) MCUCR = 0x00;
0048 2422 CLR R2
0049 BE25 OUT 0x35,R2
(0027) EICRA = 0x00; //extended ext ints
004A 92200069 STS 0x69,R2
(0028) EIMSK = 0x00;
004C BA2D OUT 0x1D,R2
(0029)
(0030) TIMSK0 = 0x00; //timer 0 interrupt sources
004D 9220006E STS 0x6E,R2
(0031) TIMSK1 = 0x00; //timer 1 interrupt sources
004F 9220006F STS 0x6F,R2
(0032) TIMSK2 = 0x00; //timer 2 interrupt sources
0051 92200070 STS 0x70,R2
(0033)
(0034) PCMSK0 = 0x00; //pin change mask 0
0053 9220006B STS 0x6B,R2
(0035) PCMSK1 = 0x00; //pin change mask 1
0055 9220006C STS 0x6C,R2
(0036) PCMSK2 = 0x00; //pin change mask 2
0057 9220006D STS 0x6D,R2
(0037) PCICR = 0x00; //pin change enable
0059 92200068 STS 0x68,R2
(0038) PRR = 0x00; //power controller
005B 92200064 STS 0x64,R2
(0039) SEI(); //re-enable interrupts
005D 9478 BSET 7
005E 9508 RET
(0040) //all peripherals are now initialized
(0041) }
(0042)
(0043) /*前行*/
(0044) void forward(void)
(0045) {
(0046) PORTD = 0X9F;
_forward:
005F E98F LDI R24,0x9F
0060 B98B OUT 0x0B,R24
(0047) PORTB = 0XF8;
0061 EF88 LDI R24,0xF8
0062 B985 OUT 0x05,R24
0063 9508 RET
(0048) }
(0049)
(0050) /*停止*/
(0051) void stop(void)
(0052) {
(0053) PORTD = 0XFF;
_stop:
0064 EF8F LDI R24,0xFF
0065 B98B OUT 0x0B,R24
(0054) PORTB = 0XFF;
0066 B985 OUT 0x05,R24
0067 9508 RET
(0055) }
(0056)
(0057) void mic_startup()
(0058) {//声控启动程序运行
_mic_startup:
mic_in --> R16
0068 C004 RJMP 0x006D
(0059) unsigned char mic_in;
(0060) while(1)
(0061) { //无键按下等待
(0062) mic_in=PINC & 0x20; //pc5=0
0069 B106 IN R16,0x06
006A 7200 ANDI R16,0x20
(0063) if(mic_in==0){break;}
006B F409 BNE 0x006D
006C C001 RJMP 0x006E
006D CFFB RJMP 0x0069
006E 9508 RET
(0064) }//有键按下运行下面的程序
(0065) }
(0066)
(0067) /*主程序*/
(0068) void main()
(0069) {
(0070) unsigned char i;
(0071) init_devices();
_main:
i --> Y+1
006F DFD6 RCALL _init_devices
(0072) demand:
(0073) mic_startup();
0070 DFF7 RCALL _mic_startup
(0074) //while(1){
(0075) //i = PINC&20;
(0076) //if(i == 0){
(0077) size++;
0071 91800100 LDS R24,size
0073 5F8F SUBI R24,0xFF
0074 93800100 STS size,R24
0076 C00F RJMP 0x0086
(0078) //break;
(0079) //}
(0080) //}
(0081) while(1)
(0082) {
(0083) if(size==1)
0077 91800100 LDS R24,size
0079 3081 CPI R24,1
007A F411 BNE 0x007D
(0084) {
(0085) forward();}
007B DFE3 RCALL _forward
007C CFF3 RJMP 0x0070
(0086) else if(size==2)
007D 91800100 LDS R24,size
007F 3082 CPI R24,2
0080 F779 BNE 0x0070
(0087) {
(0088) stop();
0081 DFE2 RCALL _stop
(0089) size=0;}
0082 2422 CLR R2
0083 92200100 STS size,R2
(0090) goto demand;
FILE: <library>
0085 CFEA RJMP 0x0070
0086 CFF0 RJMP 0x0077
0087 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -