📄 xiangmu2.lst
字号:
__start:
__text_start:
0013 EDCF LDI R28,0xDF
0014 E0D0 LDI R29,0
0015 BFCD OUT 0x3D,R28
0016 BFDE OUT 0x3E,R29
0017 51C0 SUBI R28,0x10
0018 40D0 SBCI R29,0
0019 EA0A LDI R16,0xAA
001A 8308 STD Y+0,R16
001B 2400 CLR R0
001C E6E0 LDI R30,0x60
001D E0F0 LDI R31,0
001E E010 LDI R17,0
001F 36E1 CPI R30,0x61
0020 07F1 CPC R31,R17
0021 F011 BEQ 0x0024
0022 9201 ST R0,Z+
0023 CFFB RJMP 0x001F
0024 8300 STD Z+0,R16
0025 E2E6 LDI R30,0x26
0026 E0F0 LDI R31,0
0027 E6A0 LDI R26,0x60
0028 E0B0 LDI R27,0
0029 E010 LDI R17,0
002A 32E6 CPI R30,0x26
002B 07F1 CPC R31,R17
002C F021 BEQ 0x0031
002D 95C8 LPM
002E 9631 ADIW R30,1
002F 920D ST R0,X+
0030 CFF9 RJMP 0x002A
0031 D05F RCALL _main
_exit:
0032 CFFF RJMP _exit
FILE: F:\lesson\leson4.c
(0001) #include <io2313v.h>
(0002) #include <macros.h>
(0003) #define uint unsigned int
(0004) #define uchar unsigned char
(0005) uchar rdata;
(0006)
(0007)
(0008)
(0009) void WDT_off(void)
(0010) {
(0011) //__disable_interrupt();
(0012) //__watchdog_reset();
(0013) //#asm("cli");
(0014) SREG &= ~0x80;
_WDT_off:
0033 94F8 BCLR 7
(0015) // Clear WDRF in MCUSR
(0016) MCUSR &= ~0x08;
0034 B784 IN R24,0x34
0035 7F87 ANDI R24,0xF7
0036 BF84 OUT 0x34,R24
(0017) // Write logical one to WDCE and WDE
(0018) // Keep old prescaler setting to prevent unintentional time-out
(0019) WDTCSR |= 0x18;
0037 B581 IN R24,0x21
0038 6188 ORI R24,0x18
0039 BD81 OUT 0x21,R24
(0020) // Turn off WDT
(0021) WDTCSR = 0x00;
003A 2422 CLR R2
003B BC21 OUT 0x21,R2
(0022) SREG |= 0x80;
003C 9478 BSET 7
003D 9508 RET
(0023) //#asm("sei");
(0024) //__enable_interrupt();
(0025) }
(0026)
(0027) void USART_Init(unsigned int baud)
(0028) {
(0029) /* Set baud rate */
(0030) UBRRH = (unsigned char)(baud>>8);
_USART_Init:
baud --> R16
003E 2E20 MOV R2,R16
003F 2E31 MOV R3,R17
0040 2C23 MOV R2,R3
0041 2433 CLR R3
0042 B822 OUT 0x02,R2
(0031) UBRRL = (unsigned char)baud;
0043 B909 OUT 0x09,R16
(0032) /* Enable receiver and transmitter */
(0033) UCSRB = 0x18;
0044 E188 LDI R24,0x18
0045 B98A OUT 0x0A,R24
(0034) /* Set frame format: 8data, 2stop bit */
(0035) UCSRC = 0x0E;
0046 E08E LDI R24,0xE
0047 B983 OUT 0x03,R24
0048 9508 RET
(0036) //U2X=0;
(0037) }
(0038)
(0039)
(0040) void USART_Transmit( unsigned char data )
(0041) {
(0042) /* Wait for empty transmit buffer */
(0043) while ( !( UCSRA & (UCSRA&0x20)) );
_USART_Transmit:
data --> R16
0049 B18B IN R24,0x0B
004A 7280 ANDI R24,0x20
004B B02B IN R2,0x0B
004C 2228 AND R2,R24
004D F3D9 BEQ 0x0049
(0044) /* Put data into buffer, sends the data */
(0045) UDR = data; //Transmit 8 data bits
004E B90C OUT 0x0C,R16
004F 9508 RET
(0046) }
(0047)
(0048) /*
(0049) void USART_Transmit( unsigned int data )
(0050) {
(0051) //Wait for empty transmit buffer
(0052) while (!( UCSRA & (1<<UDRE)));
(0053) // Copy 9th bit to TXB8
(0054) UCSRB &= ~(1<<TXB8);
(0055) if ( data & 0x0100 )
(0056) UCSRB |= (1<<TXB8);
(0057) // Put data into buffer, sends the data
(0058) UDR = data; //Transmit 9 data bits
(0059) }
(0060) */
(0061)
(0062)
(0063) unsigned char USART_Receive( void )
(0064) {
(0065) // Wait for data to be received
(0066) while ( !(UCSRA & (UCSRA&0x80)) );
_USART_Receive:
0050 B18B IN R24,0x0B
0051 7880 ANDI R24,0x80
0052 B02B IN R2,0x0B
0053 2228 AND R2,R24
0054 F3D9 BEQ 0x0050
(0067) //Get and return received data from buffer
(0068) return UDR; //Receive 8 data bits
0055 B10C IN R16,0x0C
0056 9508 RET
_delayms:
i --> R20
j --> R22
ms --> R16
0057 D131 RCALL push_gset2
(0069) }
(0070)
(0071) /*
(0072) unsigned int USART_Receive( void )
(0073) {
(0074) unsigned char status, resh, resl;
(0075) // Wait for data to be received
(0076) while ( !(UCSRA & (1<<RXC)) );
(0077) // Get status and 9th bit, then data
(0078) // from buffer
(0079) status = UCSRA;
(0080) resh = UCSRB;
(0081) resl = UDR;
(0082) // If error, return -1
(0083) if ( status & (1<<FE)|(1<<DOR)|(1<<UPE) )
(0084) return -1;
(0085) // Filter the 9th bit, then return
(0086) resh = (resh >> 1) & 0x01;
(0087) return ((resh << 8) | resl); //Receive 9 data bits
(0088) }
(0089) */
(0090)
(0091) void delayms(uint ms)
(0092) {
(0093) uint i,j;
(0094) for(i=0;i<ms;i++)
0058 2744 CLR R20
0059 2755 CLR R21
005A C00B RJMP 0x0066
(0095) {
(0096) for(j=0;j<1141;j++);
005B 2766 CLR R22
005C 2777 CLR R23
005D C002 RJMP 0x0060
005E 5F6F SUBI R22,0xFF
005F 4F7F SBCI R23,0xFF
0060 3765 CPI R22,0x75
0061 E0E4 LDI R30,4
0062 077E CPC R23,R30
0063 F3D0 BCS 0x005E
0064 5F4F SUBI R20,0xFF
0065 4F5F SBCI R21,0xFF
0066 1740 CP R20,R16
0067 0751 CPC R21,R17
0068 F390 BCS 0x005B
0069 D117 RCALL pop_gset2
006A 9508 RET
_delayus:
i --> R20
us --> R16
006B D11F RCALL push_gset1
(0097) }
(0098) }
(0099) void delayus(uint us)
(0100) {
(0101)
(0102) uint i;
(0103)
(0104) for(i=0;i<us;i++)
006C 2744 CLR R20
006D 2755 CLR R21
006E C006 RJMP 0x0075
(0105) {
(0106) NOP();NOP();NOP();NOP();
006F 0000 NOP
0070 0000 NOP
0071 0000 NOP
0072 0000 NOP
0073 5F4F SUBI R20,0xFF
0074 4F5F SBCI R21,0xFF
0075 1740 CP R20,R16
0076 0751 CPC R21,R17
0077 F3B8 BCS 0x006F
0078 D115 RCALL pop_gset1
0079 9508 RET
_senddata:
i --> R20
data --> R16
007A D110 RCALL push_gset1
(0107) }
(0108) }
(0109) void senddata(uint data) // dm13a(led 驱动子程序)
(0110) {
(0111) uchar i;
(0112) for(i=0;i<16;i++)
007B 2744 CLR R20
007C C00D RJMP 0x008A
(0113) {
(0114) PORTD&=~0x10;
007D 9894 CBI 0x12,4
(0115) NOP();
007E 0000 NOP
(0116) if(data&0x8000)
007F FF17 SBRS R17,7
0080 C002 RJMP 0x0083
(0117) PORTD|=0x20; //置位操作
0081 9A95 SBI 0x12,5
0082 C001 RJMP 0x0084
(0118) else
(0119) PORTD&=~0x20; //清零操作
0083 9895 CBI 0x12,5
(0120) NOP();
0084 0000 NOP
(0121) PORTD|=0x10;
0085 9A94 SBI 0x12,4
(0122) NOP();
0086 0000 NOP
(0123) data=data<<1;
0087 0F00 LSL R16
0088 1F11 ROL R17
0089 9543 INC R20
008A 3140 CPI R20,0x10
008B F388 BCS 0x007D
(0124) }
(0125) PORTD|=0x08;
008C 9A93 SBI 0x12,3
(0126) NOP();
008D 0000 NOP
(0127) PORTD&=~0x08;
008E 9893 CBI 0x12,3
008F D0FE RCALL pop_gset1
0090 9508 RET
_main:
m --> R20
j --> Y+0
n --> R10
k --> R12
i --> R14
h --> R22
0091 9722 SBIW R28,2
(0128)
(0129) //PORTD|=(1<<PORTD5); //置位操作
(0130) //PORTD&=~(1<<PORTD5); //清零操作
(0131) }
(0132)
(0133) void main()
(0134) {
(0135)
(0136) DDRD|=0x38;
0092 B381 IN R24,0x11
0093 6388 ORI R24,0x38
0094 BB81 OUT 0x11,R24
(0137) DDRB|=0x40;
0095 9ABE SBI 0x17,6
(0138)
(0139) WDT_off();
0096 DF9C RCALL _WDT_off
(0140)
(0141) USART_Init(9600);
0097 E800 LDI R16,0x80
0098 E215 LDI R17,0x25
0099 DFA4 RCALL _USART_Init
(0142)
(0143) PORTB&=0xBF;
009A B388 IN R24,0x18
009B 7B8F ANDI R24,0xBF
009C BB88 OUT 0x18,R24
(0144)
(0145) delayms(20);
009D E104 LDI R16,0x14
009E E010 LDI R17,0
009F DFB7 RCALL _delayms
(0146) delayms(20);
00A0 E104 LDI R16,0x14
00A1 E010 LDI R17,0
00A2 DFB4 RCALL _delayms
(0147) delayms(20);
00A3 E104 LDI R16,0x14
00A4 E010 LDI R17,0
00A5 DFB1 RCALL _delayms
(0148)
(0149) USART_Receive();
00A6 DFA9 RCALL _USART_Receive
(0150) rdata=UDR;
00A7 B02C IN R2,0x0C
00A8 92200060 STS rdata,R2
(0151) switch(rdata)
00AA 2D42 MOV R20,R2
00AB 2755 CLR R21
00AC 3442 CPI R20,0x42
00AD E0E0 LDI R30,0
00AE 075E CPC R21,R30
00AF F409 BNE 0x00B1
00B0 C03D RJMP 0x00EE
00B1 E482 LDI R24,0x42
00B2 E090 LDI R25,0
00B3 1784 CP R24,R20
00B4 0795 CPC R25,R21
00B5 F02C BLT 0x00BB
00B6 3347 CPI R20,0x37
00B7 E0E0 LDI R30,0
00B8 075E CPC R21,R30
00B9 F0E9 BEQ 0x00D7
00BA C0C3 RJMP 0x017E
00BB 344D CPI R20,0x4D
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -