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

📄 f876tmpo.asm

📁 电火花加工车床用的单片机控制程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;**********************************************************************
;   This file is a basic code template for object module code         *
;   generation on the PICmicro PIC16F876. This file contains the      *
;   basic code building blocks to build upon.  As a project minimum   *
;   the 16c76.lkr file will also be required for this file to         *
;   correctly build. The .lkr files are located in the MPLAB          *  
;   directory.                                                        *
;                                                                     *
;   If interrupts are not used all code presented between the         *
;   code section "INT_VECTOR and code section "MAIN" can be removed.  *
;   In addition the variable assignments for 'w_temp' and             *
;   'status_temp' can be removed.                                     *                         
;                                                                     *
;   If interrupts are used, as in this template file, the 16c76.lkr   *
;   file will need to be modified. Refer to the readme.tmp file for   *
;   this information.                                                 *
;                                                                     *
;   Refer to the MPASM User's Guide for additional information on     *
;   features of the assembler and linker (Document DS33014F).         *
;                                                                     *
;   Refer to the respective PICmicro data sheet for additional        *
;   information on the instruction set.                               *
;                                                                     *
;   Template file built using MPLAB V4.00 with MPASM V2.20.00 and     *
;   MPLINK 1.20.00 as the language tools.                             *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Filename:	    shengfang.asm                                     *
;    Date:           2004.6.1                                         *
;    File Version:    ver 1.0                                         *
;                                                                     *
;    Author:          yanganhui                                       *
;    Company:         jyj                                             *
;                                                                     * 
;                                                                     *
;**********************************************************************
;                                                                     *
;    Files required:                                                  *
;                                                                     *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Notes:                                                           *
;                                                                     *
;                                                                     *
;                                                                     *
;                                                                     *
;**********************************************************************


	list      p=16f876            ; list directive to define processor
	#include <p16f876.inc>        ; processor specific variable definitions
	
	__CONFIG _CP_OFF & _WDT_ON & _BODEN_ON & _PWRTE_ON & _RC_OSC & _WRT_ENABLE_ON & _LVP_ON & _DEBUG_OFF & _CPD_OFF 

; '__CONFIG' directive is used to embed configuration data within .asm file.
; The labels following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.






;***** VARIABLE DEFINITIONS (examples)

; example of using Shared Uninitialized Data Section
INT_VAR       ;UDATA_SHR 
             	cblock  0x70  
				w_temp					; variable used for context saving 
				status_temp   		    ; variable used for context saving

				endc

; example of using Uninitialized Data Section
TEMP_VAR      ;UDATA      0x20     ; explicit address specified is not required
				cblock  0x20
				TEMP
				temp_count           ; temporary variable (example)
				flag          	           ; temporary variable (shared locations - G_DATA)
				count                     ; temporary variable (shared locations - G_DATA)
				;显示寄存器
				BIT_COUNT
				DATA_OUT
				DATA_IN
				TEN
				;延时寄存器
				TIMER
				TIMER1
				CASE				;工作状态寄存器

				endc
;----------HD7279的端口------------
CS			EQU 6
CLK			EQU 7
DAT			EQU 4
KEY			EQU 0
;----------同步电机控制端口----------
A_ENABLE	EQU	0
A_CLOCK		EQU	1
A_CWB		EQU	2
B_ENABLE	EQU	3
B_CLOCK		EQU	4
B_CWB		EQU	5
;----------------------------------
			
;蜂鸣器
BEEP		EQU	3
;**********************************************************************
RESET_VECTOR 	org    0x000       ; processor reset vector
	   	movlw  high  start        ; load upper byte of 'start' label
        movwf  PCLATH             ; initialize PCLATH
        goto   start              ; go to beginning of program


INT_VECTOR  	org    0x004        ; interrupt vector location
	 	banksel w_temp
		movwf   w_temp            ; save off current W register contents
		movf	STATUS,w          ; move status register into W register
		movwf	status_temp       ; save off contents of STATUS register


