积分规则 网站地图 帮助中心    
嵌入式软件 单 片 机 DSP 存储器 传感控制 光电显示
嵌入式硬件 CPLD/FPGA SOPC AD/DA 接口电路 模拟设计
I C设计 通信产品 汽车电子 电源产品 消费电子 数控系统
工业控制 军工/航天 安防产品 医疗电子 计算机外设 测试测量
供应 I C
求购 公司库

  IC 求购 销售 公司 论文 DATASHEET 参考设计 论坛
当前位置: 电子技术 >> 嵌入式软件 >> 汇编
  相关分类: LINUX | WINCE | UC/OS | Bootloader | 下载 | VXWORKS | 网络协议 | JAVA | 汇编 | 驱动设计 | Symbian | XP Embedded | Nucleus | 新产品 | 相关文章 | 综合技术 |
用PIC12C508A 控制模型源程序
 
作者:未知   来源:嵌入式技术网    点击数:118   更新时间:2008-7-18
您可以添加到网摘 让更多人关注此文章:

    

; Description: Receive IR Remote control NEC code
list p=12C508A, f=INHX8M, r=DEC, b=8, C=80
__config (_MCLRE_OFF & _CP_ON & _WDT_OFF & _IntRC_OSC)
__idlocs H'0001'

INDF equ 0x00
TMR0 equ 0x01
PCL equ 0x02
STATUS equ 0x03
FSR equ 0x04
OSCCAL equ 0x05
GPIO equ 0x06

Bit7 equ 0x07
Bit6 equ 0x06
Bit5 equ 0x05
Bit4 equ 0x04
Bit3 equ 0x03
Bit2 equ 0x02
Bit1 equ 0x01
Bit0 equ 0x00

W equ 0x00
F equ 0x01

; STATUS Register
GPWUF equ Bit7
PA0 equ Bit5
NOT_TO equ Bit4
NOT_PD equ Bit3
Z equ Bit2
DC equ Bit1
C equ Bit0

; GPIO Register
bIRDataIn equ Bit0
bSystemPowerOut0 equ Bit1

; Configuration Bits
_MCLRE_ON equ 0x0fff
_MCLRE_OFF equ 0x0fef
_CP_ON equ 0x0ff7
_CP_OFF equ 0x0fff
_WDT_ON equ 0x0fff
_WDT_OFF equ 0x0ffb
_LP_OSC equ 0x0ffc
_XT_OSC equ 0x0ffd
_IntRC_OSC equ 0x0ffe
_ExtRC_OSC equ 0x0fff

; Macro Definition
PowerDownSystem MACRO
bcf GPIO, bSystemPowerOut0
ENDM

PowerUpSystem MACRO
bsf GPIO, bSystemPowerOut0
ENDM

; General Purpose Register
DelayCounter1 equ 0x07
DelayCounter2 equ 0x08

AddrCode equ 0x10
AddrCodeNot equ 0x11
DataCode equ 0x12
DataCodeNot equ 0x13

Result equ 0x14
PowerState equ 0x15
ButtonTemp equ 0x16

Bit equ 0x17
GetBitCounter equ 0x18
GetBitCountLo equ 0x19
GetBitCountHi equ 0x1A
PausecountLo equ 0x1B
PausecountHi equ 0x1C
errorflag equ 0x1D
; Constant Definition
cPowerOn equ 0xFF
cPowerOff equ 0x00
cPowerHi equ 0x82
cPowerLo equ 0x7D
cAddressHi equ 0xF0
cAddressLo equ 0x0F
;==============================================================================
org 0000h
movwf OSCCAL
goto main
;------------------------------------------------------------------------------
; Function: pDelay1ms
; Overview: This is a very accurate 1ms delay for a 4MHz clock.
;------------------------------------------------------------------------------
pDelay1ms:
movlw .198
movwf DelayCounter1
nop
nop
tagDelay1ms_01:
nop
nop
decfsz DelayCounter1, F
goto tagDelay1ms_01
retlw 0x00
;------------------------------------------------------------------------------
; Function: pDelay250ms
; Overview:
;------------------------------------------------------------------------------
pDelay250ms:
movlw .250
movwf DelayCounter2
tagDelay250ms_01:
call pDelay1ms
decfsz DelayCounter2, F
goto tagDelay250ms_01
retlw 0x00

;------------------------------------------------------------------------------
; Function: pGetBit
; Overview:
;------------------------------------------------------------------------------
pGetBit:
tagBitStart:
clrf errorflag
clrf GetBitCountLo
clrf GetBitCountHi

tagBitWait:
btfss GPIO, bIRDataIn
goto tagBitWait

tagBitLoop:
incfsz GetBitCountLo, F
goto tagBitNext
incf GetBitCountHi, F
movlw .3
subwf GetBitCountHi,W
btfsc STATUS,C
goto errorret
tagBitNext:
btfsc GPIO, bIRDataIn
goto tagBitLoop

movlw .1
subwf GetBitCountHi, W
btfsc STATUS, Z
goto tagBitIsOne

tagBitIsZero:
movlw 0x00
movwf Bit
goto tagBitDone
tagBitIsOne:
movlw 0xff
movwf Bit
goto tagBitDone

tagBitDone:
retlw 0x00
errorret:
bsf errorflag,Bit0
retlw 0x00
;------------------------------------------------------------------------------
;==============================================================================
; Program Main Entry.
;==============================================================================
main:
movlw B'11000111'
option

movlw B'11111101'
tris GPIO

;PowerUpSystem
movlw B'11111111'
movwf GPIO

movlw cPowerOn
movwf PowerState

initial:
clrf AddrCode
clrf AddrCodeNot
clrf DataCode
clrf DataCodeNot

doIrCheck:
btfsc GPIO, bIRDataIn
goto doIrCheck

;================================================
;call pGetBit
leaderWait:
btfss GPIO, bIRDataIn
goto leaderWait
call pGetBit
pauseWait:
;btfsc GPIO, bIRDataIn
;goto pauseWait
movf GetBitCountLo,W
movwf PausecountLo
movf GetBitCountHi,W
movwf PausecountHi
movlw 0x02
subwf PausecountHi,W
btfss STATUS,Z
;btfss PausecountHi,Bit1
goto doIrCheck
;btfsc GPIO,bIRDataIn
;goto

;================================================
AddrBit0:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto AddrBit0Zero

AddrBit0One:
bsf AddrCode, Bit0
goto AddrBit1

AddrBit0Zero:
bcf AddrCode, Bit0
;------------------------------------------------
AddrBit1:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto AddrBit1Zero

AddrBit1One:
bsf AddrCode, Bit1
goto AddrBit2

AddrBit1Zero:

bcf AddrCode, Bit1
;------------------------------------------------
AddrBit2:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto AddrBit2Zero

AddrBit2One:
bsf AddrCode, Bit2
goto AddrBit3

AddrBit2Zero:
bcf AddrCode, Bit2
;------------------------------------------------
AddrBit3:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto AddrBit3Zero

AddrBit3One:
bsf AddrCode, Bit3
goto AddrBit4

AddrBit3Zero:
bcf AddrCode, Bit3
;------------------------------------------------
AddrBit4:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto AddrBit4Zero

AddrBit4One:
bsf AddrCode, Bit4
goto AddrBit5

AddrBit4Zero:
bcf AddrCode, Bit4
;------------------------------------------------
AddrBit5:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto AddrBit5Zero

AddrBit5One:
bsf AddrCode, Bit5
goto AddrBit6

AddrBit5Zero:
bcf AddrCode, Bit5
;------------------------------------------------
AddrBit6:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto AddrBit6Zero

AddrBit6One:
bsf AddrCode, Bit6
goto AddrBit7

AddrBit6Zero:
bcf AddrCode, Bit6
;------------------------------------------------
AddrBit7:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto AddrBit7Zero

AddrBit7One:
bsf AddrCode, Bit7
goto AddrNotBit0

AddrBit7Zero:
bcf AddrCode, Bit7
;++++++++++++++++++++++++++++++++++++++++++++++++
AddrNotBit0:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto AddrNotBit0Zero

AddrNotBit0One:
bsf AddrCodeNot, Bit0
goto AddrNotBit1

AddrNotBit0Zero:
bcf AddrCodeNot, Bit0
;------------------------------------------------
AddrNotBit1:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto AddrNotBit1Zero

AddrNotBit1One:
bsf AddrCodeNot, Bit1
goto AddrNotBit2

AddrNotBit1Zero:

bcf AddrCodeNot, Bit1
;------------------------------------------------
AddrNotBit2:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto AddrNotBit2Zero

AddrNotBit2One:
bsf AddrCodeNot, Bit2
goto AddrNotBit3

AddrNotBit2Zero:
bcf AddrCodeNot, Bit2
;------------------------------------------------
AddrNotBit3:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto AddrNotBit3Zero

