📄 三管.s
字号:
.module _三管.c
.area text(rom, con, rel)
.dbfile D:\afish\工作内容\DIY-08-16\M16\DIY-08-16\三管寻迹\三管.c
.dbfunc e delay_1ms _delay_1ms fV
; i -> R16,R17
.even
_delay_1ms::
.dbline -1
.dbline 18
; /***************************************************************************************/
; /* 广州双龙电子
; WWW.SL.COM.CN
;
; PC.7,PC.6,PC.5分别检测左中右三个光电管
; 功能:
; 三个红光电对管寻迹
; LED4~5是前进指示灯;LED1~3是左转指示灯;LED6~8右转指示灯
; Chip type : ATMEGA16
; Clock frequency : 8MHz
; */
; /***************************************************************************************/
;
; #include <iom16v.h>
; #include <macros.h>
; #define xtal 8
; void delay_1ms(void) //1ms延时
; {
.dbline 20
; unsigned int i;
; for(i=1;i<(unsigned int)(xtal*143-2);i++)
ldi R16,1
ldi R17,0
xjmp L5
L2:
.dbline 21
L3:
.dbline 20
subi R16,255 ; offset = 1
sbci R17,255
L5:
.dbline 20
cpi R16,118
ldi R30,4
cpc R17,R30
brlo L2
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfunc e delay _delay fV
; i -> R20,R21
; n -> R22,R23
.even
_delay::
xcall push_gset2
movw R22,R16
.dbline -1
.dbline 24
; ;
; }
; void delay(unsigned int n)
; {
.dbline 26
; unsigned int i;
; for(i=0;i<n;i++)
clr R20
clr R21
xjmp L10
L7:
.dbline 27
xcall _delay_1ms
L8:
.dbline 26
subi R20,255 ; offset = 1
sbci R21,255
L10:
.dbline 26
cp R20,R22
cpc R21,R23
brlo L7
.dbline -2
L6:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r n 22 i
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 30
; delay_1ms();
; }
; void main(void)
; {
.dbline 31
; DDRA=0xff; //初始化端口
ldi R24,255
out 0x1a,R24
.dbline 32
; PORTA=0xff;
out 0x1b,R24
.dbline 33
; DDRD=0xf0;
ldi R24,240
out 0x11,R24
.dbline 34
; PORTD=0x0f;
ldi R24,15
out 0x12,R24
.dbline 35
; DDRC=0x00;
clr R2
out 0x14,R2
.dbline 36
; PORTC=0xff;
ldi R24,255
out 0x15,R24
.dbline 37
; for(;;)
L12:
.dbline 38
; {
.dbline 39
; switch(PINC&0xe0)
in R20,0x13
clr R21
andi R20,224
andi R21,0
cpi R20,96
ldi R30,0
cpc R21,R30
brne X3
xjmp L22
X3:
ldi R24,96
ldi R25,0
cp R24,R20
cpc R25,R21
brlt L28
L27:
cpi R20,32
ldi R30,0
cpc R21,R30
brne X4
xjmp L20
X4:
ldi R24,32
ldi R25,0
cp R24,R20
cpc R25,R21
brlt L30
L29:
cpi R20,0
cpc R20,R21
breq L19
X0:
xjmp L12
L30:
cpi R20,64
ldi R30,0
cpc R21,R30
brne X5
xjmp L21
X5:
xjmp L12
L28:
cpi R20,160
ldi R30,0
cpc R21,R30
brne X6
xjmp L24
X6:
ldi R24,160
ldi R25,0
cp R24,R20
cpc R25,R21
brlt L32
L31:
cpi R20,128
ldi R30,0
cpc R21,R30
brne X7
xjmp L23
X7:
xjmp L12
L32:
cpi R20,192
ldi R30,0
cpc R21,R30
brne X8
xjmp L25
X8:
cpi R20,192
ldi R30,0
cpc R21,R30
brge X9
xjmp L12
X9:
L33:
cpi R20,224
ldi R30,0
cpc R21,R30
brne X10
xjmp L26
X10:
xjmp L12
X1:
.dbline 40
; {
L19:
.dbline 41
; case 0x00:PORTD=0x5F ;PORTA=0xff; delay(1);break; //出界,后退探测,熄灭全部LED
ldi R24,95
out 0x12,R24
.dbline 41
ldi R24,255
out 0x1b,R24
.dbline 41
ldi R16,1
ldi R17,0
xcall _delay
.dbline 41
xjmp L12
L20:
.dbline 42
; case 0x20:PORTD=0x90 ;PORTA=0xf8; delay(1);break; //转右,点亮右转指示灯
ldi R24,144
out 0x12,R24
.dbline 42
ldi R24,248
out 0x1b,R24
.dbline 42
ldi R16,1
ldi R17,0
xcall _delay
.dbline 42
xjmp L12
L21:
.dbline 43
; case 0x40:PORTD=0xaf ;PORTA=0xe7; delay(1);break; // 前进,点亮前进指示灯
ldi R24,175
out 0x12,R24
.dbline 43
ldi R24,231
out 0x1b,R24
.dbline 43
ldi R16,1
ldi R17,0
xcall _delay
.dbline 43
xjmp L12
L22:
.dbline 44
; case 0x60:PORTD=0xaf ;PORTA=0xe7; delay(1);break; //前进,点亮前进指示灯
ldi R24,175
out 0x12,R24
.dbline 44
ldi R24,231
out 0x1b,R24
.dbline 44
ldi R16,1
ldi R17,0
xcall _delay
.dbline 44
xjmp L12
L23:
.dbline 45
; case 0x80:PORTD=0x60 ;PORTA=0x1f; delay(1);break; //转左,点亮左转指示灯
ldi R24,96
out 0x12,R24
.dbline 45
ldi R24,31
out 0x1b,R24
.dbline 45
ldi R16,1
ldi R17,0
xcall _delay
.dbline 45
xjmp L12
L24:
.dbline 46
; case 0xa0:PORTD=0xaf ;PORTA=0xe7; delay(1);break; //直行,点亮前进指示灯
ldi R24,175
out 0x12,R24
.dbline 46
ldi R24,231
out 0x1b,R24
.dbline 46
ldi R16,1
ldi R17,0
xcall _delay
.dbline 46
xjmp L12
L25:
.dbline 47
; case 0xc0:PORTD=0xaf ;PORTA=0x0e7; delay(1);break; //前进,点亮前进指示灯
ldi R24,175
out 0x12,R24
.dbline 47
ldi R24,231
out 0x1b,R24
.dbline 47
ldi R16,1
ldi R17,0
xcall _delay
.dbline 47
xjmp L12
L26:
.dbline 48
ldi R24,144
out 0x12,R24
.dbline 48
ldi R24,31
out 0x1b,R24
.dbline 48
ldi R16,1
ldi R17,0
xcall _delay
.dbline 48
.dbline 50
.dbline 37
.dbline 37
xjmp L12
X2:
.dbline -2
L11:
.dbline 0 ; func end
ret
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -