0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

EM78P153范例程序

算法&編程學院 ? 來源:網絡整理 ? 2018-02-15 04:19 ? 次閱讀

;芯片為EM78P153

;P64,P65接晶振,振蕩模式為4MHz晶振

;看門狗關,指令周期為2個CLOCK,P63為復位腳

;*******************IO口的定義*********************

PORT6 EQU 0X06

IOC60 EQU 0X06

;**************特殊功能寄存器的定義******************

TCCEQU 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 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 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

;*********************發(fā)送數據**********************

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 ;引導碼是重復,繼續(xù)掃描

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,COUNTER250

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,TCC60

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

;****************發(fā)送數據子程序**********************

TRANSMIT_DATA:

MOV A,@4

MOV COUNTER,A

MOV A,USER_CODE ;@0B10010000 ;發(fā)送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

;***************發(fā)送數據"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

;***************發(fā)送數據"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,COUNTER7

JMP YES_REPEAT ;C=1,COUNTER

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
收藏 人收藏

    評論

    相關推薦

    兼容em78p153,sn2501,pic12c508芯片

      兼容em78p153,sn2501,pic12c508芯片,性價比優(yōu) 張小姐:***  QQ:416455590 (技術交流)我司芯片完全
    發(fā)表于 05-14 17:11

    兼容em78p153,sn2501,pic12c508芯片

      兼容em78p153,sn2501,pic12c508芯片,性價比優(yōu) 張小姐:***  QQ:1455691267 (技術交流)我司芯片完全
    發(fā)表于 06-01 10:13

    [原創(chuàng)]兼容em78p153,sn2501,pic12c508芯片

      兼容em78p153,sn2501,pic12c508芯片,性價比優(yōu) 張小姐:***  QQ:1455691267 (技術交流)我司芯片完全
    發(fā)表于 06-14 11:34

    專業(yè)代理義隆單片機EM78P156ELMJ

    :EM78P156NPJ18SOP 300MIL:EM78P156NMJ義隆EM78P系列型號如下:EM78P153SNJ,EM78P153
    發(fā)表于 08-17 16:48

    求助:EM78P153SN的I2S原程序的編寫

    我現有項目是A7121與SSS1623用I2S傳送數據,以EM78P153SN控制.求其原程序.有誠意者聯系;QQ:1687952361.
    發(fā)表于 12-16 21:47

    求助:EM78P153的代碼選項寄存器word0、word1、word2怎么賦值

    如題,EM78P153提供了三個代碼選項寄存器,datasheet里面又說在執(zhí)行程序時不能存取,那怎么賦值呢?這是位配置?寫了個延時函數 void delay(unsigned int z),調用
    發(fā)表于 12-12 16:46

    義隆單片機em78P153K

    求義隆單片機em78P153K紅外解碼程序
    發(fā)表于 05-04 11:22

    EM78P173N義隆單片機MCU規(guī)格書

    EM78P173N是***義隆單片機MCU在153上的升級款。
    發(fā)表于 04-09 11:51

    EM78P458/EM78P459中文資料,數據手冊

    EM78P458 為20 腳封裝,EM78P459 為24 腳封裝,封裝形式:SOP 和DIP 具有電壓檢測器,檢測范圍2.0V.EM78P458 和EM78P459是采用高速CMOS
    發(fā)表于 11-20 01:13 ?209次下載
    <b class='flag-5'>EM78P</b>458/<b class='flag-5'>EM78P</b>459中文資料,數據手冊

    em78p458 pdf

    EM78P458 和EM78P459是采用高速CMOS 工藝制造的8 位單片機。其內部有4K*13 位一次性ROM(OTPROM)。因此,用戶可以方便地改進完善程序。程序代碼可用EMC
    發(fā)表于 11-20 01:18 ?13次下載

    EM78P153,中文資料,pdf datasheet(高速

    EM78P153是采用高速CMOS工藝制造的8位單片機。
    發(fā)表于 07-24 14:53 ?148次下載

    EM78P153S,中文資料,pdf datasheet(低

    EM78P153S是采用低耗高速CMOS工藝制造的8位單片機,它內部包含一個1024*13-bit的一次性可編程只讀電存儲器(OTP-ROM)。有15位選項位可滿足用戶要求,其中的保護位可用來防止程序被讀出
    發(fā)表于 07-24 14:55 ?244次下載

    EM78P153B 8位OIP ROM微控制器產品規(guī)格書

    EM78P153B是采用低功耗高速CMOS工藝設計開發(fā)的8位微控制器。它的內部有一個1024x13位一次性可編程只讀存儲器(OTP-ROM)。它提供三個保護位用于防止用戶在OTP-ROM中的程序被盜
    發(fā)表于 03-05 16:34 ?64次下載

    EM78P153系列單片機的詳細資料概述

    本文檔的主要內容詳細介紹的是EM78P153系列單片機的詳細資料概述包括了:簡介,存儲結構(ROM劃分,RAM劃分),IO系統(tǒng),復位,休眠狀態(tài)和喚醒,中斷功能,時鐘分頻系統(tǒng)
    發(fā)表于 08-22 17:30 ?26次下載
    <b class='flag-5'>EM78P153</b>系列單片機的詳細資料概述

    EM78P447中文數據手冊

    EM78P447中文數據手冊分享。
    發(fā)表于 04-13 11:09 ?15次下載