AddrNotBit3One:
bsf AddrCodeNot, Bit3
goto AddrNotBit4

AddrNotBit3Zero:
bcf AddrCodeNot, Bit3
;------------------------------------------------
AddrNotBit4:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto AddrNotBit4Zero

AddrNotBit4One:
bsf AddrCodeNot, Bit4
goto AddrNotBit5

AddrNotBit4Zero:
bcf AddrCodeNot, Bit4
;------------------------------------------------
AddrNotBit5:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto AddrNotBit5Zero

AddrNotBit5One:
bsf AddrCodeNot, Bit5
goto AddrNotBit6

AddrNotBit5Zero:
bcf AddrCodeNot, Bit5
;------------------------------------------------
AddrNotBit6:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto AddrNotBit6Zero

AddrNotBit6One:
bsf AddrCodeNot, Bit6
goto AddrNotBit7

AddrNotBit6Zero:
bcf AddrCodeNot, Bit6
;------------------------------------------------
AddrNotBit7:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto AddrNotBit7Zero

AddrNotBit7One:
bsf AddrCodeNot, Bit7
goto DataBit0

AddrNotBit7Zero:
bcf AddrCodeNot, Bit7
;++++++++++++++++++++++++++++++++++++++++++++++++
DataBit0:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto DataBit0Zero

DataBit0One:
bsf DataCode, Bit0
goto DataBit1

DataBit0Zero:
bcf DataCode, Bit0
;------------------------------------------------
DataBit1:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto DataBit1Zero

DataBit1One:
bsf DataCode, Bit1
goto DataBit2

DataBit1Zero:

bcf DataCode, Bit1
;------------------------------------------------
DataBit2:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto DataBit2Zero

DataBit2One:
bsf DataCode, Bit2
goto DataBit3

DataBit2Zero:
bcf DataCode, Bit2
;------------------------------------------------
DataBit3:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto DataBit3Zero

DataBit3One:
bsf DataCode, Bit3
goto DataBit4

DataBit3Zero:
bcf DataCode, Bit3
;------------------------------------------------
DataBit4:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto DataBit4Zero

DataBit4One:
bsf DataCode, Bit4
goto DataBit5

DataBit4Zero:
bcf DataCode, Bit4
;------------------------------------------------
DataBit5:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto DataBit5Zero

DataBit5One:
bsf DataCode, Bit5
goto DataBit6

DataBit5Zero:
bcf DataCode, Bit5
;------------------------------------------------
DataBit6:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto DataBit6Zero

DataBit6One:
bsf DataCode, Bit6
goto DataBit7

DataBit6Zero:
bcf DataCode, Bit6
;------------------------------------------------
DataBit7:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto DataBit7Zero

DataBit7One:
bsf DataCode, Bit7
goto DataNotBit0

DataBit7Zero:
bcf DataCode, Bit7
;++++++++++++++++++++++++++++++++++++++++++++++++
DataNotBit0:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto DataNotBit0Zero

DataNotBit0One:
bsf DataCodeNot, Bit0
goto DataNotBit1

DataNotBit0Zero:
bcf DataCodeNot, Bit0
;------------------------------------------------
DataNotBit1:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto DataNotBit1Zero

DataNotBit1One:
bsf DataCodeNot, Bit1
goto DataNotBit2

DataNotBit1Zero:

bcf DataCodeNot, Bit1
;------------------------------------------------
DataNotBit2:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto DataNotBit2Zero

DataNotBit2One:
bsf DataCodeNot, Bit2
goto DataNotBit3

DataNotBit2Zero:
bcf DataCodeNot, Bit2
;------------------------------------------------
DataNotBit3:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto DataNotBit3Zero

DataNotBit3One:
bsf DataCodeNot, Bit3
goto DataNotBit4

DataNotBit3Zero:
bcf DataCodeNot, Bit3
;------------------------------------------------
DataNotBit4:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto DataNotBit4Zero

DataNotBit4One:
bsf DataCodeNot, Bit4
goto DataNotBit5

DataNotBit4Zero:
bcf DataCodeNot, Bit4
;------------------------------------------------
DataNotBit5:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto DataNotBit5Zero

DataNotBit5One:
bsf DataCodeNot, Bit5
goto DataNotBit6

DataNotBit5Zero:
bcf DataCodeNot, Bit5
;------------------------------------------------
DataNotBit6:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto DataNotBit6Zero

