📄 x36vznys.lst
字号:
MPASM 4.00 Released X36VZNYS.ASM 2-7-2007 13:57:55 PAGE 1
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00001 ;****************************************************************
00002 ;程序名称: 48V有刷智能控制器
00003 ;单片机 : PIC16F716 4M晶振
00004 ;功能 : 转把调速度,助力,定速,刹车
00005 ; 欠压保护,过流保护,限流保护
00006 ;编写日期:2006年9月21日
00007 ;修改日期:2007年1月14日 修改成48V电动三轮车控制器
00008 ;****************************************************************
00009 ;list p = 16f716 ;4M晶振
00010 #include"p16f716.inc"
00001 LIST
00002 ; P16F716.INC Standard Header File, Version 1.01 Microchip Technology, Inc.
00257 LIST
00011 ;----------------------------------------------------------------
2007 1F76 00012 __CONFIG(0X1F76) ;配置位 WDT开 代码保护开
00013 ;-------------参数------------------------------------------------
00014 ;#define QYDW 0x8F ;欠压值 ;0X8F
00015 ;#define QYUP 0x98 ;欠压重开值 ;0X98
00016 #define QYDW 0x9C ;欠压值 ;0X95
00017 #define QYUP 0xA5 ;欠压重开值 ;0X9A
00018 #define QYXS 0xA9 ;欠压报警输出
00019 #define DLXZ 0x4a ;限制电流值
00020 #define TSON 0x52 ;转把开启电压1.6V
00021 #define YSTS 0x0C ;转把有效确定延时计数次数
00022 #define LOSTS 0xE5 ;转把掉线保护电压 4.4V
00023 #define _BANK STATUS,5 ;BANK1,换页
00024 ;----------I/0--------------------------------------------------
00025 #define PGL PORTB,0 ;过流检测 RB0
00026 #define PDS PORTB,1 ;巡航 定速 RB1
00027 #define PSC PORTB,2 ;刹车(低电平)RB2
00028 #define PZL PORTA,2 ;助力(脉宽) RA2
00029 #define PQY PORTB,6 ;欠压报警闪烁输出(初始1)
00030 ;----------寄存器------------------------------------------------
00031 ;PWM
00000020 00032 IN_PWM EQU 0X20 ;外设输入PWM(转把\助力)
00000021 00033 PWM EQU 0X21 ;PWM脉宽输出
00000022 00034 PWML EQU 0X22 ;PWM脉宽输出低2位
00000023 00035 PWMH EQU 0X23 ;PWM脉宽输出高8位
0000003F 00036 IN_PWM_TM EQU 0X3F ;PWM加延时
00037 ;转把
00000024 00038 TSS EQU 0X24 ;转把有效确定延时
00000025 00039 TS_V EQU 0X25 ;转把采样电压
00000026 00040 TS_PWS EQU 0X26
00041 ;电池电压
00000027 00042 DC_V EQU 0X27 ;电池采样电压
00000028 00043 DC_L EQU 0X28 ;电压高位
00000029 00044 DC_H EQU 0X29 ;电压低位
0000002A 00045 DC_CONT EQU 0X2A ;电压采样次数
00000042 00046 DC_YTM EQU 0X42 ;二次欠压延长计数()
00000043 00047 QYBJ_TM EQU 0X43 ;欠压报警延时间
00000044 00048 BJ_T EQU 0X44 ;亮灭交替次数
00000045 00049 BJ_CT EQU 0X45 ;亮灭交替计数
00050 ;电流
MPASM 4.00 Released X36VZNYS.ASM 2-7-2007 13:57:55 PAGE 2
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0000002B 00051 DL_V EQU 0X2B ;电流采样电压
0000002C 00052 DL_PWS EQU 0X2C
00053 ;助力
0000002D 00054 ZL_1S EQU 0X2D ;助力1.6S延时
0000002E 00055 ZL_TIM EQU 0X2E ;助力脉宽计数
0000002F 00056 ZL_TIM_H EQU 0X2F ;助力高脉宽计数
00000030 00057 ZL_TIM_L EQU 0X30 ;助力低脉宽计数
00000031 00058 ZL_HL EQU 0X31 ;助力中断值
00000032 00059 ZL_V EQU 0X32 ;助力中断输出值
00000033 00060 ZLTP EQU 0X33 ;助力处理缓冲
00000034 00061 ZL_PWS EQU 0X34 ;助力PWM调整值
00062 ;定速
00000035 00063 DS_TIM EQU 0X35 ;定速键延时
00064 ;AD中断
00000036 00065 ADTP0 EQU 0X36 ;AD转换通道控制
00000037 00066 ADTP1 EQU 0X37
00067 ;定时器1中断
00000038 00068 TIMTP0 EQU 0X38 ;定时器1定时控制
00000039 00069 TIMTP1 EQU 0X39
0000003A 00070 RS EQU 0X3A ;软件延时间
0000003B 00071 RSS EQU 0X3B ;软件延时间
00072 ;位定义
0000003C 00073 ADWEI EQU 0X3C ;AD位
0000003D 00074 PWMWEI EQU 0X3D ;PWM控制位
0000003E 00075 WEI EQU 0X3E
00076
00077 #define OFF PWMWEI,0 ;复位标志位
00078 #define PWM_OUT PWMWEI,1 ;PWM输出标志位
00079 #define INCPWM PWMWEI,2 ;加PWM
00080 #define DECPWM PWMWEI,3 ;减PWM
00081 #define DS_ON PWMWEI,4 ;定速度键有效标志
00082 #define DS_DW PWMWEI,5 ;定速度键按下效标志
00083 #define ZL_ON PWMWEI,6 ;助力模式启动
00084 #define ZL_PZL PWMWEI,7 ;助力原来状态
00085
00086 #define TS_AD ADWEI,0 ;转把电压在转换
00087 #define DC_AD ADWEI,1
00088 #define DL_AD ADWEI,2
00089 #define TS_OK ADWEI,3 ;转把电压在转换完毕
00090 #define DC_OK ADWEI,4
00091 #define DL_OK ADWEI,5
00092 #define TS_YX ADWEI,6 ;转把开启
00093 #define ZL_OK ADWEI,7 ;助力输出标志位
00094
00095 #define DS_OK WEI,0 ;定速度开启标志位
00096 ;#define ZL_SA WEI,1 ;助力开启速度
00097 #define DC_BJ WEI,1 ;欠电压报警位
00098
00000040 00099 W_TEMP EQU 0X40 ;备份 W
00000041 00100 STATUS_TEMP EQU 0X41 ;备份 STATUS
00101 ;****************************************************************
00102 ;----------------------------------------------------------------
00103 ; 开始程序
MPASM 4.00 Released X36VZNYS.ASM 2-7-2007 13:57:55 PAGE 3
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00104 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0000 00105 ORG 0X00
0000 0064 00106 CLRWDT ;清看门狗
0001 283C 00107 GOTO MAIN
0004 00108 ORG 0X04
00109 ;--------------中断---------------------------------------------
0004 1283 00110 BANKSEL W_TEMP ;中断
0005 00C0 00111 MOVWF W_TEMP ;备份 W
0006 0E03 00112 SWAPF STATUS,W
0007 0183 00113 CLRF STATUS
0008 00C1 00114 MOVWF STATUS_TEMP ;备份 STATUS
00115 ;中断向量
0009 180C 00116 BTFSC PIR1,TMR1IF
000A 2815 00117 GOTO INT_TMR1 ;Timer1中断
00118
000B 1B0C 00119 BTFSC PIR1,ADIF ;AD中断
000C 28B3 00120 GOTO INT_AD
00121
000D 188B 00122 BTFSC INTCON,INTF ;RB0/INT中断
000E 2825 00123 GOTO INT_RB0 ;过电流中断
00124
000F 0183 00125 INT_RET CLRF STATUS ;恢复
0010 0E41 00126 SWAPF STATUS_TEMP,W ;还原 STATUS
0011 0083 00127 MOVWF STATUS
0012 0EC0 00128 SWAPF W_TEMP,F ;还原 W
0013 0E40 00129 SWAPF W_TEMP,W
0014 0009 00130 RETFIE ;中断返回
00131 ;----------------------------------------------------------------
00132 ;Timer1中断
0015 00133 INT_TMR1
0015 100C 00134 BCF PIR1,TMR1IF ;中断标志位清0
0016 1010 00135 BCF T1CON,0 ;关Timer1
0017 30FE 00136 MOVLW 0XFE
0018 008F 00137 MOVWF TMR1H
0019 018E 00138 CLRF TMR1L ;512US
00139
001A 151F 00140 BSF ADCON0,GO ;开AD转换
001B 14BD 00141 BSF PWM_OUT ;PWM输出调整使能
00142 ;CALL ZLJC ;助力脉宽检测
00143
001C 0BB8 00144 DECFSZ TIMTP0,F
001D 2823 00145 GOTO INT_RTM
001E 303C 00146 MOVLW 0X3C ;60次*512US=30MS
001F 00B8 00147 MOVWF TIMTP0
0020 21E5 00148 CALL QYBJ ;欠压报警程序
0021 21C5 00149 CALL ZLJCOUT ;助力输出控制
0022 21CF 00150 CALL CLDS ;定速键检测
0023 00151 INT_RTM
0023 1410 00152 BSF T1CON,0 ;开Timer1
0024 280F 00153 GOTO INT_RET
00154 ;----------------------------------------------------------------
00155 ;过流中断
0025 00156 INT_RB0
MPASM 4.00 Released X36VZNYS.ASM 2-7-2007 13:57:55 PAGE 4
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0025 108B 00157 BCF INTCON,INTF ;清中断标志位
0026 1806 00158 BTFSC PGL
0027 283B 00159 GOTO INT_RBR
0028 21FA 00160 CALL DEC10US ;延时20US
0029 21FA 00161 CALL DEC10US
002A 1806 00162 BTFSC PGL ;确定有过流
002B 283B 00163 GOTO INT_RBR
002C 00164 INT_RB
002C 1217 00165 BCF CCP1CON,4 ;关脉宽输出
002D 1297 00166 BCF CCP1CON,5
002E 0195 00167 CLRF CCPR1L
002F 0064 00168 CLRWDT ;清看门狗
0030 138B 00169 BCF INTCON,GIE ;关全局中断使能
0031 111F 00170 BCF ADCON0,GO ;关AD转换
0032 11BC 00171 BCF TS_OK
0033 12BC 00172 BCF DL_OK
0034 123C 00173 BCF DC_OK
0035 143D 00174 BSF OFF ;置复位标志
0036 1C06 00175 BTFSS PGL
0037 282C 00176 GOTO INT_RB ;还有过流
0038 21FF 00177 CALL DEC10MS ;确定是否还有过流
0039 1C06 00178 BTFSS PGL ;没有过流,退出
003A 282C 00179 GOTO INT_RB
003B 00180 INT_RBR
003B 280F 00181 GOTO INT_RET
00182 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
00183 ;================================================================
00184 ; 主程序
00185 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
003C 00186 MAIN
003C 30FF 00187 MOVLW 0XFF ;I/0初始化
003D 0086 00188 MOVWF PORTB
003E 3007 00189 movlw B'00000111' ;RB0-RB2为输入,RB3-RB7为输出
003F 1683 00190 BSF _BANK
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
0040 0086 00191 movwf TRISB
0041 1283 00192 BCF _BANK
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -