51单片机的嵌入式BIOS程序.docx

上传人:b****6 文档编号:8796788 上传时间:2023-02-01 格式:DOCX 页数:34 大小:224.13KB
下载 相关 举报
51单片机的嵌入式BIOS程序.docx_第1页
第1页 / 共34页
51单片机的嵌入式BIOS程序.docx_第2页
第2页 / 共34页
51单片机的嵌入式BIOS程序.docx_第3页
第3页 / 共34页
51单片机的嵌入式BIOS程序.docx_第4页
第4页 / 共34页
51单片机的嵌入式BIOS程序.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

51单片机的嵌入式BIOS程序.docx

《51单片机的嵌入式BIOS程序.docx》由会员分享,可在线阅读,更多相关《51单片机的嵌入式BIOS程序.docx(34页珍藏版)》请在冰豆网上搜索。

51单片机的嵌入式BIOS程序.docx

51单片机的嵌入式BIOS程序

RemoteControl程序说明

BIOS(basedonhh4035)

OPEShanghai

Version0.1

Tableofcontents:

page

1BIOS简述

音响系统一般有三种基本人机输入接口:

音量控制器(Encoder)、面板键盘(PanelKey)、遥控器(Remote)。

对于系统来说,音量控制器的功能是控制音量(volume)向上或向下调整,这与面板键盘VOL-UP,VOL-DOWN的功能完全一样;面板键盘作为最基本的人机接口,定义了常用的基本键盘名称,由于面板键盘数量常受面板面积的限制,遥控器的键盘在面板键盘的基础上另外增加定义了一些键盘名称。

三种人机接口之间的关系如下图所示:

人机接口关系结构图

由于底层硬件的差别,虽然三种人机输入接口的功能一致,硬件级的基本输入输出(BIOS)驱动却完全不同,为此设计了一种接口协议CommonKeyProtocol,该协议对硬件级BIOS和上层处理进行规范。

这种协议的优点在于:

1、在符合该协议的条件下,硬件级BIOS和上层的响应可以独立编程和修改,互不影响。

2、当硬件改变时对硬件重新编程。

3、当上层改变时,屏蔽(有目的的取舍)部分接口编码;三种硬件(未来可能继续增加其他类别的硬件)可自由取舍。

4、测试方便,BIOS和上层通过接口协议相互隔离。

5、由于REMOTE部分的编码包括了全部人机输入接口BIOS的内容,调试时可以使用遥控器进行。

2CommonKeyProtocol(CKP)描述

下面所述的各个标志由BIOS自由设置,与上层无关,上层通过查询这些标志的状态,再生成各种高级键盘事件-PRESS_DOWN,PRESS_HOLD,PRESS_UP等,对这些事件的详尽说明见KEP描述部分。

CKP协议主要生成以下标志和编码:

REMVALID–位标志,对于BIOS当遥控有效波码被接收成功时,置位该标志,接收到Repeat波或超时

以后,复位该标志。

RPTVALID–每接收到一个Repeat波时,该标志被置位,超时以后复位该标志。

设立这两个标志的目的是在高层处理时能够恰当的区分PanelKey和Remote按键事件

KEYDATA–存储了人机接口通用信息一个字节,其中

KeyStatus–KEYDATA的b7,b6两位,表示外部输入消息的来源。

定义:

00–S_IDLE,表示没有外部输入事件,或外部事件已经被响应。

01–S_PANEL_KEY,表示外部事件为面板键盘。

10–S_ENCODER,表示外部事件为Encoder.

11–S_REMOTE,表示外部事件为遥控按键

CommonCode–对三种外部输入接口信息的编码,其定义与硬件无关,见下表:

Cdefine

Name

CommonCode(Hex)

PKCODE(Hex)

For905hardware

REMDATA(Hex)

For905hardware

K_POWER

POWER

01

11

00

K_MEM_UP

MEM-UP

02

12

17

K_MEM_DOWN

MEM-DOWN

03

13

1A

K_MODE_REMAIN

MODE/REMAIN

04

14

20

K_MEM_CLK_ADJ

MEM/CLK-ADJ

05

15

0E

K_FM_MO_ST

FM-MO/ST

06

16

0F

K_RANDOM

RANDOM

07

21

1F

K_REPEAT

REPEAT

08

22

23

K_INTRO

INTRO

09

23

24

K_STOP

STOP

0A

24

15

K_PLAY_PAUSE

PLAY/PAUSE

0B

25

18

K_UP_F_SKIP

UP/F-SKIP

0C

26

1B

K_DOWN_R_SKIP

DOWN/R-SKIP

0D

31

1C

K_EQ

EQ

0E

32

0D

K_MUTE

MUTE

0F

33

10

K_CD

CD

10

34

1E

K_TAPE

TAPE

11

35

25

K_TUNER_BAND

TUNER/BAND

12

36

21

K_AUX

AUX

13

41

16

K_H_S_DUBBING

H.S.DUBBING

14

42

13

K_DISC1

DISC1

15

43

27

K_DISC2

DISC2

16

44

26

K_DISC3

DISC3

17

45

28

K_SLEEP

SLEEP

18

46

22

K_TIMER

TIMER

19

51

01

K_DISC_SKIP

DISC-SKIP

1A

52

12

K_OPEN_CLOSE

OPEN/CLOSE

1B

53

14

K_VOL_UP

VOL-UP

1C

54

19

K_VOL_DOWN

VOL-DOWN

1D

55

1D

K_BBS

BBS

1E

56

11

K_1

1

30

-

02

K_2

2

31

-

04

K_3

3

32

-

05

K_4

4

33

-

06

K_5

5

34

-

07

K_6

6

35

-

03

K_7

7

36

-

08

K_8

8

37

-

09

K_9

9

38

-

0A

K_0

0

39

-

0B

K_10

+10

3A

-

0C

1ENCODERBIOS描述

●基本原理Encoder使用相位检测原理工作,它主要产生两种消息:

UP,DOWN。

当ENCODE被旋转时,两个输出端(A和B)会分别输出方波信号,如果顺时针旋转,A端的方波下降沿超前于B端的方波下降沿;而逆时针旋转时B端会超前与A端。

●硬件使用ALPS公司的EC16B24104,Spec文件为Encoder.pdf。

对于MCU有两个输入引脚。

●BIOS基本工作原理软件以分时扫描方式工作,每隔一定时间进入BIOS,通过测试得知,间隔时间4ms时可以得到最佳结果(一般情况可检测出70%以上的相位差信号),超过8ms就几乎检测不到信号了(少于30%)。

因此扫描时间定为4ms。

●BIOS软件流程图

●使用系统RAM资源及源程序(汇编)

PUBLICKEYDATA

ECDUPPR:

DBIT1;Readytoup

ECDDOWNPR:

DBIT1;Readytodown

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Name:

ENCODER;

;Purpose:

Detecttheencoderevent,upordown;

;Input:

HardwareENCODERA,ENCODERBpins;

;Output:

ByteKEYDATA9DH-up,9CH-down;

;Function:

Becalledevery4ms,iflegaleventdetected;

;KEYDATAwillbereturned;

;Scope:

None;

;Used:

bitECDUPPRE,ECDDOWNPRE;

;TimeMax:

14T;

;Ref.Flowchart:

Encoder.pcx;

;C-Declare:

voidENCODER(void);;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

PUBLICENCODER

ECSEGMENTCODE

RSEGEC

ENCODER:

JBENCODERA,ECD1;;2

JBENCODERB,ECD2;;2

JBECDUPPR,ECD4;UP;;2

JNBECDDOWNPR,ECD5;;2

MOVKEYDATA,#9CH;DOWN;;2

ECD5:

CLRECDUPPR;;1

CLRECDDOWNPR;;1

RET;;2

ECD1:

JBENCODERB,ECD8

SETBECDDOWNPR

RET

ECD8:

CLRECDDOWNPR

CLRECDUPPR

RET

ECD2:

SETBECDUPPR;READYTOUP

RET

ECD4:

MOVKEYDATA,#9DH;UP

AJMPECD5

2PanelKeyBIOS描述

●基本原理面板键盘输入BIOS使用行列扫描方式,列输出使用了MC4094扩展,为了节省MCUI/O口,另外有一列固定接地,作为Default列。

在行扫描时,MCUI/O口没有输出信号,当有按键按下时,再向列输出分别输出扫描信号。

有多个按键按下时BIOS作如下处理:

1、同时有两行以上检测到按键时,作出错处理。

2、按键在同一行上,如果有两列以上出现按键,其中一列为DEFAULT,只响应DEFAULT列。

3、按键在同一行上,如果有两列以上出现按键,其中没有DEFAULT列,作出错处理。

●BIOS基本工作原理软件以分时扫描方式工作,每隔8ms进入BIOS一次,每次的运行状态都与以前的运行结果有关系,由于CPU需要处理多任务,键扫描BIOS不允许在原地等待,而必须在等待时将CPU控制权交还(即退出BIOS运行),这也是分时式程序的共同特点。

●BIOS软件流程图

●使用系统RAM资源及源程序(汇编)

PUBLICKEYDATA

KEYDATA:

DS1

PKCODE:

DS1

PKTEMPDATA2FH

KEYVALIDBIT0FFH

KEYTEMPBIT0FEH

;;;*****************************************************************************

;;;*Name:

KEYSCAN*

;;;*Purpose:

Scankeyboard,checkandchangethevalue*

;;;*intocommandcode.*

;;;*Function:

Becalledevery8ms,andKEYDATAbereturn*

;;;*whenthekeypressed.*

;;;*Scope:

KS_LINE,KS_COLUMN,*

;;;*Input:

SeehardwareI/Odescription.*

;;;*Output:

KEYDATA*

;;;*Time:

21T(nokeypressed)~525T(max)*

;;;*Used:

Byte-KEYDATA,PKCODE,PKTEMP(Bit:

KEYVALID,KEYTEMP)*

;;;*SFR-ACC,R7,DPTR,CF*

;;;*Ref.Flowchart:

KeyScan.wmf*

;;;*C-Declare:

voidKEYSCAN(void);*

;;;*unsignedcharKEYDATA;*

;;;******************************************************************************

PUBLICKEYSCAN

KSSEGMENTCODE

RSEGKS

KEYSCAN:

ACALLKS_LINE

CJNER7,#0H,KS_FOUND

JBKEYVALID,DOWN_TEMP

JNBKEYTEMP,KEYSCAN_RTN

CLRKEYTEMP

RET

DOWN_TEMP:

SETBKEYTEMP

CLRKEYVALID;UPditherreturn

RET

KEYSCAN_RTN:

;ERRORRETURN

MOVPKTEMP,#0H

MOVPKCODE,#0H

RET

KS_FOUND:

MOVA,PKTEMP

ANLA,#0C0H

ORLA,R7

MOVPKTEMP,A;TempsavelineNo.

CALLKS_COLUMN

CJNER7,#0,KS_KEYPRESSED

JNBKEYVALID,KEYSCAN_RTN

RET

KS_KEYPRESSED:

JBKEYVALID,KEYSCAN_TEMP

JBKEYTEMP,KEYSCAN_TEMP

MOVPKCODE,R7

SETBKEYTEMP

RET

KEYSCAN_TEMP:

MOVA,R7

CJNEA,PKCODE,KEYSCAN_LOCK;CURRENT=PREVIOUS?

JNBKEYVALID,UP_TEMP

MOVDPTR,#KEY_REPLACE_TAB

SUBBA,#11H

MOVCA,@A+DPTR

MOVKEYDATA,A

RET

KEYSCAN_LOCK:

JNBKEYVALID,KEYSCAN_RTN

RET

UP_TEMP:

CLRKEYTEMP

SETBKEYVALID

RET;DOWNditherreturn

KEY_REPLACE_TAB:

DB41H,42H,43H,44H,45H,46H,0H,0H

DB0H,0H,0H,0H,0H,0H,0H,0H

DB47H,48H,49H,04AH,04BH,04CH,0H,0H

DB0H,0H,0H,0H,0H,0H,0H,0H

DB04DH,04EH,04FH,50H,51H,52H,0H,0H

DB0H,0H,0H,0H,0H,0H,0H,0H

DB53H,54H,55H,56H,57H,58H,0H,0H

DB0H,0H,0H,0H,0H,0H,0H,0H

DB59H,5AH,5BH,5CH,5DH,5EH,0H

DB0H,0H,0H,0H,0H,0H,0H,0H

;;;********************************************************************

;;;*Name:

KS_LINE*

;;;*Inputparameter:

SeehardwareI/Odescription.*

