当前位置:首页 > 单片机 > 单片机
[导读] 芯片为EM78P153;P64,P65接晶振,振荡模式为4MHz晶振;看门狗关,指令周期为2个CLOCK,P63为复位脚;*******************IO口的定义*********************PORT6EQU0X06IOC60EQU0X06;**************特殊功能寄

芯片为EM78P153
;P64,P65接晶振,振荡模式为4MHz晶振
;看门狗关,指令周期为2个CLOCK,P63为复位脚
;*******************IO口的定义*********************
PORT6EQU0X06
IOC60EQU0X06
;**************特殊功能寄存器的定义******************

TCCEQU0X01
PCEQU0X02
PSWEQU0X03
IOCD0EQU0X0D
IOCE0EQU0X0E
IOCF0EQU0X0F
RFEQU0X0F
;***************用户自定义的寄存器*******************
COUNTEREQU0X10
CODE1EQU0X11
CODE2EQU0X12
CODE3EQU0X13
CODE4EQU0X14
LP_CNT0EQU0X15
LP_CNT1EQU0X16
TEMPEQU0X17
TEMPCODEEQU0X18
REPEAT_COUNTEREQU0X19
SEND_DATAEQU0X1A
USER_CODEEQU0X1B
FLAGEQU0X1C
;*******************FLAG位定义**********************
CEQU0
ZEQU2
TCIFEQU0
LEADEQU0
REPEATEQU1
INPUTEQU1
OUTPUTEQU0
ORG0X000
NOP
NOP
NOP
NOP
JMP0X50
;********************表格转换子程序程序******************
TABLE_CONVER:
CLRTEMP
TABLE_CONVER_1:
MOVA,TEMP
CALLTABLE_CONVERSION_IN
BCPSW,Z
XORA,CODE3
JBCPSW,Z
JMPEXIT_5
INCTEMP
JMPTABLE_CONVER_1
EXIT_5:
CALLTABLE_CONVERSION_OUT
RET
;**********************表格转换程序IN*********************
TABLE_CONVERSION_IN:
ADDPC,A
RETL0XD0;KEY_1
RETL0X58;KEY_2
RETL0XD8;KEY_3
RETL0X90;KEY_4
RETL0X18;KEY_5
RETL0X98;KEY_6
RETL0XE0;KEY_7
RETL0X68;KEY_8
RETL0XE8;KEY_9
RETL0X28;KEY_0
RETL0X20;KEY_3D
RETL0XA0;KEY_MUTE
RETL0X40;KEY_VOCAL
RETL0XE2;KEY_VOL+
RETL0XA2;KEY_VOL-
RETL0X52;KEY_TUNEFWD
RETL0X22;KEY_TUNEREV
RETL0X12;KEY_STOP
RETL0X80;KEY_<|
RETL0X82;KEY_|>
RETL0X02;KEY_OK
RETL0XF0;KEY_TUNER
RETL0X78;KEY_AM/FM
RETL0XF8;KEY_SAVE
RETL0X50;KEY_AUDIO
;**********************表格转换程序OUT*********************
TABLE_CONVERSION_OUT:
MOVA,TEMP
ADDPC,A
RETL0X35;KEY_1
RETL0X2D;KEY_2
RETL0X25;KEY_3
RETL0X1D;KEY_4
RETL0X34;KEY_5
RETL0X2C;KEY_6
RETL0X24;KEY_7
RETL0X1C;KEY_8
RETL0X33;KEY_9
RETL0X2B;KEY_0
RETL0X10;KEY_3D
RETL0X18;KEY_MUTE
RETL0X11;KEY_VOCAL
RETL0X16;KEY_VOL+
RETL0X15;KEY_VOL-
RETL0X28;KEY_TUNEFWD
RETL0X2A;KEY_TUNEREV
RETL0X22;KEY_STOP
RETL0X31;KEY_<|
RETL0X21;KEY_|>
RETL0X29;KEY_OK
RETL0X2E;KEY_TUNER
RETL0X20;KEY_AUX-1
RETL0X23;KEY_AUX-2
RETL0X17;KEY_DVD

ORG0X050
MAIN:
;*********************初始化寄存器**********************
MOVA,@0B00000000
IOWIOCE0
MOVA,@0B11111101
IOWIOCD0
MOVA,@0B00000010
IOWIOC60
MOVA,@0B00000001
MOVPORT6,A
MOVA,@0B00000001
IOWIOCF0
CLRFLAG
CLRTEMPCODE
CLRCOUNTER
CLRCODE1
CLRCODE2
CLRCODE3
CLRCODE4
MOVA,@0B10010000
MOVUSER_CODE,A
;*********************扫描引导码**********************
SCAN_LEAD_CODE:
JBCPORT6,INPUT
JMPSCAN_LEAD_CODE
CLRFLAG
CLRREPEAT_COUNTER
CLRTEMPCODE
CALLJUDGE_START_CODE
JBSFLAG,LEAD
JMPSCAN_LEAD_CODE
;*********************接收数据**********************
RECEIVE_DATA_PROCEE:
CLRTEMPCODE
CALLRECEIVE_DATA
MOVA,TEMPCODE
MOVCODE1,A

MOVA,@0;判断用户码是否是00
BCPSW,Z
XORA,CODE1
JBSPSW,Z
JMPSCAN_LEAD_CODE


CLRTEMPCODE
CALLRECEIVE_DATA
MOVA,TEMPCODE
MOVCODE2,A

MOVA,@0XFF;判断用户码是否是FF
BCPSW,Z
XORA,CODE2
JBSPSW,Z
JMPSCAN_LEAD_CODE

CLRTEMPCODE
CALLRECEIVE_DATA
MOVA,TEMPCODE
MOVCODE3,A

CLRTEMPCODE
CALLRECEIVE_DATA
MOVA,TEMPCODE
MOVCODE4,A
CLRFLAG
;*********************发送数据**********************
SEND_DATA_PROCEE:
JBSUSER_CODE,6;ST码的次高位反相
JMPCOM_1;=0
JMPCOM_2;=1
COM_1:
BSUSER_CODE,6
JMPVVV
COM_2:
BCUSER_CODE,6
JMPVVV
VVV:
CALLTABLE_CONVER;调用码表转换子程序
MOVCODE3,A
REP:
CALLTRANSMIT_DATA
BSPORT6,OUTPUT
CALLJUDGE_REPEAT_CODE;扫描引导码是否在重复?
JBSFLAG,LEAD
JMPSCAN_LEAD_CODE
JBCFLAG,REPEAT
JMPREP;引导码是重复,继续扫描
JMPRECEIVE_DATA_PROCEE;引导码不重复,去接收新数据
;****************引导码的检测子程序*****************
JUDGE_START_CODE:
CLRCOUNTER;清计数器
JUDGE_START_CODE_0:
JBCPORT6,INPUT
JMPNO_HIGH
CALLDELAY0.5MS
JBCPORT6,INPUT
JMPNO_HIGH
INCCOUNTER
JMPJUDGE_START_CODE_0
NO_HIGH:
MOVA,COUNTER
BCPSW,C
SUBA,@20;20-A
JBSPSW,C
JMPEXIT_0;C=1,COUNTER>20
MOVA,COUNTER
BCPSW,C
SUBA,@16;16-A
JBCPSW,C
JMPEXIT_0;C=0,COUNTER<16
BSFLAG,LEAD
EXIT_0:
JBCPORT6,INPUT
JMPEXIT_0
INCREPEAT_COUNTER
RET
;****************接收数据子程序**********************
RECEIVE_DATA:
MOVA,@8
MOVCOUNTER,A
MOVA,@0B00100000
CONTW;停止记数
CONTINUE_1:
JBSPORT6,INPUT
JMPCONTINUE_1
CLRTCC
MOVA,@0B00000100
CONTW;TCC开始记数
CONTINUE_2:
MOVA,TCC
MOVTEMP,A
BCPSW,C
SUBA,@250
JBSPSW,C
JMPSCAN_LEAD_CODE;C=0,TCC>250

JBCPORT6,INPUT
JMPCONTINUE_2
MOVA,TCC
MOVTEMP,A
BCPSW,C
SUBA,@60;142
JBCPSW,C
JMPX1;C=1,TCC<60
JMPX2;C=0,TCC>60
X1:
BCTEMPCODE,0
JMPEXIT_1
X2:
BSTEMPCODE,0
JMPEXIT_1
EXIT_1:
DJZCOUNTER
JMPHH
MOVA,@0B00100000
CONTW;停止记数
RET
HH:
BCPSW,C
RLCTEMPCODE
JMPCONTINUE_1

;****************发送数据子程序**********************
TRANSMIT_DATA:
MOVA,@4
MOVCOUNTER,A
MOVA,USER_CODE;@0B10010000;发送ST的用户码
MOVSEND_DATA,A
CYCLE_1:
JBSSEND_DATA,7
JMPSEND_P_0
JMPSEND_P_1
SEND_P_1:
CALLSEND_CODE_1
JMPEXIT_3
SEND_P_0:
CALLSEND_CODE_0
JMPEXIT_3
EXIT_3:
RLCSEND_DATA
DJZCOUNTER
JMPCYCLE_1

MOVA,@8
MOVCOUNTER,A
MOVA,CODE3
MOVSEND_DATA,A
RLCSEND_DATA
CYCLE_2:
JBSSEND_DATA,7
JMPSEND_Q_0
JMPSEND_Q_1
SEND_Q_1:
CALLSEND_CODE_1
JMPEXIT_4
SEND_Q_0:
CALLSEND_CODE_0
JMPEXIT_4
EXIT_4:
RLCSEND_DATA
DJZCOUNTER
JMPCYCLE_2
RET
;***************发送数据"1"子程序********************
SEND_CODE_1:
MOVA,@0B00100000
CONTW;停止记数
MOVA,@0B00000001;允许TCC中断
IOWIOCF0
MOVA,@35;引导脉冲的预置值
MOVTCC,A
MOVA,@0B00000001;选择预分频比为1:4
CONTW
BCPORT6,OUTPUT
WAIT_1:
JBSRF,TCIF
JMPWAIT_1
MOVA,@0B00100000
CONTW;停止记数
BCRF,TCIF
MOVA,@32;代码"1"的预置值
MOVTCC,A
MOVA,@0B00000101;选择预分频比为1:64
CONTW
BSPORT6,OUTPUT
WAIT_2:
JBSRF,TCIF
JMPWAIT_2
BCRF,TCIF
MOVA,@0B00100000
CONTW;停止记数
RET
;***************发送数据"0"子程序********************
SEND_CODE_0:
MOVA,@0B00100000
CONTW;停止记数
MOVA,@0B00000001;允许TCC中断
IOWIOCF0
MOVA,@35;引导脉冲的预置值
MOVTCC,A
MOVA,@0B00000001;选择预分频比为1:4
CONTW
BCPORT6,OUTPUT
WAIT_3:
JBSRF,TCIF
JMPWAIT_3
MOVA,@0B00100000
CONTW;停止记数
BCRF,TCIF

MOVA,@114;代码"0"的预置值
MOVTCC,A
MOVA,@0B00000101;选择预分频比为1:64
CONTW
BSPORT6,OUTPUT
WAIT_4:
JBSRF,TCIF
JMPWAIT_4
NOP
BCRF,TCIF
MOVA,@0B00100000
CONTW;停止记数
RET
;****************重复码的检测子程序******************
JUDGE_REPEAT_CODE:
CLRCOUNTER;清计数器
CLRFLAG
JUDGE_REPEAT_CODE_0:
JBCPORT6,INPUT
JMPJUDGE_REPEAT_CODE_0
SS:
JBCPORT6,INPUT
JMPJUDGE_REPEAT_CODE_1
CALLDELAY0.5MS
JBCPORT6,INPUT
JMPJUDGE_REPEAT_CODE_1
INCCOUNTER
JMPSS
JUDGE_REPEAT_CODE_1:
MOVA,COUNTER
BCPSW,C
SUBA,@20;20-A
JBSPSW,C
JMPEXIT_2;C=1,COUNTER>20
MOVA,COUNTER
BCPSW,C
SUBA,@16;16-A
JBCPSW,C
JMPEXIT_2;C=0,COUNTER<16
BSFLAG,LEAD
JMPJUDGE_REPEAT_CODE_2
EXIT_2:
RET
JUDGE_REPEAT_CODE_2:
CLRCOUNTER;清计数器
JUDGE_REPEAT_CODE_3:
JBSPORT6,INPUT
JMPJUDGE_REPEAT_CODE_4
CALLDELAY0.5MS
JBSPORT6,INPUT
JMPJUDGE_REPEAT_CODE_4
INCCOUNTER
JMPJUDGE_REPEAT_CODE_3
JUDGE_REPEAT_CODE_4:
MOVA,COUNTER
BCPSW,C
SUBA,@7;7-A
JBSPSW,C
JMPNO_REPEAT;C=0,COUNTER>7
JMPYES_REPEAT;C=1,COUNTER<7
NO_REPEAT:
BCFLAG,REPEAT
CLRREPEAT_COUNTER
RET
YES_REPEAT:
BSFLAG,REPEAT
INCREPEAT_COUNTER
RET
;****************延时0.5mS子程序*********************
DELAY0.5MS:
MOVA,@2
MOVLP_CNT0,A
DELAY0.5MS_1:
MOVA,@82
MOVLP_CNT1,A
DELAY0.5MS_2:
NOP
NOP
NOP
DJZLP_CNT1
JMPDELAY0.5MS_2
DJZLP_CNT0
JMPDELAY0.5MS_1
RET

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

仿真的概念其实使用非常广,最终的含义就是使用可控的手段来模仿真实的情况。在嵌入式系统的设计中,仿真应用的范围主要集中在对程序的仿真上。

关键字: 单片机 仿真器 程序

步进电动机是将电脉冲激励信号转换成相应的角位移或线位移的离散值控制电动机,这种电动机每当输入一个电脉冲就动一步,所以又称脉冲电动机。

关键字: 步进电机 正反转 程序

KeilμVision4是Keil软件公司为8051系列微控制器及其兼容产品设计的集成式软件开发环境。μVision4集成了C51编译器和A51汇编器,其界面类似于Microsoft VS,支持C语言和汇编语言程序的编写...

关键字: 程序 编译 链接

双方各执一词,谁也不退让,吴雄昂的身份成为薛定谔的猫:在Arm公司眼中,他已经被罢免一切职位;在安谋中国声明里,吴仍然一切照常。这种叠加态或许还会持续一段时间,但叠加态应该很快就会塌缩成一个确定结果。同样,安谋中国董事会...

关键字: ARM 中国董事会 程序

除了指令空间,自定义指令对应的程序出入口也有严格限制。自定义指令在使用过程中出现任何错误时,Arm的工具链都能及时对其进行识别、提取,并且进行相应的控制。目前也已经有第三方编译器,可以识别自定义指令集可能会出现的错误。专...

关键字: 指令空间 程序 ARM

如果说一众美国科技公司遵循特朗普命令断供华为,还算某种程度上维护所谓程序正义不得已而为之;那么各路本应对政治保持中立的国际技术标准组织,先后宣布剔除华为成员资格,绝对算助纣为虐;而联邦快递将华为委托寄送目的地为中国的快递...

关键字: 快递 华为 程序

在软件开发过程中,我们希望软件可以运行无误。但是常常事与愿违,程序经常跑飞,或者卡死。原因有很多,有可能是因为软件系统设计的原因,或者外部传感器的失效,再或者是程序的Bug等。为了防止程序在出现问题之后,可以顺利复位和重...

关键字: 软件 程序 传感器

进程是程序的执行过程。程序是静态的,是存在于外存之中的,电脑关机后依然存在。进程是动态的,是存在于内存之中的,是程序的执行过程,电脑关机后就不存在进程了。进程的内容来源于程序,进程的启动过程就是把程序从外存加载到内存的过...

关键字: 程序 静态 操作系统

摘 要:结合车联网高峰论坛上的一些最新观点,对车联网的一些新进展作了介绍。主要包括大数据和云计算在车联网 的应用,车联网的电商化及互联网化趋势。车联网的商业模式需要突破,跨界合作和服务创新是一种有益的尝试。认为只有开放的...

关键字: 车联网 进展 大数据 电商 程序 开放

这几天打算复习下stm32有关的硬件资源,就想着从最开始做起,熟悉下当初所学的知识。学习stm32最初都基本是从流水灯开始的,今天就开始点亮流水灯。

关键字: STM32 程序 编程
关闭
关闭