单片机大作业(共15页)_第1页
单片机大作业(共15页)_第2页
单片机大作业(共15页)_第3页
单片机大作业(共15页)_第4页
单片机大作业(共15页)_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上大连理工大学本科设计报告题目:基于SPI、I2C总线的模数转换数字显示系统的设计课程名称:单片机原理及应用实验学院(系): 电信学部 专 业: 自动化 班 级: 电自1102 学 号: 学生姓名: 邓成米 成 绩: 20 年 月 日题目:1 设计要求 使用AD转换芯片TLC549CP对模拟电压进行数字转换,将转换结果处理为3位的十进制数(0255)并通过ZLC7290B进行显示,并可设置上下限阈值进行超值报警。2 设计分析及系统方案设计20H开始的单元:存放N个TLC549CP采集的数据;40H47H显示缓冲区; 程序结构为分支结构3系统电路图 VCC8位数码管(共阴

2、极)ZLG7290BSDASCL/RSTAT89C51 P1.0 P1.1 P1.7 P3.5 P1.2 P1.3 P1.4蜂鸣器RET+ TLC549CPVcc RET+CLK ANIN DAT RET/CS GND Vcc W2 ANINJK1594 外围接口模块硬件电路功能描述(1) AT89C51 :程序运行,信号处理与输出,进行逻辑运算。(2) ZLG7290B:数字显示。(3) TLC549CP:采集模拟量并传输至单片机中。(4) 蜂鸣器:发声报警。5 主程序中主要变量定义变量名称RAM单元/寄存器功能R708H数据的字节数R040H单片机内部数据块的起始地址R210H外围模块内部

3、寄存器首地址R370H外围模块写地址6系统软件中各个子程序的功能描述子程序名称入口参数出口参数功能 描述TLC549A20H读取32个数据ADJUST20HA滤波BCD_CONTAR3转换为十进制CFAR3将A中数据拆分DELAY延时CMPAR6上下限比较WRNBYT显示子程序7主程序程序流程图主程序建立显示缓冲区读R6到A并调用CMP,若超过阈值则发声报警且数码管进行闪烁采集TLC549CP的N个数据存放于20H开始的单元中调ADJUST进行数据滤波调延时子程序将A中数据保存在R6调BCD_CONT,将A中的数据拆分、查表并送显示缓冲区的低两位,以备显示用调WRNBYT,将显示缓冲区中的数据

4、写入ZLG7290B,以十进制方式显示8程序清单;*;*;*宏定义*;*专心-专注-专业SDABIT P1.0SCLBIT P1.1WSLAEQU 070HRSLAEQU 071HDATBIT P1.3CLKBIT P1.2CSBIT P1.4CUNTEQU 20HSHIFTEQU 05HSH_SEGEQU 50H;数码管闪烁数据 区SDA_KEQU 55H;键值存储缓冲区SDA_K_SEQU 65H;键值字型码存储缓冲区COUNT_KEQU 62H;按键输入计数器MAXEQU 61H;标志位MAXMINEQU 60H;标志位MINMAX_YZEQU 63H;阈值上线MIN_YZEQU 64H

5、;阈值下线ADDREQU 20H;数据缓冲区首地址DISDAEQU 40H;源数据块首地址DISCUNTEQU 08H;写入数据个数;*;*启动设置*;*ORG8000HLJMP8100HORG8003HLJMPINT_7290ORG8100HSTART:MOVSP,#68HCLRP1.7LCALLDELAYSETBP1.7SETBEASETBEX0SETBIT0;*定时器初始化*MOVTMOD,#10HMOVTL1,#33HMOVTH1,#0FEHSETBTR1;*建立变量缓冲区*MOVDISDA+3,#12HMOVDISDA+4,#00HMOVDISDA+5,#1AHMOVDISDA+6,

6、#7AHMOVDISDA+7,#0EEH;*各变量初始化*MOVMAX,#00HMOVMIN,#00HMOVCOUNT_K,#00HSETBF0MOVSDA_K,#03HMOVSDA_K+1,#02HMOVSDA_K+2,#01HMOVMAX_YZ,#64HMOVMIN_YZ,#10H;*;*主循环*;*LOOP:LCALLTLC549MOVR6,ALCALLADJUSTPUSHACCMOVA,R6CJNEA,MIN_YZ,NEXT_minNEXT_min:POPACCJCBUZZMIN;小于下限则报警MOVR5,MINCJNER5,#01H,N_STOP_SHLCALLSTOP_SH;停止数

7、码管闪烁MOVMIN,#00HN_STOP_SH:JBP1.5,YZ_SETCLRF0LCALLSHOW_SET_ADAJMPN_SH_KYZ_SET:LCALLSHOW_SET_KJBF0,SET_YZN_SH_K:PUSHACCMOVA,R6CJNEA,MAX_YZ,NEXT_maxNEXT_max:POPACCJNCBUZZMAX;高于上限则报警MOVR5,MAXCJNER5,#01H,LOOPLCALLSTOP_SH;停止数码管闪烁MOVMAX,#00HSJMPLOOP;*;*子函数*;*;*蜂鸣器子程序MIN*BUZZMIN:PUSH01HPUSH00HMOVR0,#00HMOVR1

8、,MINCJNER1,#00H,BUZZ_T0LCALLSHANSHUO;启动数码管闪烁MOVMIN,#01HBUZZ_T0:JNBTF1,$CLRTF1MOVTL1,#33HMOVTH1,#0FDHCPLP1.6DJNZR0,BUZZ_T0POP00HPOP01HLJMPN_STOP_SH;*蜂鸣器子程序MAX*BUZZMAX:PUSH01HPUSH00HMOVR0,#00HMOVR1,MAXCJNER1,#00H,BUZZ_T1LCALLSHANSHUO;启动数码管闪烁MOVMAX,#01HBUZZ_T1:JNBTF1,$CLRTF1MOVTL1,#33HMOVTH1,#0FEHCPLP1

9、.6DJNZR0,BUZZ_T1POP00HPOP01HLJMPLOOP;*ADC值显示*SHOW_SET_AD:LCALLBCD_CONTMOVR7,#DISCUNT;设定数据个数MOVR0,#DISDA;设定源数据首地址MOVR2,#10H;设定内部地址MOVR3,#WSLA;设定外围器件地址LCALLWRNBYTRET;*阈值设置*SET_YZ:PUSH05HPUSHACCMOVA,SDA_K+2MOVB,#64HMULABMOVR5,AMOVA,SDA_K+1MOVB,#0AHMULABADDA,R5ADDA,SDA_KJBP3.3,SETMAXMOVMIN_YZ,AAJMPBACKS

10、ETMAX:MOVMAX_YZ,ABACK:POPACCPOP05HLJMPN_SH_K;*键值显示*SHOW_SET_K:PUSHACCMOVDPTR,#LEDSEGMOVR7,#03HMOVR0,#SDA_K_SMOVR1,#SDA_KCLRACHAXUN:MOVA,R1MOVCA,A+DPTRMOVR0,AINCR0INCR1DJNZR7,CHAXUNMOVR7,#03H;设定数据个数MOVR0,#SDA_K_S;设定源数据首地址MOVR2,#10H;设定内部地址MOVR3,#WSLA;设定外围器件地址LCALLWRNBYTPOPACCRET;*闪烁子程序*SHANSHUO:MOVSH_

11、SEG,#70HMOVSH_SEG+1,#07HMOVR7,#02H;设定数据个数MOVR0,#50H;设定源数据首地址MOVR2,#07H;设定内部地址MOVR3,#WSLA;设定外围器件地址LCALLWRNBYTRET;*停止闪烁子程序*STOP_SH:MOVSH_SEG,#70HMOVSH_SEG+1,#00HMOVR7,#02H;设定数据个数MOVR0,#50H;设定源数据首地址MOVR2,#07H;设定内部地址MOVR3,#WSLA;设定外围器件地址LCALLWRNBYTRET;*TLC549程序*TLC549:PUSH00HPUSH07HMOVR7,#CUNTMOVR0,#ADDR

12、LOOP2:LCALLTLC549_ADCMOVR0,AINCR0DJNZR7,LOOP2POP07HPOP00HRETADJUST:PUSH00HPUSH02HPUSH03HPUSH07HMOVR7,#CUNTMOVR0,#ADDRCLRAMOVR2,ALOOP3:CLRCADDCA,R0JNCLOOP4INCR2LOOP4:INCR0DJNZR7,LOOP3MOVR3,AMOVA,R2MOVR7,#SHIFTLOOP5:CLRCMOVA,R2RRCAMOVR2,AMOVA,R3RRCAMOVR3,ADJNZR7,LOOP5POP07HPOP03HPOP02HPOP00HRET;*TLC54

13、9_ADC程序*TLC549_ADC:PUSH07HCLRACLRCLKMOVR7,#08HCLRCSLOOP1:SETBCLKNOPNOPNOPNOPMOVC,DATRLCACLRCLKNOPNOPDJNZR7,LOOP1SETBCSSETBCLKPOP07HRET;*BCD_COUNT程序*BCD_CONT:PUSH07HPUSH06HPUSH05HPUSH02HMOVB,#64HDIVABMOVR7,AMOVR2,BMOVA,R2MOVB,#0AHDIVABMOVR6,AMOVR5,BMOVA,R7LCALLCFMOVDISDA+2,R3MOVA,R6LCALLCFMOVDISDA+1,

14、R3MOVA,R5LCALLCFMOVDISDA+0,R3POP02HPOP05HPOP06HPOP07HRET;*LEDSEG:DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E4HDB0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH;*;*拆分程序*CF:PUSH02HPUSHDPHPUSHDPLMOVDPTR,#LEDSEGMOVR2,AANLA,#0FHMOVCA,A+DPTRMOVR3,AMOVA,R2SWAPAANLA,#0FHMOVCA,A+DPTRMOVR4,APOPDPLPOPDPHPOP02HRET;*中断程序*INT_7290:

15、PUSH00HPUSH02HPUSH03HPUSH04HPUSH07HPUSH05HMOVR7,#04H;设定数据个数MOVR0,#28H;设定源数据首地址MOVR2,#00H;设定内部地址MOVR3,#WSLA;设定外围器件地址MOVR4,#RSLA;设定外围器件地址LCALLRDADDNOPMOVA,29HDECACJNEA,#0AH,NEXT_RNEXT_R:JNCBACK1JBF0,BACK1MOVR5,COUNT_KCJNER5,#03H,NEXT_INEXT_I:JNCCLRASJMPOPCLRA:MOVCOUNT_K,#00HOP:MOVR5,COUNT_KCJNER5,#00H

16、,NEXT_4MOVSDA_K,ASJMPRETURN1NEXT_4:CJNER5,#01H,NEXT_5MOVSDA_K+1,ASJMPRETURN1NEXT_5:CJNER5,#02H,RETURN1CJNEA,#03H,NEXT_SNEXT_S:JNCCLRSDA2SJMPTSCLRSDA2:CLRATS:MOVSDA_K+2,ASETBF0RETURN1:MOVA,COUNT_KINCAMOVCOUNT_K,ABACK1:POP05HPOP07HPOP04HPOP03HPOP02HPOP00HRETI;*延时子程序*DELAY:PUSH00HPUSH01HMOVR0,#00HDELAY

17、1:MOVR1,#00HDJNZR1,$DJNZR0,DELAY1POP01HPOP00HRET;【附录一】由汇编语言编制的I2C通讯子程序;【提 示】下列程序是在系统时钟为12MHZ(或11.0592MHZ),即NOP指令为1微秒左右。;(1)带有内部单元地址的多字节写操作子程序 WRNBYT;*;通用的I2C通讯子程序(多字节写操作);入口参数R7字节数,R0:源数据块首地址;R0原数据块首地址;R2从器件内部子地址;R3:外围器件地址(写);相关子程序WRBYT、STOP、CACK、STA;*WRNBYT:PUSHPSWPUSHACCWRADD:MOVA,R3;取外围器件地地址(包含r/

18、w=0)LCALLSTA;发送起始信号S LCALLWRBYT;发送外围地址LCALLCACK;检测外围器件的应答信号JBF0,WRADD;如果应MOVA,R2LCALLWRBYT;发送内部寄存器首地址LCALLCACK;检测外围器件的应答信号JBF0,WRADD;如果应答不正确返回重来 WRDA:MOVA,R0LCALLWRBYT;发送外围地址LCALLCACK;检测外围器件的应答信号JBF0,WRADD;如果应答不正确返回重来INCR0DJNZ R7,WRDALCALLSTOP POPACCPOPPSWRET ;*;(2)带有内部单元地址的多字节读操作子程序 RDADD ;*;通用的I2C

19、通讯子程序(多字节读操作);入口参数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;发送外围地址LCALLCACK;检测外围器件的应答信号

20、JBF0,RDADD1;如果应答不正确返回重来LCALLSTAMOVA,R4;取器件地址(读)LCALLWRBYT;发送外围地址LCALLCACK;检测外围器件的应答信号JBF0,RDADD1;如果应答不正确返回重来RDN:LCALLRDBYT MOVR0,ADJNZR7,ACKLCALLMNACKLCALLSTOPPOPACCPOPPSWRETACK:LCALLMACKINCR0SJMPRDN ;(3)I2C各个信号子程序;*;启动信号子程序S ;*STA:SETBSDA;启动信号SSETBSCLNOP;产生4.7US延时NOPNOPNOPNOPCLRSDANOP;产生4.7US延时NOPN

21、OPNOPNOP CLRSCLRET ;*;停止信号子程序P ;*STOP:CLRSDA ;停止信号PSETBSCLNOP;产生4.7US延时NOPNOPNOPNOPSETBSDANOP;产生4.7US延时NOPNOPNOPNOPCLRSCLCLRSDARET ;*;应答信号子程序 MACK;*MACK:CLRSDA;发送应答信号ACKSETBSCLNOP;产生4.7US延时NOPNOPNOPNOPCLRSCLSETBSDARET;*;非应答法信号子程序MNACK;*MNACK:SETBSDA;发送非应答信号NACKSETBSCLNOP;产生4.7US延时NOPNOPNOPNOPCLRSCLCLRSDARET;*;应答检测子程序CACK;*CACK:SETBSDA;应答位检测子程序SETBSCL CLRF0MOVC,SDA;采样SDAJNCCEND;应答正确时转CENDSE

温馨提示

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

评论

0/150

提交评论