📄 boat.lis
字号:
.module boat.c
.area text(rom, con, rel)
0000 .dbfile G:\汽艇\source\key_board\boat.c
0000 .dbfunc e delay_ms _delay_ms fV
0000 ; time -> R16,R17
.even
0000 _delay_ms::
0000 .dbline -1
0000 .dbline 69
0000 ; // Last modify time: 2004-8-16 15:18:53
0000 ; // Target : M16
0000 ; // Crystal: 8.0000Mhz
0000 ;
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ;
0000 ; #define uchar unsigned char
0000 ; #define uint unsigned int
0000 ; /*调速模块预定义*/
0000 ; #define MAX_SPEED 510
0000 ; #define MIN_SPEED -510
0000 ; #define L_ACCE_COUNT 2
0000 ; #define L_DECE_COUNT 2
0000 ; #define L_STEP 1
0000 ; #define R_ACCE_COUNT 2
0000 ; #define R_DECE_COUNT 2
0000 ; #define R_STEP 1
0000 ; #define SPEED_INC 5
0000 ;
0000 ; #define SET_L_DIR ( PORTB |= BIT(PB0) ) //电机方向控制I/O定义
0000 ; #define RST_L_DIR ( PORTB &= ~BIT(PB0) )
0000 ; #define SET_R_DIR ( PORTB |= BIT(PB1) )
0000 ; #define RST_R_DIR ( PORTB &= ~BIT(PB1) )
0000 ;
0000 ; typedef struct _trap{ int des_speed;
0000 ; int real_speed;
0000 ; uint acce_count;
0000 ; uint dece_count;
0000 ; uint counter;
0000 ; int step; //必须用int型,因为速度控制接口函数trap_ctrler的代码结构
0000 ; }trap;
0000 ; trap l_trap, r_trap;
0000 ; uint l_temp_speed, r_temp_speed;
0000 ; uint delay_counter;
0000 ; /*串口通讯模块预定义*/
0000 ; #define SCOM_BUF_LEN 20
0000 ; uchar tbuf[SCOM_BUF_LEN];
0000 ; uchar rbuf[SCOM_BUF_LEN];
0000 ; uint key_status;
0000 ; /*键盘模块预定义*/
0000 ; #define L_ACCE_KEY 0
0000 ; #define L_DECE_KEY 4
0000 ; #define L_RESUME_KEY 8
0000 ; #define L_STOP_KEY 12
0000 ; #define R_ACCE_KEY 3
0000 ; #define R_DECE_KEY 7
0000 ; #define R_RESUME_KEY 11
0000 ; #define R_STOP_KEY 15
0000 ; //
0000 ; #define L_ACCE_KEY_PRESS 7
0000 ; #define L_DECE_KEY_PRESS 6
0000 ; #define L_RESUME_KEY_PRESS 5
0000 ; #define L_STOP_KEY_PRESS 4
0000 ; #define R_ACCE_KEY_PRESS 3
0000 ; #define R_DECE_KEY_PRESS 2
0000 ; #define R_RESUME_KEY_PRESS 1
0000 ; #define R_STOP_KEY_PRESS 0
0000 ; uchar key_prev_status;
0000 ;
0000 ; void delay_ms( uint time );
0000 ; void rst_ctrl( void );
0000 ; void pwm_ctrler( trap *pt_l, trap *pt_r );
0000 ; void trap_ctrler( int l_des_speed, int r_des_speed );
0000 ; void key_process( uint key_buf );
0000 ;
0000 ; /**************************** 公共底层函数 ********************************/
0000 ; void delay_ms( uint time ) //毫秒级延时函数,占用系统时钟TIMER2
0000 ; {
0000 .dbline 70
0000 2224 clr R2
0002 3324 clr R3
0004 30922C00 sts _delay_counter+1,R3
0008 20922B00 sts _delay_counter,R2
000C 01C0 xjmp L5
000E L2:
000E .dbline 70
000E A895 wdr
0010 L3:
0010 .dbline 70
0010 L5:
0010 .dbline 70
0010 ; for( delay_counter = 0; delay_counter < time; ) WDR();
0010 20902B00 lds R2,_delay_counter
0014 30902C00 lds R3,_delay_counter+1
0018 2016 cp R2,R16
001A 3106 cpc R3,R17
001C C0F3 brlo L2
001E .dbline -2
001E .dbline 71
001E ; }
001E L1:
001E .dbline 0 ; func end
001E 0895 ret
0020 .dbsym r time 16 i
0020 .dbend
0020 .dbfunc e rst_ctrl _rst_ctrl fV
.even
0020 _rst_ctrl::
0020 .dbline -1
0020 .dbline 74
0020 ;
0020 ; void rst_ctrl( void )
0020 ; {
0020 .dbline 75
0020 ; l_trap.des_speed = 0;
0020 2224 clr R2
0022 3324 clr R3
0024 30923E00 sts _l_trap+1,R3
0028 20923D00 sts _l_trap,R2
002C .dbline 76
002C ; l_trap.real_speed = 0;
002C 30924000 sts _l_trap+2+1,R3
0030 20923F00 sts _l_trap+2,R2
0034 .dbline 77
0034 ; l_trap.acce_count = 0;
0034 30924200 sts _l_trap+4+1,R3
0038 20924100 sts _l_trap+4,R2
003C .dbline 78
003C ; l_trap.dece_count = 0;
003C 30924400 sts _l_trap+6+1,R3
0040 20924300 sts _l_trap+6,R2
0044 .dbline 79
0044 ; l_trap.counter = 0;
0044 30924600 sts _l_trap+8+1,R3
0048 20924500 sts _l_trap+8,R2
004C .dbline 80
004C ; l_trap.step = 4;
004C 84E0 ldi R24,4
004E 90E0 ldi R25,0
0050 90934800 sts _l_trap+10+1,R25
0054 80934700 sts _l_trap+10,R24
0058 .dbline 81
0058 ; l_temp_speed = 0;
0058 30923000 sts _l_temp_speed+1,R3
005C 20922F00 sts _l_temp_speed,R2
0060 .dbline 82
0060 ; r_trap.des_speed = 0;
0060 30923200 sts _r_trap+1,R3
0064 20923100 sts _r_trap,R2
0068 .dbline 83
0068 ; r_trap.real_speed = 0;
0068 30923400 sts _r_trap+2+1,R3
006C 20923300 sts _r_trap+2,R2
0070 .dbline 84
0070 ; r_trap.acce_count = 0;
0070 30923600 sts _r_trap+4+1,R3
0074 20923500 sts _r_trap+4,R2
0078 .dbline 85
0078 ; r_trap.dece_count = 0;
0078 30923800 sts _r_trap+6+1,R3
007C 20923700 sts _r_trap+6,R2
0080 .dbline 86
0080 ; r_trap.counter = 0;
0080 30923A00 sts _r_trap+8+1,R3
0084 20923900 sts _r_trap+8,R2
0088 .dbline 87
0088 ; r_trap.step = 4;
0088 90933C00 sts _r_trap+10+1,R25
008C 80933B00 sts _r_trap+10,R24
0090 .dbline 88
0090 ; r_temp_speed = 0;
0090 30922E00 sts _r_temp_speed+1,R3
0094 20922D00 sts _r_temp_speed,R2
0098 .dbline 89
0098 ; delay_counter = 0;
0098 30922C00 sts _delay_counter+1,R3
009C 20922B00 sts _delay_counter,R2
00A0 .dbline 90
00A0 ; key_status = 0;
00A0 30920200 sts _key_status+1,R3
00A4 20920100 sts _key_status,R2
00A8 .dbline 91
00A8 ; key_prev_status = 0;
00A8 20920000 sts _key_prev_status,R2
00AC .dbline -2
00AC .dbline 92
00AC ; }
00AC L6:
00AC .dbline 0 ; func end
00AC 0895 ret
00AE .dbend
00AE .dbfunc e port_init _port_init fV
.even
00AE _port_init::
00AE .dbline -1
00AE .dbline 95
00AE ;
00AE ; void port_init(void)
00AE ; {
00AE .dbline 96
00AE ; PORTA = 0xFF;
00AE 8FEF ldi R24,255
00B0 8BBB out 0x1b,R24
00B2 .dbline 97
00B2 ; DDRA = 0x00;
00B2 2224 clr R2
00B4 2ABA out 0x1a,R2
00B6 .dbline 98
00B6 ; PORTB = 0xFF;
00B6 88BB out 0x18,R24
00B8 .dbline 99
00B8 ; DDRB = 0x03;
00B8 83E0 ldi R24,3
00BA 87BB out 0x17,R24
00BC .dbline 100
00BC ; PORTC = 0xFF; //m103 output only
00BC 8FEF ldi R24,255
00BE 85BB out 0x15,R24
00C0 .dbline 101
00C0 ; DDRC = 0x00;
00C0 24BA out 0x14,R2
00C2 .dbline 102
00C2 ; PORTD = 0xFF;
00C2 82BB out 0x12,R24
00C4 .dbline 103
00C4 ; DDRD = 0x30;
00C4 80E3 ldi R24,48
00C6 81BB out 0x11,R24
00C8 .dbline -2
00C8 .dbline 104
00C8 ; }
00C8 L17:
00C8 .dbline 0 ; func end
00C8 0895 ret
00CA .dbend
00CA .dbfunc e timer1_init _timer1_init fV
.even
00CA _timer1_init::
00CA .dbline -1
00CA .dbline 111
00CA ;
00CA ; //TIMER1 initialisation - prescale:1
00CA ; // WGM: 6) PWM 9bit fast, TOP=0x01FF
00CA ; // desired value: 1Hz
00CA ; // actual value: 15625.000Hz (100.0%)
00CA ; void timer1_init(void)
00CA ; {
00CA .dbline 112
00CA ; TCCR1B = 0x00; //stop
00CA 2224 clr R2
00CC 2EBC out 0x2e,R2
00CE .dbline 113
00CE ; TCNT1H = 0xFE; //setup
00CE 8EEF ldi R24,254
00D0 8DBD out 0x2d,R24
00D2 .dbline 114
00D2 ; TCNT1L = 0x01;
00D2 81E0 ldi R24,1
00D4 8CBD out 0x2c,R24
00D6 .dbline 115
00D6 ; OCR1AH = 0x00;
00D6 2BBC out 0x2b,R2
00D8 .dbline 116
00D8 ; OCR1AL = 0x00;
00D8 2ABC out 0x2a,R2
00DA .dbline 117
00DA ; OCR1BH = 0x00;
00DA 29BC out 0x29,R2
00DC .dbline 118
00DC ; OCR1BL = 0x00;
00DC 28BC out 0x28,R2
00DE .dbline 119
00DE ; TCCR1A = 0xF2;
00DE 82EF ldi R24,242
00E0 8FBD out 0x2f,R24
00E2 .dbline 120
00E2 ; TCCR1B = 0x09; //start Timer
00E2 89E0 ldi R24,9
00E4 8EBD out 0x2e,R24
00E6 .dbline -2
00E6 .dbline 121
00E6 ; }
00E6 L18:
00E6 .dbline 0 ; func end
00E6 0895 ret
00E8 .dbend
00E8 .dbfunc e timer2_init _timer2_init fV
.even
00E8 _timer2_init::
00E8 .dbline -1
00E8 .dbline 128
00E8 ;
00E8 ; //TIMER2 initialisation - prescale:64
00E8 ; // WGM: Normal
00E8 ; // desired value: 1mSec
00E8 ; // actual value: 1.000mSec (0.0%)
00E8 ; void timer2_init(void)
00E8 ; {
00E8 .dbline 129
00E8 ; TCCR2 = 0x00; //stop
00E8 2224 clr R2
00EA 25BC out 0x25,R2
00EC .dbline 130
00EC ; ASSR = 0x00; //set async mode
00EC 22BC out 0x22,R2
00EE .dbline 131
00EE ; TCNT2 = 0x83; //setup
00EE 83E8 ldi R24,131
00F0 84BD out 0x24,R24
00F2 .dbline 132
00F2 ; OCR2 = 0x7D;
00F2 8DE7 ldi R24,125
00F4 83BD out 0x23,R24
00F6 .dbline 133
00F6 ; TCCR2 = 0x04; //start
00F6 84E0 ldi R24,4
00F8 85BD out 0x25,R24
00FA .dbline -2
00FA .dbline 134
00FA ; }
00FA L19:
00FA .dbline 0 ; func end
00FA 0895 ret
00FC .dbend
00FC .dbfunc e uart0_init _uart0_init fV
.even
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -