《匠人手记》推荐网上购书渠道:
互动出版网(china-pub)购书入口   >>>
当当网(dangdang)购书入口   >>>
卓越亚马逊网 购书入口   >>>
淘宝网(taobao)购书入口   >>>
更多购书渠道……   >>> 

设为首页加入收藏联系匠人管理入口21IC首页21IC博客21IC社区侃单片机回复的贴参与的贴

天气预报
百宝日历
载入中...

百宝专栏

载入中...
最新货色

载入中...

粉丝评论

载入中...

载入中...



百宝信息

载入中...

百宝流量

(2006-07-01开始)


匠人手记

 匠人观点: 好记性不如烂笔头  
 黑色幽默:三鹿门——后世畅想

芯片EM78P153范例程序
程序匠人 发表于 2005-5-21 23:52:00  阅读全文 | 回复(0) | 引用通告 | 编辑

芯片EM78P153范例程序
                                
;芯片为EM78P153
;P64,P65接晶振,振荡模式为4MHz晶振
;看门狗关,指令周期为2个CLOCK,P63为复位脚
;*******************IO口的定义*********************
PORT6 EQU 0X06
IOC60 EQU 0X06
;**************特殊功能寄存器的定义******************
TCC EQU 0X01
PC EQU 0X02
PSW EQU 0X03
IOCD0 EQU 0X0D
IOCE0 EQU 0X0E
IOCF0 EQU 0X0F
RF EQU 0X0F
;***************用户自定义的寄存器*******************
COUNTER EQU 0X10
CODE1 EQU 0X11
CODE2 EQU 0X12
CODE3 EQU 0X13
CODE4 EQU 0X14
LP_CNT0 EQU 0X15
LP_CNT1 EQU 0X16
TEMP EQU 0X17
TEMPCODE EQU 0X18
REPEAT_COUNTER EQU 0X19
SEND_DATA EQU 0X1A
USER_CODE EQU 0X1B
FLAG EQU 0X1C
;*******************FLAG位定义**********************
C EQU 0
Z EQU 2
TCIF EQU 0
LEAD EQU 0
REPEAT EQU 1
INPUT EQU 1
OUTPUT EQU 0
ORG 0X000
NOP
NOP
NOP
NOP
JMP 0X50
;********************表格转换子程序程序******************
TABLE_CONVER:
CLR TEMP
TABLE_CONVER_1:
MOV A,TEMP
CALL TABLE_CONVERSION_IN
BC PSW,Z
XOR A,CODE3
JBC PSW,Z
JMP EXIT_5
INC TEMP
JMP TABLE_CONVER_1
EXIT_5:
CALL TABLE_CONVERSION_OUT
RET
;**********************表格转换程序IN*********************
TABLE_CONVERSION_IN:
ADD PC,A
RETL 0XD0 ;KEY_1
RETL 0X58 ;KEY_2
RETL 0XD8 ;KEY_3
RETL 0X90 ;KEY_4
RETL 0X18 ;KEY_5
RETL 0X98 ;KEY_6
RETL 0XE0 ;KEY_7
RETL 0X68 ;KEY_8
RETL 0XE8 ;KEY_9
RETL 0X28 ;KEY_0
RETL 0X20 ;KEY_3D
RETL 0XA0 ;KEY_MUTE
RETL 0X40 ;KEY_VOCAL
RETL 0XE2 ;KEY_VOL+
RETL 0XA2 ;KEY_VOL-
RETL 0X52 ;KEY_TUNE FWD
RETL 0X22 ;KEY_TUNE REV
RETL 0X12 ;KEY_STOP
RETL 0X80 ;KEY_<|
RETL 0X82 ;KEY_|>
RETL 0X02 ;KEY_OK
RETL 0XF0 ;KEY_TUNER
RETL 0X78 ;KEY_AM/FM
RETL 0XF8 ;KEY_SAVE
RETL 0X50 ;KEY_AUDIO
;**********************表格转换程序OUT*********************
TABLE_CONVERSION_OUT:
MOV A,TEMP
ADD PC,A
RETL 0X35 ;KEY_1
RETL 0X2D ;KEY_2
RETL 0X25 ;KEY_3
RETL 0X1D ;KEY_4
RETL 0X34 ;KEY_5
RETL 0X2C ;KEY_6
RETL 0X24 ;KEY_7
RETL 0X1C ;KEY_8
RETL 0X33 ;KEY_9
RETL 0X2B ;KEY_0
RETL 0X10 ;KEY_3D
RETL 0X18 ;KEY_MUTE
RETL 0X11 ;KEY_VOCAL
RETL 0X16 ;KEY_VOL+
RETL 0X15 ;KEY_VOL-
RETL 0X28 ;KEY_TUNE FWD
RETL 0X2A ;KEY_TUNE REV
RETL 0X22 ;KEY_STOP
RETL 0X31 ;KEY_<|
RETL 0X21 ;KEY_|>
RETL 0X29 ;KEY_OK
RETL 0X2E ;KEY_TUNER
RETL 0X20 ;KEY_AUX-1
RETL 0X23 ;KEY_AUX-2
RETL 0X17 ;KEY_DVD

ORG 0X050
MAIN:
;*********************初始化寄存器**********************
MOV A,@0B00000000
IOW IOCE0
MOV A,@0B11111101
IOW IOCD0
MOV A,@0B00000010
IOW IOC60
MOV A,@0B00000001
MOV PORT6,A
MOV A,@0B00000001
IOW IOCF0
CLR FLAG
CLR TEMPCODE
CLR COUNTER
CLR CODE1
CLR CODE2
CLR CODE3
CLR CODE4
MOV A,@0B10010000
MOV USER_CODE,A
;*********************扫描引导码**********************
SCAN_LEAD_CODE:
JBC PORT6,INPUT
JMP SCAN_LEAD_CODE
CLR FLAG
CLR REPEAT_COUNTER
CLR TEMPCODE
CALL JUDGE_START_CODE
JBS FLAG,LEAD
JMP SCAN_LEAD_CODE
;*********************接收数据**********************
RECEIVE_DATA_PROCEE:
CLR TEMPCODE
CALL RECEIVE_DATA
MOV A,TEMPCODE
MOV CODE1,A

MOV A,@0 ;判断用户码是否是00
BC PSW,Z
XOR A,CODE1
JBS PSW,Z
JMP SCAN_LEAD_CODE


CLR TEMPCODE
CALL RECEIVE_DATA
MOV A,TEMPCODE
MOV CODE2,A

MOV A,@0XFF ;判断用户码是否是FF
BC PSW,Z
XOR A,CODE2
JBS PSW,Z
JMP SCAN_LEAD_CODE

CLR TEMPCODE
CALL RECEIVE_DATA
MOV A,TEMPCODE
MOV CODE3,A

CLR TEMPCODE
CALL RECEIVE_DATA
MOV A,TEMPCODE
MOV CODE4,A
CLR FLAG
;*********************发送数据**********************
SEND_DATA_PROCEE:
JBS USER_CODE,6 ;ST码的次高位反相
JMP COM_1 ;=0
JMP COM_2 ;=1
COM_1:
BS USER_CODE,6
JMP VVV
COM_2:
BC USER_CODE,6
JMP VVV
VVV:
CALL TABLE_CONVER ;调用码表转换子程序
MOV CODE3,A
REP:
CALL TRANSMIT_DATA
BS PORT6,OUTPUT
CALL JUDGE_REPEAT_CODE ;扫描引导码是否在重复?
JBS FLAG,LEAD
JMP SCAN_LEAD_CODE
JBC FLAG,REPEAT
JMP REP ;引导码是重复,继续扫描
JMP RECEIVE_DATA_PROCEE ;引导码不重复,去接收新数据
;****************引导码的检测子程序*****************
JUDGE_START_CODE:
CLR COUNTER ;清计数器
JUDGE_START_CODE_0:
JBC PORT6,INPUT
JMP NO_HIGH
CALL DELAY0.5MS
JBC PORT6,INPUT
JMP NO_HIGH
INC COUNTER
JMP JUDGE_START_CODE_0
NO_HIGH:
MOV A,COUNTER
BC PSW,C
SUB A,@20 ;20-A
JBS PSW,C
JMP EXIT_0 ;C=1,COUNTER>20
MOV A,COUNTER
BC PSW,C
SUB A,@16 ;16-A
JBC PSW,C
JMP EXIT_0 ;C=0,COUNTER<16
BS FLAG,LEAD
EXIT_0:
JBC PORT6,INPUT
JMP EXIT_0
INC REPEAT_COUNTER
RET
;****************接收数据子程序**********************
RECEIVE_DATA:
MOV A,@8
MOV COUNTER,A
MOV A,@0B00100000
CONTW ;停止记数
CONTINUE_1:
JBS PORT6,INPUT
JMP CONTINUE_1
CLR TCC
MOV A,@0B00000100
CONTW ;TCC开始记数
CONTINUE_2:
MOV A,TCC
MOV TEMP,A
BC PSW,C
SUB A,@250
JBS PSW,C
JMP SCAN_LEAD_CODE ;C=0,TCC>250

