📄 leson1.lis
字号:
.module leson1.c
.area text(rom, con, rel)
0000 .dbfile F:\lesson\leson1.c
0000 .dbfunc e WDT_off _WDT_off fV
.even
0000 _WDT_off::
0000 .dbline -1
0000 .dbline 12
0000 ; #include <io2313v.h>
0000 ; #include <macros.h>
0000 ; #define uint unsigned int
0000 ; #define uchar unsigned char
0000 ; //#define LED_SET PORTD |= (1 << PD5) //位置高
0000 ; //#define LED_CLR PORTD &= ~(1 << PD5) //位置低
0000 ; //#define LED_COM PORTD ^= (1 << PD5) //位取反
0000 ; //#define LED_R PIND & (1 << PD5) //位读取
0000 ;
0000 ;
0000 ; void WDT_off(void)
0000 ; {
0000 .dbline 16
0000 ; //__disable_interrupt();
0000 ; //__watchdog_reset();
0000 ; //#asm("cli");
0000 ; SREG &= ~(1 << (SREG&0x80));
0000 1FB7 in R17,0x3f
0002 1078 andi R17,128
0004 01E0 ldi R16,1
0006 00D0 rcall lsl8
0008 202E mov R2,R16
000A 2094 com R2
000C 3FB6 in R3,0x3f
000E 3220 and R3,R2
0010 3FBE out 0x3f,R3
0012 .dbline 19
0012 ; //PORTD |= (1 << PD5)
0012 ; // Clear WDRF in MCUSR
0012 ; MCUSR &= ~(1<<WDRF);
0012 84B7 in R24,0x34
0014 877F andi R24,247
0016 84BF out 0x34,R24
0018 .dbline 23
0018 ; // Write logical one to WDCE and WDE
0018 ; // Keep old prescaler setting to prevent unintentional time-out
0018 ;
0018 ; WDTCSR |= (1<<WDCE) | (1<<WDE);
0018 81B5 in R24,0x21
001A 8861 ori R24,24
001C 81BD out 0x21,R24
001E .dbline 25
001E ; // Turn off WDT
001E ; WDTCSR = 0x00;
001E 2224 clr R2
0020 21BC out 0x21,R2
0022 .dbline 26
0022 ; SREG |= (1 << (SREG&0x80));
0022 1FB7 in R17,0x3f
0024 1078 andi R17,128
0026 01E0 ldi R16,1
0028 00D0 rcall lsl8
002A 2FB6 in R2,0x3f
002C 202A or R2,R16
002E 2FBE out 0x3f,R2
0030 .dbline -2
0030 L1:
0030 .dbline 0 ; func end
0030 0895 ret
0032 .dbend
0032 .dbfunc e USART_Init _USART_Init fV
0032 ; baud -> R16,R17
.even
0032 _USART_Init::
0032 .dbline -1
0032 .dbline 32
0032 ; //#asm("sei");
0032 ; //__enable_interrupt();
0032 ; }
0032 ;
0032 ; void USART_Init(unsigned int baud)
0032 ; {
0032 .dbline 34
0032 ; /* Set baud rate */
0032 ; UBRRH = (unsigned char)(baud>>8);
0032 202E mov R2,R16
0034 312E mov R3,R17
0036 232C mov R2,R3
0038 3324 clr R3
003A 22B8 out 0x2,R2
003C .dbline 35
003C ; UBRRL = (unsigned char)baud;
003C 09B9 out 0x9,R16
003E .dbline 37
003E ; /* Enable receiver and transmitter */
003E ; UCSRB = (1<<RXEN)|(1<<TXEN);
003E 88E1 ldi R24,24
0040 8AB9 out 0xa,R24
0042 .dbline 39
0042 ; /* Set frame format: 8data, 2stop bit */
0042 ; UCSRC = (1<<USBS)|(3<<UCSZ0);
0042 8EE0 ldi R24,14
0044 83B9 out 0x3,R24
0046 .dbline -2
0046 L2:
0046 .dbline 0 ; func end
0046 0895 ret
0048 .dbsym r baud 16 i
0048 .dbend
0048 .dbfunc e USART_Transmit _USART_Transmit fV
0048 ; data -> R16
.even
0048 _USART_Transmit::
0048 .dbline -1
0048 .dbline 45
0048 ; //U2X=0;
0048 ; }
0048 ;
0048 ;
0048 ; void USART_Transmit( unsigned char data )
0048 ; {
0048 L4:
0048 .dbline 47
0048 L5:
0048 .dbline 47
0048 ; /* Wait for empty transmit buffer */
0048 ; while ( !( UCSRA & (1<<UDRE)) );
0048 5D9B sbis 0xb,5
004A FECF rjmp L4
004C .dbline 49
004C ; /* Put data into buffer, sends the data */
004C ; UDR = data; //Transmit 8 data bits
004C 0CB9 out 0xc,R16
004E .dbline -2
004E L3:
004E .dbline 0 ; func end
004E 0895 ret
0050 .dbsym r data 16 c
0050 .dbend
0050 .dbfunc e USART_Receive _USART_Receive fc
.even
0050 _USART_Receive::
0050 .dbline -1
0050 .dbline 68
0050 ; }
0050 ;
0050 ; /*
0050 ; void USART_Transmit( unsigned int data )
0050 ; {
0050 ; //Wait for empty transmit buffer
0050 ; while (!( UCSRA & (1<<UDRE)));
0050 ; // Copy 9th bit to TXB8
0050 ; UCSRB &= ~(1<<TXB8);
0050 ; if ( data & 0x0100 )
0050 ; UCSRB |= (1<<TXB8);
0050 ; // Put data into buffer, sends the data
0050 ; UDR = data; //Transmit 9 data bits
0050 ; }
0050 ; */
0050 ;
0050 ;
0050 ; unsigned char USART_Receive( void )
0050 ; {
0050 L8:
0050 .dbline 70
0050 L9:
0050 .dbline 70
0050 ; // Wait for data to be received
0050 ; while ( !(UCSRA & (1<<RXC)) );
0050 5F9B sbis 0xb,7
0052 FECF rjmp L8
0054 .dbline 72
0054 ; //Get and return received data from buffer
0054 ; return UDR; //Receive 8 data bits
0054 0CB1 in R16,0xc
0056 .dbline -2
0056 L7:
0056 .dbline 0 ; func end
0056 0895 ret
0058 .dbend
0058 .dbfunc e delay _delay fV
0058 ; i -> R20,R21
0058 ; j -> R22,R23
0058 ; ms -> R16,R17
.even
0058 _delay::
0058 00D0 rcall push_gset2
005A .dbline -1
005A .dbline 96
005A ; }
005A ;
005A ; /*
005A ; unsigned int USART_Receive( void )
005A ; {
005A ; unsigned char status, resh, resl;
005A ; // Wait for data to be received
005A ; while ( !(UCSRA & (1<<RXC)) );
005A ; // Get status and 9th bit, then data
005A ; // from buffer
005A ; status = UCSRA;
005A ; resh = UCSRB;
005A ; resl = UDR;
005A ; // If error, return -1
005A ; if ( status & (1<<FE)|(1<<DOR)|(1<<UPE) )
005A ; return -1;
005A ; // Filter the 9th bit, then return
005A ; resh = (resh >> 1) & 0x01;
005A ; return ((resh << 8) | resl); //Receive 9 data bits
005A ; }
005A ; */
005A ;
005A ; void delay(uint ms)
005A ; {
005A .dbline 98
005A ; uint i,j;
005A ; for(i=0;i<ms;i++)
005A 4427 clr R20
005C 5527 clr R21
005E 0BC0 rjmp L15
0060 L12:
0060 .dbline 99
0060 ; {
0060 .dbline 100
0060 6627 clr R22
0062 7727 clr R23
0064 02C0 rjmp L19
0066 L16:
0066 .dbline 100
0066 L17:
0066 .dbline 100
0066 6F5F subi R22,255 ; offset = 1
0068 7F4F sbci R23,255
006A L19:
006A .dbline 100
006A 6537 cpi R22,117
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -