专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

单片机小旋磁美容仪汇编语言版

作者:佚名   来源:本站原创   点击数:  更新时间:2009年09月02日   【字体:

上次给大家在单片机论坛发了一个51单片机c语言做的小旋磁美容仪程序,这次再来一个汇编的,在实际应用中这个版本的程序运行起来更稳定,请大家多多指教。

ORG 0000h
AJMP MAIN
ORG 0003H
RETI
ORG 000BH
AJMP TIME0
ORG 0013H
RETI
ORG 001BH
AJMP TIME1

HOTOUT BIT P3.7
XUANOUT BIT P1.0  ;输出发热与旋磁引脚定义

XUANKEY BIT P3.0
HOTKEY BIT P3.1  ;定义两个按键的引脚端口

HOT_LED1 BIT P1.3
HOT_LED2 BIT P1.4
XUAN_LED1 BIT P1.5
XUAN_LED2 BIT P1.6

;--------------------以上都为外接引脚的定义.

OPENBIT BIT 01H   ;01H位寻址做为开关机标志位的标识,此值存于可以实现位寻址20H单元处,20.1位。
HOTBIT BIT 02H
XUANBIT BIT 03H


MIN EQU 22H   ;时间分钟值为存于22H单元中,可以实现位寻址
SEC  EQU 23H   ;JIA累加至20次为1秒钟,即分钟值自加1
JIA  EQU 29H   ;50ms每中断一次累加1

HOTDW EQU 24H
XUANDW EQU 25H   ;将档位标志寄存器定义,存一至四档用。


HOTON EQU 26H
HOTON1 EQU 27H   ;存发热占空比上升延时间值及待装值。

HOTOFF EQU 28H

XUANON EQU 2AH   ;存旋转占空比上升延值及待装值。
XUANON1 EQU 2BH

XUANOFF EQU 2CH    ;存旋转占空比下延值及待装值。

;运行过程中的各种变量进行处理 位寻址单元剩21H、2EH与2FH

;-------------------以上皆为内部运算用的位定义.

 


DD1: MOV    R7,#15  ; 装从20单元清0至29单元所用的标志清除次数
  MOV R0,#20H  ; 在R0装入地址,用于间接寻址
D1:  MOV @R0,#00H
  INC R0
  DJNZ R7,D1  ;循环清零
  RET

ORG  0030H
MAIN:
  MOV SP,#2FH  ;  将堆栈定义于数据缓存区30H开始存放
  MOV TMOD,#11H    ; 将定时器0与1同置为方式一16位定时器
  MOV TH1,#0FFH
  MOV TL1,#09CH ; 将定时器1定时中断时间设为100uS中断一次
  MOV TH0,#3CH
  MOV TL0,#0B0H ; 将定时器0定时中断时间设为50MS中断一次
  MOV IP,#08H  ; 将定时器1设为最高中断级
  MOV IE,#8AH  ; 将总中断及两定时器中断开关闭合
;  SETB TR0   ; T0定时器开始工作
;  SETB TR1   ; T1定时器开始工作
  ACALL DD1   ; 调用DD1子程序,对20至2E的空间进行清零
    SETB HOT_LED1
         SETB HOT_LED2
         SETB XUAN_LED1
         SETB XUAN_LED2  ;对灯进行初始化,待机时全部不亮
  CLR  XUANOUT
  CLR  HOTOUT
  MOV MIN,#18     ;将倒计时间设为30分钟
  ACALL KEY   ;调用按键检测子程序
  MOV A,HOTDW  ;将热档位值赋予A
  ORL A,XUANDW ;将旋转档位与热档位进行与运算
  JNZ START  ;对A进行检测,不为0则转移
  AJMP MAIN

START:
  SETB OPENBIT
  SETB TR0
  SETB TR1   ;将定时器1与定时器2打开

;以下为主循环检测判断程序

START1:
    ;调用按键检测程序
  MOV R7,HOTON
  CJNE R7,#0,OUT1;检测HOTON是否己到0
  JNB HOTBIT,HOT_OFF
  MOV HOTON,HOTON1
  AJMP OUT1
HOT_OFF:
  MOV HOTON,HOTOFF   ;以上自START1起都是对波形值进行装值的过程

OUT1:
  MOV R7,XUANON
  CJNE R7,#0,OUT2 ;检测xuanon是否己到0
  JNB XUANBIT,XUAN_OFF
  MOV XUANON,XUANON1
  AJMP OUT2
XUAN_OFF:
  MOV XUANON,XUANOFF  ;以上自OUT1都是对旋转值进行装值的过程

