📄 m8pwm.lis
字号:
.module M8pwm.c
.area vector(rom, abs)
.org 16
0010 46C0 rjmp _Timer1_vof
.org 28
001C 3CC0 rjmp _Adc_isr
.org 2
0002 B8C0 rjmp _int0_isr
.org 4
0004 E2C0 rjmp _int1_isr
.org 22
0016 05C1 rjmp _uart0_rx_isr
.area data(ram, con, rel)
0000 _AdResult::
0000 .blkb 1
.area idata
0000 10 .byte 16
.area data(ram, con, rel)
0001 .dbfile D:\EBIKE\eb_pro\M8ProV\M8pwm.c
0001 .dbsym e AdResult _AdResult c
0001 _SpeedVal::
0001 .blkb 1
.area idata
0001 00 .byte 0
.area data(ram, con, rel)
0002 .dbfile D:\EBIKE\eb_pro\M8ProV\M8pwm.c
0002 .dbsym e SpeedVal _SpeedVal c
0002 _RolCount::
0002 .blkb 1
.area idata
0002 00 .byte 0
.area data(ram, con, rel)
0003 .dbfile D:\EBIKE\eb_pro\M8ProV\M8pwm.c
0003 .dbsym e RolCount _RolCount c
0003 _RolNum::
0003 .blkb 2
.area idata
0003 0000 .word 0
.area data(ram, con, rel)
0005 .dbfile D:\EBIKE\eb_pro\M8ProV\M8pwm.c
0005 .dbsym e RolNum _RolNum i
0005 _KiloMeter::
0005 .blkb 2
.area idata
0005 0000 .word 0
.area data(ram, con, rel)
0007 .dbfile D:\EBIKE\eb_pro\M8ProV\M8pwm.c
0007 .dbsym e KiloMeter _KiloMeter i
0007 _OldKiloMeter::
0007 .blkb 2
.area idata
0007 0000 .word 0
.area data(ram, con, rel)
0009 .dbfile D:\EBIKE\eb_pro\M8ProV\M8pwm.c
0009 .dbsym e OldKiloMeter _OldKiloMeter i
0009 _TenMeter::
0009 .blkb 1
.area idata
0009 00 .byte 0
.area data(ram, con, rel)
000A .dbfile D:\EBIKE\eb_pro\M8ProV\M8pwm.c
000A .dbsym e TenMeter _TenMeter c
000A _UartBufCount::
000A .blkb 1
.area idata
000A 00 .byte 0
.area data(ram, con, rel)
000B .dbfile D:\EBIKE\eb_pro\M8ProV\M8pwm.c
000B .dbsym e UartBufCount _UartBufCount c
000B _LrLedReg::
000B .blkb 1
.area idata
000B 00 .byte 0
.area data(ram, con, rel)
000C .dbfile D:\EBIKE\eb_pro\M8ProV\M8pwm.c
000C .dbsym e LrLedReg _LrLedReg c
000C _BrakeFlag::
000C .blkb 1
.area idata
000C 00 .byte 0
.area data(ram, con, rel)
000D .dbfile D:\EBIKE\eb_pro\M8ProV\M8pwm.c
000D .dbsym e BrakeFlag _BrakeFlag c
.area text(rom, con, rel)
0000 .dbfile D:\EBIKE\eb_pro\M8ProV\M8pwm.c
0000 .dbfunc e Port_init _Port_init fV
.even
0000 _Port_init::
0000 .dbline -1
0000 .dbline 64
0000 ; /******************************************************************************
0000 ; 程序名称:电机驱动程序
0000 ; 运行平台:ATMaga8 12m晶振
0000 ; 程序说明:通过输入来调节pw波
0000 ; pc3 作为ad输入
0000 ;
0000 ; PD5=运行状态指示灯
0000 ; pb0=左转灯,pb1=右转灯,pb=0时灯亮, 左右灯同时亮起为刹车状态
0000 ; 2007-12-24
0000 ; ******************************************************************************/
0000 ; #include <iom8v.h>
0000 ; #include <macros.h>
0000 ;
0000 ; #pragma interrupt_handler Timer1_vof:9 //计算速度信息
0000 ; #pragma interrupt_handler Adc_isr:15 // 采集握把信号
0000 ; #pragma interrupt_handler int0_isr:2 //用于计算每秒钟后轮转过的半圈数
0000 ; #pragma interrupt_handler int1_isr:3 //用于相应刹车
0000 ; #pragma interrupt_handler uart0_rx_isr:12//串口接收程序
0000 ;
0000 ; #define uchar unsigned char
0000 ; #define uint unsigned int
0000 ; #define BRAKE_LED_ON PORTC |=0x03
0000 ; #define BRAKE_LED_OFF PORTC &=0xfc
0000 ; #define LEFT_LED_ON PORTC |=0x01
0000 ; #define LEFT_LED_OFF PORTC &=0xfe
0000 ; #define RIGHT_LED_ON PORTC |=0x02
0000 ; #define RIGHT_LED_OFF PORTC &=0xfd
0000 ; #define EEP_RANG 170
0000 ; //Variable
0000 ; unsigned char AdResult=0x10; //保存AD结果
0000 ; unsigned char SpeedVal=0; //速度
0000 ; unsigned char RolCount=0; //每秒钟后轮转过的半圈数
0000 ; unsigned int RolNum=0; //记录总的圈数据,满1000米后将里程写入eeprom
0000 ; unsigned int KiloMeter=0;//里程数据
0000 ; unsigned int OldKiloMeter=0; //前一里程数据
0000 ; unsigned char TenMeter=0; //十米里程计数
0000 ; unsigned char UartBuf[10],UartBufCount=0;
0000 ; unsigned char LrLedReg=0; //用于保存刹车灯的状态,以便在刹车释放后回复
0000 ; unsigned char BrakeFlag=0; //0=刹车松开,0x55=刹车
0000 ;
0000 ;
0000 ;
0000 ; /***************************************************************************/
0000 ;
0000 ; /***************************************************************************/
0000 ; void Port_init(void);
0000 ; void uart0_init(void);
0000 ; void uart0_tx(unsigned char tdata);
0000 ; void tx_pack(uchar mode);
0000 ; void Timer0_init(void);
0000 ; void Timer1_init(void);
0000 ; void Timer2_init(void);
0000 ; void SpeedControl(void);
0000 ; void Timer1a_c(void);
0000 ; void Hardware_init(void);
0000 ; void EepromWrite(uchar Address, uchar Data);
0000 ; uchar EepromRead(uchar Address);
0000 ; void Delay_ms(unsigned int delay_time);
0000 ; void adc_init(void);
0000 ; /***************************************************************************
0000 ; 端口初始化
0000 ; ****************************************************************************/
0000 ; void Port_init(void)
0000 ; {
0000 .dbline 66
0000 ;
0000 ; PORTB=0b11110111;
0000 87EF ldi R24,247
0002 88BB out 0x18,R24
0004 .dbline 67
0004 ; DDRB =0b00001000; //PB3用来输出pw波
0004 88E0 ldi R24,8
0006 87BB out 0x17,R24
0008 .dbline 68
0008 ; PORTC=0b11111100; //上拉使能
0008 8CEF ldi R24,252
000A 85BB out 0x15,R24
000C .dbline 69
000C ; DDRC =0b00100011; //pc0,1=LR_led,Pc5=led in
000C 83E2 ldi R24,35
000E 84BB out 0x14,R24
0010 .dbline -2
0010 L1:
0010 .dbline 0 ; func end
0010 0895 ret
0012 .dbend
0012 .dbfunc e uart0_init _uart0_init fV
.even
0012 _uart0_init::
0012 .dbline -1
0012 .dbline 82
0012 ; //PORTD=0xff;
0012 ; //DDRD =0xe0; // d6d7=lr_led
0012 ;
0012 ; }
0012 ; /***************************************************************************
0012 ; 串口0初始化
0012 ; ****************************************************************************/
0012 ; // desired baud rate: 9600
0012 ; // actual: baud rate:9615 (0.2%)
0012 ; // char size: 8 bit
0012 ; // parity: Disabled
0012 ; void uart0_init(void)
0012 ; {
0012 .dbline 83
0012 ; UCSRB = 0x00; //disable while setting baud rate
0012 2224 clr R2
0014 2AB8 out 0xa,R2
0016 .dbline 84
0016 ; UCSRA = 0x00;
0016 2BB8 out 0xb,R2
0018 .dbline 85
0018 ; UCSRC = BIT(URSEL) | 0x06;
0018 86E8 ldi R24,134
001A 80BD out 0x20,R24
001C .dbline 86
001C ; UBRRL = 0x4D; //set baud rate lo
001C 8DE4 ldi R24,77
001E 89B9 out 0x9,R24
0020 .dbline 87
0020 ; UBRRH = 0x00; //set baud rate hi
0020 20BC out 0x20,R2
0022 .dbline 88
0022 ; UCSRB = 0x98;
0022 88E9 ldi R24,152
0024 8AB9 out 0xa,R24
0026 .dbline -2
0026 L2:
0026 .dbline 0 ; func end
0026 0895 ret
0028 .dbend
0028 .dbfunc e Timer1_init _Timer1_init fV
.even
0028 _Timer1_init::
0028 .dbline -1
0028 .dbline 96
0028 ; }
0028 ;
0028 ; /***************************************************************************
0028 ; 定时器1初始化
0028 ; ****************************************************************************/
0028 ; //定时器1主要用来做速度扫描
0028 ; void Timer1_init(void)
0028 ; {
0028 .dbline 98
0028 ; //定时器1部分 ,1024分频,定时1s
0028 ; TCCR1B = 0x00; //stop
0028 2224 clr R2
002A 2EBC out 0x2e,R2
002C .dbline 99
002C ; TCNT1H = 0xD2; //setup
002C 82ED ldi R24,210
002E 8DBD out 0x2d,R24
0030 .dbline 100
0030 ; TCNT1L = 0x3A;
0030 8AE3 ldi R24,58
0032 8CBD out 0x2c,R24
0034 .dbline 101
0034 ; OCR1AH = 0x3D;
0034 8DE3 ldi R24,61
0036 8BBD out 0x2b,R24
0038 .dbline 102
0038 ; OCR1AL = 0x09;
0038 89E0 ldi R24,9
003A 8ABD out 0x2a,R24
003C .dbline 103
003C ; OCR1BH = 0x3D;
003C 8DE3 ldi R24,61
003E 89BD out 0x29,R24
0040 .dbline 104
0040 ; OCR1BL = 0x09;
0040 89E0 ldi R24,9
0042 88BD out 0x28,R24
0044 .dbline 107
0044 ; //OCR1CH = $OCR1CH$;
0044 ; //OCR1CL = $OCR1CL$;
0044 ; ICR1H = 0x3D;
0044 8DE3 ldi R24,61
0046 87BD out 0x27,R24
0048 .dbline 108
0048 ; ICR1L = 0x09;
0048 89E0 ldi R24,9
004A 86BD out 0x26,R24
004C .dbline 109
004C ; TCCR1A = 0x00;
004C 2FBC out 0x2f,R2
004E .dbline 110
004E ; TCCR1B = 0x05; //start Timer
004E 85E0 ldi R24,5
0050 8EBD out 0x2e,R24
0052 .dbline -2
0052 L3:
0052 .dbline 0 ; func end
0052 0895 ret
0054 .dbend
0054 .dbfunc e Timer2_init _Timer2_init fV
.even
0054 _Timer2_init::
0054 .dbline -1
0054 .dbline 119
0054 ; }
0054 ; /***************************************************************************
0054 ; Timer2初始化 ,PWM
0054 ; ****************************************************************************/
0054 ; // desired value: 20KHz
0054 ; // actual value: 20.000KHz (0.0%)
0054 ; //定时器0用来产生PW波
0054 ; void Timer2_init(void)
0054 ; {
0054 .dbline 120
0054 ; TCCR2 = 0x00; //stop
0054 2224 clr R2
0056 25BC out 0x25,R2
0058 .dbline 121
0058 ; ASSR = 0x00; //set async mode
0058 22BC out 0x22,R2
005A .dbline 122
005A ; TCNT2 = 0x0; //setup
005A 24BC out 0x24,R2
005C .dbline 123
005C ; OCR2 = 0x1;//设置OCR2
005C 81E0 ldi R24,1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -