PIC12F629解码PT2262IR(asm程序)
扫描二维码
随时随地手机看文章
这段程序是用在一款七彩灯红外遥控解码程序里,单片机使用PIC12F629,软件模拟三路PWM输出驱动红绿蓝LED分八组共24个LED,实现单LED渐明渐暗,两LED一明一暗,七彩等九种花样.有断电记忆功能.如下是解码程序.
;--------------------------------------------------------
;filename: 24LED_Remote.asm
;mcu: PIC12f629
;clock: 4 MHz for INTRC
;date: 2006/02/25
;writer: aLin
; IC type: PT2262IR
;Rosc: 470K
;--------------------------------------------------------
list p=pic12f629
#i nclude"p12f629.inc"
#defineB_LEDgpio,0;绿LED输出端口
#defineG_LEDgpio,1;蓝LED输出端口
#defineR_LEDgpio,2;红LED输出端口
#defineremgpio,3;GP3/MCLR,定义遥控输入端
;因为当按住PT2262的按键不放的时候
;PT2262会把编码不断的送出
;设置ENABLE位用来检测按键有没有放开过,
;如果没有放开则不再响应
;用于遥控型
#defineenableuser_reg,0;接收允许位
#defineon_offuser_reg,1;该位为0时,按花样选择键无效
#definego_nextuser_reg,2;该位为1时,跳下一段
#defineresetuser_reg,3;该位为1时,关显示
#defineunlockuser_reg,4;用于配合on_off位
;---------------------------------------------------------
;定义变量
;
r1equ20h;用于d5ms子程序
r2equ21h;用于d5ms子程序
r3equ22h;用于d320mS子程序
P_regequ23h;正脉宽时间寄存器
N_regequ24h;负脉宽时间寄存器
count1equ25h;计数器1
count2equ26h;计数器2
W_tempequ27h;W临时寄存器
user_regequ28h;用户寄存器
ee_dataequ29h;eeprom读写数据出入口
ee_addrequ2ah;eeprom读写地址入口
data_tempequ2bh;用于暂存从EEPROM读出的数所数据
index_regequ2ch;用于保存引导值
data_regequ2dh;用于保存从EEPROM读出的值
A0_addr1equ30h
A0_addr2equ31h
A1_addr1equ32h
A1_addr2equ33h
r5equ34h;用于解码延时
r6equ35h;用于解码延时
addr_set1equ36h;用于存储比较密码
addr_set2equ37h;用于存储比较密码
outputequ38h
countequ39h;接收12位编码
status_tempequ3ah;保存status的值,用于现场保护
ww_tempequ3bh;W工作寄存器,用于现场保护用
A0_data1equ3ch;用于存储比较数据D8
A0_data2equ3dh;用于存储比较数据D8
A1_data1equ3eh;用于存储比较数据D11
A1_data2equ3fh;用于存储比较数据D11
;-------------------------------------------
;定义常数
;
indexequ00h;EEData数据引导地址
;--------------------------------------------------
org 0000h
call init;调用初始化程序
goto main
;--------------------------------------------------
;中断处理入口
;TMR1溢出中断,说明按键松开时间大于等于65.536mS左右
org 0004h
movwf ww_temp;保护现场
swapf status,w
movwf status_temp
bcf intcon,gie;关所有中断
bcf t1con,tmr1on;停止TMR1
bcf pir1,tmr1if;清TMR1中断标志位
bcf enable;按键松开,清enable
swapf status_temp,w
movwf status
swapf ww_temp,f
swapf ww_temp,w
return
;--------------------------------------------------
;读出引导地址单元(00H)内容
mainmovlw index;送引导地址中转
movwf ee_addr
call ee_data_rd;调用读EEPROM程序
movf ee_data,w;读出引导地址内容
movwf index_reg;保存引导地址内容
movwf ee_addr;送待读出内容地址
call ee_data_rd
movf ee_data,w
movwf data_reg;保存读出
movf data_reg,w
addlw jumper_tab
movwf pcl
jumper_tabgoto start;跳到开始0段
goto seg1;跳到第1段
goto seg2;跳到第2段
goto seg3;跳到第3段
goto seg4;跳到第4段
goto seg5;跳到第5段
goto seg6;跳到第6段
goto seg7;跳到第7段
goto seg8;跳到第8段
;------------------------------------------------