论坛元老
 
- 积分
- 6662
- 金钱
- 6662
- 注册时间
- 2016-5-29
- 在线时间
- 910 小时
|
直接上程序.
;中断服务程序
ORG 0H
NOP
RST
ORG 8H
ISR()
{
COPYA = A
SWAPR STATUS,0
COPYS = A
IF T1IF
{
CLR_T1IF
TICK = 1 ;这一行与解码无关
IF IRPIN ; 红外接收引脚
{
IRH ++
}
ELSE
{
IF IRH >= 18
{
IRN = 0 ;接收位长度清0
}
ELSE
IF IRH >= 8
{
IRN ++
FC = 1
GET_DATA
}
ELSE
IF IRH >= 1
{
IRN ++
FC = 0
GET_DATA
}
RET_FIE:
IRH = 0
}
}
SWAPR COPYS,0
STATUS = A
SWAPR COPYA,1
SWAPR COPYA,0
RETIE
}
GET_DATA()
{
SLEEP_TIME = 0
IRBUF#3 >>>
IRBUF#2 >>>
IRBUF#1 >>>
IRBUF#0 >>>
IF IRN >= 32 ; 接收了 32 个位
{
IRN = 0
IF IRBUF#0 = 0X80 ;验证用户编码
IF IRBUF#1 = 0X7F ;验证用户编码
{
A = IRBUF#2
IRBUF#3 + A
IRBUF#3 ++
IF IRBUF#3 = 0 ;验证校验码
{
IR_FLAG = 1 ; 收到一个完整的数据,接收成功
IR_COMMAND = IRBUF#2
}
}
}
JMP RET_FIE ; 返回中断
}
|
|