📄 双管寻迹.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 19
; /********************************************************************************/
; /*
; 广州双龙电子
; WWW.SL.COM.CN
; 接线方法:
; 两个光电管并排在小车前方中间,即PC.7,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 21
; unsigned int i;
; for(i=1;i<(unsigned int)(xtal*143-2);i++)
ldi R16,1
ldi R17,0
xjmp L5
L2:
.dbline 22
L3:
.dbline 21
subi R16,255 ; offset = 1
sbci R17,255
L5:
.dbline 21
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 25
; ;
; }
; void delay(unsigned int n)
; {
.dbline 27
; unsigned int i;
; for(i=0;i<n;i++)
clr R20
clr R21
xjmp L10
L7:
.dbline 28
xcall _delay_1ms
L8:
.dbline 27
subi R20,255 ; offset = 1
sbci R21,255
L10:
.dbline 27
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 31
; delay_1ms();
; }
; void main(void)
; {
.dbline 32
; DDRA=0xff; //初始化端口
ldi R24,255
out 0x1a,R24
.dbline 33
; PORTA=0xff;
out 0x1b,R24
.dbline 34
; DDRD=0xf0;
ldi R24,240
out 0x11,R24
.dbline 35
; PORTD=0x0f;
ldi R24,15
out 0x12,R24
.dbline 36
; DDRC=0x00;
clr R2
out 0x14,R2
.dbline 37
; PORTC=0xff;
ldi R24,255
out 0x15,R24
.dbline 38
; for(;;)
L12:
.dbline 39
; {
.dbline 40
; switch(PINC&0xA0)
in R20,0x13
clr R21
andi R20,160
andi R21,0
cpi R20,32
ldi R30,0
cpc R21,R30
breq L21
ldi R24,32
ldi R25,0
cp R24,R20
cpc R25,R21
brlt L24
L23:
cpi R20,0
cpc R20,R21
breq L22
X0:
xjmp L12
L24:
cpi R20,128
ldi R30,0
cpc R21,R30
breq L20
cpi R20,128
ldi R30,0
cpc R21,R30
brlt L12
L25:
cpi R20,160
ldi R30,0
cpc R21,R30
breq L19
xjmp L12
X1:
.dbline 41
; {
L19:
.dbline 42
; case 0xA0:PORTD=0xAF ;PORTA=0xE7; delay(1);break; //直行,点亮前进指示灯
ldi R24,175
out 0x12,R24
.dbline 42
ldi R24,231
out 0x1b,R24
.dbline 42
ldi R16,1
ldi R17,0
xcall _delay
.dbline 42
xjmp L12
L20:
.dbline 43
; case 0x80:PORTD=0x60 ;PORTA=0x1F; delay(1);break; //转左,点亮左转指示灯
ldi R24,96
out 0x12,R24
.dbline 43
ldi R24,31
out 0x1b,R24
.dbline 43
ldi R16,1
ldi R17,0
xcall _delay
.dbline 43
xjmp L12
L21:
.dbline 44
; case 0x20:PORTD=0x90 ;PORTA=0xF8; delay(1);break; //转右,点亮右转指示灯
ldi R24,144
out 0x12,R24
.dbline 44
ldi R24,248
out 0x1b,R24
.dbline 44
ldi R16,1
ldi R17,0
xcall _delay
.dbline 44
xjmp L12
L22:
.dbline 45
ldi R24,175
out 0x12,R24
.dbline 45
ldi R24,255
out 0x1b,R24
.dbline 45
ldi R16,1
ldi R17,0
xcall _delay
.dbline 45
.dbline 47
.dbline 38
.dbline 38
xjmp L12
X2:
.dbline -2
L11:
.dbline 0 ; func end
ret
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -