📄 leson4.s
字号:
.module leson4.c
.area text(rom, con, rel)
.dbfile F:\lesson\leson4.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
; uchar rdata;
;
;
;
; 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 139
;
; WDT_off();
rcall _WDT_off
.dbline 141
;
; USART_Init(9600);
ldi R16,9600
ldi R17,37
rcall _USART_Init
.dbline 143
;
; PORTB&=0xBF;
in R24,0x18
andi R24,191
out 0x18,R24
.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
.dbline 149
;
; USART_Receive();
rcall _USART_Receive
.dbline 150
; rdata=UDR;
in R2,0xc
sts _rdata,R2
.dbline 151
; switch(rdata)
mov R20,R2
clr R21
cpi R20,66
ldi R30,0
cpc R21,R30
brne X2
rjmp L39
X2:
ldi R24,66
ldi R25,0
cp R24,R20
cpc R25,R21
brlt L45
L44:
cpi R20,55
ldi R30,0
cpc R21,R30
breq L37
rjmp L48
L45:
cpi R20,77
ldi R30,0
cpc R21,R30
brne X3
rjmp L41
X3:
cpi R20,77
ldi R30,0
cpc R21,R30
brge X4
rjmp L48
X4:
L46:
cpi R20,88
ldi R30,0
cpc R21,R30
brne X5
rjmp L43
X5:
rjmp L48
X0:
.dbline 152
; {
.dbline 153
; case 55:goto start1;break;
.dbline 153
.dbline 154
; case 66:goto start2;break;
.dbline 154
.dbline 155
; case 77:goto start3;break;
.dbline 155
.dbline 156
; case 88:goto start4;break;
.dbline 156
L47:
.dbline 159
; }
; while(1)
; {
.dbline 162
; uchar i;
; uchar h;
; uint j=0x0001;
ldi R24,1
ldi R25,0
std y+1,R25
std y+0,R24
.dbline 163
; uint k=0xffff;
ldi R24,65535
ldi R25,255
mov R12,R24
mov R13,R25
.dbline 164
; uint m=0x4000;
ldi R20,16384
ldi R21,64
.dbline 165
; uint n=0xffff;
mov R10,R24
mov R11,R25
L37:
.dbline 171
;
;
;
;
; start1:
; for(i=0;i<16;i++)
clr R14
rjmp L53
L50:
.dbline 172
.dbline 173
ldd R16,y+0
ldd R17,y+1
rcall _senddata
.dbline 174
ldi R16,20
ldi R17,0
rcall _delayms
.dbline 175
ldd R0,y+0
ldd R1,y+1
lsl R0
rol R1
std y+1,R1
std y+0,R0
.dbline 176
mov R24,R0
mov R25,R1
adiw R24,1
std y+1,R25
std y+0,R24
.dbline 177
L51:
.dbline 171
inc R14
L53:
.dbline 171
mov R24,R14
cpi R24,16
brlo L50
L39:
.dbline 181
; {
; senddata(j);
; delayms(20); //左到右逐渐亮
; j=j<<1;
; j=j+1;
; }
;
;
; start2:
; for(i=0;i<15;i++) //左到右逐渐灭
clr R14
rjmp L57
L54:
.dbline 182
; {
.dbline 183
; if((i>5)&&(i<10))
ldi R24,5
cp R24,R14
brsh L58
mov R24,R14
cpi R24,10
brsh L58
.dbline 184
; {
.dbline 185
; for(h=0;h<20;h++)
clr R22
rjmp L63
L60:
.dbline 186
.dbline 187
mov R16,R12
mov R17,R13
rcall _senddata
.dbline 188
ldi R16,800
ldi R17,3
rcall _delayus
.dbline 189
clr R16
clr R17
rcall _senddata
.dbline 190
ldi R16,200
ldi R17,0
rcall _delayus
.dbline 191
L61:
.dbline 185
inc R22
L63:
.dbline 185
cpi R22,20
brlo L60
.dbline 192
; {
; senddata(k);
; delayus(800);
; senddata(0x00);
; delayus(200);
; }
; k=k<<1;
lsl R12
rol R13
.dbline 193
; }
rjmp L59
L58:
.dbline 194
; else if(i>10)
ldi R24,10
cp R24,R14
brsh L64
.dbline 195
; {
.dbline 196
; for(h=0;h<20;h++)
clr R22
rjmp L69
L66:
.dbline 197
.dbline 198
mov R16,R12
mov R17,R13
rcall _senddata
.dbline 199
ldi R16,600
ldi R17,2
rcall _delayus
.dbline 200
clr R16
clr R17
rcall _senddata
.dbline 201
ldi R16,400
ldi R17,1
rcall _delayus
.dbline 202
L67:
.dbline 196
inc R22
L69:
.dbline 196
cpi R22,20
brlo L66
.dbline 203
; {
; senddata(k);
; delayus(600);
; senddata(0x00);
; delayus(400);
; }
; k=k<<1;
lsl R12
rol R13
.dbline 205
;
; }
rjmp L65
L64:
.dbline 207
; else
; {
.dbline 208
; senddata(k);
mov R16,R12
mov R17,R13
rcall _senddata
.dbline 209
; delayms(20);
ldi R16,20
ldi R17,0
rcall _delayms
.dbline 210
; k=k<<1;
lsl R12
rol R13
.dbline 211
; }
L65:
L59:
.dbline 212
L55:
.dbline 181
inc R14
L57:
.dbline 181
mov R24,R14
cpi R24,15
brsh X6
rjmp L54
X6:
L41:
.dbline 216
; }
;
;
; start3:
; for(i=0;i<16;i++) //右到左逐渐亮
clr R14
rjmp L73
L70:
.dbline 217
.dbline 218
mov R16,R20
mov R17,R21
rcall _senddata
.dbline 219
ldi R16,20
ldi R17,0
rcall _delayms
.dbline 220
lsr R21
ror R20
.dbline 221
subi R20,0 ; offset = 16384
sbci R21,192
.dbline 222
L71:
.dbline 216
inc R14
L73:
.dbline 216
mov R24,R14
cpi R24,16
brlo L70
L43:
.dbline 227
; {
; senddata(m);
; delayms(20);
; m=m>>1;
; m=m+0x4000;
; }
;
;
; start4:
;
; for(i=0;i<16;i++) //右到左逐渐灭
clr R14
rjmp L77
L74:
.dbline 228
; {
.dbline 229
; if((i>5)&&(i<10))
ldi R24,5
cp R24,R14
brsh L78
mov R24,R14
cpi R24,10
brsh L78
.dbline 230
; {
.dbline 231
; for(h=0;h<20;h++)
clr R22
rjmp L83
L80:
.dbline 232
.dbline 233
mov R16,R10
mov R17,R11
rcall _senddata
.dbline 234
ldi R16,800
ldi R17,3
rcall _delayus
.dbline 235
clr R16
clr R17
rcall _senddata
.dbline 236
ldi R16,200
ldi R17,0
rcall _delayus
.dbline 237
L81:
.dbline 231
inc R22
L83:
.dbline 231
cpi R22,20
brlo L80
.dbline 238
; {
; senddata(n);
; delayus(800);
; senddata(0x00);
; delayus(200);
; }
; n=n>>1;
lsr R11
ror R10
.dbline 239
; }
rjmp L79
L78:
.dbline 240
; else if(i>10)
ldi R24,10
cp R24,R14
brsh L84
.dbline 241
; {
.dbline 242
; for(h=0;h<20;h++)
clr R22
rjmp L89
L86:
.dbline 243
.dbline 244
mov R16,R10
mov R17,R11
rcall _senddata
.dbline 245
ldi R16,600
ldi R17,2
rcall _delayus
.dbline 246
clr R16
clr R17
rcall _senddata
.dbline 247
ldi R16,400
ldi R17,1
rcall _delayus
.dbline 248
L87:
.dbline 242
inc R22
L89:
.dbline 242
cpi R22,20
brlo L86
.dbline 249
; {
; senddata(n);
; delayus(600);
; senddata(0x00);
; delayus(400);
; }
; n=n>>1;
lsr R11
ror R10
.dbline 251
;
; }
rjmp L85
L84:
.dbline 253
; else
; {
.dbline 254
; senddata(n);
mov R16,R10
mov R17,R11
rcall _senddata
.dbline 255
; delayms(20);
ldi R16,20
ldi R17,0
rcall _delayms
.dbline 256
; n=n>>1;
lsr R11
ror R10
.dbline 257
; }
L85:
L79:
.dbline 259
L75:
.dbline 227
inc R14
L77:
.dbline 227
mov R24,R14
cpi R24,16
brsh X7
rjmp L74
X7:
.dbline 261
L48:
.dbline 158
rjmp L47
X1:
.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
.area bss(ram, con, rel)
.dbfile F:\lesson\leson4.c
_rdata::
.blkb 1
.dbsym e rdata _rdata c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -