⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 boat.lis

📁 AVR单片机开发的键盘处理程序C源代码希望对单片机初学选手有点帮助
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .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 + -