JBC PORT6,INPUT
JMP CONTINUE_2
MOV A,TCC
MOV TEMP,A
BC PSW,C
SUB A,@60;142
JBC PSW,C
JMP X1 ;C=1,TCC<60
JMP X2 ;C=0,TCC>60
X1:
BC TEMPCODE,0
JMP EXIT_1
X2:
BS TEMPCODE,0
JMP EXIT_1
EXIT_1:
DJZ COUNTER
JMP HH
MOV A,@0B00100000
CONTW ;停止记数
RET
HH:
BC PSW,C
RLC TEMPCODE
JMP CONTINUE_1

;****************发送数据子程序**********************
TRANSMIT_DATA:
MOV A,@4
MOV COUNTER,A
MOV A,USER_CODE ;@0B10010000 ;发送ST的用户码
MOV SEND_DATA,A
CYCLE_1:
JBS SEND_DATA,7
JMP SEND_P_0
JMP SEND_P_1
SEND_P_1:
CALL SEND_CODE_1
JMP EXIT_3
SEND_P_0:
CALL SEND_CODE_0
JMP EXIT_3
EXIT_3:
RLC SEND_DATA
DJZ COUNTER
JMP CYCLE_1

MOV A,@8
MOV COUNTER,A
MOV A,CODE3
MOV SEND_DATA,A
RLC SEND_DATA
CYCLE_2:
JBS SEND_DATA,7
JMP SEND_Q_0
JMP SEND_Q_1
SEND_Q_1:
CALL SEND_CODE_1
JMP EXIT_4
SEND_Q_0:
CALL SEND_CODE_0
JMP EXIT_4
EXIT_4:
RLC SEND_DATA
DJZ COUNTER
JMP CYCLE_2
RET
;***************发送数据"1"子程序********************
SEND_CODE_1:
MOV A,@0B00100000
CONTW ;停止记数
MOV A,@0B00000001 ;允许TCC中断
IOW IOCF0
MOV A,@35 ;引导脉冲的预置值
MOV TCC,A
MOV A,@0B00000001 ;选择预分频比为1:4
CONTW
BC PORT6,OUTPUT
WAIT_1:
JBS RF,TCIF
JMP WAIT_1
MOV A,@0B00100000
CONTW ;停止记数
BC RF,TCIF
MOV A,@32 ;代码"1"的预置值
MOV TCC,A
MOV A,@0B00000101 ;选择预分频比为1:64
CONTW
BS PORT6,OUTPUT
WAIT_2:
JBS RF,TCIF
JMP WAIT_2
BC RF,TCIF
MOV A,@0B00100000
CONTW ;停止记数
RET
;***************发送数据"0"子程序********************
SEND_CODE_0:
MOV A,@0B00100000
CONTW ;停止记数
MOV A,@0B00000001 ;允许TCC中断
IOW IOCF0
MOV A,@35 ;引导脉冲的预置值
MOV TCC,A
MOV A,@0B00000001 ;选择预分频比为1:4
CONTW
BC PORT6,OUTPUT
WAIT_3:
JBS RF,TCIF
JMP WAIT_3
MOV A,@0B00100000
CONTW ;停止记数
BC RF,TCIF