DataNotBit6One:
bsf DataCodeNot, Bit6
goto DataNotBit7

DataNotBit6Zero:
bcf DataCodeNot, Bit6
;------------------------------------------------
DataNotBit7:
call pGetBit
btfsc errorflag,Bit0
goto doIrCheck
btfss Bit, Bit7
goto DataNotBit7Zero

DataNotBit7One:
bsf DataCodeNot, Bit7
goto ReceiverEnd

DataNotBit7Zero:
bcf DataCodeNot, Bit7
;++++++++++++++++++++++++++++++++++++++++++++++++

ReceiverEnd:
doCheckAddress:
movlw 0x01 ;custom address code
xorwf AddrCode, W
btfss STATUS, Z
goto doNotThisDevice

movlw 0x0C ;custom data code
xorwf DataCode, W
btfss STATUS, Z
goto doNotPowerButton
goto toggleSystemPower

doNotThisDevice:
doNotPowerButton:
call pDelay250ms
call pDelay250ms

goto clearVariables
;================================================
call pDelay250ms
;================================================
toggleSystemPower:
btfsc PowerState, Bit7
goto turnPowerOff
;------------------------------------------------
turnPowerOn:
movlw cPowerOn
movwf PowerState
PowerUpSystem
goto afterToggleSystemPower
;------------------------------------------------
turnPowerOff:
call pDelay250ms
call pDelay250ms
call pDelay250ms
call pDelay250ms

call pDelay250ms
call pDelay250ms
call pDelay250ms
call pDelay250ms

movlw cPowerOff
movwf PowerState
PowerDownSystem
nop
afterToggleSystemPower:
call pDelay250ms

clearVariables:
clrf AddrCode
clrf AddrCodeNot
clrf DataCode
clrf DataCodeNot

goto doIrCheck
end



相关文章
· 基于PIC单片机的便携式测试记录仪设计[81]
· PIC16F84电机速度控制程序[262]
· PIC单片机控制的遥控防盗报警器[116]
· 用PIC16C73实现高精度数字电度表[101]
· 基于PIC单片机的低功耗键盘接口设计[85]
热门评论排行
·VHDL设计中电路简化问题的
·江苏嵌入式Linux教育培训
·锐极LINUX驱动培训班定于
·基于实时操作系统μC/OS-
·ARM嵌入式系统基础教程(N

文章评论
    没有任何评论
*只显示最新10条评论。评论内容只代表网友观点,与本站立场无关。更多评论
发表评论
  * 请先[登陆]再进行评论,谢谢。
评分: 1分 2分 3分 4分 5分
内容: *
发帖须知:
一.所发文章必须遵守《互联网电子公告服务管理规定》;
二.严禁发布供求代理信息,公司介绍,产品信息等广告宣传信息;
三.严禁恶意重复发帖;
四.严禁对个人,实体,民族,国家等进行漫骂,污蔑,诽谤。
 
热点新闻 [更多]
 
赛普拉斯为用于机器视觉与运动分析应用
赛普拉斯针对机器视觉与全息数据存储应
金融危机来袭 台湾LED产
半导体市场环境恶化 安森美
Vishay 的新型&nb
Intersil推出采用小尺寸QFN
富士通微电子携手西安电子科技大学成立
纤巧和高压的 LDO&nb
华为计划收购北电业务 华为
华为计划收购北电业务 华为
 
热门下载 [更多]
 
[ PCB设计] Protel99教程下载
[ ] 手把手学单片机20个例
[ ] 单片机做的智能台灯
[ ] 单片机入门书
[ ] linux系统移植开发文档
[ ] IC卡的读写程序
[ ] 8051单片机C语言彻底应用
[ 常用软件] 555定时器电路设计软件V1.2
[ 常用软件] 51定时器计算软件
[ ] ARM处理器应用开发4步骤
 
论坛新帖 [更多]
 
四折批发各种数码相机,摄相机等...
最低价销售各种品牌手机...
震撼出售各种品牌笔记本电脑等!...
IC design 的流程...
电子工程师,别拿一分钱不当回事...
新款安全多用途非接触式芯片(T...
关于ARM启动的一篇文章!...
Linux网络设备驱动编程...
linux文件系统基础知识...
求奇想达QXD-DM642开发...

 
赞助商 [更多]
 

ICP许可证号:[粤 05056597]
联系电话:010-82517432 82517615 传真: 010-82517615

版权所有 Copyright © 2006 嵌入式技术网