;;;*Outputparameter:

R7-thevalueofline*

;;;*0-nokeypressed*

;;;*1~6-onekeypressed*

;;;*7-twokeyoraboveispressed*

;;;*UseRAM:

sfr-ACC,DPTR,R7*

;;;*Usetime:

10T*

;;;********************************************************************

KS_LINE:

MOVA,P1

ORLA,#0C0H;maskp1.7,p1.6

CPLA

MOVDPTR,#KSLINE_TAB

MOVCA,@A+DPTR

MOVR7,A

RET

KSLINE_TAB:

DB0H,1H,2H,7H,3H,7H,7H,7H

DB4H,7H,7H,7H,7H,7H,7H,7H

DB5H,7H,7H,7H,7H,7H,7H,7H

DB7H,7H,7H,7H,7H,7H,7H,7H

DB6H,7H,7H,7H,7H,7H,7H,7H

DB7H,7H,7H,7H,7H,7H,7H,7H

DB7H,7H,7H,7H,7H,7H,7H,7H

DB7H,7H,7H,7H,7H,7H,7H,7H

DB7H,7H,7H,7H,7H,7H,7H,7H

;;;******************************************************************************

;;;*Name:

KS_COLUMN*

;;;*Purpose:

Scancolumnswhentheispressed.*

;;;*Function:

Becalledevery8mswhenthekeyis*

;;;*pressed,andR7wilbereturn*

;;;*Scope:

KS_LINE,MC4094.*

;;;*Input:

SeehardwareI/Odescription.*

;;;*Output:

R7-thevalueoflineandcolumn*

;;;*bit0~3-thevalueofline*

;;;*bit4~7-thevalueofcolumn*

;;;*RAM:

ACC,DPTR,R7*

;;;*Time(max):

68T+5*Tline+6*Tmc4094=490T*

;;;******************************************************************************

KS_COLUMN:

MOVA,#0FH

MOVR3,A

ACALLMC4094

ACALLKS_LINE

CJNER7,#0H,KSCOL_VALID

MOVA,#1H

KSCOL_LOOP:

MOVR3,A

ACALLMC4094

ACALLKS_LINE

CJNER7,#0H,KSCOL_INVALID

AJMPKSCOL_VALID

KSCOL_INVALID:

MOVA,R3

RLA

CJNER3,#8H,KSCOL_LOOP

ERROR_RTN:

MOVR7,#0H

MOVA,#0H

ACALLMC4094

RET

KSCOL_VALID:

MOVA,R3

MOVDPTR,#KSCOL_TAB

MOVCA,@A+DPTR

MOVR7,A

MOVA,PKTEMP

ANLA,#0FH

ORLA,R7

MOVR7,A

MOVA,#0H

ACALLMC4094

RET

KSCOL_TAB:

DB0H,10H,20H,0H,30H,0H,0H,0H

DB40H,0H,0H,0H,0H,0H,0H,50H

;;;********************************************************************

;;;*Name:

MC4094*

;;;*Purpose:

Drivemc4094*

;;;*Function:

BecalledbyKS_COLUMN.ASM*

;;;*Scope:

None.*

;;;*Input:

ACC.*

;;;*Output:

None.*

;;;*Time(max):

62T*

;;;********************************************************************

MC4094:

CLRSTROBE

SETBC

AJMPSHIFT_LOOP1

SHIFT_LOOP:

CLRC

SHIFT_LOOP1:

RLCA

MOVDAT,C

SETBCLK

CLRCLK

CJNEA,#80H,SHIFT_LOOP

SETBSTROBE

RET

 

3RemoteBIOS描述

●基本原理遥控接收通过一个引脚与MCU接口,该引脚接在MCU的外部中断输入端上。

遥控器发出的红外线调制波经过接收器接收解调后送给MCU解码,RemoteBIOS使用中断方式工作。

●硬件遥控发送编码芯片–使用PT2221,SPEC文件为Remote.pdf。

遥控接收芯片使用ROHM公司的RPH-600CBR,SPEC文件为Reciever.pdf。

●BIOS基本工作原理MCU使用外部中断与定时器交替中断的方式工作,INT0使用下降沿中断,中断以后启动定时器T1计时,所有波码的接收都使用这种方式在两种中断服务程序中处理。

●BIOS软件

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1