OUT2:  MOV R6,MIN
  MOV A,HOTDW  ;将热档位值赋予A
  ORL A,XUANDW ;将旋转档位与热档位进行与运算
  JZ START2  ;对A进行检测,不为0则转移
  ACALL KEY
  CJNE R6,#0,START1

START2:
  CLR TR0
  CLR TR1
  AJMP MAIN  ;检测时间到,或是档位为0时,自动返回主程序循环状态 

;-----------------------------------以上为程序的装值及退出条件设定检测主循环程序

  
;---------------------------------------以下为定时器0的30分钟倒计时
TIME0:
  MOV TH0,#3CH
  MOV TL0,#0B0H ; 将定时器0装初值
  INC JIA   ; 对50MS进行累加
  MOV R5,JIA
  CJNE R5,#20,TOOUT; 对JIA的值进行20判断
  MOV JIA,#0  ;对JIA值进行清零
  INC SEC   ;达到一秒时累加
  MOV R5,SEC  ; 对秒的值进行1分钟到达的判断
  CJNE R5,#60,TOOUT
  MOV SEC,#0
  DEC MIN
TOOUT:
  RETI
;------------------------------------以上为定时中断0的子程序,分钟计数

;-----------------------------------------以下为定时中断1的子程序,占空比调节设置
TIME1:
  MOV TH1,#0FFH
  MOV TL1,#09CH ; 将定时器1装初值
  CLR EA
  PUSH ACC
  PUSH PSW
  MOV R0,HOTDW
  CJNE R0,#0,CX1
  CLR HOTOUT
  CLR HOTBIT
  AJMP NEXT
CX1:
  DJNZ HOTON,NEXT
  CPL HOTOUT
  CPL HOTBIT
 
NEXT:
  MOV R0,XUANDW
  CJNE R0,#0,CX2
  CLR XUANOUT
  CLR XUANBIT
  AJMP NEXT1

CX2: DJNZ XUANON,NEXT1
  CPL XUANOUT
  CPL XUANBIT

NEXT1:
  POP PSW
  POP ACC
  SETB EA
  RETI
;---------------------------------------以上为定时中断1的子程序 

;-------------------------------以下为按键检测运算子程序

KEY:
  JNB HOTKEY,KEY11
  AJMP NEXTKEY
KEY11:  MOV R2,HOTDW
  CJNE R2,#0,DDDD
 
DDDD:  MOV R3,#110
  ACALL DELAY10MS
  JNB HOTKEY,KEYCX
  AJMP NEXTKEY
KEYCX:
  INC HOTDW
  MOV R2,HOTDW

  CJNE R2,#4,CL1
  MOV HOTDW,#0
  SETB HOT_LED1
  SETB HOT_LED2
CL1:  CJNE R2,#1,CL2
  MOV HOTON,#3
  MOV HOTON1,#3
  MOV HOTOFF,#7
  CLR HOT_LED1
CL2: CJNE R2,#2,CL3
  MOV  HOTON,#6
  MOV HOTON1,#6
  MOV HOTOFF,#4
  SETB HOT_LED1
  CLR HOT_LED2
CL3: CJNE R2,#3,NEXTKEY
  MOV HOTON,#9
  MOV HOTON1,#9
  MOV HOTOFF,#1
  CLR HOT_LED1

NEXTKEY:
  JNB XUANKEY,KEYCX1
  AJMP OUTKEY
KEYCX1: MOV R2,XUANDW
 CJNE R2,#0,DDD
 MOV R3,#120
 AJMP    CCC
DDD: MOV R3,#98
CCC: ACALL   DELAY10MS
 JNB XUANKEY,KEYCX2
 AJMP OUTKEY
KEYCX2:
 INC  XUANDW
 MOV  R2,XUANDW

 CJNE R2,#4,CL4
 MOV  XUANDW,#0
 SETB XUAN_LED1
 SETB XUAN_LED2
CL4:CJNE R2,#1,CL5
 MOV  XUANON,#4
 MOV  XUANON1,#4
 MOV  XUANOFF,#6
 CLR  XUAN_LED1
CL5:CJNE R2,#2,CL6
 MOV  XUANON,#7
 MOV  XUANON1,#7
 MOV  XUANOFF,#3
 SETB XUAN_LED1
 CLR  XUAN_LED2
CL6:CJNE R2,#3,OUTKEY
 MOV  XUANON,#9
 MOV  XUANON1,#9
 MOV  XUANOFF,#1
 CLR  XUAN_LED1

OUTKEY:       
  RET

DELAY10MS:
D111: MOV R4,#250
D222: DJNZ R4,D222
  DJNZ R3,D111
  RET
 END

关闭窗口

相关文章