单片机综合设计说明_第1页
单片机综合设计说明_第2页
单片机综合设计说明_第3页
单片机综合设计说明_第4页
单片机综合设计说明_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 .大连理工大学本科设计报告题目:基于7290的LED时钟系统设计 课程名称: 单片机综合设计 学院(系): 电子信息与电气工程学部专 业: 电子信息工程 班 级 电子0804 学 号: 200801204 学生姓名: 宋陆阳 成 绩: 2011 年 05 月 23 日题目:基于7290的LED时钟系统设计1 设计要求1)显示功能:a.用开关K1K2切换用8位数码管显示当前“时-分-秒”;b.用开关K1K2切换用8位数码管显示当前“年-月-分”;c.用开关K1K2切换用8位数码管显示报警“日.时-分”。2)修改功能: a.能够通过按键操作修改当前时、分、秒并显示;b.能够通过按键操作修改报警时

2、、分并显示。3) 错误提示功能:当输入修改值不符合时间合法数值时即时大于24,分大于60,秒大于60,提示"Error"错误,并返回正常走表。4)报警功能:a.整点报时功能:59分55秒开始每秒响一下,且00秒频率提高;b.定时报警:当当前走表时间与所设置的报警时间一致时,驱动蜂鸣器产生“DO.RA.MI.FA.SO.LA.XI.DUO.”的铃音进行定时报警。2 设计分析及系统方案设计1. 主程序结构:无限循环结构.完成初始化功能:进行7290复位,初始化PCF8563T的时间数据,对中断INT0,INT1进行工作方式设置,开中断,并进入无限循环且等待中断产生.2.中断IN

3、T0:顺序结构每秒钟PCF8567的CLKOUT产生一个中断,从PCF8563T中读入数据进行调整拆分送入内存,时钟秒加一并显示,当K1=1,K2=1时,8位数码管显示当前“时-分-秒”;当K1=0时,8位数码管显示当前“年-月-分”;K1=1,K2=0时,8位数码管显示报警“日.时-分”.判断当前时间是否为整点,若是,则从分秒开始每秒钟驱动蜂鸣器每秒响1000HZ铃音0.5秒,秒频率提高;判断当前时间是否与所设置报警时间相同,若满足要求,则驱动蜂鸣器产生一个“DO.RA.MI.FA.SO.LA.XI.DUO.”的铃声。.中断INT1:顺序结构当有按键操作时产生中断。读取键值,当按链介于“AE

4、”选择需修改的内容:A:修改当前时间“时”;B:修改当前时间“秒”;C:修改当前时间“分”;D:修改报警时间“时”;E:修改报警时间“分”,然后等待输入2次按键"0-9"所修改数据,当输入数据部符合时间格式时,即时大于24,分大于60,秒大于60,显示提示“Error”并返回主程序,当输入数据符合正常时间格式时,回显,并退出中断;若输入其它键则无操作退出中断.3系统电路图ZLG7290BPCF8563T4 外围接口模块硬件电路功能描述P3.2接PC8567的CLKOUT,每秒产生一次中断;P3.3接ZLG7290B,当有按键操作时产生中断;P1.3接蜂鸣器;P1.2接开关K

5、1,选择切换显示当前“时分秒”或“年月日”;P1.4接开关K2,选择切换显示当前时间或报警“日时分”;P1.7接ZLG7290复位键;P1.0接I2C通讯线SDA;P1.1接I2C通讯线SCK。89C51:89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MC

6、S-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,89C2051是它的一种精简版本。89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 ZLG7290B:ZLG7290B是广州周立功单片机发展有限公司自行设计的数码管动态显示驱动、建键盘扫描管理芯片。能够驱动8位共阴极结构的LED数码管或64位独立的LED,同时还能扫描管理多达64个按键(S1-S56、F0-F7)的扫描识别。其中8只健(F0-F7)可以作为功能键使用就像电脑键盘上的Ctrl、Shift、Alt键一样。另外ZLG7290B 内部还设置有连击

7、计数器,能够使某些按键按下后不松手而连续有效。接口采用I2C结构。该芯片为工业级芯片,被广泛运用于仪器仪表等工业测量领域的电路设计中。特点:直接驱动1英寸以下的8位LED共阴极数码管或独立的64位LED ;能够管理多达64只按键。具有自动去抖,其中8只按键可直接作为功能键使用;段电流可达20mA。位电流可达100mA以上;利用外接功率驱动器可以驱动一英寸以上的大型数码管;具有闪烁、段点亮、段熄灭、功能键、连击计数等功能;提供10种数字、21种字母的译码显示功能,也可以将字形码写入显示寄存器直接显示数据;系统仅使用键盘电路时,工作电流为1mA;与主控器之间采用I2C 接口,仅需两条信号线;工作电

8、压范围:+3.3+5.5V;工作温度范围:-40+85;封装:DIP24(窄体) 或SOP-24.PCF8563T:PCF8563T 是低功耗CMOS实时时钟/日历芯片,它具有一个可编程的时钟输出,一个中断输出和掉电检测电路,与外部主控器之间通过I2C总线连接。最大总线速度为400KHZ。每次对其的读写操作内部的地址寄存器都会自动产生增量。PCF8563T内部具有16个8位的寄存器;一个可自动增量的地址寄存器;一个32.768KHZ的振荡器(具有集成的补偿电容),一个用与为实时时钟RTC提供时钟源的分频器;一个可编程的时钟输出电路;一个定时器;一个报警器;一个掉电检测电路和一个400KHZ的I

9、2C总线接口5 主程序中主要变量定义变量名称RAM单元/寄存器功能当前时间值10H-1DH程序初始时存储初始时间,当运行后存当前时间PC8563时间20H-29H存储从PC8563中读出当前的时间参数当前时间130H-37H存储处理无效位后当前日、月、年信息当前时间238H-3FH存储处理无效位后当前秒、时、分信息报警时间40H-47H存储处理无效位后报警日、时、分信息Data50H-57H存储“Error”的查表信息数据个数R7I2C操作时读入数据个数目标地址R0I2C操作时目标数据块首址器件地址R2I2C操作时器件内部从地址写地址R3I2C写操作时地址读地址R4I2C读操作时地址6系统软件

10、中各个子程序的功能描述子程序名称入口参数出口参数功能 描述INT_RCT无无走表中断子程序,并且判断整点闹铃以及报警INT_7290无无按键中断子程序,修改当前“时分秒”或者报警“时分”可以进行输入错误提示,回显等功能ALARM无无产生0.5秒1000HZ音频ALARM1R5、R6无产生指定频率音频0.5秒CHAFEN20H-2AH30H-47H对20H-2AH数据进行拆分CFAR3、R4把A拆分成独立BCD码ADJUST20H-26H20H-26H屏蔽PCF8563读出无关位DIS_ERR无无LED显示“Error”RDKEY无A读按键值WR8563写8563操作DELAY无无延时子程序7

11、主程序程序流程图开辟一个数据区10H-1DH存储时间、data-data+7存储显示命令参数等待中断主程序流程图主程序将10H-1DH存储时间、命令参数送PCF8563T中A键?查询按键?按键定义A键:修改小时B键:修改分;C键:修改秒;D键:修改按键时;E键:修改按键分;YYNYINT1读取键值查询按键?N读取键值送小时的位RETINC键?B键?当前分钟处理( 同小时 处理 )当前秒处理 ( 同小时处理 )开中断YN关中断YYN调拆分、查表送28H-2FH 送7290调显示N将51的10H-1DH的数据送PCF8563TD键?报警时处理 ( 同小时处理 )D键?报警时处理 ( 同小时处理 )

12、NYYN数据合法NY读取键值送小时的时位数据合法YN调程序显示"Error"按键中断INT_7290利用RDADD从PCF8563T中读出时间参数送20H-2AH利用ADJUST屏蔽掉参数中的无用的位中断服务NINTernetINTernet调CHAFEN子程序将时间分别送28H-2FH、38H-3FH缓冲区P1.2=1?RETI显示时分秒显示年月日NY报警时间到整点时间到P1.4=1?显示报警日时分产生报警闹铃产生整点闹铃YYNN终端服务INT0闹铃1000HZ,0.5ms ALARM:程序入口PUSH PSWPUSH 07HT0.T1初始化R710启动T0.T1NTF0

13、=1?YT0初值,TF00驱动BUZZNYTF1=1?T1初值,TF10NR7-1R7 R7=0?Y关闭T0.T1POP 07HPOP PSW8程序清单SDABITP1.0;定义I2C信号引脚SCLBITP1.1 WSLAEQU070HRSLAEQU071HDISDAEQU20H;源数据块首地址DISCONEQU08H;写入数据个数DATA_1EQU50H;变量区首地址WSLA_8563EQU0A2H;PCF8563口地址RSLA_8563EQU0A3HWSLA_7290EQU70H;ZLG7290口地址RSLA_7290EQU71HORG8000HLJMP8100H ORG8003HLJMP

14、INT_RCTORG8100HORG8013HLJMPINT_7290ORG8100HSTART: MOVSP,#60HCLRP1.7 ;7290复位LCALLDELAYSETBP1.7;*;设定PCF8563的时间和命令参数(参数和控制命令缓冲区10H-1DH);*MOV10H,#00H;启动控制字MOV11H,#1FH;设置报警及定时器中断MOV12H,#55H ;秒单元MOV13H,#37H;分单元MOV14H,#10H;小时单元MOV15H,#26H ;日期单元MOV16H,#03H ;星期单元MOV17H,#05H ;月单元 MOV18H,#10H;年单元MOV19H,#36H ;设

15、定分报警MOV1AH,#10H;设定小时报警MOV1BH,#26H ;设定日报警MOV1CH,#03H;设定星期报警MOV1DH,#83H;设定CLKOUT的频率(1S)MOVDATA_1, #13H;变量缓冲区(显示 "Error " )MOVDATA_1+1,#13H;注意:MOVDATA_1+2,#13H ;变量取值范围0-FMOVDATA_1+3,#11HMOVDATA_1+4,#12HMOVDATA_1+5,#11HMOVDATA_1+6,#11H MOVDATA_1+7,#10H;*MOVR7,#0EH;写入参数个数(时间和控制字) MOVR0,#10H ;参数

16、和控制命令缓冲区首地址MOVR2,#00H;从器件内部从地址MOVR3,#WSLA_8563;准备向PCF8563T写入数据串LCALLWRNBYT;写入时间、控制命令到8563 SETBEAMOVTCON,#00HSETBEX0CLRIT0SETBEX1SETBIT1SJMP$ ;等待中断;*;中断服务INT_RCT子程序;*INT_RCT:MOVR7,#0AH;读出数个数MOVR0,#20H ;目标数据块首址MOVR2,#02H;从器件内部从地址MOVR3,#WSLA_8563MOVR4,#RSLA_8563;准备读PCF8563T的时间参数LCALLRDADD;调读数据子程序,将读出的数

17、据;存放于单片机20-26H中LCALLADJUST;调时间调整子程序MOV12H,20HMOV13H,21HMOV14H,22HMOV19H,27HMOV1AH,28HMOV1BH,29HLCALLCHAFEN ;调拆分子程序(包含查表) MOVA,22H;判断是否到定时时间CJNEA,28H,MMBUYMOVA,21HCJNEA,27H,MMBUYMOVA,#00HCJNEA,20H,MJ_1MOVR5,#21HMOVR6,#0F9HCALLALARM1MJ_1:MOVA,#01HCJNEA,20H,MJ_2MOVR5,#0E0HMOVR6,#0F9HCALLALARM1MJ_2:MOVA

18、,#02HCJNEA,20H,MJ_3MOVR5,#8BHMOVR6,#0FAHCALLALARM1MJ_3:MOVA,#03HCJNEA,20H,MJ_4MOVR5,#0D7HMOVR6,#0FAHCALLALARM1MJ_4:MOVA,#04HCJNEA,20H,MJ_5MOVR5,#67HMOVR6,#0FBHCALLALARM1MJ_5:MOVA,#05HCJNEA,20H,MJ_6MOVR5,#0E8HMOVR6,#0FBHCALLALARM1MJ_6:MOVA,#06HCJNEA,20H,MJ_7MOVR5,#5BHMOVR6,#0FCHCALLALARM1MJ_7:MOVA,#0

19、7HCJNEA,20H,MMBUYMOVR5,#8EHMOVR6,#0FCHCALLALARM1MMBUY:MOVA,#59H;判断是否整点CJNEA,21H,LCMOVA,#55HCJNEA,20H,LC_1LCALLALARMLC_1:MOVA,#56HCJNEA,20H,LC_2CALLALARMLC_2:MOVA,#57HCJNEA,20H,LC_3CALLALARMLC_3:MOVA,#58HCJNEA,20H,LC_4CALLALARMLC_4:MOVA,#59HCJNEA,20H,LCCALLALARMLC:MOVA,#00HCJNEA,21H,LCCCJNEA,20H,LCCM

20、OVR5,#44HMOVR6,#0FEHCALLALARM1LCC:MOVR7,#08HMOVR2,#10HMOVR3,#WSLA_7290JNBP1.2,YEARS;使用P1.2控制显示内容JNBP1.4,BAOJINMOVR0,#38H;显示小时、分钟和秒SJMPDISPYEARS:MOVR0,#30H ;显示年、月和日期SJMPDISPBAOJIN:MOVR0,#40HDISP:LCALLWRNBYT;调7290显示JNBP3.2,$RETI;*;ALARM;*ALARM:PUSHPSW;产生0.5秒1000HZ音频PUSH07HMOVTMOD,#11HMOVTL0,#33HMOVTH0

21、,#0FEHMOVTL1,#0FCHMOVTH1,#4BHSETBTR0SETBTR1LOOPC:JNBTF0,$MOVTL0,#33HMOVTH0,#0FEHCLRTF0CPLP1.3JBTF1,LOOPCMOVTL1,#0FCHMOVTH1,#4BHCLRTF1DJNZR7,LOOPCCLRTR0CLRTR1POP07HPOPPSWRETALARM1:PUSHPSW;产生指定频率音频0.5秒PUSH07HMOVTMOD,#11HMOVTL0,R5MOVTH0,R6MOVTL1,#0FCHMOVTH1,#4BHSETBTR0SETBTR1LOOPD:JNBTF0,$MOVTL0,R5MOVT

22、H0,R6CLRTF0CPLP1.3JBTF1,LOOPDMOVTL1,#0FCHMOVTH1,#4BHCLRTF1DJNZR7,LOOPDCLRTR0CLRTR1POP07HPOPPSWRET;*;各子程序;* ORG8300H CHAFEN:PUSHPSW ;对20H-2AH单元的参数拆分,PUSHACC;查表后送28H-2FH(年月日) PUSH 03H ;和38H-3FH (时分秒)PUSH04HMOVA,20H;取秒参数LCALLCF ;拆分、查表在R4(H)、R3中MOV38H,R3;送秒的个位MOV39H,R4;送秒的十位MOV3AH,#02H;送分隔符-MOVA,21H;取分参

23、数LCALLCF ;拆分、查表在R4(H)、R3中MOV3BH,R3;送分的个位MOV3CH,R4;送分的十位MOV3DH,#02H;送分隔符-MOVA,22H;取小时参数LCALLCF ;拆分、查表在R4(H)、R3中MOV3EH,R3;送小时的个位MOV3FH,R4;送小时的十位MOVA,23H;取日起参数LCALLCFMOVA,R3ORLA,#01HMOVR3,AMOV30H,R3MOV31H,R4MOVA,25H;取月参数LCALLCFMOVA,R3ORLA,#01HMOVR3,AMOV32H,R3MOV33H,R4MOVA,26H;取年参数LCALLCFMOVA,R3ORLA,#01

24、HMOVR3,AMOV34H,R3MOV35H,R4MOV36H,#0FCH;年的高两位处理MOV37H,#0DAHMOVA,27H;报警分LCALLCFMOV40H,R3MOV41H,R4MOV42H,#02HMOVA,28H;报警时LCALLCFMOV43H,R3MOV44H,R4MOV45H,#01MOVA,29H;报警日LCALLCFMOV46H,R3MOV47H,R4POP04HPOP03HPOPACCPOPPSW;*CF:PUSH02H ;将A中的数据拆分为两个独立的PUSHDPH; BCD码并查表PUSHDPL; 结果分别存于R4、R3中MOVDPTR,#LEDSEGMOVR2,

25、AANLA,#0FHMOVCA,A+DPTRMOVR3,AMOVA,R2SWAPAANLA,#0FHMOVCA,A+DPTRMOVR4,APOPDPLPOPDPHPOP02HRET;*;将20H -26H中从PCF8563中读出的7个字节参数的无关位屏蔽掉(参见表8.7);*ADJUST:PUSHACCMOVA,20H ;处理秒单元ANLA,#7FHMOV20H,AMOVA,21H;处理分单元ANLA,#7FHMOV21H,AMOVA,22H;处理小时单元ANLA,#3FHMOV22H,AMOVA,23H;处理日期单元ANLA,#3FHMOV23H,AMOVA,24H;处理星期单元ANLA,#

26、07HMOV24H,AMOVA,25H;处理月单元ANLA,#1FHMOV25H,APOPACCRET;*;中断服务INT_7290子程序;*INT_7290:PUSH00HPUSH02HPUSH03HPUSH04HPUSH07HPUSHACCPUSHPSWLCALLRDKEY;读取第一个按键值(功能键)CJNEA,#0AH,MINUTE;判断是A键吗?;是A键时开始处理小时数据AKEY_1:JBP3.3,$;以查询的方式等待下一次按键操作LCALLRDKEY;读取第二个按键值(小时的十位数?SWAPA;处理输入的数据(十位)CJNEA,#00H,X_1SJMPXXX_1:CJNEA,#10H

27、,X_2SJMPXXX_2:CJNEA,#20H,X_3SJMPXXX_3:LJMPDIS_ERRXX:ANL14H,#0FHORL14H,AJBP3.3,$;以查询的方式等待下一次按键操作LCALLRDKEY;读取第三个按键值(小时的个位数)CJNEA,#00H,Y_1LJMPYYY_1:CJNEA,#01H,Y_2LJMPYYY_2:CJNEA,#02H,Y_3LJMPYYY_3:CJNEA,#03H,Y_4LJMPYYY_4:CJNEA,#04H,Y_5LJMPYYY_5:LJMPDIS_ERRYY:ANL14H,#0F0H;处理输入的数据(个位)ORL14H,ALCALLWR8563L

28、JMPBACKMINUTE:CJNEA,#0BH,SECOND;判断是B键吗?是B键时开始处理分数据AKEY_2:JBP3.3,$;以查询的方式等待下一次按键操作LCALLRDKEY;读取第二个按键值(分钟的十位数?SWAPA;处理输入的数据(十位)CJNEA,#00H,Z_1SJMPZZZ_1:CJNEA,#10H,Z_2SJMPZZZ_2:CJNEA,#20H,Z_3SJMPZZZ_3:CJNEA,#30H,Z_4SJMPZZZ_4:CJNEA,#40H,Z_5SJMPZZZ_5:CJNEA,#50H,Z_6SJMPZZZ_6:LJMPDIS_ERRZZ:ANL13H,#0FHORL13H

29、,AJBP3.3,$;以查询的方式等待下一次按键操作LCALLRDKEY;读取第三个按键值(分钟的个位数)ANL13H,#0F0H;处理输入的数据(个位)ORL13H,ALCALLWR8563;将修改后的时间参数送PCF8563LJMPBACKSECOND:CJNEA,#0CH,HOUR_1;判断是C键吗?是C键时开始处理秒数据AKEY_3:JBP3.3,$;以查询的方式等待下一次按键操作LCALLRDKEY;读取第二个按键值(秒的十位数?SWAPA;处理输入的数据(十位)CJNEA,#00H,Q_1SJMPQQQ_1:CJNEA,#10H,Q_2SJMPQQQ_2:CJNEA,#20H,Q_

30、3SJMPQQQ_3:CJNEA,#30H,Q_4SJMPQQQ_4:CJNEA,#40H,Q_5SJMPQQQ_5:CJNEA,#50H,Q_6SJMPQQQ_6:LJMPDIS_ERRQQ:ANL12H,#0FHORL12H,AJBP3.3,$;以查询的方式等待下一次按键操作LCALLRDKEY;读取第三个按键值(秒的个位数)ANL12H,#0F0H;处理输入的数据(个位)ORL12H,ALCALLWR8563;将修改后的时间参数送PCF8563LJMPBACKHOUR_1:CJNEA,#0DH,MIN_1;判断是D键吗?;是D键时开始处理报警小时数据AKEY_4:JBP3.3,$;以查询

31、的方式等待下一次按键操作LCALLRDKEY;读取第二个按键值(小时的十位数?SWAPA;处理输入的数据(十位)CJNEA,#00H,E_1SJMPEEE_1:CJNEA,#10H,E_2SJMPEEE_2:CJNEA,#20H,E_3SJMPEEE_3:LJMPDIS_ERREE:ANL1AH,#0FHORL1AH,AJBP3.3,$;以查询的方式等待下一次按键操作LCALLRDKEY;读取第三个按键值(小时的个位数)CJNEA,#00H,F_1LJMPFFF_1:CJNEA,#01H,F_2LJMPFFF_2:CJNEA,#02H,F_3LJMPFFF_3:CJNEA,#03H,F_4LJ

32、MPFFF_4:CJNEA,#04H,F_5LJMPFFF_5:LJMPDIS_ERRFF:ANL1AH,#0F0H;处理输入的数据(个位)ORL1AH,ALCALLWR8563SJMPBACKMIN_1:CJNEA,#0EH,BACK;判断是E键吗?;是E键时开始处理报警分数据AKEY_5:JBP3.3,$;以查询的方式等待下一次按键操作LCALLRDKEY;读取第二个按键值(分钟的十位数?SWAPA;处理输入的数据(十位)CJNEA,#00H,S_1SJMPSSS_1:CJNEA,#10H,S_2SJMPSSS_2:CJNEA,#20H,S_3SJMPSSS_3:CJNEA,#30H,S_

33、4SJMPSSS_4:CJNEA,#40H,S_5SJMPSSS_5:CJNEA,#50H,S_6SJMPSSS_6:LJMPDIS_ERRSS:ANL19H,#0FHORL19H,AJBP3.3,$;以查询的方式等待下一次按键操作LCALLRDKEY;读取第三个按键值(分钟的个位数)ANL19H,#0F0H;处理输入的数据(个位)ORL19H,ALCALLWR8563;将修改后的时间参数送PCF8563SJMPBACKBACK:CJNEA,#0FH,DOWNDOWN:CLRIE0;清标志POPPSWPOPACCPOP07HPOP04HPOP03HPOP02HPOP00HRETI;*;DISP

34、AY "Error"*DIS_ERR:PUSH07HPUSH00HPUSH01HPUSH02HPUSH03HMOVDPTR,#LEDSEG ;开始对变量查表MOVR7,#DISCON;写入数据个数MOVR0,#DISDA ;源数据块首地址MOVR1,#DATA_1LOOP1:MOVA,R1MOVCA,A+DPTR ;查表得对应的字形码MOVR0,A ;送显示缓冲区INCR1INCR0DJNZR7,LOOP1 MOV28H,#00HLOOP:MOVR7,#DISCONMOVR2,#10HMOVR3,#WSLAMOVR0,#DISDA LCALLWRNBYT;调显示子程序LCA

35、LLDELAY LCALLDELAYPOP03HPOP02HPOP01HPOP00HPOP07HSJMPDOWN;*;读键值子程序 (;出口参数累加器A-获取到的键值) ;*RDKEY:MOVR0,#1FH;键值缓冲单元MOVR7,#01H;取一个数据(键值)MOVR2,#01H ;指向内部数据键值寄存器地址MOVR3,#WSLA_7290;取器件地址(写)MOVR4,#RSLA_7290;取器件地址(读) LCALLRDADD;读出7290的01H单元中的键值MOVA,1FH;取健值送缓冲单元DECARET;*;向日历芯片写入时间参数子程序;将RAM的10H-1DH中的时间参数(含控制字)写

36、入芯片的00H-0DH单元;*WR8563:MOVR7,#0EH;写入参数个数(时间和控制字) MOVR0,#10H ;参数和控制命令缓冲区首地址MOVR2,#00H;从器件内部从地址MOVR3,#WSLA_8563;准备向PCF8563T写入数据串LCALLWRNBYT;写入时间、控制命令到8563 RET;*;*LEDSEG:DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E4HDB0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHDB9EH,18H,3AH,00H ;E,r,o;*; 延时子程序;*DELAY:PUSH00HPUSH01HMOVR

37、0,#00HDELAY1:MOVR1,#00HDJNZR1,$DJNZR0,DELAY1POP01HPOP00HRET;*;由汇编语言编制的I2C通讯子程序;*;通用的I2C通讯子程序(多字节写操作);入口参数R7字节数,R0:源数据块首地址;R0原数据块首地址;R2从器件内部子地址;R3:外围器件地址(写);*WRNBYT:PUSHPSWPUSHACCWRADD:MOVA,R3;取外围器件地地址(包含r/w=0)LCALLSTA;发送起始信号S LCALLWRBYT;发送外围地址LCALLCACK;检测外围器件的应答信号JBF0,WRADD;如果应MOVA,R2LCALLWRBYT;发送内部

38、寄存器首地址LCALLCACK;检测外围器件的应答信号JBF0,WRADD;如果应答不正确返回重来 WRDA:MOVA,R0LCALLWRBYT;发送外围地址LCALLCACK;检测外围器件的应答信号JBF0,WRADD;如果应答不正确返回重来INCR0DJNZ R7,WRDALCALLSTOP POPACCPOPPSWRET ;*;(2)带有内部单元地址的多字节读操作子程序 RDADD ;*;通用的I2C通讯子程序(多字节读操作);入口参数R7字节数;;R0目标数据块首地址;R2从器件内部子地址;;R3器件地址(写);R4器件地址(读);相关子程序WRBYT、STOP、CACK、STA、MNACK ;*RDADD: PUSHPSW;从PCF8563的02H单元读入7个参数PUSHACC;存放于20H-26H单元RDADD1:LCALLSTA MOVA,R3;取器件地址(写)LCALLWRBYT;发送外围地址LCALLCACK;检测外围器件的应答信号JBF0,RDADD1;如果应答不正确返回重来MOVA,R2;取内部地址LCALLWRBYT;发送外围地址LCALLC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论