📄 celonled.asm
字号:
;********************************************************
.include "C:\Documents and Settings\qiuqcc\My Documents\AVRTEST\m48def.inc" ;引用器件I/O配置文件
.def PWMEND = r0 ;
.def PWMBUF = r1 ;
.def STATUSBUF = r2 ;
.def GLFLAG = r3 ;
.equ NEWPWM_F = 0;新添加的PWM模式下
.def BEEPCOUNT = r8 ;
.def BUZZBUF = r10 ;
.def BUZZFLG = r11 ;
.def RTMP1 = r16 ;临时变量
.def RTMP2 = r17 ;临时变量
.def RTMP3 = r18 ;临时变量
.def RTMP4 = r19 ;临时变量
.def LEDMODE1 = r20 ;临时变量
.def LEDMODE2 = r21 ;临时变量
.def INRTMP1 = r22 ;临时变量(中断中使用)
.def INRTMP2 = r23 ;临时变量(中断中使用)
.def CONFLAG = r24 ;
.equ ST8mSF = 0 ;
.equ ST05SF = 1 ;
.equ PWM_EN = 3 ;在PWM模式下
.equ KOFLAG = 4 ;
.equ AUTOPWMUP = 5 ;
.equ timeflagF = 6 ;
.equ IOFLAGF = 7 ;
;寄存器的定义
.equ LONGTIME = 0X0160
.equ KEYREF = 0X0161
.equ KFIRSTF = 5 ;
.equ ADCData_H = 0X0163
.equ ADCData_L = 0X0164
.equ EEPROM_DNum = 0X0165
.equ COLOCRTIME = 0X0166
.equ DECBATTF = 0X0167
.equ TCCBAK = 0X0168
.equ RVTIMEBUF = 0X0169
.equ RVDAT = 0X016A
.equ LEDFLASHTIME= 0X016B
.equ POLLING_CT = 0X016C
.equ FLASHBUFF = 0X016D
.equ TIMEBUFF01 = 0X016E
.equ TIMEBUFF02 = 0X016F
.equ TIMEBUFF03 = 0X0170
.equ TIMEBUFF04 = 0X0171
.equ TIME8BAKBUF1= 0X0172
.equ TXDATLBUF = 0X0173
.equ TIMERTMP1 = 0X0174
.equ TIMEBUFF05 = 0X0175
.equ LEDA = 0X00 ;
.equ LEDB = 0X01 ;
.equ LEDC = 0X02 ;
.equ LEDD = 0X03 ;
;=================================================
;中断向量区定义
.org $000
rjmp RESET ; 复位处理
.org $010
rjmp TIM0_OVF ; 定时器0 溢出处理
;程序开始
.org $01A
reset:
LDI R16,LOW(ramend)
OUT SPL,R16
RCALL INITIAL
RCALL INITT
LDI LEDMODE1,1
LDI LEDMODE2,1
SEI ;全局中断允许
LOOP:
SBRC CONFLAG,ST8mSF
RJMP RLROUT1
HAH1:
SBRS CONFLAG,ST05SF
RJMP HAH2
RJMP RLROUTW
HAH2:
RJMP LOOP
RLROUT1:
CBR CONFLAG,0X01;ST8mSF
RJMP HAH1
;*************************************************************************
RLROUTW:
CBR CONFLAG,0X02;ST05SF
SEC
SBRS LEDMODE1,0
CLC
ROR LEDMODE1
CBR LEDMODE2,0X10
SBRC LEDMODE2,0
SBR LEDMODE2,0X10
ROR LEDMODE2
;RCALL LEDON
LEDON:
CLR RTMP1
OUT PORTB,RTMP1
OUT PORTC,RTMP1
OUT PORTD,RTMP1
SBRC LEDMODE1,7
SBI PORTC,6
SBRC LEDMODE1,6
SBI PORTD,0
SBRC LEDMODE1,5
SBI PORTD,1
SBRC LEDMODE1,4
SBI PORTD,2
SBRC LEDMODE1,3
SBI PORTD,3
SBRC LEDMODE1,2
SBI PORTD,4
SBRC LEDMODE1,1
SBI PORTB,6
SBRC LEDMODE1,0
SBI PORTB,7
SBRC LEDMODE2,3
SBI PORTD,5
SBRC LEDMODE2,2
SBI PORTD,6
SBRC LEDMODE2,1
SBI PORTD,7
SBRC LEDMODE2,0
SBI PORTB,0
RJMP HAH2
;==================================================
;程序初始化.
INITIAL:
LDI R28,0X00
CLR R27 ; 清除X寄存器高字节
LDI R26,0X00 ; 将X寄存器低字节设置成$00
LOPIO:
ST X+,R28 ; (执行后X值加1)
CPI R26,0X1A ;
BRNE LOPIO
CLR RTMP1
LDI XH,0X00
LDI XL,0X60
INITIAL001:
ST X+,RTMP1
CPI XL,0X80
BRSH INITIA_OVER
RJMP INITIAL001
INITIA_OVER:
ret
;************************************************************************* */
;=======================================
DEL10MS:
CLR RTMP1
LDI RTMP2,0XF6
DEL10MS01:
INC RTMP1
BRNE DEL10MS01
INC RTMP2
BRNE DEL10MS01
RET
;*************************************************************************
INITT:
LDI RTMP1,0XFF
OUT DDRC,RTMP1 ;设置PORTC为输出
LDI RTMP1,0XFF
OUT DDRD,RTMP1 ;设置PORTD为输出
LDI RTMP1,0XFF
OUT DDRB,RTMP1 ;设置PORTB为输出
LDI RTMP1,0X00
OUT PORTB,RTMP1
OUT PORTC,RTMP1
OUT PORTD,RTMP1
LDI RTMP1, 0X00 ;PUD=0 使能上拉有效
OUT MCUCR, RTMP1
;LDI RTMP1,0X30 ;置一
;OUT PORTB,RTMP1 ;若PORTxn 为"1“,上拉电阻使能
CLI ;禁止全局中断
LDI RTMP1,0X00 ;定时器0初始化.
OUT TCNT0,RTMP1
LDI RTMP1,0X01 ;没有分频
OUT TCCR0B,RTMP1
LDI RTMP1,0X01
STS TIMSK0,RTMP1 ;中断0溢出使能
RET
;===========================================
;中断
TIM0_OVF:
IN INRTMP1,SREG
PUSH INRTMP1
LDI INRTMP1,0X88 ;定时器0时间设定.
OUT TCNT0,INRTMP1
;一次的时间是100us.一整段长度是3.3毫秒 160毫秒变换一次
TCC_INT:
;8毫秒和500毫秒的产生
;==========================================================
TCC_INT01:
LDS INRTMP1,TIMEBUFF01
INC INRTMP1
STS TIMEBUFF01,INRTMP1
CPI INRTMP1,80
BRLO TCC_INT02 ;小于跳转
CLR INRTMP1
STS TIMEBUFF01,INRTMP1
SBR CONFLAG,0X01 ;ST8mSF
LDS INRTMP1,TIMEBUFF02
INC INRTMP1
STS TIMEBUFF02,INRTMP1
CPI INRTMP1,64
BRLO TCC_INT02 ;小于跳转
CLR INRTMP1
STS TIMEBUFF02,INRTMP1
SBR CONFLAG,0X02 ;ST05SF
TCC_INT02:
POP INRTMP1
OUT SREG,INRTMP1
RETI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -