當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] ;芯片為EM78P153;P64,P65接晶振,振蕩模式為4MHz晶振;看門(mén)狗關(guān),指令周期為2個(gè)CLOCK,P63為復(fù)位腳;*******************IO口的定義*********************PORT6 EQU 0X06IOC60 EQU 0X06;**************特殊功

;芯片為EM78P153

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

;看門(mén)狗關(guān),指令周期為2個(gè)CLOCK,P63為復(fù)位腳

;*******************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

;********************表格轉(zhuǎn)換子程序程序******************

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

;**********************表格轉(zhuǎn)換程序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

;**********************表格轉(zhuǎn)換程序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

;*********************掃描引導(dǎo)碼**********************

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

;*********************接收數(shù)據(jù)**********************

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ā)送數(shù)據(jù)**********************

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 ;調(diào)用碼表轉(zhuǎn)換子程序

MOV CODE3,A

REP:

CALL TRANSMIT_DATA

BS PORT6,OUTPUT

CALL JUDGE_REPEAT_CODE ;掃描引導(dǎo)碼是否在重復(fù)?

JBS FLAG,LEAD

JMP SCAN_LEAD_CODE

JBC FLAG,REPEAT

JMP REP ;引導(dǎo)碼是重復(fù),繼續(xù)掃描

JMP RECEIVE_DATA_PROCEE ;引導(dǎo)碼不重復(fù),去接收新數(shù)據(jù)

;****************引導(dǎo)碼的檢測(cè)子程序*****************

JUDGE_START_CODE:

CLR COUNTER ;清計(jì)數(shù)器

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

;****************接收數(shù)據(jù)子程序**********************

RECEIVE_DATA:


MOV A,@8

MOV COUNTER,A

MOV A,@0B00100000

CONTW ;停止記數(shù)

CONTINUE_1:

JBS PORT6,INPUT

JMP CONTINUE_1

CLR TCC

MOV A,@0B00000100

CONTW ;TCC開(kāi)始記數(shù)

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 ;停止記數(shù)

RET

HH:

BC PSW,C

RLC TEMPCODE

JMP CONTINUE_1

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

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ā)送數(shù)據(jù)"1"子程序********************

SEND_CODE_1:

MOV A,@0B00100000

CONTW ;停止記數(shù)

MOV A,@0B00000001 ;允許TCC中斷


IOW IOCF0

MOV A,@35 ;引導(dǎo)脈沖的預(yù)置值

MOV TCC,A

MOV A,@0B00000001 ;選擇預(yù)分頻比為1:4

CONTW

BC PORT6,OUTPUT

WAIT_1:

JBS RF,TCIF

JMP WAIT_1

MOV A,@0B00100000

CONTW ;停止記數(shù)

BC RF,TCIF

MOV A,@32 ;代碼"1"的預(yù)置值

MOV TCC,A

MOV A,@0B00000101 ;選擇預(yù)分頻比為1:64

CONTW

BS PORT6,OUTPUT

WAIT_2:

JBS RF,TCIF

JMP WAIT_2

BC RF,TCIF

MOV A,@0B00100000

CONTW ;停止記數(shù)

RET

;***************發(fā)送數(shù)據(jù)"0"子程序********************

SEND_CODE_0:

MOV A,@0B00100000

CONTW ;停止記數(shù)

MOV A,@0B00000001 ;允許TCC中斷

IOW IOCF0

MOV A,@35 ;引導(dǎo)脈沖的預(yù)置值

MOV TCC,A

MOV A,@0B00000001 ;選擇預(yù)分頻比為1:4

CONTW

BC PORT6,OUTPUT

WAIT_3:

JBS RF,TCIF

JMP WAIT_3

MOV A,@0B00100000

CONTW ;停止記數(shù)

BC RF,TCIF

MOV A,@114 ;代碼"0"的預(yù)置值

MOV TCC,A

MOV A,@0B00000101 ;選擇預(yù)分頻比為1:64

CONTW

BS PORT6,OUTPUT

WAIT_4:

JBS RF,TCIF

JMP WAIT_4

NOP

BC RF,TCIF

MOV A,@0B00100000

CONTW ;停止記數(shù)

RET

;****************重復(fù)碼的檢測(cè)子程序******************

JUDGE_REPEAT_CODE:

CLR COUNTER ;清計(jì)數(shù)器

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 ;清計(jì)數(shù)器

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


;****************延時(shí)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


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