调试注意门方向,电机正转门顺时钟旋转(俯视图看门),电机反转门逆时钟旋转(俯视图看门)
list p=16F876A
#include p16f876a.inc
__CONFIG _CPD_OFF & _CP_ALL & _DEBUG_OFF & _BODEN_OFF
& _LVP_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC
PCL EQU 02H
STATUS EQU 3H
Z EQU 2H
INTCOM EQU 0BH
PORTC EQU 7H
TRISC EQU 87H
COU EQU 0X21 ; 脉冲1检测输入计数器
COUNTER EQU 0X22
COUNT1 EQU 0X23 ;电磁铁抬起计数器
MC EQU 0X24 ;开始脉冲计数器
COUNTER2 EQU 0X25 ;延时计数器2
COUNT0 EQU 0X26 ;延时计数器2
COUNT EQU 0X27 ;EE_DELAY
ADDR EQU 0X28 ;EE
DAT EQU 0X29 ;EE
DATA1 EQU 0X2A ;EE
TEMP EQU 0X2B ;EE
LOCK_COUNT EQU 0X2C
COUNTER3 EQU 0X2D
COUNTER4 EQU 0X2E
COUNT3 EQU 0X2F
COUNTER0 EQU 0X30 ;延时计数器0 DEL_LO EQU 0X20
COUNTER1 EQU 0X31 ;延时计数器1
COUN4 EQU 0X32 ;延时计数器2
COUNT2 EQU 0X33
MCJS EQU 0X34 ;正反转计数器
; EQU 0X78
;*********************************
;input
;PORTA,0 正转_KEY
;PORTA,1 反转_KEY
;PORTA,2 脉冲1检测输入
;PORTA,3 脉冲2检测输入
;PORTA,4 NO 输出接上拉电阻方可
;PORTA,5 脉冲3检测输入
;*********************************
;input/OUTPUT
;PORTB,0 中断处理
;PORTB,1 防夹传感器 或者紧急停止
;PORTB,2 164 SPI
;PORTB,3 164 SPI
;PORTB,4 24C01 SCLK
;PORTB,5 24C01 SDA
;PORTB,6 原点检测 光电
;PORTB,7 RUN LED FAS OUTPUT
;*****************************************
;OUTPUT
;#define PORTC,0 正转磁铁
;#define PORTC,1 反转磁铁
;#define PORTC,2 电机正转 AB 10 NE555逻辑
;#define PORTC,3 电机反转 AB 01 NE555逻辑
;#define PORTC,4 BBP OUT
;#define PORTC,5 低速度 AB 00 555逻辑
;#define PORTC,6 速度高 AB 11 555逻辑
;#define PORTC,7 刹车
;;********************************************
;LED_OUT
;*****************************************
#define SDA PORTB,5
#define SCLK PORTB,4
;*****************************************
;4052 逻辑
;*****************************************
ORG 000H
NOP
GOTO INTI
ORG 0004H ;中断矢量入口
;初始化程序
INTI BSF STATUS,RP0 ;选项1块
MOVLW 87H ;10000111
MOVWF ADCON1 ;设置RA口全部为数字IO口RA,4不变
MOVLW B'11111111' ;;ALL input. B6 B7 OUT
MOVWF TRISB ;PORTB,7为输出
MOVLW B'11111111' ;PORTA ALL input
MOVWF TRISA
MOVLW B'00000000' ;PORTC_ALL_OUT
MOVWF TRISC
BCF STATUS,RP0 ;BLOCK0块
MOVLW B'00000000'
MOVWF PORTA
MOVWF PORTB
CLRF PORTC
CLRF PORTB
CLRF MC ;自动计数器清另
;*****************************************************
;旋转门在停止时自动复位程序如果有风推动必须保证复位
; KEY SCAN
;8888888888888888888888888888888888888888888888888888888键盘扫描
MIN
BCF PORTB,3 ;电机反转停
CLRF MC ;开始脉冲计数器清另
CLRF COUNTER0 ;延时计数器0清另
CLRF COUNTER1 ;延时计数器1清另
CLRF PORTB ;正转磁铁
CLRF PORTB ;反转磁铁
CLRF COU ;脉冲计数器清另 ;
SCAN_KEY BCF STATUS,Z ;用过后要清零后才能检测LOCK_COUNT,
BCF PORTB,0 ;↑ 正转电磁铁不吸合
BCF PORTB,1 ;↑ 反转电磁铁不吸合
CLRF COU ;脉冲计数器清另
CLRF MCJS ;正反转计数器
BSF PORTB,7 ;LED_FAS
CALL DELAY05S
BTFSS PORTA,0 ;正转_KEY
GOTO ZZHUAN ;正转
GOTO LOOP
LOOP BTFSS PORTA,1 ;反转_KEY
GOTO FZZHUAN ;反转
BTFSC PORTB,6 ;原点 测试一下是否在原点
GOTO STARTA_ZF ;转防风功能
BCF PORTB,7 ;LED_FAS
CALL DELAY05S
GOTO SCAN_KEY
;********88888888888888888888888888888888888888888888888键盘扫描
;防风吹功能.子程序 脉冲pulse SCAN 改进说明RA2脉冲 RA3方向判断
;88888888888888888888888888888888888888888888888888888888
;旋转门在停止时自动复位程序如果有风推动必须保证复位
;00000000000000000000000000000000000000000 正反转判断程序
STARTA_ZF CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
NOP
;*******************************************************************
STARTA_ZFA BTFSS PORTA,3 ;RA3方向判断H为门逆时钟旋转
GOTO ZF_NEXTA ;MOTOR_ZZ ;再判断一下
ZF_PD BTFSS PORTA,2 ;测试A相有↑脉冲
GOTO ZF_NEXT
GOTO STARTA_ZFA
;******************************
ZF_NEXT BTFSS PORTA,3 ;都如果高
GOTO STARTA_ZFA
GOTO ZC_PD
ZF_NEXTA BTFSS PORTA,2
GOTO STARTA_ZFA
GOTO ZC_PD ;还是为高
;*******************************************************************
ZC_PD BTFSS PORTA,2
GOTO ZF_NEXTZC
BTFSS PORTA,3
GOTO ZF_NEXTAZC
GOTO ZC_PD
;******************************
ZF_NEXTZC BTFSS PORTA,3
GOTO ZC_PD
GOTO S_PD ;ZZ_CL
ZF_NEXTAZC BTFSS PORTA,2
GOTO ZC_PD
GOTO S_PD ;FZ_CL
;*******************************************************************
S_PD BTFSS PORTA,3
GOTO S_PDB
S_PDA BTFSS PORTA,2
GOTO S_PDC
GOTO S_PD
;******************************
S_PDB BTFSS PORTA,2
GOTO S_PD
GOTO FZ_CL
S_PDC BTFSS PORTA,3
GOTO S_PD
GOTO ZZ_CL ;正转判断
;888888888888888888888888888888888888888 8888888888888888888888正反转判断程序
;A相有脉冲有多少脉冲处理.当门不旋转时延时后电机旋转. 防风吹功能
;电机正转 门逆时钟旋转(俯视图看门)
;........................................................电机反转处理
ZZ_CL ;正转判断
BTFSS PORTA,2 ;脉冲检测输入
GOTO TEXT_ZZ
LOOP_ZZ BTFSS PORTA,2 ;脉冲检测输入
GOTO MOTOR_ZZ
GOTO TEXT_ZZ ;如果没有脉冲再测试N次
TEXT_ZZ ;CALL DELAY1S ;如果没有脉冲再测试N次
INCF COU
MOVLW .8 ;.8
SUBWF COU ;
BTFSS STATUS,Z ;W=0 Z=1
GOTO ZZ_CL ;NO不到20
CLRF COU ;到了8脉冲
CALL DELAY
CALL DELAY
MOTOR_ZZ BCF PORTC,2 ;电反机转
BSF PORTC,3 ;电机反转 AB = 0.1
BCF PORTC,2
BSF PORTC,3 ;电机反转 AB = 0 1
BSF PORTC,1 ;反转磁铁吸合
BCF PORTC,5 ;低速度 AB = 00
BCF PORTC,6 ;低速度 AB = 00
NOP
NOP
NOP
BTFSS PORTB,6 ;原点检测 光电
GOTO ZMOR_TIN1 ;H回到原点
GOTO MOTOR_ZZ
;PORTC,2 电机正转
;PORTC,3 电机反转
;PORTC,0 正转磁铁
;PORTC,1 反转磁铁
;888888888888888888888888888888888888888888888电机反转处理
;B相有脉冲有,多少脉冲处理 当门不旋转时延时后电机旋转. 防风吹功能
;电机反转 门顺时钟旋转(俯视图看门)
;当门顺时钟旋转 电机应该使门逆转;PORTB,2 电机正转 门逆时钟旋转
;.......................................................电机正转处理
FZ_CL
BTFSS PORTA,2 ;脉冲检测输入,电机反转 门顺时钟旋转 (俯视图看门)
GOTO TEXT_FZ ;↓测试A相有脉冲再测试
LOOP_FZ BTFSS PORTA,2
GOTO MOTOR_FZ
GOTO TEXT_FZ ;如果没有脉冲再测试N次
TEXT_FZ ;
;CALL DELAY1S ;如果没有脉冲再测试N次
INCF COU
MOVLW .8 ;.8
SUBWF COU, ;??????
BTFSS STATUS,Z ;W=0 Z=1
GOTO FZ_CL ;NO不到20
CLRF COU ;到了8脉冲
MOTOR_FZ BSF PORTC,2
BCF PORTC,3 ;电机正转 AB = 1 0
BSF PORTC,0 ;正转磁铁吸合
BCF PORTC,5 ;低速度 AB = 00
BCF PORTC,6 ;低速度 AB = 00
NOP
NOP
NOP
BTFSS PORTA,6 ;原点检测 光电
GOTO FMOR_TIN1 ;回到原点
GOTO MOTOR_FZ
;防风吹功能.子程序 END ;PORTC,2 电机正转
;PORTC,3 电机反转
;PORTC,0 正转磁铁
;PORTC,1 反转磁铁 电机正转处理
;8888888888888888888888888888888888888888888888888888888888888防风吹复位功能.子程序 END
;到了10秒 没有脉冲电磁铁抬起,返回.SCAN_KEY 有脉冲开始记数. 电机正转等待
;0000000000000000000000000000000000000000000000000000000000000到了10秒 没有脉冲电磁铁抬起
ZZHUAN BSF PORTC,0 ;↑ 正转电磁铁吸合抬起
CALL DELAY05S
NOP
NOP
BTFSC PORTB,6 ;判断门推动? 原点检测
GOTO START1 ;YEI有人推
GOTO NO_MC ;NO 没有人推,在原点
;***************************
NO_MC INCF COUNT1,1 ;延时10秒
MOVLW .60 ;.60
SUBWF COUNT1,0
BTFSS STATUS,Z ;W=0 Z=1
GOTO ZZHUAN ;NO不到6
CLRF COUNT1
GOTO SCAN_KEY ;到了10秒NO 没有脉冲电磁铁抬起
;**************************
CT_DELAY CALL DELAY3S
BCF PORTC,0 ;正转电磁铁
GOTO SCAN_KEY
;00000000000000000000000000000000000000000000000000000000000到了10秒 没有脉冲电磁铁抬起
;**A相有脉有开始记数冲 电机开始正转 有8个脉冲? 低速度段 电机正转
;PORTC,2 电机正转 AB 00 NE555逻辑
;PORTC,3 电机反转 AB 11 NE555逻辑
;********************************************************低速度段 电机正转
START1 ;有脉冲
BSF PORTC,2 ;电机正转 AB 10 NE555逻辑
BCF PORTC,3 ;电机反转 AB 10 NE555逻辑
BCF PORTC,5 ;低速度 AB 00 555逻辑
BCF PORTC,6 ;速度 AB 00 555逻辑
NOP
NOP
NOP
NOP
NOP
BTFSS PORTA,2 ;测试A相有脉冲开开始计数
GOTO LOOP0 ;STRT_JS
GOTO START1
LOOP0 BTFSS PORTA,2
GOTO LOOP0
GOTO STRT_JS ; START1
NEXT BTFSS PORTA,2 ;测试A相有脉冲开开始计数
GOTO STRT_JS
GOTO START1
NEXT_A BTFSS PORTA,2
GOTO START1
GOTO STRT_JS
STRT_JS INCF COU
MOVLW .8 ;.8
SUBWF COU,0
BTFSS STATUS,Z ;W=0 Z=1
GOTO START1 ;NO不到20
CLRF COU
GOTO ZGAO_SDU ;到了20脉冲后转高速度
;****************************************************低速度段 电机正转
;**************A相有脉冲 有9个脉冲高速度运转********高速度段 电机开始正转
;
;************************************************* 电机正转高速度
;高速度电机开始正转
ZGAO_SDU BSF PORTC,5 ;速度高 AB 1.1 555逻辑
BSF PORTC,6 ;速度高 AB 1.1 555逻辑
NOP
NOP
NOP
NOP
NOP
;CLRF COU
BTFSS PORTA,2 ;测试A相有脉冲开开始计数
GOTO LOOP1 ;STRT_J
GOTO ZGAO_SDU
LOOP1 BTFSS PORTA,2 ;测试A相有脉冲开开始计数
GOTO LOOP1
GOTO STRT_J
STRT_J BTFSS PORTB,1 ;急停00000000
GOTO ZMOR_TIN1
INCF COU
MOVLW .9 ;.9
SUBWF COU,0
BTFSS STATUS,Z ;W=0 Z=1
GOTO ZGAO_SDU ;NO不到9
CLRF COU
GOTO ZDI_SDU ;到了20脉冲后转高速度
;********************************************************************* 电机正转高速度
;开始低速度 *A相有脉冲 有 9个脉冲 低速度段 电机开始正转
;*********************************************************************电机正转低速度
ZDI_SDU BCF PORTC,5 ; A A B 0.0电机速度低
BCF PORTC,6 ; B A B 0.0电机速度低
NOP
NOP
NOP
NOP
NOP
NOP
BSF PORTA,7 ;速度低速度
BTFSS PORTA,2 ;测试A相有脉冲开开始计数
GOTO LOOP2
GOTO ZDI_SDU
LOOP2 BTFSS PORTA,2
GOTO LOOP2
STRT BTFSS PORTB,1 ;急停00000000
GOTO ZMOR_TIN1
INCF COU
MOVLW .8 ;.8
SUBWF COU,0
BTFSS STATUS,Z ;W=0 Z=1
GOTO ZDI_SDU ;NO不到.8
GOTO ZMOR_TIN ;到了20脉冲后转高速度
;****************************************************************电机正转低速度
;电机正转低速度 ;是否到了原点电机电磁铁停止
;****************************************************************电机正转结束
ZMOR_TIN
BTFSS PORTB,6 ;原点检测 光电
GOTO ZMOR_TIN1 ;H回到原点
GOTO ZMOR_TIN
ZMOR_TIN1
BCF PORTC,2 ;电机正转停 A A B 0.0电机停
BCF PORTC,3 ;电机反转停 B A B 0.0电机停
BCF PORTC,0 ;正转磁铁释放
BCF PORTC,1 ;反转磁铁释放
BSF PORTC,5 ;低速度 OUT A
BCF PORTC,6 ;高速度 OUT B A B 1.0速度停
NOP
NOP
NOP
NOP
BSF PORTC,7 ;刹车
CALL DELAY05S
BCF PORTC,7 ;刹车
GOTO SCAN_KEY
;;**********************************************************电机正转结束
;电机反转开始计数 电机反转等待
;*FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
;到了10秒 没有脉冲电磁铁抬起,返回.SCAN_KEY 开始记数值.
;***********************************************到了10秒 没有脉冲电磁铁抬起
FZZHUAN BSF PORTC,1 ;↑ 反转电磁铁吸合抬起
CALL DELAY05S
NOP
NOP
BTFSC PORTB,6 ;判断门推动? 原点检测
GOTO FSTART1 ;YEI
GOTO FNO_MC ;NO
;***************************
FNO_MC INCF COUNT1,1 ;延时10秒
MOVLW .60 ;.60
SUBWF COUNT1,0
BTFSS STATUS,Z ;W=0 Z=1
GOTO FZZHUAN ;NO不到6
CLRF COUNT1
GOTO SCAN_KEY ;到了10秒NO 没有脉冲电磁铁抬起
;************************************
FCT_DELAY CALL DELAY3S
BCF PORTB,1 ;反转电磁铁
GOTO SCAN_KEY
;******************************************************到了10秒 没有脉冲电磁铁抬起
; ;PORTC,2 A 电机正转 A B 00 NE555逻辑
;PORTC,3 B 电机反转 A B 11 NE555逻辑
;***B相有脉冲 电机开始反转 有20个脉冲?********速度低 电机反转
;FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF电机开始反转低速度段
FSTART1 BCF PORTC,2 ;电机反转停 A A B 0.1电机反转
BSF PORTC,3 ;电机反转停 B A B 0.1电机反转
BCF PORTC,5 ;低速度 OUT A
BCF PORTC,6 ;高速度 OUT B A B 0.0电机速度低
NOP
NOP
BTFSS PORTA,3 ;测试B相有脉冲开开始计数
GOTO FLOOP0
GOTO FSTART1
FLOOP0 BTFSS PORTA,3 ;测试B相有脉冲开开始计数
GOTO FLOOP0
GOTO FSTRT_JS ;START1
FNEXT BTFSS PORTA,3 ;测试B相有脉冲开开始计数
GOTO FSTRT_JS
GOTO FSTART1
FNEXT_A BTFSS PORTA,3
GOTO FSTART1
GOTO FSTRT_JS
FSTRT_JS INCF COU
MOVLW .8 ;.20
SUBWF COU,0
BTFSS STATUS,Z ;W=0 Z=1
GOTO FSTART1 ;NO不到20
CLRF COU
GOTO FGAO_SDU ;到了20脉冲后转高速度
;************************************************** 电机反转低速度段
;***B相有脉冲 有9个脉冲高速度运转*****速度高电机反转门顺时钟旋转(俯视图看门) 电机反转/
;************************************************* 电机反转高速度段
;高速度
FGAO_SDU BSF PORTC,5 ;低速度 OUT A
BSF PORTC,6 ;高速度 OUT B A B 1.1电机速度高
NOP
NOP
NOP
NOP
;CLRF COU
BTFSS PORTA,3 ;测试B相有脉冲开开始计数
GOTO FLOOP1 ;FSTRT_J
GOTO FGAO_SDU
FLOOP1 BTFSS PORTA,3 ;测试B相有脉冲开开始计数
GOTO FLOOP1
GOTO FSTRT_J
FSTRT_J BTFSS PORTB,1 ;急停000
GOTO FMOR_TIN1
INCF COU
MOVLW .9 ;.9
SUBWF COU,0
BTFSS STATUS,Z ;W=0 Z=1
GOTO FGAO_SDU ;NO不到20
CLRF COU
GOTO FDI_SDU ;到了20脉冲后转高速度
;********************************************* 电机反转高速度段
;开始低速度 B相有脉冲 有 8个脉冲**********速度低 电机反转
;********************************************* 电机反转低速度段
FDI_SDU
BCF PORTC,5 ;低速度 OUT A
BCF PORTC,6 ;高速度 OUT B A B 0.0电机低速度段
NOP
NOP
NOP
BTFSS PORTA,3 ;测试B相有脉冲开开始计数
GOTO FLOOP2
GOTO FDI_SDU
FLOOP2 BTFSS PORTA,3 ;测试B相有脉冲开开始计数
GOTO FLOOP2
GOTO FSTRT
FSTRT BTFSS PORTB,1 ;急停000
GOTO FMOR_TIN1
INCF COU
MOVLW .8 ;.8
SUBWF COU,0
BTFSS STATUS,Z ;W=0 Z=1
GOTO FDI_SDU ;NO不到8
GOTO FMOR_TIN ;到了20脉冲后转高速度
;***************************************************电机反转低速度段
;电机反转低速度;是否到了原点电机电磁铁停止
;****************************************************电机反转停止
FMOR_TIN ;速度变换低速度 减 SPI99 OUT
BTFSS PORTB,6 ;原点检测 光电
GOTO FMOR_TIN1
GOTO FMOR_TIN
FMOR_TIN1 BCF PORTC,2 ;电机正转停 A A B 0.0电机停
BCF PORTC,3 ;电机反转停 B A B 0.0电机停
BCF PORTC,0 ;正转磁铁释放
BCF PORTC,1 ;反转磁铁释放
BSF PORTC,5 ;低速度 OUT A
BCF PORTC,6 ;高速度 OUT B A B 1.0电机停
NOP
NOP
NOP
NOP
BSF PORTC,7 ;刹车
CALL DELAY05S
BCF PORTC,7 ;刹车
GOTO SCAN_KEY
;*FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF电机反转停止
DELAY3S MOVLW D'10' ;D'10=3S D'20=5S D'30=7S
MOVWF COUNT2 ;D'40=8S D'60=12S D'80=17
LOPB01 DECFSZ COUNT1,1 ;D'100=20S D'150=30S D'200=40S
GOTO LOPB01
DECFSZ COUNT0,1
GOTO LOPB01
DECFSZ COUNT2,1
GOTO LOPB01
RETURN
;****************************************************
DELAY MOVLW D'9'
MOVWF COUNTER0
LOPB DECFSZ COUNTER1,1
GOTO LOPB
DECFSZ COUNTER0,1
GOTO LOPB
RETURN
;*****************************************************
DELAY1S MOVLW D'5' ;DELAY 1S
MOVWF COUNTER3
LOPB1 DECFSZ COUNTER4,1
GOTO LOPB1
DECFSZ COUNTER3,1
GOTO LOPB1
RETURN
;******************************************************
DELAY05S MOVLW D'0' ;0.5S
MOVWF COUNT3
LOPB0 DECFSZ COUN4,1
GOTO LOPB0
DECFSZ COUNT3,1
GOTO LOPB0
RETURN
END
共4条
1/1 1 跳转至页
PIC单片机控制的的旋转门
共4条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【笔记】生成报错synthdesignERROR被打赏50分 | |
【STM32H7S78-DK评测】LTDC+DMA2D驱动RGBLCD屏幕被打赏50分 | |
【STM32H7S78-DK评测】Coremark基准测试被打赏50分 | |
【STM32H7S78-DK评测】浮点数计算性能测试被打赏50分 | |
【STM32H7S78-DK评测】Execute in place(XIP)模式学习笔记被打赏50分 | |
每周了解几个硬件知识+buckboost电路(五)被打赏10分 | |
【换取逻辑分析仪】RA8 PMU 模块功能寄存器功能说明被打赏20分 | |
野火启明6M5适配SPI被打赏20分 | |
NUCLEO-U083RC学习历程2-串口输出测试被打赏20分 | |
【笔记】STM32CUBEIDE的Noruletomaketarget编译问题被打赏50分 |