自己写的投影机的程序
版权声明:原创作品,谢绝转载!否则将追究法律责任。 |
;**********************************************************************
; PIC16F67. 2007年自己写的投影机的程序 * ; * ;********************************************************************** ; Filename: 投影机的程序.asm * ; Date: 20070405 * ; File Version: 1.0 * ; * ; Author: GoHsne * ; Company: GoHsne * ; * ;********************************************************************** list p=16F57 ; list directive to define processor(单片机型号)
#include <p16F5x.inc> ; processor specific variable definitions(单片机详细说明文档) __CONFIG _CP_OFF & _WDT_OFF & _HS_OSC
; '__CONFIG' directive is used to embed configuration word within .asm file.
; The lables following the directive are located in the respective .inc file. ; See respective data sheet for additional information on configuration word. ; 配置 没有代码保护 & WDT定时器关 & OSC振荡器模式为HS ;***** VARIABLE DEFINITIONS
;temp EQU 0x10 ;example variable definition ;**********************************************************************
;-------门电机与镜头电机的正反子程序--------------------------------------- ORG 0x000 MZ BSF 7,0 ;开`门正`;F7C口0位值为1 (BSF强制某寄存器F的某个位值为1) MOVLW 0x033 ;D51>W ,决定延时时间 0x033 能延时 秒 CALL YS ;延时0.2秒 GOTO MK ;跳至`门开` MF BSF 7,1 ;开`门反`;F7C口1位值为1 (BSF强制某寄存器F的某个位值为1) MOVLW 0x0FE ;D51>W ,决定延时时间 0x033 能延时 秒 CALL YS ;延时0.2秒 GOTO MG ;跳至`门关` JZ BSF 7,2 ;开`镜正`;F7C口2位值为1 (BSF强制某寄存器F的某个位值为1) MOVLW 0x0FE ;D51>W ,决定延时时间 0x033 能延时 秒 CALL YS ;延时0.2秒 GOTO JC ;跳至`镜出` JF BSF 7,3 ;开`镜反`;F7C口3位值为1 (BSF强制某寄存器F的某个位值为1) MOVLW 0x0FE ;D51>W ,决定延时时间 0x033 能延时 秒 CALL YS ;延时0.2秒 GOTO JH ;跳至`镜回` ; ;-------三重延时计秒时间由W指定---------------------------------------------------- YS ;MOVLW 0x033 ; X MOVWF 9 ;W>F9 YS1 ;MOVLW 0x033 ; Y MOVWF 10 ;W>F10 YS2 ;MOVLW 0x033 ; Z MOVWF 11 ;W>F11 YS3 DECFSZ 11,1 ;F11减1,为0则间跳 GOTO YS3 ; DECFSZ 10,1 ;F10减1,为0则间跳 GOTO YS2 ; DECFSZ 9,1 ;F9减1,为0则间跳 GOTO YS1 ; RETLW 0x000 ;L>W 子程序返回 ; ;-------一声响:提示开机------------------------------------------------------------------------ SHX1 MOVLW 0x029 ;`声响嘀`;D41>W ,决定延时时间 0x029 能延时0.1秒 一声响:提示开机 BSF 7,5 ;开`喇叭`;F7C口5位值为1 (BSF强制某寄存器F的某个位值为1) CALL YS ;延时0.1秒 BCF 7,5 ;关`喇叭`;F7C口5位值为0 (BSF强制某寄存器F的某个位值为0) GOTO KD ;`控灯` ; ;-------两声响:提示开机动作完毕------------------------------------------------------------------------ SHX2 MOVLW 0x033 ;`声响嘀嘀`;D51>W ,决定延时时间 0x033 能延时0.2秒 两声响:提示开机动作完毕 BSF 7,5 ;开`喇叭`;F7C口5位值为1 (BSF强制某寄存器F的某个位值为1) CALL YS ;延时0.2秒 MOVLW 0x033 BCF 7,5 ;关`喇叭`;F7C口5位值为0 (BSF强制某寄存器F的某个位值为0) CALL YS ;延时0.2秒 MOVLW 0x064 BSF 7,5 ;开`喇叭`;F7C口5位值为1 (BSF强制某寄存器F的某个位值为1) CALL YS ;延时0.2秒 BCF 7,5 ;关`喇叭`;F7C口5位值为0 (BSF强制某寄存器F的某个位值为0) GOTO JSFS ; ;-------三声响:故障报警------------------------------------------------------------------------ SHX3 JJGDB BCF 7,4 ;紧急关`灯板`;F7C口4位值为0 (BCF强制某寄存器F的某个位值为0) MOVLW 0x033 ;`声响嘀嘀嘀`;D51>W ,决定延时时间 0x033 能延时0.2秒 三声响:故障报警
BSF 7,5 ;开`喇叭`;F7C口5位值为1 (BSF强制某寄存器F的某个位值为1) CALL YS ;延时0.2秒 MOVLW 0x033 BCF 7,5 ;关`喇叭`;F7C口5位值为0 (BSF强制某寄存器F的某个位值为0) CALL YS ;延时0.2秒 MOVLW 0x033 BSF 7,5 ;开`喇叭`;F7C口5位值为1 (BSF强制某寄存器F的某个位值为1) CALL YS ;延时0.2秒 MOVLW 0x033 BCF 7,5 ;关`喇叭`;F7C口5位值为0 (BSF强制某寄存器F的某个位值为0) CALL YS ;延时0.2秒 MOVLW 0x033 BSF 7,5 ;开`喇叭`;F7C口5位值为1 (BSF强制某寄存器F的某个位值为1) CALL YS ;延时0.2秒 MOVLW 0x033 BCF 7,5 ;关`喇叭`;F7C口5位值为0 (BSF强制某寄存器F的某个位值为0) CALL YS ;延时0.2秒 GOTO GJ ;跳至`关机` ;
;------------------------------------------------------------------------------- ; ;**************************************************************************** ;-------复位----初始---------------------------------------------------------- ORG 0x7FF ;PIC复位地址
GOTO KS ;程序从这里开始 ORG 0x100 ;主程序的开始放在100H是为了把每一页前256字节留给子程序 KS NOP ;无操作,延时一个指令周期 MOVLW 0x000 ;00000000 MOVWF 6 ;清F6 B端口 MOVWF 7 ;清F7 C端口 ;MOVLW 0x000 ;00000000 对端口做设定时,数值要先写进W (本行省去,因为前面已对W写入了同样的数值了) ;门正 O C0 ;门反 O C1 ;镜正 O C2 ;镜反 O C3 ;灯板 O C4 ;喇叭 O C5 ;风控 O C6 ;电源 0 C7 TRIS 7 ;C口设为输出 5=F5=A端口 6=F6=B端口 7=F7=C端口 MOVLW 0x07F ;01111111
;控灯 I B0 ;门开 I B1 ;门关 I B2 ;镜出 I B3 ;镜回 I B4 ;风扇 I B5 ;灯开 I B6 TRIS 6 ;B口设为输入 BCF 3,0 ; C
BCF 3,1 ; DC BCF 3,2 ;清标志位 Z ;
;**************************************************************************************** ;-------开机主程序------------------------------------------------------------------------ KJ ;开机--- ; GOTO SHX1 ;一声响:提示开机 ;KD BTFSS 6,0 ;测试`控灯`状态,测试F6B口0位的引脚状态以改变流程;BTFSS指定的位为1时会忽略下一指令,为0则继续。
; GOTO KD ;0 ; MOVLW 0x015 ;`消抖`D21>W ,带去YS决定延时时间 能延时15毫秒 ; CALL YS ;延时等待电路稳定 ; BTFSS 6,0 ;再测试;1跳0续 ; GOTO GJ ;0;跳至`关机` KD GOTO MK ;1;跳至`门开` MK BCF 7,0 ;关`门正`;F7C口4位值为0 (BSF强制某寄存器F的某个位值为0) MOVLW 0x033 ;D51>W ,决定延时时间 0x033 能延时 秒 CALL YS ;延时0.2秒 BTFSS 6,1 ;测试`门开`状态,测试F6B口1位的引脚状态以改变流程;BTFSS指定的位为1时会忽略下一指令,为0则继续。 GOTO MZ ;0;跳至`门正` MOVLW 0x015 ;`消抖`D21>W ,带去YS决定延时时间 能延时15毫秒 CALL YS ;延时等待电路稳定 BTFSS 6,1 ;再测试;1跳0续 GOTO MK ;0 GOTO JC ;1 JC BCF 7,2 ;关`镜正`;F7C口2位值为0 (BSF强制某寄存器F的某个位值为0) BTFSS 6,3 ;测试`镜出`状态,测试F6B口3位的引脚状态以改变流程;BTFSS指定的位为1时会忽略下一指令,为0则继续。 GOTO JZ ;0;跳至`镜正` MOVLW 0x015 ;`消抖`D21>W ,带去YS决定延时时间 能延时15毫秒 CALL YS ;延时等待电路稳定 BTFSS 6,3 ;再测试;1跳0续 GOTO JC ;0 GOTO KFS ;1 KFS BSF 7,6 ;开`风控`;F7C口6位值为1 (BSF强制某寄存器F的某个位值为1) NOP ;无操作,延时一个指令周期 FS BTFSC 6,5 ;测试`风扇`状态,测试F6B口5位的引脚状态以改变流程;BTFSC指定的位为0时会忽略下一指令,为1则继续。 GOTO KDB ;1;开`灯板` MOVLW 0x015 ;`消抖`D21>W ,带去YS决定延时时间 能延时15毫秒 消抖 CALL YS ;延时等待电路稳定 BTFSC 6,5 ;再测试;0跳1续 GOTO FS ;1 GOTO SHX3 ;0;声响`故障报警` KDB BSF 7,4 ;开`灯板`;F7C口4位值为1 (BSF强制某寄存器F的某个位值为1) NOP ;无操作,延时一个指令周期 DN BTFSC 6,6 ;测试`灯`状态,测试F6B口6位的引脚状态以改变流程;BTFSC指定的位为0时会忽略下一指令,为1则继续。 GOTO SHX2 ;1;声响`开机动作完毕` MOVLW 0x015 ;`消抖`D21>W ,带去YS决定延时时间 能延时15毫秒 消抖 CALL YS ;延时等待电路稳定 BTFSC 6,6 ;再测试;0跳1续 GOTO DN ;1 GOTO SHX3 ;0;跳至`故障报警` ;-------监视`风扇`--`控灯`状态------------------------------------------------------------------------
JSFS BTFSC 6,5 ;监视`风扇`状态,测试F6B口5位的引脚状态以改变流程;BTFSC指定的位为0时会忽略下一指令,为1则继续。 GOTO JSKD ;1 监视`控灯`状态 MOVLW 0x015 ;`消抖`D21>W ,带去YS决定延时时间 能延时15毫秒 消抖 CALL YS ;延时等待电路稳定 BTFSC 6,5 ;再测试;0跳1续 GOTO JSFS ;1 GOTO SHX3 ;0;声响`故障报警` JSKD BTFSC 6,0 ;监视`控灯`状态,测试F6B口5位的引脚状态以改变流程;BTFSC指定的位为0时会忽略下一指令,为1则继续。
GOTO JSFS ;1 监视`风扇`状态 MOVLW 0x015 ;`消抖`D21>W ,带去YS决定延时时间 能延时15毫秒 消抖 CALL YS ;延时等待电路稳定 BTFSC 6,0 ;再测试;0跳1续 GOTO JSKD ;1 GOTO GJ ;0;`关机` ; ;**************************************************************************************** ;-------关机主程序------------------------------------------------------------------------ GJ ;关机--- JH BCF 7,3 ;关`镜反`;F7C口3位值为0 (BSF强制某寄存器F的某个位值为0)
BTFSS 6,4 ;测试`镜回`状态,测试F6B口4位的引脚状态以改变流程;BTFSS指定的位为1时会忽略下一指令,为0则继续。 GOTO JF ;0跳至`镜反` MOVLW 0x015 ;`消抖`D21>W ,带去YS决定延时时间 能延时15毫秒 CALL YS ;延时等待电路稳定 BTFSS 6,4 ;再测试;1跳0续 GOTO JH ;0 GOTO GDB ;1 GDB BCF 7,4 ;关`灯板`;F7C口4位值为0 (BSF强制某寄存器F的某个位值为0)
DN1 BTFSC 6,6 ;测试`灯`状态,测试F6B口6位的引脚状态以改变流程;BTFSC指定的位为0时会忽略下一指令,为1则继续。 GOTO GDB ;1关`灯板` MOVLW 0x015 ;`消抖`D21>W ,带去YS决定延时时间 能延时15毫秒 消抖 CALL YS ;延时等待电路稳定 BTFSC 6,6 ;再测试;0跳1续 GOTO GDB ;1关`灯板` GOTO MG ;0; MG BCF 7,1 ;关`门反`;F7C口1位值为0 (BSF强制某寄存器F的某个位值为0) BTFSS 6,2 ;测试`门关`状态,测试F6B口2位的引脚状态以改变流程;BTFSS指定的位为1时会忽略下一指令,为0则继续。 GOTO MF ;跳至`门反` MOVLW 0x015 ;`消抖`D21>W ,带去YS决定延时时间 能延时15毫秒 CALL YS ;延时等待电路稳定 BTFSS 6,2 ;再测试;1跳0续 GOTO MG ;0 GOTO LQYS ;1 ;-------`延时冷却`--关`风控`--关`电源2`------------------------------------------------------------------------ LQYS MOVLW 0x0FE ;`冷却`;D254>W ,决定延时时间 0x0FE 能延时25秒 CALL YS ;延时25秒 GFS BCF 7,6 ;关`风控`;F7C口6位值为0 (BCF强制某寄存器F的某个位值为10) DY2 BCF 7,7 ;关`电源2`F7C口7位值为0 (BSF强制某寄存器F的某个位值为0) ; ;--------长声响:提示关机动作完毕等待完全关机,延时后若没响应,则不再发出声响提示--计秒时间由W指定---------------------------------------------------- SHXC MOVLW 0x029 ;`声响长`;D41>W ,决定延时时间 0x029 能延时0.1秒 长声响:提示关机动作完毕 BSF 7,5 ;开`喇叭`;F7C口5位值为1 (BSF强制某寄存器F的某个位值为1) CALL YS ;延时0.1秒 MOVLW 0x064 ;D100 BCF 7,5 ;关`喇叭`;F7C口5位值为0 (BSF强制某寄存器F的某个位值为0) CALL YS ;延时1.5秒 MOVLW 0x029 ;`声响长`;D41>W ,决定延时时间 0x029 能延时0.1秒 长声响:提示关机动作完毕 BSF 7,5 ;开`喇叭`;F7C口5位值为1 (BSF强制某寄存器F的某个位值为1) CALL YS ;延时0.1秒 MOVLW 0x064 ;D100 BCF 7,5 ;关`喇叭`;F7C口5位值为0 (BSF强制某寄存器F的某个位值为0) CALL YS ;延时1.5秒 MOVLW 0x029 ;`声响长`;D41>W ,决定延时时间 0x029 能延时0.1秒 长声响:提示关机动作完毕 BSF 7,5 ;开`喇叭`;F7C口5位值为1 (BSF强制某寄存器F的某个位值为1) CALL YS ;延时0.1秒 MOVLW 0x064 ;D100 BCF 7,5 ;关`喇叭`;F7C口5位值为0 (BSF强制某寄存器F的某个位值为0) CALL YS ;延时1.5秒 MOVLW 0x029 ;`声响长`;D41>W ,决定延时时间 0x029 能延时0.1秒 长声响:提示关机动作完毕 BSF 7,5 ;开`喇叭`;F7C口5位值为1 (BSF强制某寄存器F的某个位值为1) CALL YS ;延时0.1秒 MOVLW 0x064 ;D100 BCF 7,5 ;关`喇叭`;F7C口5位值为0 (BSF强制某寄存器F的某个位值为0) CALL YS ;延时1.5秒 MOVLW 0x076 ;`声响长`;D118>W ,决定延时时间 0x076 能延时2.5秒 长声响:提示关机动作完毕 BSF 7,5 ;开`喇叭`;F7C口5位值为1 (BSF强制某寄存器F的某个位值为1) CALL YS ;延时2.5秒 BCF 7,5 ;关`喇叭`;F7C口5位值为0 (BSF强制某寄存器F的某个位值为0) SLEEP ;休眠 ; ;------------------------------------------------------------------------------- END ; directive 'end of program'(程序到这里终止) 本文出自 “寒山小猫” 博客,谢绝转载! 本文出自 51CTO.COM技术博客 |


hotstarcraft
博客统计信息
热门文章
最新评论
友情链接