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

📄 pwm2.asm

📁 一个RGB彩灯汇编程序
💻 ASM
字号:
	ORG	0000H
	LJMP    MAIN
	ORG	0003H		;外部中断0
	LJMP    interrupt_Ex1	
	ORG	000BH  		;定时器0中断 
	LJMP    interrupt_T0	
	ORG	0013H  		;外部中断1
	LJMP    interrupt_Ex2      
	ORG	001BH      	;定时器1中断
	LJMP    interrupt_T1

;主函数开始
	ORG	0030H
MAIN:    
	LCALL    initial                 
WHILE:				;主循环,判断按键
	JB       P3.4,KEYGREEN
KEYRED:				;红灯按键判断
	JNB      P3.4,KEYRED
	CLR      TR1
	CLR      TR0
	CLR      ET1
	CLR      ET0
	CLR	 P1.7
	SETB     P1.6
	SETB     P1.5
	SJMP     WHILE
KEYGREEN:			;绿灯按键判断
	JB       P3.5,KEYBLUE
       	JNB      P3.5,KEYGREEN
	CLR      TR1
 	CLR      TR0
 	CLR      ET1
 	CLR      ET0
	CLR      0x90.6
    	SETB     0x90.7
	SETB     0x90.5
    	SJMP     WHILE
KEYBLUE:			;蓝灯按键判断
	JB       0xB0.7,WHILE
	JNB      0xB0.7,KEYBLUE
	CLR      TR1
	CLR      TR0
	CLR      ET1
	CLR      ET0
 	CLR      0x90.5
	SETB     0x90.6
 	SETB     0x90.7
	SJMP     WHILE

;初始化系统
initial:
	MOV      TMOD,#11H                
	MOV      TH0,#0FCH		;给两个定时器赋初值 
	MOV      TL0,#0x67		
	MOV      TH1,#0xFF
	MOV      TL1,#0xA4
	SETB     IT0
	SETB     IT1
   	SETB     ET0			;开中断
	SETB     ET1
	SETB     EX0
	SETB     EX1
	SETB     EA
RET

;外部中断0服务程序--渐变开           
interrupt_Ex1:
	CLR      EA
  	SETB     TR1			;开定时器
	SETB     TR0
	SETB     ET1
	SETB     ET0
  	SETB     EA
RETI

;外部中断1服务程序--调节渐变速度 
interrupt_Ex2:
	PUSH     ACC			;保护现场
	PUSH     PSW
    	CLR      EA
    	MOV      A,#0x0A
	ADD      A,0x0B
	MOV      0x0B,A
;if(Speed2>100) 
	SETB     C
	SUBB     A,#0x64
	JC       ENDIF2
    	MOV      0x0B,#00H
ENDIF2:
	SETB     EA
	POP      PSW
	POP      ACC
RETI 

;定时器0中断服务程序--产生PWM,并控制灯的闪烁频率 
interrupt_T0:
	PUSH     ACC
	PUSH     PSW
    	CLR      EA
    	CLR      TR0
;if(++CountT==Speed2){     //改变此计数值可以改变渐变速度 
	INC      0x08			;CountT
	MOV	 A,0x08
	CJNE     A,0x0B,XXX1	;Speed2(0x0B) 
	MOV      0x08,#0x00
	MOV      0x09,#0x00
; if(++Speed>75) 
	INC      0x0A
	MOV      A,0x0A
	SETB     C
	SUBB     A,4BH
	JC       XXX1 
	MOV      0x0A,#0x00 
XXX1:
    	MOV      TH0,#0xFC  
	MOV      TL0,#0x67 
	SETB     TR0
   	SETB     EA
	POP      PSW
	POP      ACC
RETI

;定时器1中断服务程序--控制灯的渐变顺序
interrupt_T1:			
	PUSH     ACC
	PUSH     PSW
	MOV      PSW,#0x00
	PUSH     0x07
   	CLR      EA
   	CLR      TR1
   	INC      0x09		;Count
; if(Speed<=25){   // 红降绿升 
	MOV      A,0x0A		;Speed
	SETB     C
	SUBB     A,#19H
	JNC      ELSE1
;if(Count<=(25-Speed)){ 
	CLR      C
	MOV      A,#0x19
	SUBB     A,0x0A
	MOV      R7,A
	MOV      A,0x09
	SETB     C
	SUBB     A,R7
	JNC      Count25
   	CLR      0x90.7
   	SETB     0x90.6
   	SJMP     ELSEEND
;else if(Count>(25-Speed)){ 
Count25:
	MOV      A,0x09
	SETB     C
	SUBB     A,R7
 	JC       ELSEEND
  	SETB     0x90.7
  	CLR      0x90.6
;if(Count==26) 
	MOV      A,0x09
	XRL      A,#0x1A
	JNZ      ELSEEND
;Count=0; 
	MOV      0x09,A
   	SJMP     ELSEEND
;else if(Speed<=50){     // 绿降蓝升 
ELSE1:
	MOV      A,0x0A
	SETB     C
	SUBB     A,#0x32
	JNC      ELSE2
;if(Count<=(50-Speed)){ 
	CLR      C
	MOV      A,#0x32
	SUBB     A,0x0A
	MOV      R7,A
	MOV      A,0x09
	SETB     C
	SUBB     A,R7
	JNC      ELSE3
   	CLR      0x90.6
   	SETB     0x90.5
   	SJMP     ELSEEND
;else if(Count>(50-Speed)){ 
ELSE3:
	MOV      A,0x09
	SETB     C
	SUBB     A,R7
	JC       ELSEEND
   	SETB     0x90.6
   	CLR      0x90.5
;if(Count==26) 
	MOV      A,0x09
	XRL      A,#0x1A
	JNZ      ELSEEND 
	MOV      0x09,A
  	SJMP     ELSEEND
;else if(Speed<=75){      // 红升蓝降 
ELSE2:
	MOV      A,0x0A
	SETB     C
	SUBB     A,#0x4B
	JNC      ELSEEND
;if(Count<=(75-Speed)){ 
	CLR      C
	MOV      A,#0x4B
	SUBB     A,0x0A
	MOV      R7,A
	MOV      A,0x09
	SETB     C
	SUBB     A,R7
	JNC      ELSE4
   	CLR      0x90.5
   	SETB     0x90.7
   	SJMP     ELSEEND
;else if(Count>(75-Speed)){ 
ELSE4:
	MOV      A,0x09
	SETB     C
	SUBB     A,R7
	JC       ELSEEND
  	SETB     0x90.5
   	CLR      0x90.7
;   if(Count==26) 
	MOV      A,0x09
	CJNE     A,#0x1A,ELSEEND
	MOV      0x09,#0x00
ELSEEND:
	MOV      TH1,#0xFF
  	MOV      TL1,#0xA4
  	SETB     TR1
   	SETB     EA
   	POP      0x07
	POP      PSW
	POP      ACC
RETI     
    
END

⌨️ 快捷键说明

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