; isr code can go here or be located as a call subroutine elsewhere

   
		movf    status_temp,w     ; retrieve copy of STATUS register
		movwf	STATUS            ; restore pre-isr STATUS register contents
		swapf   w_temp,f
		swapf   w_temp,w          ; restore pre-isr W register contents
	 	banksel	flag
		retfie                    ; return from interrupt


MAIN ;  CODE
start
;------------------------------------------------------------------------
;初始化端口
		banksel	TRISA
		movlw	0x0f
		movwf	TRISA
		movlw	0x11
		movwf	TRISB
		movlw	0x80
		movwf	TRISC
		movlw	0x05			;置A1、A2为A/D输入端,A3为参考电压输入断。
		movwf	ADCON1

;------------------------------------------------------------------------
;初始化中断
		movlw	0x00   ;0xf0
		movwf 	PIE1
		clrf	PIE2

		banksel	PIR1
		movlw	0x40
		movwf	ADCON0			;FOSC/8,A0

		movlw	0xf0
		movwf 	INTCON
		movlw	0xf0
		movwf 	PIR1		
		clrf	PIR2

		clrf	PORTA
		clrf	PORTB
		clrf	PORTC
;-----------------------------------------------------------------------
;初始化串口

;-----------------------------------------------------------------------
;初始化定时器


;-----------------------------------------------------------------------

		CALL	SELF_TEST
SET_NOP
		CLRF	CASE            	;置跑空状态
		;******************************************
CHECK_KEY
		MOVFW	CASE
		SUBLW	D'7'
		SKPC
		GOTO	PROG_SET		;程序设定状态
		MOVFW	CASE			;非程序设定状态   CASE<7
		XORLW	D'6'
		SKPZ
		GOTO	NO_P_RUN		;转非程序执行状态		CASE<6
		CALL	READ_KEY		;程序执行状态,检查是否是停止键按下	CASE=6
		XORLW	D'0'
		SKPNZ
		GOTO	CHECK_OVER		;没有键,跳到结束	
		MOVFW	TEN				;有键,判断是不是“停止”
		XORLW	D'16'
		SKPNZ
		CLRF	CASE			;停止程序执行,置跑空
		GOTO	CHECK_OVER		;不是“停止”键
NO_P_RUN
		CALL	READ_KEY		;非程序执行状态,检查是否是停止键按下	CASE<6
		XORLW	D'0'
		SKPNZ
		GOTO	CHECK_OVER		;没有键,跳到结束	
		MOVFW	TEN				;有键,判断是不是“快进”、“快退”、“微进”、“微退”、“自检”、“开始”
		XORLW	D'1'
		SKPZ				
		GOTO	CHECK_CASE2
		MOVLW	D'1'
		MOVWF	CASE
		GOTO	CHECK_OVER		;<<<<<<<是“快进”键>>>>>>>>>
CHECK_CASE2
		MOVFW	TEN				;有键,判断是不是“快进”
		XORLW	D'2'
		SKPZ
		GOTO	CHECK_CASE3
		MOVLW	D'2'
		MOVWF	CASE
		GOTO	CHECK_OVER		;<<<<<<<是“快退”键>>>>>>>>>
CHECK_CASE3		
		MOVFW	TEN				;有键,判断是不是“微进”
		XORLW	D'3'
		SKPZ
		GOTO	CHECK_CASE4
		MOVLW	D'3'
		MOVWF	CASE
		GOTO	CHECK_OVER		;<<<<<<<是“微进”键>>>>>>>>>
CHECK_CASE4	
		MOVFW	TEN				;有键,判断是不是“微退”
		XORLW	D'4'
		SKPZ
		GOTO	CHECK_CASE5
		MOVLW	D'4'
		MOVWF	CASE
		GOTO	CHECK_OVER		;<<<<<<<是“微退”键>>>>>>>>>
CHECK_CASE5	
		MOVFW	TEN				;有键,判断是不是“自检”
		XORLW	D'5'
		SKPZ
		GOTO	CHECK_CASE6
		MOVLW	D'5'
		MOVWF	CASE
		GOTO	CHECK_OVER		;<<<<<<<是“自检”键>>>>>>>>>
CHECK_CASE6	
		MOVFW	TEN				;有键,判断是不是“开始”
		XORLW	D'6'
		SKPZ
		GOTO	CHECK_OVER
		MOVLW	D'6'
		MOVWF	CASE
		GOTO	CHECK_OVER		;<<<<<<<是“开始”键>>>>>>>>>
PROG_SET






CHECK_OVER
		CALL	DO_CASE
		CALL	CASE_SHOW
		GOTO	CHECK_KEY
;*******************************************
;===========================================================
;处理不同的工作状态
DO_CASE	MOVfW	CASE				;跑空
		XORLW	0X00
		SKPZ
		GOTO  	CASE0
		BCF		PORTC,A_ENABLE
		BCF		PORTC,B_ENABLE
		GOTO	DO_CASE_OVER

CASE0	MOVfW	CASE				;快速进刀
		XORLW	0X01
		SKPZ
		GOTO	CASE1
		
	;	设置电机转动速度
		;CALL	SEND_TEN
		BSF		PORTC,A_CWB
		BSF		PORTC,A_ENABLE		;执行进刀!
		GOTO 	DO_CASE_OVER

CASE1	MOVfW	CASE				;快速退刀
		XORLW	0X02
		SKPZ
		GOTO	CASE2
	;	设置电机转动速度
	;	CALL	SEND_TEN
		BCF		PORTC,A_CWB
		BSF		PORTC,A_ENABLE		;执行退刀!
		GOTO 	DO_CASE_OVER
CASE2	MOVfW	CASE				;微动进刀
		XORLW	0X03
		SKPZ
		GOTO	CASE3
	;	设置电机转动速度
		;CALL	SEND_TEN
		BSF		PORTC,A_CWB
		BSF		PORTC,A_ENABLE		;执行微动进刀!
		GOTO 	DO_CASE_OVER
CASE3	MOVfW	CASE				;微动退刀
		XORLW	0X04
		SKPZ
		GOTO	CASE4
	;	设置电机转动速度
		;CALL	SEND_TEN
		BSF		PORTC,A_CWB
		BSF		PORTC,A_ENABLE		;执行微动退刀!
		GOTO 	DO_CASE_OVER
CASE4
		MOVfW	CASE				;强制自检
		XORLW	0X05
		SKPZ
		GOTO	CASE5
		CALL	SELF_TEST
		GOTO 	DO_CASE_OVER	
CASE5
		MOVfW	CASE				;执行预设程序
		XORLW	0X06
		SKPZ
		GOTO	CASE6
		CALL	PROGRAM
		GOTO 	DO_CASE_OVER		
CASE6
		MOVfW	CASE				;设程序
		XORLW	0X07
		SKPZ
		GOTO	CASE7
		BCF		PORTC,A_ENABLE
		BCF		PORTC,B_ENABLE
;		CALL	PROGRAM
		GOTO 	DO_CASE_OVER		
CASE7								;设粗加工电流
		MOVfW	CASE				
		XORLW	0X08
		SKPZ
		GOTO	CASE8
		BCF		PORTC,A_ENABLE
		BCF		PORTC,B_ENABLE
;		CALL	PROGRAM
		GOTO 	DO_CASE_OVER
CASE8								;设粗加工精度
		MOVfW	CASE				
		XORLW	0X09
		SKPZ
		GOTO	CASE9
		BCF		PORTC,A_ENABLE
		BCF		PORTC,B_ENABLE
;		CALL	PROGRAM
		GOTO 	DO_CASE_OVER
CASE9								;设精加工电流
		MOVfW	CASE				
		XORLW	d'10'
		SKPZ
		GOTO	CASE10
		BCF		PORTC,A_ENABLE
		BCF		PORTC,B_ENABLE
;		CALL	PROGRAM
		GOTO 	DO_CASE_OVER
CASE10								;设精加工精度
		MOVfW	CASE				
		XORLW	d'11'
		SKPZ
		GOTO	DO_CASE_OVER
		BCF		PORTC,A_ENABLE
		BCF		PORTC,B_ENABLE
;		CALL	PROGRAM
		GOTO 	DO_CASE_OVER



DO_CASE_OVER
		RETURN
;=========================================================

⌨️ 快捷键说明

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