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

📄 16f72.asm

📁 电动车有刷电机控制器带有上电防飞车功能以及继电器保护功能
💻 ASM
字号:
《电动自行车控制器》源程序; 
           list    p=pic16f72 
           include p16f72.inc 
           count   equ    20h       ;定义一个计数变量寄存器 
           n1      equ    21h
           n2      equ    22h
           pcl     equ    02h       ;定义程序计数器低字节寄存器地址 
           f       equ    01h       ;定义目标寄存器为RAM的指示符 
           pir1    equ    0ch       ;定义第一中断标准位  
           tmr2if  equ    1h        ;定义中断标志TMR2中断 
           adif    equ    6h        ;定义中断标志位位地址 
           go      equ    2h        ;定义ADC控制寄存器位地址    
           status  equ    03h       ;定义状态寄存器    
           rp0     equ    05h       ;定义状态寄存器中的页选位RP0 
           trisa   equ    85h 
           trisb   equ    86h       ;定义B口方向寄存器 
           trisc   equ    87h 
           porta   equ    05h 
           portb   equ    06h       ;定义B口数据寄存器 
           portc   equ    07h       ;定义C口数据寄存器 
           ra5     equ    05h       ;定义C口BIT6位
           ra2     equ    0h 
           rb2     equ     2h
           ra0     equ     0h
           rc0     equ     0h
           tmr2on  equ    02h       ;定义TMR2开启位的位 
           adcon0  equ    1fh       ;定义ADC控制寄存器0 
           adcon1  equ    9fh       ;定义ADC控制寄存器1 
           ccp1con equ    17h       ;定义CCP1控制寄存器 
           t2con   equ    12h       ;定义TMR2控制寄存器 
           pr2     equ    92h       ;定义TMR2周期寄存器 
           ccpr1l  equ    15h       ;定义CCP1寄存器低字节寄存器 
           adres   equ    1eh 
           temp    equ    71h       ;定义缓存存储器地址 
           t1      equ    72h 
           org     000h             ;定义程序存放的起始地址 
           nop                      ;放置一个ICE必须的空操作指令 
start 
;初始化I/O口 
           bsf     status,rp0       ;设文件寄存器为体1 
           movlw   0x00
           movwf   trisb
           movwf   temp
           movlw   0x7b
           movwf   trisc
           movlw   0xff
           movwf   trisa
           banksel portc
           bsf     portc,7
           movlw   0x00
           movwf   portb
;初始化A/D转换 
           banksel  adcon1      ;转换结果右对齐、设4个A/D通道、选择VDD和VSS做参考源 
           movlw   0x04
           movwf   adcon1        
;初始化PWM模块 
           banksel pr2 
           movlw   06fh             ;设定PWM的频率(频率为3.90625K,分频比为1∶1) 
           movwf   pr2 
           bcf     status,rp0       ;设文件寄存器为体0 
           clrf    ccpr1l 
           banksel ccp1con 
           movlw   0ch              ;设定CPP1模块为PWM输出、脉宽低2位固定为00 
           movwf   ccp1con 
           banksel t2con 
           movlw    7h           ;设定TMR2;预分频比1∶1,后分频比1∶1,暂不启动 
           movwf    t2con    ;开启TMR2 
 fangfei 
;防飞保护
           movlw   59h              ;选中AN3 
           movwf   adcon0 
           call    adc 
           bcf     status,0h 
           sublw   30h 
           btfss   status,0h 
           goto    fangfei
           btfss   portc,rc0
           goto    fangfei
           bsf     portb,rb2
pwm  
;刹车检测 
           btfss   porta,ra5
           call    stop
           call    edis
           btfsc   status,0h
           goto    pwm
           call    edis1
           btfsc   temp,0
           goto    pwm 
           btfss   portc,rc0
           call    over
           bsf     portb,rb2       
t2over1    
           movlw   59h              ;选中AN3 
           movwf   adcon0 
           call    adc 
           bcf     status,0h 
           sublw   30h 
           btfsc   status,0h
           goto    baohu2
           movf    adres,w
           movwf   count
           movlw   2fh
           subwf   count,0           
           movwf   ccpr1l           ;刷新脉宽
           goto    pwm	 
;刹车子程序 
stop       movlw   0x00 
           movwf   ccpr1l 
loop       btfss   porta,ra5 
           goto    loop 
           return  
baohu2     movlw   0x00 
           movwf   ccpr1l
loop2      btfss   portc,rc0  
           goto    loop3
           return
loop3      btfsc   portc,rc0
           return
           call    delay1.7ms
           btfsc   portc,rc0
           return
           btfsc   portc,rc0
           return
           bcf     portb,rb2
           btfss   portc,rc0
           goto    loop3
           bsf     portb,rb2
           return                
;过载检测子程序 
over       movlw   59h              ;选中AN3 
           movwf   adcon0 
           call    adc 
           bcf     status,0h 
           sublw   80h           ;电压值调整 
           btfsc   status,0H        ;是否过载  
           goto    baohu
           return
baohu      btfsc   portc,rc0
           return
           btfsc   portc,rc0
           return
           call    delay1.7ms
           btfsc   portc,rc0
           return
           btfsc   portc,rc0
           return
           movlw   0x00 
           movwf   ccpr1l
           bcf     portb,rb2 
loop1      btfss   portc,rc0
           goto    loop1 
           return   
;电量检测子程序 
edis       movlw   49h              ;选择时钟源为f/8允许ADC工作、选中AN3(电量) 
           movwf   adcon0 
           call    adc
           bcf     status,0h  
           sublw   99h              ;极限电压3.16V=9eh    3.3V=0a5h
           btfss   status,0h 
           return   
           movlw   0h 
           movwf   ccpr1l
           bsf     temp,0  
           return 
edis1      movlw   49h              ;选择时钟源为f/8允许ADC工作、选中AN3(电量) 
           movwf   adcon0
           call    adc
           bcf     status,0h 
           sublw   0a5h              ;极限电压3.16V=9eh    3.3V=0a5h
           btfsc   status,0h
           goto    edis11
           bcf     temp,0 
           return 
edis11     movlw   0h
           btfsc   temp,0
           movwf   ccpr1l  
           return        
;A/D转换子程序 
adc        call    delay20 
           bsf     adcon0,go        ;启动A/D转换 
wait       btfsc   adcon0,go        ;转换是否完毕 
           goto    wait 
           movf    adres,w          ;转换完毕,把A/D结果读入W 
           return 
;延时子程序 
delay20				                ; 2 Tcy for call 
	       movlw	0x05		    ; 1 Tcy 
	       movwf	count		    ; \ 
D20Loop				                ;  \ 3 * 5 
	       decfsz	count,F		    ;  / or 15 Tcy 
	       goto	    D20Loop		    ; / 
           return			        ; 2 Tcy for return 
delay1.7ms 
            movlw         0x11
            movwf         n1
loop11       movlw        0x19 
            movwf         n2 
loop22       decfsz       n2,1
            goto         loop22
            decfsz       n1,1
            goto         loop11
            return 
end 


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -