📄 leson3.s
字号:
.module leson3.c
.area text(rom, con, rel)
.dbfile F:\lesson\leson3.c
.dbfunc e WDT_off _WDT_off fV
.even
_WDT_off::
.dbline -1
.dbline 10
; #include <io2313v.h>
; #include <macros.h>
; #define uint unsigned int
; #define uchar unsigned char
;
;
;
;
; void WDT_off(void)
; {
.dbline 14
; //__disable_interrupt();
; //__watchdog_reset();
; //#asm("cli");
; SREG &= ~0x80;
bclr 7
.dbline 16
; // Clear WDRF in MCUSR
; MCUSR &= ~0x08;
in R24,0x34
andi R24,247
out 0x34,R24
.dbline 19
; // Write logical one to WDCE and WDE
; // Keep old prescaler setting to prevent unintentional time-out
; WDTCSR |= 0x18;
in R24,0x21
ori R24,24
out 0x21,R24
.dbline 21
; // Turn off WDT
; WDTCSR = 0x00;
clr R2
out 0x21,R2
.dbline 22
; SREG |= 0x80;
bset 7
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e USART_Init _USART_Init fV
; baud -> R16,R17
.even
_USART_Init::
.dbline -1
.dbline 28
; //#asm("sei");
; //__enable_interrupt();
; }
;
; void USART_Init(unsigned int baud)
; {
.dbline 30
; /* Set baud rate */
; UBRRH = (unsigned char)(baud>>8);
mov R2,R16
mov R3,R17
mov R2,R3
clr R3
out 0x2,R2
.dbline 31
; UBRRL = (unsigned char)baud;
out 0x9,R16
.dbline 33
; /* Enable receiver and transmitter */
; UCSRB = 0x18;
ldi R24,24
out 0xa,R24
.dbline 35
; /* Set frame format: 8data, 2stop bit */
; UCSRC = 0x0E;
ldi R24,14
out 0x3,R24
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbsym r baud 16 i
.dbend
.dbfunc e USART_Transmit _USART_Transmit fV
; data -> R16
.even
_USART_Transmit::
.dbline -1
.dbline 41
; //U2X=0;
; }
;
;
; void USART_Transmit( unsigned char data )
; {
L4:
.dbline 43
L5:
.dbline 43
; /* Wait for empty transmit buffer */
; while ( !( UCSRA & (UCSRA&0x20)) );
in R24,0xb
andi R24,32
in R2,0xb
and R2,R24
breq L4
.dbline 45
; /* Put data into buffer, sends the data */
; UDR = data; //Transmit 8 data bits
out 0xc,R16
.dbline -2
L3:
.dbline 0 ; func end
ret
.dbsym r data 16 c
.dbend
.dbfunc e USART_Receive _USART_Receive fc
.even
_USART_Receive::
.dbline -1
.dbline 64
; }
;
; /*
; void USART_Transmit( unsigned int data )
; {
; //Wait for empty transmit buffer
; while (!( UCSRA & (1<<UDRE)));
; // Copy 9th bit to TXB8
; UCSRB &= ~(1<<TXB8);
; if ( data & 0x0100 )
; UCSRB |= (1<<TXB8);
; // Put data into buffer, sends the data
; UDR = data; //Transmit 9 data bits
; }
; */
;
;
; unsigned char USART_Receive( void )
; {
L8:
.dbline 66
L9:
.dbline 66
; // Wait for data to be received
; while ( !(UCSRA & (UCSRA&0x80)) );
in R24,0xb
andi R24,128
in R2,0xb
and R2,R24
breq L8
.dbline 68
; //Get and return received data from buffer
; return UDR; //Receive 8 data bits
in R16,0xc
.dbline -2
L7:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delayms _delayms fV
; i -> R20,R21
; j -> R22,R23
; ms -> R16,R17
.even
_delayms::
rcall push_gset2
.dbline -1
.dbline 92
; }
;
; /*
; unsigned int USART_Receive( void )
; {
; unsigned char status, resh, resl;
; // Wait for data to be received
; while ( !(UCSRA & (1<<RXC)) );
; // Get status and 9th bit, then data
; // from buffer
; status = UCSRA;
; resh = UCSRB;
; resl = UDR;
; // If error, return -1
; if ( status & (1<<FE)|(1<<DOR)|(1<<UPE) )
; return -1;
; // Filter the 9th bit, then return
; resh = (resh >> 1) & 0x01;
; return ((resh << 8) | resl); //Receive 9 data bits
; }
; */
;
; void delayms(uint ms)
; {
.dbline 94
; uint i,j;
; for(i=0;i<ms;i++)
clr R20
clr R21
rjmp L15
L12:
.dbline 95
; {
.dbline 96
clr R22
clr R23
rjmp L19
L16:
.dbline 96
L17:
.dbline 96
subi R22,255 ; offset = 1
sbci R23,255
L19:
.dbline 96
cpi R22,117
ldi R30,4
cpc R23,R30
brlo L16
.dbline 97
L13:
.dbline 94
subi R20,255 ; offset = 1
sbci R21,255
L15:
.dbline 94
cp R20,R16
cpc R21,R17
brlo L12
.dbline -2
L11:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r j 22 i
.dbsym r ms 16 i
.dbend
.dbfunc e delayus _delayus fV
; i -> R20,R21
; us -> R16,R17
.even
_delayus::
rcall push_gset1
.dbline -1
.dbline 100
; for(j=0;j<1141;j++);
; }
; }
; void delayus(uint us)
; {
.dbline 104
;
; uint i;
;
; for(i=0;i<us;i++)
clr R20
clr R21
rjmp L24
L21:
.dbline 105
.dbline 106
nop
.dbline 106
nop
.dbline 106
nop
.dbline 106
nop
.dbline 107
L22:
.dbline 104
subi R20,255 ; offset = 1
sbci R21,255
L24:
.dbline 104
cp R20,R16
cpc R21,R17
brlo L21
.dbline -2
L20:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r us 16 i
.dbend
.dbfunc e senddata _senddata fV
; i -> R20
; data -> R16,R17
.even
_senddata::
rcall push_gset1
.dbline -1
.dbline 110
; {
; NOP();NOP();NOP();NOP();
; }
; }
; void senddata(uint data) // dm13a(led 驱动子程序)
; {
.dbline 112
; uchar i;
; for(i=0;i<16;i++)
clr R20
rjmp L29
L26:
.dbline 113
; {
.dbline 114
; PORTD&=~0x10;
cbi 0x12,4
.dbline 115
; NOP();
nop
.dbline 116
; if(data&0x8000)
sbrs R17,7
rjmp L30
.dbline 117
; PORTD|=0x20; //置位操作
sbi 0x12,5
rjmp L31
L30:
.dbline 119
; else
; PORTD&=~0x20; //清零操作
cbi 0x12,5
L31:
.dbline 120
nop
.dbline 121
sbi 0x12,4
.dbline 122
nop
.dbline 123
lsl R16
rol R17
.dbline 124
L27:
.dbline 112
inc R20
L29:
.dbline 112
cpi R20,16
brlo L26
.dbline 125
; NOP();
; PORTD|=0x10;
; NOP();
; data=data<<1;
; }
; PORTD|=0x08;
sbi 0x12,3
.dbline 126
; NOP();
nop
.dbline 127
; PORTD&=~0x08;
cbi 0x12,3
.dbline -2
L25:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r data 16 i
.dbend
.dbfunc e main _main fV
; m -> R20,R21
; j -> y+0
; n -> R10,R11
; k -> R12,R13
; i -> R14
; h -> R22
.even
_main::
sbiw R28,2
.dbline -1
.dbline 134
;
; //PORTD|=(1<<PORTD5); //置位操作
; //PORTD&=~(1<<PORTD5); //清零操作
; }
;
; void main()
; {
.dbline 136
;
; DDRD|=0x38;
in R24,0x11
ori R24,56
out 0x11,R24
.dbline 137
; DDRB|=0x40;
sbi 0x17,6
.dbline 141
;
;
;
; WDT_off();
rcall _WDT_off
.dbline 143
;
; USART_Init(9600);
ldi R16,9600
ldi R17,37
rcall _USART_Init
.dbline 144
; PORTB|=0x40;
sbi 0x18,6
.dbline 145
; delayms(20);
ldi R16,20
ldi R17,0
rcall _delayms
.dbline 146
; delayms(20);
ldi R16,20
ldi R17,0
rcall _delayms
.dbline 147
; delayms(20);
ldi R16,20
ldi R17,0
rcall _delayms
rjmp L34
L33:
.dbline 149
; while(1)
; {
.dbline 152
; uchar i;
; uchar h;
; uint j=0x0001;
ldi R24,1
ldi R25,0
std y+1,R25
std y+0,R24
.dbline 153
; uint k=0xffff;
ldi R24,65535
ldi R25,255
mov R12,R24
mov R13,R25
.dbline 154
; uint m=0x4000;
ldi R20,16384
ldi R21,64
.dbline 155
; uint n=0xffff;
mov R10,R24
mov R11,R25
.dbline 159
;
;
;
; USART_Transmit(0x55);
ldi R16,85
rcall _USART_Transmit
.dbline 163
;
;
;
; for(i=0;i<16;i++)
clr R14
rjmp L39
L36:
.dbline 164
.dbline 165
ldd R16,y+0
ldd R17,y+1
rcall _senddata
.dbline 166
ldi R16,20
ldi R17,0
rcall _delayms
.dbline 167
ldd R0,y+0
ldd R1,y+1
lsl R0
rol R1
std y+1,R1
std y+0,R0
.dbline 168
mov R24,R0
mov R25,R1
adiw R24,1
std y+1,R25
std y+0,R24
.dbline 169
L37:
.dbline 163
inc R14
L39:
.dbline 163
mov R24,R14
cpi R24,16
brlo L36
.dbline 171
; {
; senddata(j);
; delayms(20); //左到右逐渐亮
; j=j<<1;
; j=j+1;
; }
;
; USART_Transmit(0x66);
ldi R16,102
rcall _USART_Transmit
.dbline 173
;
; for(i=0;i<15;i++) //左到右逐渐灭
clr R14
rjmp L43
L40:
.dbline 174
; {
.dbline 175
; if((i>5)&&(i<10))
ldi R24,5
cp R24,R14
brsh L44
mov R24,R14
cpi R24,10
brsh L44
.dbline 176
; {
.dbline 177
; for(h=0;h<20;h++)
clr R22
rjmp L49
L46:
.dbline 178
.dbline 179
mov R16,R12
mov R17,R13
rcall _senddata
.dbline 180
ldi R16,800
ldi R17,3
rcall _delayus
.dbline 181
clr R16
clr R17
rcall _senddata
.dbline 182
ldi R16,200
ldi R17,0
rcall _delayus
.dbline 183
L47:
.dbline 177
inc R22
L49:
.dbline 177
cpi R22,20
brlo L46
.dbline 184
; {
; senddata(k);
; delayus(800);
; senddata(0x00);
; delayus(200);
; }
; k=k<<1;
lsl R12
rol R13
.dbline 185
; }
rjmp L45
L44:
.dbline 186
; else if(i>10)
ldi R24,10
cp R24,R14
brsh L50
.dbline 187
; {
.dbline 188
; for(h=0;h<20;h++)
clr R22
rjmp L55
L52:
.dbline 189
.dbline 190
mov R16,R12
mov R17,R13
rcall _senddata
.dbline 191
ldi R16,600
ldi R17,2
rcall _delayus
.dbline 192
clr R16
clr R17
rcall _senddata
.dbline 193
ldi R16,400
ldi R17,1
rcall _delayus
.dbline 194
L53:
.dbline 188
inc R22
L55:
.dbline 188
cpi R22,20
brlo L52
.dbline 195
; {
; senddata(k);
; delayus(600);
; senddata(0x00);
; delayus(400);
; }
; k=k<<1;
lsl R12
rol R13
.dbline 197
;
; }
rjmp L51
L50:
.dbline 199
; else
; {
.dbline 200
; senddata(k);
mov R16,R12
mov R17,R13
rcall _senddata
.dbline 201
; delayms(20);
ldi R16,20
ldi R17,0
rcall _delayms
.dbline 202
; k=k<<1;
lsl R12
rol R13
.dbline 203
; }
L51:
L45:
.dbline 204
L41:
.dbline 173
inc R14
L43:
.dbline 173
mov R24,R14
cpi R24,15
brsh X1
rjmp L40
X1:
.dbline 206
; }
;
; USART_Transmit(0x77);
ldi R16,119
rcall _USART_Transmit
.dbline 208
;
; for(i=0;i<16;i++) //右到左逐渐亮
clr R14
rjmp L59
L56:
.dbline 209
.dbline 210
mov R16,R20
mov R17,R21
rcall _senddata
.dbline 211
ldi R16,20
ldi R17,0
rcall _delayms
.dbline 212
lsr R21
ror R20
.dbline 213
subi R20,0 ; offset = 16384
sbci R21,192
.dbline 214
L57:
.dbline 208
inc R14
L59:
.dbline 208
mov R24,R14
cpi R24,16
brlo L56
.dbline 217
; {
; senddata(m);
; delayms(20);
; m=m>>1;
; m=m+0x4000;
; }
;
;
; USART_Transmit(0x88);
ldi R16,136
rcall _USART_Transmit
.dbline 219
;
; for(i=0;i<16;i++) //右到左逐渐灭
clr R14
rjmp L63
L60:
.dbline 220
; {
.dbline 221
; if((i>5)&&(i<10))
ldi R24,5
cp R24,R14
brsh L64
mov R24,R14
cpi R24,10
brsh L64
.dbline 222
; {
.dbline 223
; for(h=0;h<20;h++)
clr R22
rjmp L69
L66:
.dbline 224
.dbline 225
mov R16,R10
mov R17,R11
rcall _senddata
.dbline 226
ldi R16,800
ldi R17,3
rcall _delayus
.dbline 227
clr R16
clr R17
rcall _senddata
.dbline 228
ldi R16,200
ldi R17,0
rcall _delayus
.dbline 229
L67:
.dbline 223
inc R22
L69:
.dbline 223
cpi R22,20
brlo L66
.dbline 230
; {
; senddata(n);
; delayus(800);
; senddata(0x00);
; delayus(200);
; }
; n=n>>1;
lsr R11
ror R10
.dbline 231
; }
rjmp L65
L64:
.dbline 232
; else if(i>10)
ldi R24,10
cp R24,R14
brsh L70
.dbline 233
; {
.dbline 234
; for(h=0;h<20;h++)
clr R22
rjmp L75
L72:
.dbline 235
.dbline 236
mov R16,R10
mov R17,R11
rcall _senddata
.dbline 237
ldi R16,600
ldi R17,2
rcall _delayus
.dbline 238
clr R16
clr R17
rcall _senddata
.dbline 239
ldi R16,400
ldi R17,1
rcall _delayus
.dbline 240
L73:
.dbline 234
inc R22
L75:
.dbline 234
cpi R22,20
brlo L72
.dbline 241
; {
; senddata(n);
; delayus(600);
; senddata(0x00);
; delayus(400);
; }
; n=n>>1;
lsr R11
ror R10
.dbline 243
;
; }
rjmp L71
L70:
.dbline 245
; else
; {
.dbline 246
; senddata(n);
mov R16,R10
mov R17,R11
rcall _senddata
.dbline 247
; delayms(20);
ldi R16,20
ldi R17,0
rcall _delayms
.dbline 248
; n=n>>1;
lsr R11
ror R10
.dbline 249
; }
L71:
L65:
.dbline 251
L61:
.dbline 219
inc R14
L63:
.dbline 219
mov R24,R14
cpi R24,16
brsh X2
rjmp L60
X2:
.dbline 253
L34:
.dbline 148
rjmp L33
X0:
.dbline -2
L32:
adiw R28,2
.dbline 0 ; func end
ret
.dbsym r m 20 i
.dbsym l j 0 i
.dbsym r n 10 i
.dbsym r k 12 i
.dbsym r i 14 c
.dbsym r h 22 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -