📄 sl3010.lis
字号:
.module sl3010.c
.area text(rom, con, rel)
0000 .dbfile E:\icc\iccavr\sl3010\sl3010\sl3010.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 80
0000 ; //sl3010.c sl3010机器人常用函数库
0000 ; #include <io8515v.h>
0000 ;
0000 ; // 更新日期: 2003.03.18
0000 ;
0000 ; /*
0000 ; void port_init(); //PA,PB,PC,PD 初始化
0000 ; void delay_us(int time); //微妙级延时
0000 ; void delay_ms(unsigned int time);//毫秒级延时
0000 ; void sw_touch(); //检测轻触开关
0000 ; void mic_startup(); //等待声控启动
0000 ; void remote_auto_time(); //遥控器控制直行和转弯时间
0000 ; void turn_right(); //右转
0000 ; void turn_left(); //左转
0000 ; void turn_right_s(); //慢速右转
0000 ; void turn_left_s(); //慢速左转
0000 ; void backward(); //后退
0000 ; void forward(); //前行
0000 ; void stop(); //停止运动
0000 ; */
0000 ; /*
0000 ; sl-3010 运行不同的程序其对应的工作状态由 work_status 变量指示
0000 ; 对应数据表如下:
0000 ; 程序名 程序功能简介 work_status 值
0000 ; cny_car 程序 白底黑线,探黑线行走 0x10
0000 ; xuanya_car 走悬崖,避障碍 0x20
0000 ; music_car 音乐车 0x30
0000 ; led_car 霓虹灯 0x40
0000 ; auto_car1 自走车 0x51
0000 ; auto_car8 走<8>字 0x50
0000 ; remote_car 智能遥控机器人 0x60
0000 ; trace_light 追光行进机器人 0x70
0000 ; remote_light 遥控和追光 0x67
0000 ; ……
0000 ; */
0000 ; // 电机驱动信号 led灯指示电机状态
0000 ; //PORTD = 0xA0;//前行 //1010 0000//PORTA = 0xC3;//1100,0011
0000 ; //PORTD = 0x90;//快速左转//1001 0000//PORTA = 0x33;//0011,0011
0000 ; //PORTD = 0x80;//慢速左转//1000 0000//PORTA = 0xF3;//1111,0011
0000 ; //PORTD = 0x60;//快速右转//0110 0000//PORTA = 0xCC;//1100,1100
0000 ; //PORTD = 0x20;//慢速右转//0010 0000//PORTA = 0xCF;//1100,1111
0000 ; //PORTD = 0x50;//后退 //0101 0000//PORTA = 0x3C;//0011,1100
0000 ;
0000 ; //#define A 0x04 //0b0000,0100
0000 ; //#define B 0x02 //0b0000,0010
0000 ; //#define C 0x08 //0b0000,1000
0000 ; //#define D 0x01 //0b0000,0001
0000 ;
0000 ;
0000 ; /* 音阶常数=65536-8000000/8/2/f */
0000 ; #define DO 64580 //523
0000 ; #define RE 64684 //587
0000 ; #define MI 64777 //659
0000 ; #define FA 64820 //698
0000 ; #define SO 64898 //784
0000 ; #define LA 64968 //880
0000 ; #define TI 65030 //988
0000 ; #define DO_H 65058 //1046
0000 ; #define RE_H 65110 //1174
0000 ; #define MI_H 65157 //1318
0000 ; #define FA_H 65178 //1397
0000 ; #define SO_H 65217 //1568
0000 ; #define LA_H 65252 //1760
0000 ; #define TI_H 65283 //1976
0000 ; #define DO_HH 65297 //2093
0000 ; /* 位操作宏 */
0000 ; #define set_bit(x,y) (x|=(1<<y))
0000 ; #define clr_bit(x,y) (x&=~(1<<y))
0000 ; #define get_bit(x,y) (x&(1<<y))
0000 ;
0000 ; #define fosc 8000000
0000 ; #define baud 19200
0000 ; #define device 0x38
0000 ;
0000 ; #define touch_time 250
0000 ;
0000 ; unsigned char work_status;
0000 ;
0000 ; void port_init(void)
0000 ; {//PA,PB,PC,PD 初始化
0000 .dbline 81
0000 ; DDRA = 0xFF;PORTA = 0xFF; //PA口输出,接8路LED指示灯
0000 8FEF ldi R24,255
0002 8ABB out 0x1a,R24
0004 .dbline 81
0004 8BBB out 0x1b,R24
0006 .dbline 82
0006 ; DDRB = 0x80;PORTB = 0xFF; //PB7输出口,PB6~PB4输入(轻触开关)PB4~PB0输入(遥控器)
0006 80E8 ldi R24,128
0008 87BB out 0x17,R24
000A .dbline 82
000A 8FEF ldi R24,255
000C 88BB out 0x18,R24
000E .dbline 83
000E ; DDRC = 0x01;PORTC = 0xFF; //PC0蜂鸣器输出,PC7~PC1检测信号输入端
000E 81E0 ldi R24,1
0010 84BB out 0x14,R24
0012 .dbline 83
0012 8FEF ldi R24,255
0014 85BB out 0x15,R24
0016 .dbline 84
0016 ; DDRD = 0xF0;PORTD = 0xFF; //PD7~PD4输出驱动电机,PD3~PD0输入
0016 80EF ldi R24,240
0018 81BB out 0x11,R24
001A .dbline 84
001A 8FEF ldi R24,255
001C 82BB out 0x12,R24
001E .dbline -2
001E .dbline 85
001E ; }
001E L1:
001E .dbline 0 ; func end
001E 0895 ret
0020 .dbend
0020 .dbfunc e delay_us _delay_us fV
0020 ; time -> R16,R17
.even
0020 _delay_us::
0020 .dbline -1
0020 .dbline 88
0020 ;
0020 ; void delay_us(int time)
0020 ; {//微秒级延时程序
0020 L3:
0020 .dbline 90
0020 ; do
0020 ; {
0020 .dbline 91
0020 ; time--;
0020 0150 subi R16,1
0022 1040 sbci R17,0
0024 .dbline 92
0024 ; }
0024 L4:
0024 .dbline 93
0024 ; while (time>1);
0024 81E0 ldi R24,1
0026 90E0 ldi R25,0
0028 8017 cp R24,R16
002A 9107 cpc R25,R17
002C CCF3 brlt L3
002E .dbline -2
002E .dbline 94
002E ; }
002E L2:
002E .dbline 0 ; func end
002E 0895 ret
0030 .dbsym r time 16 I
0030 .dbend
0030 .dbfunc e delay_ms _delay_ms fV
0030 ; time -> R20,R21
.even
0030 _delay_ms::
0030 00D0 rcall push_gset1
0032 402F mov R20,R16
0034 512F mov R21,R17
0036 .dbline -1
0036 .dbline 97
0036 ;
0036 ; void delay_ms(unsigned int time)
0036 ; {//毫秒级延时程序
0036 05C0 rjmp L8
0038 L7:
0038 .dbline 99
0038 .dbline 100
0038 08EE ldi R16,1000
003A 13E0 ldi R17,3
003C F1DF rcall _delay_us
003E .dbline 101
003E 4150 subi R20,1
0040 5040 sbci R21,0
0042 .dbline 102
0042 L8:
0042 .dbline 98
0042 ; while(time!=0)
0042 4030 cpi R20,0
0044 4507 cpc R20,R21
0046 C1F7 brne L7
0048 X0:
0048 .dbline -2
0048 .dbline 103
0048 ; {
0048 ; delay_us(1000);
0048 ; time--;
0048 ; }
0048 ; }
0048 L6:
0048 00D0 rcall pop_gset1
004A .dbline 0 ; func end
004A 0895 ret
004C .dbsym r time 20 i
004C .dbend
004C .dbfunc e turn_right _turn_right fV
.even
004C _turn_right::
004C .dbline -1
004C .dbline 106
004C ;
004C ; void turn_right()//右转
004C ; {
004C .dbline 107
004C ; PORTD = 0x60; //右转//0110 0000
004C 80E6 ldi R24,96
004E 82BB out 0x12,R24
0050 .dbline 108
0050 ; PORTA = 0xCC; //1100,1100 指示灯
0050 8CEC ldi R24,204
0052 8BBB out 0x1b,R24
0054 .dbline -2
0054 .dbline 109
0054 ; }
0054 L10:
0054 .dbline 0 ; func end
0054 0895 ret
0056 .dbend
0056 .dbfunc e turn_left _turn_left fV
.even
0056 _turn_left::
0056 .dbline -1
0056 .dbline 112
0056 ;
0056 ; void turn_left()//左转
0056 ; {
0056 .dbline 113
0056 ; PORTD = 0x90; //左转//1001 0000
0056 80E9 ldi R24,144
0058 82BB out 0x12,R24
005A .dbline 114
005A ; PORTA = 0x33; //0011,0011 指示灯
005A 83E3 ldi R24,51
005C 8BBB out 0x1b,R24
005E .dbline -2
005E .dbline 115
005E ; }
005E L11:
005E .dbline 0 ; func end
005E 0895 ret
0060 .dbend
0060 .dbfunc e turn_right_s _turn_right_s fV
.even
0060 _turn_right_s::
0060 .dbline -1
0060 .dbline 117
0060 ; void turn_right_s() //慢速右转
0060 ; {
0060 .dbline 118
0060 ; PORTD = 0x20; //慢速右转//0010 0000
0060 80E2 ldi R24,32
0062 82BB out 0x12,R24
0064 .dbline 119
0064 ; PORTA = 0xCF; //1100,1111
0064 8FEC ldi R24,207
0066 8BBB out 0x1b,R24
0068 .dbline -2
0068 .dbline 120
0068 ; }
0068 L12:
0068 .dbline 0 ; func end
0068 0895 ret
006A .dbend
006A .dbfunc e turn_left_s _turn_left_s fV
.even
006A _turn_left_s::
006A .dbline -1
006A .dbline 123
006A ;
006A ; void turn_left_s() //慢速左转
006A ; {
006A .dbline 124
006A ; PORTD = 0x80; //慢速左转//1000 0000
006A 80E8 ldi R24,128
006C 82BB out 0x12,R24
006E .dbline 125
006E ; PORTA = 0xF3; //1111,0011
006E 83EF ldi R24,243
0070 8BBB out 0x1b,R24
0072 .dbline -2
0072 .dbline 126
0072 ; }
0072 L13:
0072 .dbline 0 ; func end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -