?? f876tmpo.asm
字號:
;**********************************************************************
; 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 ;工作狀態(tài)寄存器
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 ;置跑空狀態(tài)
;******************************************
CHECK_KEY
MOVFW CASE
SUBLW D'7'
SKPC
GOTO PROG_SET ;程序設定狀態(tài)
MOVFW CASE ;非程序設定狀態(tài) CASE<7
XORLW D'6'
SKPZ
GOTO NO_P_RUN ;轉(zhuǎn)非程序執(zhí)行狀態(tài) CASE<6
CALL READ_KEY ;程序執(zhí)行狀態(tài),檢查是否是停止鍵按下 CASE=6
XORLW D'0'
SKPNZ
GOTO CHECK_OVER ;沒有鍵,跳到結束
MOVFW TEN ;有鍵,判斷是不是“停止”
XORLW D'16'
SKPNZ
CLRF CASE ;停止程序執(zhí)行,置跑空
GOTO CHECK_OVER ;不是“停止”鍵
NO_P_RUN
CALL READ_KEY ;非程序執(zhí)行狀態(tài),檢查是否是停止鍵按下 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
;*******************************************
;===========================================================
;處理不同的工作狀態(tài)
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
; 設置電機轉(zhuǎn)動速度
;CALL SEND_TEN
BSF PORTC,A_CWB
BSF PORTC,A_ENABLE ;執(zhí)行進刀!
GOTO DO_CASE_OVER
CASE1 MOVfW CASE ;快速退刀
XORLW 0X02
SKPZ
GOTO CASE2
; 設置電機轉(zhuǎn)動速度
; CALL SEND_TEN
BCF PORTC,A_CWB
BSF PORTC,A_ENABLE ;執(zhí)行退刀!
GOTO DO_CASE_OVER
CASE2 MOVfW CASE ;微動進刀
XORLW 0X03
SKPZ
GOTO CASE3
; 設置電機轉(zhuǎn)動速度
;CALL SEND_TEN
BSF PORTC,A_CWB
BSF PORTC,A_ENABLE ;執(zhí)行微動進刀!
GOTO DO_CASE_OVER
CASE3 MOVfW CASE ;微動退刀
XORLW 0X04
SKPZ
GOTO CASE4
; 設置電機轉(zhuǎn)動速度
;CALL SEND_TEN
BSF PORTC,A_CWB
BSF PORTC,A_ENABLE ;執(zhí)行微動退刀!
GOTO DO_CASE_OVER
CASE4
MOVfW CASE ;強制自檢
XORLW 0X05
SKPZ
GOTO CASE5
CALL SELF_TEST
GOTO DO_CASE_OVER
CASE5
MOVfW CASE ;執(zhí)行預設程序
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 + -