MOV A,@114 ;代码"0"的预置值
MOV TCC,A
MOV A,@0B00000101 ;选择预分频比为1:64
CONTW
BS PORT6,OUTPUT
WAIT_4:
JBS RF,TCIF
JMP WAIT_4
NOP
BC RF,TCIF
MOV A,@0B00100000
CONTW ;停止记数
RET
;****************重复码的检测子程序******************
JUDGE_REPEAT_CODE:
CLR COUNTER ;清计数器
CLR FLAG
JUDGE_REPEAT_CODE_0:
JBC PORT6,INPUT
JMP JUDGE_REPEAT_CODE_0
SS:
JBC PORT6,INPUT
JMP JUDGE_REPEAT_CODE_1
CALL DELAY0.5MS
JBC PORT6,INPUT
JMP JUDGE_REPEAT_CODE_1
INC COUNTER
JMP SS
JUDGE_REPEAT_CODE_1:
MOV A,COUNTER
BC PSW,C
SUB A,@20 ;20-A
JBS PSW,C
JMP EXIT_2 ;C=1,COUNTER>20
MOV A,COUNTER
BC PSW,C
SUB A,@16 ;16-A
JBC PSW,C
JMP EXIT_2 ;C=0,COUNTER<16
BS FLAG,LEAD
JMP JUDGE_REPEAT_CODE_2
EXIT_2:
RET
JUDGE_REPEAT_CODE_2:
CLR COUNTER ;清计数器
JUDGE_REPEAT_CODE_3:
JBS PORT6,INPUT
JMP JUDGE_REPEAT_CODE_4
CALL DELAY0.5MS
JBS PORT6,INPUT
JMP JUDGE_REPEAT_CODE_4
INC COUNTER
JMP JUDGE_REPEAT_CODE_3
JUDGE_REPEAT_CODE_4:
MOV A,COUNTER
BC PSW,C
SUB A,@7 ;7-A
JBS PSW,C
JMP NO_REPEAT ;C=0,COUNTER>7
JMP YES_REPEAT ;C=1,COUNTER<7
NO_REPEAT:
BC FLAG,REPEAT
CLR REPEAT_COUNTER
RET
YES_REPEAT:
BS FLAG,REPEAT
INC REPEAT_COUNTER
RET
;****************延时0.5mS子程序*********************
DELAY0.5MS:
MOV A,@2
MOV LP_CNT0,A
DELAY0.5MS_1:
MOV A,@82
MOV LP_CNT1,A
DELAY0.5MS_2:
NOP
NOP
NOP
DJZ LP_CNT1
JMP DELAY0.5MS_2
DJZ LP_CNT0
JMP DELAY0.5MS_1
RET
 

看《匠人手记》,与匠人同行!北航出版,正在热卖!

发表评论:
载入中...

芯片专题

器件专题

软件专题

硬件专题

综合专题

项目专题

原创专题

器件检测
LCD LED
按键 触摸键
E2PROM
电池 电机
电阻 电容 电感

指令系统
软件算法
编程规范
滤波算法
串行通讯

PCB设计
I2C PWM
红外遥控
充电技术
中断 ADC 

匠人手记
匠人夜话
网络心路
一周热点串烧
从零开始玩PIC
DIY旋转时钟

广告5号位 [投放]


学习板、开发板、编程器、下载器、仿真器(查看详情……)

广告3号位 [投放]

站内搜索


站外搜索


百度  google
mp3  歌词 
图片  FLASH 
知道  文档
新闻  词典 
地图  mp3 
软件  天网 
雅虎  爱问 
搜狗  讯雷 
网讯  华军 
天空 

21IC器件搜索
百宝箱分站
  • 《匠人的百宝箱》21IC站
  • 《匠人的百宝箱》21IC笔记团队
  • 《匠人手记》21IC书友会
  • 《匠人的百宝箱》MCUBLOG站
  • 《匠人的百宝箱》MCUBLOG笔记团队
  • 《匠人的百宝箱》EDN站
  • 《匠人手记》EDN书友会
  • 《匠人的百宝箱》与非网站
  • 《匠人的百宝箱》新浪站
  • 《匠人的百宝箱》百度站
  • 《匠人的百宝箱》网易126站
  • 《匠人的百宝箱》网易163站
  • 《匠人的百宝箱》互动出版网站
  • 广告4号位 [投放]

     
     

    匠人原创

    往日酷贴

     
     
     

    大千八卦

    友情连接

    新浪新闻:
    新浪财经:
    AK58新闻:
    新浪股票:
    新浪股票:
    证券之星:

     [更多酷站连接]

     

     

    [欢迎交换连接]

    [百宝箱之与非门分舵]

    [电脑圈圈的家当]

    [IC921的博客]

    [柔月阁]

    [八楼的呼吸]

    [hotpower 的水潭]

    [xwj的文君阁]

    [所长的BLOG]

    [阿摆手记]

    [电子伙伴]

    [unaided的笔记]

    [小飞的笔记]

    [单片机开发联盟]

    [网址之家]

    [好东西网址大全]

    [美萍中文精选]

    [数字电视之家]

    [SMARTCODE电子书斋]

    [软件开发之窗]

    [Armoric]

    [我爱研发网]

    [infernal的笔记]

    [雄鹰的空中加油站]

    [SunK]

    [逍遥电子]

    [ningpanda的博客]

    [C-Design]

    [一网见天下]

    [海边淘沙]

    [嵌入式365]

    [水牛的仓库]

    [股剩是怎样炼成的]

    [PIC论坛]

    [ICC AVR开发网]

    [中国高校自动化网]

     

     

     

    MCU博客-中国电子工程师博客网 

    大学生电子网 

     

     

     

     

     

    !!! 《匠人的百宝箱》 !!!